From 4b98ddc048e7310b6a1bdd8708321a9f9b3a17c0 Mon Sep 17 00:00:00 2001 From: Ryan Goree Date: Sat, 8 Feb 2025 18:11:48 -0600 Subject: [PATCH 001/146] Bump node version --- .nvmrc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.nvmrc b/.nvmrc index 2edeafb0..8fdd954d 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -20 \ No newline at end of file +22 \ No newline at end of file From dc6e1e8b5b3715d350f9ff50f5a2a4ff99fa848b Mon Sep 17 00:00:00 2001 From: Ryan Goree Date: Sat, 8 Feb 2025 18:16:41 -0600 Subject: [PATCH 002/146] Delete library specific sdks --- packages/council-ethers/.eslintrc | 4 - packages/council-ethers/.gitignore | 2 - packages/council-ethers/CHANGELOG.md | 32 - packages/council-ethers/LICENSE | 661 ------------------ packages/council-ethers/README.md | 1 - packages/council-ethers/package.json | 39 -- .../src/contract/createReadContractFactory.ts | 42 -- .../createReadWriteContractFactory.ts | 42 -- packages/council-ethers/src/index.ts | 39 -- .../src/models/council/ReadCouncil.ts | 28 - .../src/models/council/ReadWriteCouncil.ts | 24 - .../src/models/token/ReadWriteMockToken.ts | 38 - packages/council-ethers/tsconfig.json | 16 - packages/council-ethers/tsup.config.ts | 12 - packages/council-viem/.eslintrc | 4 - packages/council-viem/.gitignore | 2 - packages/council-viem/CHANGELOG.md | 32 - packages/council-viem/LICENSE | 661 ------------------ packages/council-viem/README.md | 1 - packages/council-viem/package.json | 42 -- .../src/contract/createReadContractFactory.ts | 42 -- .../createReadWriteContractFactory.ts | 42 -- packages/council-viem/src/index.ts | 39 -- .../src/models/council/ReadCouncil.ts | 28 - .../src/models/council/ReadWriteCouncil.ts | 33 - .../src/models/token/ReadWriteMockToken.ts | 38 - .../test/integration/ReadCoreVoting.test.ts | 26 - packages/council-viem/tsconfig.json | 16 - packages/council-viem/tsup.config.ts | 12 - packages/council-viem/vitest.config.ts | 13 - 30 files changed, 2011 deletions(-) delete mode 100644 packages/council-ethers/.eslintrc delete mode 100644 packages/council-ethers/.gitignore delete mode 100644 packages/council-ethers/CHANGELOG.md delete mode 100644 packages/council-ethers/LICENSE delete mode 100644 packages/council-ethers/README.md delete mode 100644 packages/council-ethers/package.json delete mode 100644 packages/council-ethers/src/contract/createReadContractFactory.ts delete mode 100644 packages/council-ethers/src/contract/createReadWriteContractFactory.ts delete mode 100644 packages/council-ethers/src/index.ts delete mode 100644 packages/council-ethers/src/models/council/ReadCouncil.ts delete mode 100644 packages/council-ethers/src/models/council/ReadWriteCouncil.ts delete mode 100644 packages/council-ethers/src/models/token/ReadWriteMockToken.ts delete mode 100644 packages/council-ethers/tsconfig.json delete mode 100644 packages/council-ethers/tsup.config.ts delete mode 100644 packages/council-viem/.eslintrc delete mode 100644 packages/council-viem/.gitignore delete mode 100644 packages/council-viem/CHANGELOG.md delete mode 100644 packages/council-viem/LICENSE delete mode 100644 packages/council-viem/README.md delete mode 100644 packages/council-viem/package.json delete mode 100644 packages/council-viem/src/contract/createReadContractFactory.ts delete mode 100644 packages/council-viem/src/contract/createReadWriteContractFactory.ts delete mode 100644 packages/council-viem/src/index.ts delete mode 100644 packages/council-viem/src/models/council/ReadCouncil.ts delete mode 100644 packages/council-viem/src/models/council/ReadWriteCouncil.ts delete mode 100644 packages/council-viem/src/models/token/ReadWriteMockToken.ts delete mode 100644 packages/council-viem/src/test/integration/ReadCoreVoting.test.ts delete mode 100644 packages/council-viem/tsconfig.json delete mode 100644 packages/council-viem/tsup.config.ts delete mode 100644 packages/council-viem/vitest.config.ts diff --git a/packages/council-ethers/.eslintrc b/packages/council-ethers/.eslintrc deleted file mode 100644 index f533fc62..00000000 --- a/packages/council-ethers/.eslintrc +++ /dev/null @@ -1,4 +0,0 @@ -{ - "root": true, - "extends": ["@council/eslint-config"] -} diff --git a/packages/council-ethers/.gitignore b/packages/council-ethers/.gitignore deleted file mode 100644 index db4c6d9b..00000000 --- a/packages/council-ethers/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -dist -node_modules \ No newline at end of file diff --git a/packages/council-ethers/CHANGELOG.md b/packages/council-ethers/CHANGELOG.md deleted file mode 100644 index f58d3e42..00000000 --- a/packages/council-ethers/CHANGELOG.md +++ /dev/null @@ -1,32 +0,0 @@ -# @delvtech/council-ethers - -## 0.1.0 - -### Minor Changes - -- e742438: Updated license to AGPL-3.0 - -### Patch Changes - -- Updated dependencies [e742438] - - @delvtech/council-core@0.1.0 - -## 0.0.3 - -### Patch Changes - -- @delvtech/council-core@0.0.3 - -## 0.0.2 - -### Patch Changes - -- @delvtech/council-core@0.0.2 - -## 0.0.1 - -### Patch Changes - -- abebf3c: Initial release 🚀 -- Updated dependencies [abebf3c] - - @delvtech/council-core@0.0.1 diff --git a/packages/council-ethers/LICENSE b/packages/council-ethers/LICENSE deleted file mode 100644 index 0ad25db4..00000000 --- a/packages/council-ethers/LICENSE +++ /dev/null @@ -1,661 +0,0 @@ - GNU AFFERO GENERAL PUBLIC LICENSE - Version 3, 19 November 2007 - - 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. - - Preamble - - The GNU Affero General Public License is a free, copyleft license for -software and other kinds of works, specifically designed to ensure -cooperation with the community in the case of network server software. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -our General Public Licenses are intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - Developers that use our General Public Licenses protect your rights -with two steps: (1) assert copyright on the software, and (2) offer -you this License which gives you legal permission to copy, distribute -and/or modify the software. - - A secondary benefit of defending all users' freedom is that -improvements made in alternate versions of the program, if they -receive widespread use, become available for other developers to -incorporate. Many developers of free software are heartened and -encouraged by the resulting cooperation. However, in the case of -software used on network servers, this result may fail to come about. -The GNU General Public License permits making a modified version and -letting the public access it on a server without ever releasing its -source code to the public. - - The GNU Affero General Public License is designed specifically to -ensure that, in such cases, the modified source code becomes available -to the community. It requires the operator of a network server to -provide the source code of the modified version running there to the -users of that server. Therefore, public use of a modified version, on -a publicly accessible server, gives the public access to the source -code of the modified version. - - An older license, called the Affero General Public License and -published by Affero, was designed to accomplish similar goals. This is -a different license, not a version of the Affero GPL, but Affero has -released a new version of the Affero GPL which permits relicensing under -this license. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU Affero General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Remote Network Interaction; Use with the GNU General Public License. - - Notwithstanding any other provision of this License, if you modify the -Program, your modified version must prominently offer all users -interacting with it remotely through a computer network (if your version -supports such interaction) an opportunity to receive the Corresponding -Source of your version by providing access to the Corresponding Source -from a network server at no charge, through some standard or customary -means of facilitating copying of software. This Corresponding Source -shall include the Corresponding Source for any work covered by version 3 -of the GNU General Public License that is incorporated pursuant to the -following paragraph. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the work with which it is combined will remain governed by version -3 of the GNU General Public License. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU Affero 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 -Program specifies that a certain numbered version of the GNU Affero General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU Affero General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU Affero General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published - by the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If your software can interact with users remotely through a computer -network, you should also make sure that it provides a way for users to -get its source. For example, if your program is a web application, its -interface could display a "Source" link that leads users to an archive -of the code. There are many ways you could offer source, and different -solutions will be better for different programs; see section 13 for the -specific requirements. - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU AGPL, see -. diff --git a/packages/council-ethers/README.md b/packages/council-ethers/README.md deleted file mode 100644 index 2d1963d6..00000000 --- a/packages/council-ethers/README.md +++ /dev/null @@ -1 +0,0 @@ -# Viem integrations for the @delvtech/evm-client diff --git a/packages/council-ethers/package.json b/packages/council-ethers/package.json deleted file mode 100644 index 4bcf890e..00000000 --- a/packages/council-ethers/package.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "name": "@delvtech/council-ethers", - "version": "0.1.0", - "license": "AGPL-3.0", - "type": "module", - "main": "dist/index.js", - "types": "dist/index.d.ts", - "exports": { - ".": { - "types": "./dist/index.d.ts", - "default": "./dist/index.js" - } - }, - "scripts": { - "build": "tsup", - "watch": "tsup --watch", - "typecheck": "tsc --noEmit" - }, - "peerDependencies": { - "ethers": ">=6" - }, - "dependencies": { - "@delvtech/council-core": "0.1.0", - "@delvtech/evm-client-ethers": "^0.5.1" - }, - "devDependencies": { - "@council/eslint-config": "*", - "@council/tsconfig": "*", - "ethers": "^6.13.1", - "tsup": "^8.0.2", - "typescript": "^5.3.3" - }, - "publishConfig": { - "access": "public" - }, - "files": [ - "dist" - ] -} diff --git a/packages/council-ethers/src/contract/createReadContractFactory.ts b/packages/council-ethers/src/contract/createReadContractFactory.ts deleted file mode 100644 index 856b11f6..00000000 --- a/packages/council-ethers/src/contract/createReadContractFactory.ts +++ /dev/null @@ -1,42 +0,0 @@ -import { - ReadContractFactory, - extendReadContract, -} from "@delvtech/council-core"; -import { - SimpleCache, - createNetwork, - createReadContract, -} from "@delvtech/evm-client-ethers"; -import { Provider } from "ethers"; - -export interface CreateReadContractFactoryOptions { - provider: Provider; - cache?: SimpleCache; - namespace?: string; -} - -export function createReadContractFactory( - factoryOptions: CreateReadContractFactoryOptions, -): ReadContractFactory { - return (instanceOptions) => { - const options = { - ...factoryOptions, - ...instanceOptions, - }; - - const viemReadContract = createReadContract({ - abi: options.abi, - address: options.address, - provider: options.provider, - }); - - const viemNetwork = createNetwork(options.provider); - - // Adds custom event fetching logic to the base contract before caching. - return extendReadContract({ - ...options, - contract: viemReadContract, - network: viemNetwork, - }); - }; -} diff --git a/packages/council-ethers/src/contract/createReadWriteContractFactory.ts b/packages/council-ethers/src/contract/createReadWriteContractFactory.ts deleted file mode 100644 index 91ebacb5..00000000 --- a/packages/council-ethers/src/contract/createReadWriteContractFactory.ts +++ /dev/null @@ -1,42 +0,0 @@ -import { - ReadWriteContractFactory, - extendReadWriteContract, -} from "@delvtech/council-core"; -import { - createNetwork, - createReadWriteContract, -} from "@delvtech/evm-client-ethers"; -import { Signer } from "ethers"; -import { CreateReadContractFactoryOptions } from "src/contract/createReadContractFactory"; - -export interface CreateReadWriteContractFactoryOptions - extends CreateReadContractFactoryOptions { - signer: Signer; -} - -export function createReadWriteContractFactory( - factoryOptions: CreateReadWriteContractFactoryOptions, -): ReadWriteContractFactory { - return (instanceOptions) => { - const options = { - ...factoryOptions, - ...instanceOptions, - }; - - const viemReadWriteContract = createReadWriteContract({ - abi: options.abi, - address: options.address, - provider: options.provider, - signer: options.signer, - }); - - const viemNetwork = createNetwork(options.provider); - - // Adds custom event fetching logic to the base contract before caching. - return extendReadWriteContract({ - ...options, - contract: viemReadWriteContract, - network: viemNetwork, - }); - }; -} diff --git a/packages/council-ethers/src/index.ts b/packages/council-ethers/src/index.ts deleted file mode 100644 index e8500b4b..00000000 --- a/packages/council-ethers/src/index.ts +++ /dev/null @@ -1,39 +0,0 @@ -// Client -export { - createReadContractFactory, - type CreateReadContractFactoryOptions, -} from "src/contract/createReadContractFactory"; -export { - createReadWriteContractFactory, - type CreateReadWriteContractFactoryOptions, -} from "src/contract/createReadWriteContractFactory"; - -// Client Re-exports -export * from "@delvtech/evm-client-ethers"; - -// Council -export { - ReadCouncil, - type ReadCouncilOptions, -} from "src/models/council/ReadCouncil"; -export { - ReadWriteCouncil, - type ReadWriteCouncilOptions, -} from "src/models/council/ReadWriteCouncil"; -export { - ReadWriteMockToken, - type ReadWriteMockTokenOptions, -} from "src/models/token/ReadWriteMockToken"; - -// Council Core Re-exports -export * from "@delvtech/council-core/airdrop"; -export * from "@delvtech/council-core/contract"; -export * from "@delvtech/council-core/errors"; -export * from "@delvtech/council-core/model"; -export * from "@delvtech/council-core/proposal"; -export { ReadToken, type ReadTokenOptions } from "@delvtech/council-core/token"; -export * from "@delvtech/council-core/utils"; -export * from "@delvtech/council-core/vaults"; -export * from "@delvtech/council-core/vote"; -export * from "@delvtech/council-core/voter"; -export * from "@delvtech/council-core/voting"; diff --git a/packages/council-ethers/src/models/council/ReadCouncil.ts b/packages/council-ethers/src/models/council/ReadCouncil.ts deleted file mode 100644 index b09ef081..00000000 --- a/packages/council-ethers/src/models/council/ReadCouncil.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { ReadCouncil as BaseReadCouncil } from "@delvtech/council-core"; -import { SimpleCache, createNetwork } from "@delvtech/evm-client-ethers"; -import { Provider } from "ethers"; -import { createReadContractFactory } from "src/contract/createReadContractFactory"; - -export interface ReadCouncilOptions { - provider: Provider; - cache?: SimpleCache; - /** - * A namespace to distinguish this instance from others in the cache by - * prefixing all cache keys. - */ - namespace?: string; -} - -export class ReadCouncil extends BaseReadCouncil { - constructor({ provider, cache, namespace }: ReadCouncilOptions) { - super({ - name: namespace, - network: createNetwork(provider), - contractFactory: createReadContractFactory({ - provider, - cache, - namespace, - }), - }); - } -} diff --git a/packages/council-ethers/src/models/council/ReadWriteCouncil.ts b/packages/council-ethers/src/models/council/ReadWriteCouncil.ts deleted file mode 100644 index 529076cf..00000000 --- a/packages/council-ethers/src/models/council/ReadWriteCouncil.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { ReadWriteCouncil as BaseReadWriteCouncil } from "@delvtech/council-core"; -import { createNetwork } from "@delvtech/evm-client-ethers"; -import { Signer } from "ethers"; -import { createReadWriteContractFactory } from "src/contract/createReadWriteContractFactory"; -import { ReadCouncilOptions } from "./ReadCouncil"; - -export interface ReadWriteCouncilOptions extends ReadCouncilOptions { - signer: Signer; -} - -export class ReadWriteCouncil extends BaseReadWriteCouncil { - constructor({ provider, signer, cache, namespace }: ReadWriteCouncilOptions) { - super({ - name: namespace, - network: createNetwork(provider), - contractFactory: createReadWriteContractFactory({ - provider, - signer, - cache, - namespace, - }), - }); - } -} diff --git a/packages/council-ethers/src/models/token/ReadWriteMockToken.ts b/packages/council-ethers/src/models/token/ReadWriteMockToken.ts deleted file mode 100644 index 03625a16..00000000 --- a/packages/council-ethers/src/models/token/ReadWriteMockToken.ts +++ /dev/null @@ -1,38 +0,0 @@ -import { ReadWriteMockToken as BaseReadWriteMockToken } from "@delvtech/council-core"; -import { SimpleCache, createNetwork } from "@delvtech/evm-client-ethers"; -import { Provider, Signer } from "ethers"; -import { createReadWriteContractFactory } from "src/contract/createReadWriteContractFactory"; - -export interface ReadWriteMockTokenOptions { - address: `0x${string}`; - provider: Provider; - signer: Signer; - cache?: SimpleCache; - /** - * A namespace to distinguish this instance from others in the cache by - * prefixing all cache keys. - */ - namespace?: string; -} - -export class ReadWriteMockToken extends BaseReadWriteMockToken { - constructor({ - address, - provider, - signer, - cache, - namespace, - }: ReadWriteMockTokenOptions) { - super({ - address, - name: namespace, - network: createNetwork(provider), - contractFactory: createReadWriteContractFactory({ - provider, - signer, - cache, - namespace, - }), - }); - } -} diff --git a/packages/council-ethers/tsconfig.json b/packages/council-ethers/tsconfig.json deleted file mode 100644 index 161d563b..00000000 --- a/packages/council-ethers/tsconfig.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "extends": "@council/tsconfig/base.json", - "include": ["src"], - "exclude": ["node_modules"], - "compilerOptions": { - "rootDir": ".", - "baseUrl": ".", - "target": "esnext", - "module": "ESNext", - "moduleResolution": "Bundler", - "paths": { - "src/*": ["src/*"], - }, - "resolveJsonModule": true, - }, -} diff --git a/packages/council-ethers/tsup.config.ts b/packages/council-ethers/tsup.config.ts deleted file mode 100644 index 7924d73c..00000000 --- a/packages/council-ethers/tsup.config.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { defineConfig } from "tsup"; - -export default defineConfig({ - entry: ["src/index.ts"], - format: ["esm"], - sourcemap: true, - dts: true, - clean: true, - minify: true, - shims: true, - cjsInterop: true, -}); diff --git a/packages/council-viem/.eslintrc b/packages/council-viem/.eslintrc deleted file mode 100644 index f533fc62..00000000 --- a/packages/council-viem/.eslintrc +++ /dev/null @@ -1,4 +0,0 @@ -{ - "root": true, - "extends": ["@council/eslint-config"] -} diff --git a/packages/council-viem/.gitignore b/packages/council-viem/.gitignore deleted file mode 100644 index db4c6d9b..00000000 --- a/packages/council-viem/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -dist -node_modules \ No newline at end of file diff --git a/packages/council-viem/CHANGELOG.md b/packages/council-viem/CHANGELOG.md deleted file mode 100644 index 52f57038..00000000 --- a/packages/council-viem/CHANGELOG.md +++ /dev/null @@ -1,32 +0,0 @@ -# @delvtech/council-viem - -## 0.1.0 - -### Minor Changes - -- e742438: Updated license to AGPL-3.0 - -### Patch Changes - -- Updated dependencies [e742438] - - @delvtech/council-core@0.1.0 - -## 0.0.3 - -### Patch Changes - -- @delvtech/council-core@0.0.3 - -## 0.0.2 - -### Patch Changes - -- @delvtech/council-core@0.0.2 - -## 0.0.1 - -### Patch Changes - -- abebf3c: Initial release 🚀 -- Updated dependencies [abebf3c] - - @delvtech/council-core@0.0.1 diff --git a/packages/council-viem/LICENSE b/packages/council-viem/LICENSE deleted file mode 100644 index 0ad25db4..00000000 --- a/packages/council-viem/LICENSE +++ /dev/null @@ -1,661 +0,0 @@ - GNU AFFERO GENERAL PUBLIC LICENSE - Version 3, 19 November 2007 - - 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. - - Preamble - - The GNU Affero General Public License is a free, copyleft license for -software and other kinds of works, specifically designed to ensure -cooperation with the community in the case of network server software. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -our General Public Licenses are intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - Developers that use our General Public Licenses protect your rights -with two steps: (1) assert copyright on the software, and (2) offer -you this License which gives you legal permission to copy, distribute -and/or modify the software. - - A secondary benefit of defending all users' freedom is that -improvements made in alternate versions of the program, if they -receive widespread use, become available for other developers to -incorporate. Many developers of free software are heartened and -encouraged by the resulting cooperation. However, in the case of -software used on network servers, this result may fail to come about. -The GNU General Public License permits making a modified version and -letting the public access it on a server without ever releasing its -source code to the public. - - The GNU Affero General Public License is designed specifically to -ensure that, in such cases, the modified source code becomes available -to the community. It requires the operator of a network server to -provide the source code of the modified version running there to the -users of that server. Therefore, public use of a modified version, on -a publicly accessible server, gives the public access to the source -code of the modified version. - - An older license, called the Affero General Public License and -published by Affero, was designed to accomplish similar goals. This is -a different license, not a version of the Affero GPL, but Affero has -released a new version of the Affero GPL which permits relicensing under -this license. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU Affero General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Remote Network Interaction; Use with the GNU General Public License. - - Notwithstanding any other provision of this License, if you modify the -Program, your modified version must prominently offer all users -interacting with it remotely through a computer network (if your version -supports such interaction) an opportunity to receive the Corresponding -Source of your version by providing access to the Corresponding Source -from a network server at no charge, through some standard or customary -means of facilitating copying of software. This Corresponding Source -shall include the Corresponding Source for any work covered by version 3 -of the GNU General Public License that is incorporated pursuant to the -following paragraph. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the work with which it is combined will remain governed by version -3 of the GNU General Public License. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU Affero 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 -Program specifies that a certain numbered version of the GNU Affero General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU Affero General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU Affero General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published - by the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If your software can interact with users remotely through a computer -network, you should also make sure that it provides a way for users to -get its source. For example, if your program is a web application, its -interface could display a "Source" link that leads users to an archive -of the code. There are many ways you could offer source, and different -solutions will be better for different programs; see section 13 for the -specific requirements. - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU AGPL, see -. diff --git a/packages/council-viem/README.md b/packages/council-viem/README.md deleted file mode 100644 index 2d1963d6..00000000 --- a/packages/council-viem/README.md +++ /dev/null @@ -1 +0,0 @@ -# Viem integrations for the @delvtech/evm-client diff --git a/packages/council-viem/package.json b/packages/council-viem/package.json deleted file mode 100644 index 3bf01902..00000000 --- a/packages/council-viem/package.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "name": "@delvtech/council-viem", - "version": "0.1.0", - "license": "AGPL-3.0", - "type": "module", - "main": "dist/index.js", - "types": "dist/index.d.ts", - "exports": { - ".": { - "types": "./dist/index.d.ts", - "default": "./dist/index.js" - } - }, - "scripts": { - "build": "tsup", - "watch": "tsup --watch", - "test": "vitest run", - "test:watch": "vitest --reporter=verbose", - "typecheck": "tsc --noEmit" - }, - "peerDependencies": { - "viem": ">=2" - }, - "dependencies": { - "@delvtech/council-core": "0.1.0", - "@delvtech/evm-client-viem": "^0.6.1" - }, - "devDependencies": { - "@council/eslint-config": "*", - "@council/tsconfig": "*", - "tsup": "^8.0.2", - "typescript": "^5.3.3", - "viem": "^2.16.2", - "vitest": "^1.3.1" - }, - "publishConfig": { - "access": "public" - }, - "files": [ - "dist" - ] -} diff --git a/packages/council-viem/src/contract/createReadContractFactory.ts b/packages/council-viem/src/contract/createReadContractFactory.ts deleted file mode 100644 index aafef960..00000000 --- a/packages/council-viem/src/contract/createReadContractFactory.ts +++ /dev/null @@ -1,42 +0,0 @@ -import { - ReadContractFactory, - extendReadContract, -} from "@delvtech/council-core"; -import { - SimpleCache, - createNetwork, - createReadContract, -} from "@delvtech/evm-client-viem"; -import { PublicClient } from "viem"; - -export interface CreateReadContractFactoryOptions { - publicClient: PublicClient; - cache?: SimpleCache; - namespace?: string; -} - -export function createReadContractFactory( - factoryOptions: CreateReadContractFactoryOptions, -): ReadContractFactory { - return (instanceOptions) => { - const options = { - ...factoryOptions, - ...instanceOptions, - }; - - const viemReadContract = createReadContract({ - abi: options.abi, - address: options.address, - publicClient: options.publicClient, - }); - - const viemNetwork = createNetwork(options.publicClient); - - // Adds custom event fetching logic to the base contract before caching. - return extendReadContract({ - ...options, - contract: viemReadContract, - network: viemNetwork, - }); - }; -} diff --git a/packages/council-viem/src/contract/createReadWriteContractFactory.ts b/packages/council-viem/src/contract/createReadWriteContractFactory.ts deleted file mode 100644 index 39659bc2..00000000 --- a/packages/council-viem/src/contract/createReadWriteContractFactory.ts +++ /dev/null @@ -1,42 +0,0 @@ -import { - ReadWriteContractFactory, - extendReadWriteContract, -} from "@delvtech/council-core"; -import { - createNetwork, - createReadWriteContract, -} from "@delvtech/evm-client-viem"; -import { CreateReadContractFactoryOptions } from "src/contract/createReadContractFactory"; -import { WalletClient } from "viem"; - -export interface CreateReadWriteContractFactoryOptions - extends CreateReadContractFactoryOptions { - walletClient: WalletClient; -} - -export function createReadWriteContractFactory( - factoryOptions: CreateReadWriteContractFactoryOptions, -): ReadWriteContractFactory { - return (instanceOptions) => { - const options = { - ...factoryOptions, - ...instanceOptions, - }; - - const viemReadWriteContract = createReadWriteContract({ - abi: options.abi, - address: options.address, - publicClient: options.publicClient, - walletClient: options.walletClient, - }); - - const viemNetwork = createNetwork(options.publicClient); - - // Adds custom event fetching logic to the base contract before caching. - return extendReadWriteContract({ - ...options, - contract: viemReadWriteContract, - network: viemNetwork, - }); - }; -} diff --git a/packages/council-viem/src/index.ts b/packages/council-viem/src/index.ts deleted file mode 100644 index e0b29a17..00000000 --- a/packages/council-viem/src/index.ts +++ /dev/null @@ -1,39 +0,0 @@ -// Client -export { - createReadContractFactory, - type CreateReadContractFactoryOptions, -} from "src/contract/createReadContractFactory"; -export { - createReadWriteContractFactory, - type CreateReadWriteContractFactoryOptions, -} from "src/contract/createReadWriteContractFactory"; - -// Client Re-exports -export * from "@delvtech/evm-client-viem"; - -// Council -export { - ReadCouncil, - type ReadCouncilOptions, -} from "src/models/council/ReadCouncil"; -export { - ReadWriteCouncil, - type ReadWriteCouncilOptions, -} from "src/models/council/ReadWriteCouncil"; -export { - ReadWriteMockToken, - type ReadWriteMockTokenOptions, -} from "src/models/token/ReadWriteMockToken"; - -// Council Core Re-exports -export * from "@delvtech/council-core/airdrop"; -export * from "@delvtech/council-core/contract"; -export * from "@delvtech/council-core/errors"; -export * from "@delvtech/council-core/model"; -export * from "@delvtech/council-core/proposal"; -export { ReadToken, type ReadTokenOptions } from "@delvtech/council-core/token"; -export * from "@delvtech/council-core/utils"; -export * from "@delvtech/council-core/vaults"; -export * from "@delvtech/council-core/vote"; -export * from "@delvtech/council-core/voter"; -export * from "@delvtech/council-core/voting"; diff --git a/packages/council-viem/src/models/council/ReadCouncil.ts b/packages/council-viem/src/models/council/ReadCouncil.ts deleted file mode 100644 index a172ec44..00000000 --- a/packages/council-viem/src/models/council/ReadCouncil.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { ReadCouncil as BaseReadCouncil } from "@delvtech/council-core"; -import { SimpleCache, createNetwork } from "@delvtech/evm-client-viem"; -import { createReadContractFactory } from "src/contract/createReadContractFactory"; -import { PublicClient } from "viem"; - -export interface ReadCouncilOptions { - publicClient: PublicClient; - cache?: SimpleCache; - /** - * A namespace to distinguish this instance from others in the cache by - * prefixing all cache keys. - */ - namespace?: string; -} - -export class ReadCouncil extends BaseReadCouncil { - constructor({ publicClient, cache, namespace }: ReadCouncilOptions) { - super({ - name: namespace, - network: createNetwork(publicClient), - contractFactory: createReadContractFactory({ - publicClient, - cache, - namespace, - }), - }); - } -} diff --git a/packages/council-viem/src/models/council/ReadWriteCouncil.ts b/packages/council-viem/src/models/council/ReadWriteCouncil.ts deleted file mode 100644 index defff99a..00000000 --- a/packages/council-viem/src/models/council/ReadWriteCouncil.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { - ReadWriteCouncil as BaseReadWriteCouncil, - ReadCouncil, -} from "@delvtech/council-core"; -import { createNetwork } from "@delvtech/evm-client-viem"; -import { createReadWriteContractFactory } from "src/contract/createReadWriteContractFactory"; -import { ReadCouncilOptions } from "src/models/council/ReadCouncil"; -import { WalletClient } from "viem"; - -export interface ReadWriteCouncilOptions extends ReadCouncilOptions { - walletClient: WalletClient; - readCouncil?: ReadCouncil; -} - -export class ReadWriteCouncil extends BaseReadWriteCouncil { - constructor({ - publicClient, - walletClient, - cache, - namespace, - }: ReadWriteCouncilOptions) { - super({ - name: namespace, - network: createNetwork(publicClient), - contractFactory: createReadWriteContractFactory({ - publicClient, - walletClient, - cache, - namespace, - }), - }); - } -} diff --git a/packages/council-viem/src/models/token/ReadWriteMockToken.ts b/packages/council-viem/src/models/token/ReadWriteMockToken.ts deleted file mode 100644 index 9cee9bfe..00000000 --- a/packages/council-viem/src/models/token/ReadWriteMockToken.ts +++ /dev/null @@ -1,38 +0,0 @@ -import { ReadWriteMockToken as BaseReadWriteMockToken } from "@delvtech/council-core"; -import { SimpleCache, createNetwork } from "@delvtech/evm-client-viem"; -import { createReadWriteContractFactory } from "src/contract/createReadWriteContractFactory"; -import { PublicClient, WalletClient } from "viem"; - -export interface ReadWriteMockTokenOptions { - address: `0x${string}`; - publicClient: PublicClient; - walletClient: WalletClient; - cache?: SimpleCache; - /** - * A namespace to distinguish this instance from others in the cache by - * prefixing all cache keys. - */ - namespace?: string; -} - -export class ReadWriteMockToken extends BaseReadWriteMockToken { - constructor({ - address, - publicClient, - walletClient, - cache, - namespace, - }: ReadWriteMockTokenOptions) { - super({ - address, - name: namespace, - network: createNetwork(publicClient), - contractFactory: createReadWriteContractFactory({ - publicClient, - walletClient, - cache, - namespace, - }), - }); - } -} diff --git a/packages/council-viem/src/test/integration/ReadCoreVoting.test.ts b/packages/council-viem/src/test/integration/ReadCoreVoting.test.ts deleted file mode 100644 index 7687fa9a..00000000 --- a/packages/council-viem/src/test/integration/ReadCoreVoting.test.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { ReadLockingVault } from "@delvtech/council-core"; -import { createNetwork, createReadContractFactory } from "src/index"; -import { createPublicClient, http } from "viem"; -import { expect, test } from "vitest"; - -const rpcUrl = process.env.TEST_RPC_URL || "http://localhost:8545"; - -test.todo("It fetches events", async () => { - const client = createPublicClient({ - transport: http(rpcUrl), - }); - const lockingVault = new ReadLockingVault({ - address: "0x", - contractFactory: createReadContractFactory({ - publicClient: client, - }), - network: createNetwork(client), - }); - - const result = await lockingVault.getDelegatorsTo({ - account: "0x", - }); - console.log("result:", result); - - expect(result).toBeDefined(); -}); diff --git a/packages/council-viem/tsconfig.json b/packages/council-viem/tsconfig.json deleted file mode 100644 index 161d563b..00000000 --- a/packages/council-viem/tsconfig.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "extends": "@council/tsconfig/base.json", - "include": ["src"], - "exclude": ["node_modules"], - "compilerOptions": { - "rootDir": ".", - "baseUrl": ".", - "target": "esnext", - "module": "ESNext", - "moduleResolution": "Bundler", - "paths": { - "src/*": ["src/*"], - }, - "resolveJsonModule": true, - }, -} diff --git a/packages/council-viem/tsup.config.ts b/packages/council-viem/tsup.config.ts deleted file mode 100644 index 7924d73c..00000000 --- a/packages/council-viem/tsup.config.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { defineConfig } from "tsup"; - -export default defineConfig({ - entry: ["src/index.ts"], - format: ["esm"], - sourcemap: true, - dts: true, - clean: true, - minify: true, - shims: true, - cjsInterop: true, -}); diff --git a/packages/council-viem/vitest.config.ts b/packages/council-viem/vitest.config.ts deleted file mode 100644 index 430cf4b6..00000000 --- a/packages/council-viem/vitest.config.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { defineConfig } from "vitest/config"; - -export default defineConfig({ - test: { - alias: { - "src/": "/src/", - }, - coverage: { - // get coverage for all of source except the example dir - include: ["./src/{!(example),}/**/*.ts"] - } - }, -}); From d7a6df5f7bdb468449dcfd356ae44a9691a22d53 Mon Sep 17 00:00:00 2001 From: Ryan Goree Date: Sat, 8 Feb 2025 18:19:17 -0600 Subject: [PATCH 003/146] Rename sdk to council-js --- apps/council-ui/src/ui/vaults/gscVault/hooks/useJoinGsc.ts | 2 +- apps/council-ui/src/ui/vaults/hooks/useVotingPowerByVault.ts | 2 +- packages/{council-core => council-js}/.env.example | 0 packages/{council-core => council-js}/.eslintignore | 0 packages/{council-core => council-js}/.eslintrc | 0 packages/{council-core => council-js}/.gitignore | 0 packages/{council-core => council-js}/CHANGELOG.md | 2 +- packages/{council-core => council-js}/LICENSE | 0 packages/{council-core => council-js}/README.md | 0 packages/{council-core => council-js}/package.json | 2 +- packages/{council-core => council-js}/src/contract/extend.ts | 0 packages/{council-core => council-js}/src/contract/factory.ts | 0 .../{council-core => council-js}/src/errors/BlockNotFound.ts | 0 packages/{council-core => council-js}/src/exports/airdrop.ts | 0 packages/{council-core => council-js}/src/exports/contract.ts | 0 packages/{council-core => council-js}/src/exports/council.ts | 0 packages/{council-core => council-js}/src/exports/errors.ts | 0 packages/{council-core => council-js}/src/exports/index.ts | 0 packages/{council-core => council-js}/src/exports/model.ts | 0 packages/{council-core => council-js}/src/exports/proposal.ts | 0 packages/{council-core => council-js}/src/exports/token.ts | 0 packages/{council-core => council-js}/src/exports/utils.ts | 0 packages/{council-core => council-js}/src/exports/vaults.ts | 0 packages/{council-core => council-js}/src/exports/vote.ts | 0 packages/{council-core => council-js}/src/exports/voter.ts | 0 packages/{council-core => council-js}/src/exports/voting.ts | 0 packages/{council-core => council-js}/src/models/Model.ts | 0 packages/{council-core => council-js}/src/models/ReadVote.ts | 0 packages/{council-core => council-js}/src/models/ReadVoter.ts | 0 .../src/models/airdrop/ReadAirdrop.ts | 0 .../src/models/airdrop/ReadWriteAirdrop.ts | 0 .../{council-core => council-js}/src/models/airdrop/types.ts | 0 .../src/models/coreVoting/ReadCoreVoting.ts | 0 .../src/models/coreVoting/ReadWriteCoreVoting.ts | 0 .../src/models/coreVoting/constants.ts | 0 .../{council-core => council-js}/src/models/coreVoting/types.ts | 0 .../src/models/council/ReadCouncil.ts | 0 .../src/models/council/ReadWriteCouncil.ts | 0 .../src/models/proposal/ReadProposal.ts | 0 .../src/models/proposal/ReadWriteProposal.ts | 0 .../{council-core => council-js}/src/models/token/ReadToken.ts | 0 .../src/models/token/ReadWriteMockToken.ts | 0 .../src/models/token/ReadWriteToken.ts | 0 packages/{council-core => council-js}/src/models/token/types.ts | 0 .../src/models/votingVault/ReadVotingVault.ts | 0 .../src/models/votingVault/gscVault/ReadGscVault.ts | 0 .../src/models/votingVault/gscVault/ReadWriteGscVault.ts | 0 .../src/models/votingVault/gscVault/types.ts | 0 .../models/votingVault/lockingVault/ReadLockingVault.test.ts | 0 .../src/models/votingVault/lockingVault/ReadLockingVault.ts | 0 .../models/votingVault/lockingVault/ReadWriteLockingVault.ts | 0 .../src/models/votingVault/lockingVault/types.ts | 0 .../src/models/votingVault/types.ts | 0 .../src/models/votingVault/vestingVault/ReadVestingVault.ts | 0 .../models/votingVault/vestingVault/ReadWriteVestingVault.ts | 0 .../src/models/votingVault/vestingVault/types.ts | 0 .../src/test/stubContractFactory.ts | 0 packages/{council-core => council-js}/src/types.ts | 0 .../src/utils/blockToReadOptions.ts | 0 packages/{council-core => council-js}/src/utils/formatUnits.ts | 0 .../{council-core => council-js}/src/utils/getBlockOrThrow.ts | 0 .../src/utils/getEventsWithSplitAndRetry.ts | 0 packages/{council-core => council-js}/src/utils/getOrSet.ts | 0 .../src/utils/getVaultsWithPower.ts | 0 packages/{council-core => council-js}/tsconfig.json | 0 packages/{council-core => council-js}/tsup.config.ts | 0 packages/{council-core => council-js}/typedoc.json | 0 packages/{council-core => council-js}/vitest.config.ts | 0 68 files changed, 4 insertions(+), 4 deletions(-) rename packages/{council-core => council-js}/.env.example (100%) rename packages/{council-core => council-js}/.eslintignore (100%) rename packages/{council-core => council-js}/.eslintrc (100%) rename packages/{council-core => council-js}/.gitignore (100%) rename packages/{council-core => council-js}/CHANGELOG.md (95%) rename packages/{council-core => council-js}/LICENSE (100%) rename packages/{council-core => council-js}/README.md (100%) rename packages/{council-core => council-js}/package.json (98%) rename packages/{council-core => council-js}/src/contract/extend.ts (100%) rename packages/{council-core => council-js}/src/contract/factory.ts (100%) rename packages/{council-core => council-js}/src/errors/BlockNotFound.ts (100%) rename packages/{council-core => council-js}/src/exports/airdrop.ts (100%) rename packages/{council-core => council-js}/src/exports/contract.ts (100%) rename packages/{council-core => council-js}/src/exports/council.ts (100%) rename packages/{council-core => council-js}/src/exports/errors.ts (100%) rename packages/{council-core => council-js}/src/exports/index.ts (100%) rename packages/{council-core => council-js}/src/exports/model.ts (100%) rename packages/{council-core => council-js}/src/exports/proposal.ts (100%) rename packages/{council-core => council-js}/src/exports/token.ts (100%) rename packages/{council-core => council-js}/src/exports/utils.ts (100%) rename packages/{council-core => council-js}/src/exports/vaults.ts (100%) rename packages/{council-core => council-js}/src/exports/vote.ts (100%) rename packages/{council-core => council-js}/src/exports/voter.ts (100%) rename packages/{council-core => council-js}/src/exports/voting.ts (100%) rename packages/{council-core => council-js}/src/models/Model.ts (100%) rename packages/{council-core => council-js}/src/models/ReadVote.ts (100%) rename packages/{council-core => council-js}/src/models/ReadVoter.ts (100%) rename packages/{council-core => council-js}/src/models/airdrop/ReadAirdrop.ts (100%) rename packages/{council-core => council-js}/src/models/airdrop/ReadWriteAirdrop.ts (100%) rename packages/{council-core => council-js}/src/models/airdrop/types.ts (100%) rename packages/{council-core => council-js}/src/models/coreVoting/ReadCoreVoting.ts (100%) rename packages/{council-core => council-js}/src/models/coreVoting/ReadWriteCoreVoting.ts (100%) rename packages/{council-core => council-js}/src/models/coreVoting/constants.ts (100%) rename packages/{council-core => council-js}/src/models/coreVoting/types.ts (100%) rename packages/{council-core => council-js}/src/models/council/ReadCouncil.ts (100%) rename packages/{council-core => council-js}/src/models/council/ReadWriteCouncil.ts (100%) rename packages/{council-core => council-js}/src/models/proposal/ReadProposal.ts (100%) rename packages/{council-core => council-js}/src/models/proposal/ReadWriteProposal.ts (100%) rename packages/{council-core => council-js}/src/models/token/ReadToken.ts (100%) rename packages/{council-core => council-js}/src/models/token/ReadWriteMockToken.ts (100%) rename packages/{council-core => council-js}/src/models/token/ReadWriteToken.ts (100%) rename packages/{council-core => council-js}/src/models/token/types.ts (100%) rename packages/{council-core => council-js}/src/models/votingVault/ReadVotingVault.ts (100%) rename packages/{council-core => council-js}/src/models/votingVault/gscVault/ReadGscVault.ts (100%) rename packages/{council-core => council-js}/src/models/votingVault/gscVault/ReadWriteGscVault.ts (100%) rename packages/{council-core => council-js}/src/models/votingVault/gscVault/types.ts (100%) rename packages/{council-core => council-js}/src/models/votingVault/lockingVault/ReadLockingVault.test.ts (100%) rename packages/{council-core => council-js}/src/models/votingVault/lockingVault/ReadLockingVault.ts (100%) rename packages/{council-core => council-js}/src/models/votingVault/lockingVault/ReadWriteLockingVault.ts (100%) rename packages/{council-core => council-js}/src/models/votingVault/lockingVault/types.ts (100%) rename packages/{council-core => council-js}/src/models/votingVault/types.ts (100%) rename packages/{council-core => council-js}/src/models/votingVault/vestingVault/ReadVestingVault.ts (100%) rename packages/{council-core => council-js}/src/models/votingVault/vestingVault/ReadWriteVestingVault.ts (100%) rename packages/{council-core => council-js}/src/models/votingVault/vestingVault/types.ts (100%) rename packages/{council-core => council-js}/src/test/stubContractFactory.ts (100%) rename packages/{council-core => council-js}/src/types.ts (100%) rename packages/{council-core => council-js}/src/utils/blockToReadOptions.ts (100%) rename packages/{council-core => council-js}/src/utils/formatUnits.ts (100%) rename packages/{council-core => council-js}/src/utils/getBlockOrThrow.ts (100%) rename packages/{council-core => council-js}/src/utils/getEventsWithSplitAndRetry.ts (100%) rename packages/{council-core => council-js}/src/utils/getOrSet.ts (100%) rename packages/{council-core => council-js}/src/utils/getVaultsWithPower.ts (100%) rename packages/{council-core => council-js}/tsconfig.json (100%) rename packages/{council-core => council-js}/tsup.config.ts (100%) rename packages/{council-core => council-js}/typedoc.json (100%) rename packages/{council-core => council-js}/vitest.config.ts (100%) diff --git a/apps/council-ui/src/ui/vaults/gscVault/hooks/useJoinGsc.ts b/apps/council-ui/src/ui/vaults/gscVault/hooks/useJoinGsc.ts index d4d497b8..70dbf095 100644 --- a/apps/council-ui/src/ui/vaults/gscVault/hooks/useJoinGsc.ts +++ b/apps/council-ui/src/ui/vaults/gscVault/hooks/useJoinGsc.ts @@ -1,4 +1,4 @@ -import { getVaultsWithPower } from "@delvtech/council-core"; +import { getVaultsWithPower } from "@delvtech/council-js"; import { MutationStatus } from "@tanstack/react-query"; import { useWrite } from "src/ui/contract/hooks/useWrite"; import { useReadCoreVoting } from "src/ui/council/hooks/useReadCoreVoting"; diff --git a/apps/council-ui/src/ui/vaults/hooks/useVotingPowerByVault.ts b/apps/council-ui/src/ui/vaults/hooks/useVotingPowerByVault.ts index 25f1e520..c7a638a0 100644 --- a/apps/council-ui/src/ui/vaults/hooks/useVotingPowerByVault.ts +++ b/apps/council-ui/src/ui/vaults/hooks/useVotingPowerByVault.ts @@ -1,4 +1,4 @@ -import { BlockLike, ReadVotingVault } from "@delvtech/council-core"; +import { BlockLike, ReadVotingVault } from "@delvtech/council-js"; import { FetchStatus, QueryStatus, useQuery } from "@tanstack/react-query"; import { useCouncilConfig } from "src/ui/config/hooks/useCouncilConfig"; import { useReadCouncil } from "src/ui/council/hooks/useReadCouncil"; diff --git a/packages/council-core/.env.example b/packages/council-js/.env.example similarity index 100% rename from packages/council-core/.env.example rename to packages/council-js/.env.example diff --git a/packages/council-core/.eslintignore b/packages/council-js/.eslintignore similarity index 100% rename from packages/council-core/.eslintignore rename to packages/council-js/.eslintignore diff --git a/packages/council-core/.eslintrc b/packages/council-js/.eslintrc similarity index 100% rename from packages/council-core/.eslintrc rename to packages/council-js/.eslintrc diff --git a/packages/council-core/.gitignore b/packages/council-js/.gitignore similarity index 100% rename from packages/council-core/.gitignore rename to packages/council-js/.gitignore diff --git a/packages/council-core/CHANGELOG.md b/packages/council-js/CHANGELOG.md similarity index 95% rename from packages/council-core/CHANGELOG.md rename to packages/council-js/CHANGELOG.md index 7be9eb7b..8e5877df 100644 --- a/packages/council-core/CHANGELOG.md +++ b/packages/council-js/CHANGELOG.md @@ -1,4 +1,4 @@ -# @delvtech/council-core +# @delvtech/council-js ## 0.1.0 diff --git a/packages/council-core/LICENSE b/packages/council-js/LICENSE similarity index 100% rename from packages/council-core/LICENSE rename to packages/council-js/LICENSE diff --git a/packages/council-core/README.md b/packages/council-js/README.md similarity index 100% rename from packages/council-core/README.md rename to packages/council-js/README.md diff --git a/packages/council-core/package.json b/packages/council-js/package.json similarity index 98% rename from packages/council-core/package.json rename to packages/council-js/package.json index 02ead953..2399d6c3 100644 --- a/packages/council-core/package.json +++ b/packages/council-js/package.json @@ -1,5 +1,5 @@ { - "name": "@delvtech/council-core", + "name": "@delvtech/council-js", "version": "0.1.0", "license": "AGPL-3.0", "type": "module", diff --git a/packages/council-core/src/contract/extend.ts b/packages/council-js/src/contract/extend.ts similarity index 100% rename from packages/council-core/src/contract/extend.ts rename to packages/council-js/src/contract/extend.ts diff --git a/packages/council-core/src/contract/factory.ts b/packages/council-js/src/contract/factory.ts similarity index 100% rename from packages/council-core/src/contract/factory.ts rename to packages/council-js/src/contract/factory.ts diff --git a/packages/council-core/src/errors/BlockNotFound.ts b/packages/council-js/src/errors/BlockNotFound.ts similarity index 100% rename from packages/council-core/src/errors/BlockNotFound.ts rename to packages/council-js/src/errors/BlockNotFound.ts diff --git a/packages/council-core/src/exports/airdrop.ts b/packages/council-js/src/exports/airdrop.ts similarity index 100% rename from packages/council-core/src/exports/airdrop.ts rename to packages/council-js/src/exports/airdrop.ts diff --git a/packages/council-core/src/exports/contract.ts b/packages/council-js/src/exports/contract.ts similarity index 100% rename from packages/council-core/src/exports/contract.ts rename to packages/council-js/src/exports/contract.ts diff --git a/packages/council-core/src/exports/council.ts b/packages/council-js/src/exports/council.ts similarity index 100% rename from packages/council-core/src/exports/council.ts rename to packages/council-js/src/exports/council.ts diff --git a/packages/council-core/src/exports/errors.ts b/packages/council-js/src/exports/errors.ts similarity index 100% rename from packages/council-core/src/exports/errors.ts rename to packages/council-js/src/exports/errors.ts diff --git a/packages/council-core/src/exports/index.ts b/packages/council-js/src/exports/index.ts similarity index 100% rename from packages/council-core/src/exports/index.ts rename to packages/council-js/src/exports/index.ts diff --git a/packages/council-core/src/exports/model.ts b/packages/council-js/src/exports/model.ts similarity index 100% rename from packages/council-core/src/exports/model.ts rename to packages/council-js/src/exports/model.ts diff --git a/packages/council-core/src/exports/proposal.ts b/packages/council-js/src/exports/proposal.ts similarity index 100% rename from packages/council-core/src/exports/proposal.ts rename to packages/council-js/src/exports/proposal.ts diff --git a/packages/council-core/src/exports/token.ts b/packages/council-js/src/exports/token.ts similarity index 100% rename from packages/council-core/src/exports/token.ts rename to packages/council-js/src/exports/token.ts diff --git a/packages/council-core/src/exports/utils.ts b/packages/council-js/src/exports/utils.ts similarity index 100% rename from packages/council-core/src/exports/utils.ts rename to packages/council-js/src/exports/utils.ts diff --git a/packages/council-core/src/exports/vaults.ts b/packages/council-js/src/exports/vaults.ts similarity index 100% rename from packages/council-core/src/exports/vaults.ts rename to packages/council-js/src/exports/vaults.ts diff --git a/packages/council-core/src/exports/vote.ts b/packages/council-js/src/exports/vote.ts similarity index 100% rename from packages/council-core/src/exports/vote.ts rename to packages/council-js/src/exports/vote.ts diff --git a/packages/council-core/src/exports/voter.ts b/packages/council-js/src/exports/voter.ts similarity index 100% rename from packages/council-core/src/exports/voter.ts rename to packages/council-js/src/exports/voter.ts diff --git a/packages/council-core/src/exports/voting.ts b/packages/council-js/src/exports/voting.ts similarity index 100% rename from packages/council-core/src/exports/voting.ts rename to packages/council-js/src/exports/voting.ts diff --git a/packages/council-core/src/models/Model.ts b/packages/council-js/src/models/Model.ts similarity index 100% rename from packages/council-core/src/models/Model.ts rename to packages/council-js/src/models/Model.ts diff --git a/packages/council-core/src/models/ReadVote.ts b/packages/council-js/src/models/ReadVote.ts similarity index 100% rename from packages/council-core/src/models/ReadVote.ts rename to packages/council-js/src/models/ReadVote.ts diff --git a/packages/council-core/src/models/ReadVoter.ts b/packages/council-js/src/models/ReadVoter.ts similarity index 100% rename from packages/council-core/src/models/ReadVoter.ts rename to packages/council-js/src/models/ReadVoter.ts diff --git a/packages/council-core/src/models/airdrop/ReadAirdrop.ts b/packages/council-js/src/models/airdrop/ReadAirdrop.ts similarity index 100% rename from packages/council-core/src/models/airdrop/ReadAirdrop.ts rename to packages/council-js/src/models/airdrop/ReadAirdrop.ts diff --git a/packages/council-core/src/models/airdrop/ReadWriteAirdrop.ts b/packages/council-js/src/models/airdrop/ReadWriteAirdrop.ts similarity index 100% rename from packages/council-core/src/models/airdrop/ReadWriteAirdrop.ts rename to packages/council-js/src/models/airdrop/ReadWriteAirdrop.ts diff --git a/packages/council-core/src/models/airdrop/types.ts b/packages/council-js/src/models/airdrop/types.ts similarity index 100% rename from packages/council-core/src/models/airdrop/types.ts rename to packages/council-js/src/models/airdrop/types.ts diff --git a/packages/council-core/src/models/coreVoting/ReadCoreVoting.ts b/packages/council-js/src/models/coreVoting/ReadCoreVoting.ts similarity index 100% rename from packages/council-core/src/models/coreVoting/ReadCoreVoting.ts rename to packages/council-js/src/models/coreVoting/ReadCoreVoting.ts diff --git a/packages/council-core/src/models/coreVoting/ReadWriteCoreVoting.ts b/packages/council-js/src/models/coreVoting/ReadWriteCoreVoting.ts similarity index 100% rename from packages/council-core/src/models/coreVoting/ReadWriteCoreVoting.ts rename to packages/council-js/src/models/coreVoting/ReadWriteCoreVoting.ts diff --git a/packages/council-core/src/models/coreVoting/constants.ts b/packages/council-js/src/models/coreVoting/constants.ts similarity index 100% rename from packages/council-core/src/models/coreVoting/constants.ts rename to packages/council-js/src/models/coreVoting/constants.ts diff --git a/packages/council-core/src/models/coreVoting/types.ts b/packages/council-js/src/models/coreVoting/types.ts similarity index 100% rename from packages/council-core/src/models/coreVoting/types.ts rename to packages/council-js/src/models/coreVoting/types.ts diff --git a/packages/council-core/src/models/council/ReadCouncil.ts b/packages/council-js/src/models/council/ReadCouncil.ts similarity index 100% rename from packages/council-core/src/models/council/ReadCouncil.ts rename to packages/council-js/src/models/council/ReadCouncil.ts diff --git a/packages/council-core/src/models/council/ReadWriteCouncil.ts b/packages/council-js/src/models/council/ReadWriteCouncil.ts similarity index 100% rename from packages/council-core/src/models/council/ReadWriteCouncil.ts rename to packages/council-js/src/models/council/ReadWriteCouncil.ts diff --git a/packages/council-core/src/models/proposal/ReadProposal.ts b/packages/council-js/src/models/proposal/ReadProposal.ts similarity index 100% rename from packages/council-core/src/models/proposal/ReadProposal.ts rename to packages/council-js/src/models/proposal/ReadProposal.ts diff --git a/packages/council-core/src/models/proposal/ReadWriteProposal.ts b/packages/council-js/src/models/proposal/ReadWriteProposal.ts similarity index 100% rename from packages/council-core/src/models/proposal/ReadWriteProposal.ts rename to packages/council-js/src/models/proposal/ReadWriteProposal.ts diff --git a/packages/council-core/src/models/token/ReadToken.ts b/packages/council-js/src/models/token/ReadToken.ts similarity index 100% rename from packages/council-core/src/models/token/ReadToken.ts rename to packages/council-js/src/models/token/ReadToken.ts diff --git a/packages/council-core/src/models/token/ReadWriteMockToken.ts b/packages/council-js/src/models/token/ReadWriteMockToken.ts similarity index 100% rename from packages/council-core/src/models/token/ReadWriteMockToken.ts rename to packages/council-js/src/models/token/ReadWriteMockToken.ts diff --git a/packages/council-core/src/models/token/ReadWriteToken.ts b/packages/council-js/src/models/token/ReadWriteToken.ts similarity index 100% rename from packages/council-core/src/models/token/ReadWriteToken.ts rename to packages/council-js/src/models/token/ReadWriteToken.ts diff --git a/packages/council-core/src/models/token/types.ts b/packages/council-js/src/models/token/types.ts similarity index 100% rename from packages/council-core/src/models/token/types.ts rename to packages/council-js/src/models/token/types.ts diff --git a/packages/council-core/src/models/votingVault/ReadVotingVault.ts b/packages/council-js/src/models/votingVault/ReadVotingVault.ts similarity index 100% rename from packages/council-core/src/models/votingVault/ReadVotingVault.ts rename to packages/council-js/src/models/votingVault/ReadVotingVault.ts diff --git a/packages/council-core/src/models/votingVault/gscVault/ReadGscVault.ts b/packages/council-js/src/models/votingVault/gscVault/ReadGscVault.ts similarity index 100% rename from packages/council-core/src/models/votingVault/gscVault/ReadGscVault.ts rename to packages/council-js/src/models/votingVault/gscVault/ReadGscVault.ts diff --git a/packages/council-core/src/models/votingVault/gscVault/ReadWriteGscVault.ts b/packages/council-js/src/models/votingVault/gscVault/ReadWriteGscVault.ts similarity index 100% rename from packages/council-core/src/models/votingVault/gscVault/ReadWriteGscVault.ts rename to packages/council-js/src/models/votingVault/gscVault/ReadWriteGscVault.ts diff --git a/packages/council-core/src/models/votingVault/gscVault/types.ts b/packages/council-js/src/models/votingVault/gscVault/types.ts similarity index 100% rename from packages/council-core/src/models/votingVault/gscVault/types.ts rename to packages/council-js/src/models/votingVault/gscVault/types.ts diff --git a/packages/council-core/src/models/votingVault/lockingVault/ReadLockingVault.test.ts b/packages/council-js/src/models/votingVault/lockingVault/ReadLockingVault.test.ts similarity index 100% rename from packages/council-core/src/models/votingVault/lockingVault/ReadLockingVault.test.ts rename to packages/council-js/src/models/votingVault/lockingVault/ReadLockingVault.test.ts diff --git a/packages/council-core/src/models/votingVault/lockingVault/ReadLockingVault.ts b/packages/council-js/src/models/votingVault/lockingVault/ReadLockingVault.ts similarity index 100% rename from packages/council-core/src/models/votingVault/lockingVault/ReadLockingVault.ts rename to packages/council-js/src/models/votingVault/lockingVault/ReadLockingVault.ts diff --git a/packages/council-core/src/models/votingVault/lockingVault/ReadWriteLockingVault.ts b/packages/council-js/src/models/votingVault/lockingVault/ReadWriteLockingVault.ts similarity index 100% rename from packages/council-core/src/models/votingVault/lockingVault/ReadWriteLockingVault.ts rename to packages/council-js/src/models/votingVault/lockingVault/ReadWriteLockingVault.ts diff --git a/packages/council-core/src/models/votingVault/lockingVault/types.ts b/packages/council-js/src/models/votingVault/lockingVault/types.ts similarity index 100% rename from packages/council-core/src/models/votingVault/lockingVault/types.ts rename to packages/council-js/src/models/votingVault/lockingVault/types.ts diff --git a/packages/council-core/src/models/votingVault/types.ts b/packages/council-js/src/models/votingVault/types.ts similarity index 100% rename from packages/council-core/src/models/votingVault/types.ts rename to packages/council-js/src/models/votingVault/types.ts diff --git a/packages/council-core/src/models/votingVault/vestingVault/ReadVestingVault.ts b/packages/council-js/src/models/votingVault/vestingVault/ReadVestingVault.ts similarity index 100% rename from packages/council-core/src/models/votingVault/vestingVault/ReadVestingVault.ts rename to packages/council-js/src/models/votingVault/vestingVault/ReadVestingVault.ts diff --git a/packages/council-core/src/models/votingVault/vestingVault/ReadWriteVestingVault.ts b/packages/council-js/src/models/votingVault/vestingVault/ReadWriteVestingVault.ts similarity index 100% rename from packages/council-core/src/models/votingVault/vestingVault/ReadWriteVestingVault.ts rename to packages/council-js/src/models/votingVault/vestingVault/ReadWriteVestingVault.ts diff --git a/packages/council-core/src/models/votingVault/vestingVault/types.ts b/packages/council-js/src/models/votingVault/vestingVault/types.ts similarity index 100% rename from packages/council-core/src/models/votingVault/vestingVault/types.ts rename to packages/council-js/src/models/votingVault/vestingVault/types.ts diff --git a/packages/council-core/src/test/stubContractFactory.ts b/packages/council-js/src/test/stubContractFactory.ts similarity index 100% rename from packages/council-core/src/test/stubContractFactory.ts rename to packages/council-js/src/test/stubContractFactory.ts diff --git a/packages/council-core/src/types.ts b/packages/council-js/src/types.ts similarity index 100% rename from packages/council-core/src/types.ts rename to packages/council-js/src/types.ts diff --git a/packages/council-core/src/utils/blockToReadOptions.ts b/packages/council-js/src/utils/blockToReadOptions.ts similarity index 100% rename from packages/council-core/src/utils/blockToReadOptions.ts rename to packages/council-js/src/utils/blockToReadOptions.ts diff --git a/packages/council-core/src/utils/formatUnits.ts b/packages/council-js/src/utils/formatUnits.ts similarity index 100% rename from packages/council-core/src/utils/formatUnits.ts rename to packages/council-js/src/utils/formatUnits.ts diff --git a/packages/council-core/src/utils/getBlockOrThrow.ts b/packages/council-js/src/utils/getBlockOrThrow.ts similarity index 100% rename from packages/council-core/src/utils/getBlockOrThrow.ts rename to packages/council-js/src/utils/getBlockOrThrow.ts diff --git a/packages/council-core/src/utils/getEventsWithSplitAndRetry.ts b/packages/council-js/src/utils/getEventsWithSplitAndRetry.ts similarity index 100% rename from packages/council-core/src/utils/getEventsWithSplitAndRetry.ts rename to packages/council-js/src/utils/getEventsWithSplitAndRetry.ts diff --git a/packages/council-core/src/utils/getOrSet.ts b/packages/council-js/src/utils/getOrSet.ts similarity index 100% rename from packages/council-core/src/utils/getOrSet.ts rename to packages/council-js/src/utils/getOrSet.ts diff --git a/packages/council-core/src/utils/getVaultsWithPower.ts b/packages/council-js/src/utils/getVaultsWithPower.ts similarity index 100% rename from packages/council-core/src/utils/getVaultsWithPower.ts rename to packages/council-js/src/utils/getVaultsWithPower.ts diff --git a/packages/council-core/tsconfig.json b/packages/council-js/tsconfig.json similarity index 100% rename from packages/council-core/tsconfig.json rename to packages/council-js/tsconfig.json diff --git a/packages/council-core/tsup.config.ts b/packages/council-js/tsup.config.ts similarity index 100% rename from packages/council-core/tsup.config.ts rename to packages/council-js/tsup.config.ts diff --git a/packages/council-core/typedoc.json b/packages/council-js/typedoc.json similarity index 100% rename from packages/council-core/typedoc.json rename to packages/council-js/typedoc.json diff --git a/packages/council-core/vitest.config.ts b/packages/council-js/vitest.config.ts similarity index 100% rename from packages/council-core/vitest.config.ts rename to packages/council-js/vitest.config.ts From 3d93ccb2b3110187f9a991b7e3f4be637d0b9473 Mon Sep 17 00:00:00 2001 From: Ryan Goree Date: Sat, 8 Feb 2025 18:19:59 -0600 Subject: [PATCH 004/146] Reset version --- packages/council-js/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/council-js/package.json b/packages/council-js/package.json index 2399d6c3..c98468c2 100644 --- a/packages/council-js/package.json +++ b/packages/council-js/package.json @@ -1,6 +1,6 @@ { "name": "@delvtech/council-js", - "version": "0.1.0", + "version": "0.0.0", "license": "AGPL-3.0", "type": "module", "scripts": { From bc3fa0b962b2d7ba4826ce0dc40b76695627de25 Mon Sep 17 00:00:00 2001 From: Ryan Goree Date: Sat, 8 Feb 2025 18:28:55 -0600 Subject: [PATCH 005/146] Update sdk package.json --- packages/council-js/package.json | 115 +-- yarn.lock | 1169 ++++++++++++++++++++---------- 2 files changed, 800 insertions(+), 484 deletions(-) diff --git a/packages/council-js/package.json b/packages/council-js/package.json index c98468c2..1f6d533e 100644 --- a/packages/council-js/package.json +++ b/packages/council-js/package.json @@ -12,124 +12,29 @@ "test:watch": "vitest --reporter=verbose", "typecheck": "tsc --noEmit" }, - "peerDependencies": { - "@delvtech/evm-client": "^0.5.1" - }, "dependencies": { - "@delvtech/council-artifacts": "^0.1.0", - "big.js": "^6.2.1", - "fast-json-stable-stringify": "^2.1.0", - "lru-cache": "^10.2.0" + "@delvtech/drift": "^0.1.1", + "@delvtech/fixed-point-wasm": "^0.0.7", + "@delvtech/council-artifacts": "^0.1.0" }, "devDependencies": { "@council/eslint-config": "*", "@council/tsconfig": "*", - "@delvtech/evm-client": "^0.5.1", - "@types/big.js": "^6.2.2", - "abitype": "^1.0.0", - "dotenv": "^16.4.5", - "nodemon": "^3.0.3", + "dotenv": "^16.4.7", + "nodemon": "^3.1.9", "sinon": "^17.0.1", "ts-node": "^10.9.2", "tsconfig-paths": "^4.2.0", - "tsup": "^8.0.2", - "typedoc": "^0.25.8", - "typedoc-plugin-markdown": "^3.17.1", - "typescript": "^5.3.3", - "vitest": "^1.3.1" + "tsup": "^8.3.6", + "typedoc": "^0.27.6", + "typedoc-plugin-markdown": "^4.4.1", + "typescript": "^5.7.3", + "vitest": "^3.0.5" }, "exports": { ".": { "types": "./dist/index.d.ts", "default": "./dist/index.js" - }, - "./airdrop": { - "types": "./dist/airdrop.d.ts", - "default": "./dist/airdrop.js" - }, - "./contract": { - "types": "./dist/contract.d.ts", - "default": "./dist/contract.js" - }, - "./council": { - "types": "./dist/council.d.ts", - "default": "./dist/council.js" - }, - "./errors": { - "types": "./dist/errors.d.ts", - "default": "./dist/errors.js" - }, - "./model": { - "types": "./dist/model.d.ts", - "default": "./dist/model.js" - }, - "./proposal": { - "types": "./dist/proposal.d.ts", - "default": "./dist/proposal.js" - }, - "./token": { - "types": "./dist/token.d.ts", - "default": "./dist/token.js" - }, - "./utils": { - "types": "./dist/utils.d.ts", - "default": "./dist/utils.js" - }, - "./vaults": { - "types": "./dist/vaults.d.ts", - "default": "./dist/vaults.js" - }, - "./vote": { - "types": "./dist/vote.d.ts", - "default": "./dist/vote.js" - }, - "./voter": { - "types": "./dist/voter.d.ts", - "default": "./dist/voter.js" - }, - "./voting": { - "types": "./dist/voting.d.ts", - "default": "./dist/voting.js" - } - }, - "typesVersions": { - "*": { - "airdrop": [ - "./dist/airdrop.d.ts" - ], - "contract": [ - "./dist/contract.d.ts" - ], - "council": [ - "./dist/council.d.ts" - ], - "error": [ - "./dist/error.d.ts" - ], - "model": [ - "./dist/model.d.ts" - ], - "proposal": [ - "./dist/proposal.d.ts" - ], - "token": [ - "./dist/token.d.ts" - ], - "utils": [ - "./dist/utils.d.ts" - ], - "vaults": [ - "./dist/vaults.d.ts" - ], - "vote": [ - "./dist/vote.d.ts" - ], - "voter": [ - "./dist/voter.d.ts" - ], - "voting": [ - "./dist/voting.d.ts" - ] } }, "main": "dist/index.js", diff --git a/yarn.lock b/yarn.lock index d6cbde6b..204749a8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -22,6 +22,11 @@ resolved "https://registry.yarnpkg.com/@adraffy/ens-normalize/-/ens-normalize-1.9.0.tgz#223572538f6bea336750039bb43a4016dcc8182d" integrity sha512-iowxq3U30sghZotgl4s/oJRci6WPBfNO5YYgk2cIOMCHr3LeGPcsZjCEr+33Q4N+oV3OABDAtA+pyvWjbvBifQ== +"@adraffy/ens-normalize@^1.10.1": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@adraffy/ens-normalize/-/ens-normalize-1.11.0.tgz#42cc67c5baa407ac25059fcd7d405cc5ecdb0c33" + integrity sha512-/3DDPKHqqIqxUULp8yP4zODUY1i+2xvVWsv8A79xGWdCAG+8sb0hRh0Rk2QyOJUnnbyPUAZYcpBuRe3nS2OIUg== + "@alloc/quick-lru@^5.2.0": version "5.2.0" resolved "https://registry.yarnpkg.com/@alloc/quick-lru/-/quick-lru-5.2.0.tgz#7bf68b20c0a350f936915fcae06f58e32007ce30" @@ -470,12 +475,33 @@ dependencies: "@jridgewell/trace-mapping" "0.3.9" -"@delvtech/evm-client-ethers@^0.5.1": - version "0.5.1" - resolved "https://registry.yarnpkg.com/@delvtech/evm-client-ethers/-/evm-client-ethers-0.5.1.tgz#b015846bda225d444a2f6103c25c06c223c211ec" - integrity sha512-D8lqY/EOXMPO+kQWHck1XeRJOpEwznveX9dK2vYsQA8d997VkuqSvQnc8FEB+cKf17qRGU14cDxPSjmzPnBawg== +"@delvtech/council-core@0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@delvtech/council-core/-/council-core-0.1.0.tgz#71afcb982d9654a99e2846157704025950ae753a" + integrity sha512-jIRtEXY8sVxO4UBI24R69xbnYCNex2SkDouZ2puRx1m7gwITY5RobsgV+Dq5wgvZzT6NNuemQg3X4opKocEfXA== dependencies: - "@delvtech/evm-client" "0.5.1" + "@delvtech/council-artifacts" "^0.1.0" + big.js "^6.2.1" + fast-json-stable-stringify "^2.1.0" + lru-cache "^10.2.0" + +"@delvtech/council-viem@^0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@delvtech/council-viem/-/council-viem-0.1.0.tgz#8a5bd9240c0f781b6cc71e6ac3e0b6485f85e107" + integrity sha512-B9IUZ3fnVN5BklM29HAPYbv7vOZdFSZcfP26KxyM6salOcgvQoYlITNF5fU7iN/L5ISJ9mIUUxuAeBHauGNrDQ== + dependencies: + "@delvtech/council-core" "0.1.0" + "@delvtech/evm-client-viem" "^0.6.1" + +"@delvtech/drift@^0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@delvtech/drift/-/drift-0.1.1.tgz#c5549758b58890b843e9648c1295b8c675ab9dd2" + integrity sha512-/Rv50QsM3TKg4EfwzPmmAsEWnIJgFXNtqm+BYs1IQhoyqL9dxXf4EoFcQ623IqkTjTQJPrP69w8HzT7rc+S/gQ== + dependencies: + lodash.ismatch "^4.4.0" + lru-cache "^11.0.2" + ox "^0.6.9" + safe-stable-stringify "^2.5.0" "@delvtech/evm-client-viem@^0.6.1": version "0.6.1" @@ -484,7 +510,7 @@ dependencies: "@delvtech/evm-client" "0.5.1" -"@delvtech/evm-client@0.5.1", "@delvtech/evm-client@^0.5.1": +"@delvtech/evm-client@0.5.1": version "0.5.1" resolved "https://registry.yarnpkg.com/@delvtech/evm-client/-/evm-client-0.5.1.tgz#b69bd04ecb9f1690c1ce94acb7362e4d30b9e1e5" integrity sha512-Ixx7coKko1l9i2CkrrkhzRVnxzf+b3ROEppWvN7Q0+Gx3DLq1lq8oorXjZb5dZhs5K07LtJM7sUJLztxx8BIEA== @@ -494,6 +520,11 @@ lodash.ismatch "^4.4.0" lru-cache "^10.0.1" +"@delvtech/fixed-point-wasm@^0.0.7": + version "0.0.7" + resolved "https://registry.yarnpkg.com/@delvtech/fixed-point-wasm/-/fixed-point-wasm-0.0.7.tgz#616e7e5056eaa6f9c4f0d91445d4e8dbc95a9a08" + integrity sha512-cGMlCccGqVMiPBtA1vvic/fc5ZoKBcYun9qma/MktKAn92obhbs0ib6it0Ev2mCD+pwKLOY0Ar+kIqWncEkq4A== + "@emotion/babel-plugin@^11.11.0": version "11.11.0" resolved "https://registry.yarnpkg.com/@emotion/babel-plugin/-/babel-plugin-11.11.0.tgz#c2d872b6a7767a9d176d007f5b31f7d504bb5d6c" @@ -658,116 +689,241 @@ resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz#d1bc06aedb6936b3b6d313bf809a5a40387d2b7f" integrity sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA== +"@esbuild/aix-ppc64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.24.2.tgz#38848d3e25afe842a7943643cbcd387cc6e13461" + integrity sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA== + "@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-arm64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.24.2.tgz#f592957ae8b5643129fa889c79e69cd8669bb894" + integrity sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg== + "@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-arm@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.24.2.tgz#72d8a2063aa630308af486a7e5cbcd1e134335b3" + integrity sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q== + "@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/android-x64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.24.2.tgz#9a7713504d5f04792f33be9c197a882b2d88febb" + integrity sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw== + "@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-arm64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.24.2.tgz#02ae04ad8ebffd6e2ea096181b3366816b2b5936" + integrity sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA== + "@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/darwin-x64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.24.2.tgz#9ec312bc29c60e1b6cecadc82bd504d8adaa19e9" + integrity sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA== + "@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-arm64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.24.2.tgz#5e82f44cb4906d6aebf24497d6a068cfc152fa00" + integrity sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg== + "@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/freebsd-x64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.24.2.tgz#3fb1ce92f276168b75074b4e51aa0d8141ecce7f" + integrity sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q== + "@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-arm64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.24.2.tgz#856b632d79eb80aec0864381efd29de8fd0b1f43" + integrity sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg== + "@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-arm@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.24.2.tgz#c846b4694dc5a75d1444f52257ccc5659021b736" + integrity sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA== + "@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-ia32@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.24.2.tgz#f8a16615a78826ccbb6566fab9a9606cfd4a37d5" + integrity sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw== + "@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-loong64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.24.2.tgz#1c451538c765bf14913512c76ed8a351e18b09fc" + integrity sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ== + "@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-mips64el@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.24.2.tgz#0846edeefbc3d8d50645c51869cc64401d9239cb" + integrity sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw== + "@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-ppc64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.24.2.tgz#8e3fc54505671d193337a36dfd4c1a23b8a41412" + integrity sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw== + "@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-riscv64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.24.2.tgz#6a1e92096d5e68f7bb10a0d64bb5b6d1daf9a694" + integrity sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q== + "@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-s390x@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.24.2.tgz#ab18e56e66f7a3c49cb97d337cd0a6fea28a8577" + integrity sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw== + "@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/linux-x64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.24.2.tgz#8140c9b40da634d380b0b29c837a0b4267aff38f" + integrity sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q== + +"@esbuild/netbsd-arm64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.24.2.tgz#65f19161432bafb3981f5f20a7ff45abb2e708e6" + integrity sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw== + "@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/netbsd-x64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.24.2.tgz#7a3a97d77abfd11765a72f1c6f9b18f5396bcc40" + integrity sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw== + +"@esbuild/openbsd-arm64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.24.2.tgz#58b00238dd8f123bfff68d3acc53a6ee369af89f" + integrity sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A== + "@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/openbsd-x64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.24.2.tgz#0ac843fda0feb85a93e288842936c21a00a8a205" + integrity sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA== + "@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/sunos-x64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.24.2.tgz#8b7aa895e07828d36c422a4404cc2ecf27fb15c6" + integrity sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig== + "@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-arm64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.24.2.tgz#c023afb647cabf0c3ed13f0eddfc4f1d61c66a85" + integrity sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ== + "@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-ia32@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.24.2.tgz#96c356132d2dda990098c8b8b951209c3cd743c2" + integrity sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA== + "@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== +"@esbuild/win32-x64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.24.2.tgz#34aa0b52d0fbb1a654b596acfa595f0c7b77a77b" + integrity sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg== + "@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": version "4.4.0" resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" @@ -1199,6 +1355,15 @@ resolved "https://registry.yarnpkg.com/@floating-ui/utils/-/utils-0.2.1.tgz#16308cea045f0fc777b6ff20a9f25474dd8293d2" integrity sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q== +"@gerrit0/mini-shiki@^1.24.0": + version "1.27.2" + resolved "https://registry.yarnpkg.com/@gerrit0/mini-shiki/-/mini-shiki-1.27.2.tgz#cf2a9fcb08a6581c78fc94821f0c854ec4b9f899" + integrity sha512-GeWyHz8ao2gBiUW4OJnQDxXQnFgZQwwQk05t/CVVgNBN7/rK8XZ7xY6YhLVv9tH3VppWWmr9DCl3MwemB/i+Og== + dependencies: + "@shikijs/engine-oniguruma" "^1.27.2" + "@shikijs/types" "^1.27.2" + "@shikijs/vscode-textmate" "^10.0.1" + "@graphql-typed-document-node/core@^3.2.0": version "3.2.0" resolved "https://registry.yarnpkg.com/@graphql-typed-document-node/core/-/core-3.2.0.tgz#5f3d96ec6b2354ad6d8a28bf216a1d97b5426861" @@ -1257,13 +1422,6 @@ wrap-ansi "^8.1.0" wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" -"@jest/schemas@^29.6.3": - version "29.6.3" - resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.3.tgz#430b5ce8a4e0044a7e3819663305a7b3091c8e03" - integrity sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA== - dependencies: - "@sinclair/typebox" "^0.27.8" - "@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": version "0.3.3" resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" @@ -1283,11 +1441,16 @@ resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== -"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.4.15": +"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": version "1.4.15" resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== +"@jridgewell/sourcemap-codec@^1.5.0": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a" + integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== + "@jridgewell/trace-mapping@0.3.9": version "0.3.9" resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" @@ -1720,6 +1883,13 @@ dependencies: "@noble/hashes" "1.3.3" +"@noble/curves@^1.6.0", "@noble/curves@~1.8.1": + version "1.8.1" + resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.8.1.tgz#19bc3970e205c99e4bdb1c64a4785706bce497ff" + integrity sha512-warwspo+UYUPep0Q+vtdVB4Ugn8GGQj8iyB3gnRWsztmUHTI3S1nhdiWNsPUGL0vud7JlRRk1XEu7Lq1KGTnMQ== + dependencies: + "@noble/hashes" "1.7.1" + "@noble/hashes@1.2.0", "@noble/hashes@~1.2.0": version "1.2.0" resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.2.0.tgz#a3150eeb09cc7ab207ebf6d7b9ad311a9bdbed12" @@ -1735,6 +1905,11 @@ resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.3.tgz#39908da56a4adc270147bb07968bf3b16cfe1699" integrity sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA== +"@noble/hashes@1.7.1", "@noble/hashes@^1.5.0", "@noble/hashes@~1.7.1": + version "1.7.1" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.7.1.tgz#5738f6d765710921e7a751e00c20ae091ed8db0f" + integrity sha512-B8XBPsn4vT/KJAGqDzbwztd+6Yte3P4V7iafm24bxgDe/mlRuK6xmWPuCNrKt2vDafZ8MfJLlchDG/vYafQEjQ== + "@noble/secp256k1@1.7.1", "@noble/secp256k1@~1.7.0": version "1.7.1" resolved "https://registry.yarnpkg.com/@noble/secp256k1/-/secp256k1-1.7.1.tgz#b251c70f824ce3ca7f8dc3df08d58f005cc0507c" @@ -2103,66 +2278,161 @@ dependencies: merge-options "^3.0.4" +"@rollup/rollup-android-arm-eabi@4.34.6": + version "4.34.6" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.34.6.tgz#9b726b4dcafb9332991e9ca49d54bafc71d9d87f" + integrity sha512-+GcCXtOQoWuC7hhX1P00LqjjIiS/iOouHXhMdiDSnq/1DGTox4SpUvO52Xm+div6+106r+TcvOeo/cxvyEyTgg== + "@rollup/rollup-android-arm-eabi@4.9.6": version "4.9.6" resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.9.6.tgz#66b8d9cb2b3a474d115500f9ebaf43e2126fe496" integrity sha512-MVNXSSYN6QXOulbHpLMKYi60ppyO13W9my1qogeiAqtjb2yR4LSmfU2+POvDkLzhjYLXz9Rf9+9a3zFHW1Lecg== +"@rollup/rollup-android-arm64@4.34.6": + version "4.34.6" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.34.6.tgz#88326ff46168a47851077ca0bf0c442689ec088f" + integrity sha512-E8+2qCIjciYUnCa1AiVF1BkRgqIGW9KzJeesQqVfyRITGQN+dFuoivO0hnro1DjT74wXLRZ7QF8MIbz+luGaJA== + "@rollup/rollup-android-arm64@4.9.6": version "4.9.6" resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.9.6.tgz#46327d5b86420d2307946bec1535fdf00356e47d" integrity sha512-T14aNLpqJ5wzKNf5jEDpv5zgyIqcpn1MlwCrUXLrwoADr2RkWA0vOWP4XxbO9aiO3dvMCQICZdKeDrFl7UMClw== +"@rollup/rollup-darwin-arm64@4.34.6": + version "4.34.6" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.34.6.tgz#b8fbcc9389bc6fad3334a1d16dbeaaa5637c5772" + integrity sha512-z9Ib+OzqN3DZEjX7PDQMHEhtF+t6Mi2z/ueChQPLS/qUMKY7Ybn5A2ggFoKRNRh1q1T03YTQfBTQCJZiepESAg== + "@rollup/rollup-darwin-arm64@4.9.6": version "4.9.6" resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.9.6.tgz#166987224d2f8b1e2fd28ee90c447d52271d5e90" integrity sha512-CqNNAyhRkTbo8VVZ5R85X73H3R5NX9ONnKbXuHisGWC0qRbTTxnF1U4V9NafzJbgGM0sHZpdO83pLPzq8uOZFw== +"@rollup/rollup-darwin-x64@4.34.6": + version "4.34.6" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.34.6.tgz#1aa2bcad84c0fb5902e945d88822e17a4f661d51" + integrity sha512-PShKVY4u0FDAR7jskyFIYVyHEPCPnIQY8s5OcXkdU8mz3Y7eXDJPdyM/ZWjkYdR2m0izD9HHWA8sGcXn+Qrsyg== + "@rollup/rollup-darwin-x64@4.9.6": version "4.9.6" resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.9.6.tgz#a2e6e096f74ccea6e2f174454c26aef6bcdd1274" integrity sha512-zRDtdJuRvA1dc9Mp6BWYqAsU5oeLixdfUvkTHuiYOHwqYuQ4YgSmi6+/lPvSsqc/I0Omw3DdICx4Tfacdzmhog== +"@rollup/rollup-freebsd-arm64@4.34.6": + version "4.34.6" + resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.34.6.tgz#29c54617e0929264dcb6416597d6d7481696e49f" + integrity sha512-YSwyOqlDAdKqs0iKuqvRHLN4SrD2TiswfoLfvYXseKbL47ht1grQpq46MSiQAx6rQEN8o8URtpXARCpqabqxGQ== + +"@rollup/rollup-freebsd-x64@4.34.6": + version "4.34.6" + resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.34.6.tgz#a8b58ab7d31882559d93f2d1b5863d9e4b4b2678" + integrity sha512-HEP4CgPAY1RxXwwL5sPFv6BBM3tVeLnshF03HMhJYCNc6kvSqBgTMmsEjb72RkZBAWIqiPUyF1JpEBv5XT9wKQ== + +"@rollup/rollup-linux-arm-gnueabihf@4.34.6": + version "4.34.6" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.34.6.tgz#a844e1978c8b9766b169ecb1cb5cc0d8a3f05930" + integrity sha512-88fSzjC5xeH9S2Vg3rPgXJULkHcLYMkh8faix8DX4h4TIAL65ekwuQMA/g2CXq8W+NJC43V6fUpYZNjaX3+IIg== + "@rollup/rollup-linux-arm-gnueabihf@4.9.6": version "4.9.6" resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.9.6.tgz#09fcd4c55a2d6160c5865fec708a8e5287f30515" integrity sha512-oNk8YXDDnNyG4qlNb6is1ojTOGL/tRhbbKeE/YuccItzerEZT68Z9gHrY3ROh7axDc974+zYAPxK5SH0j/G+QQ== +"@rollup/rollup-linux-arm-musleabihf@4.34.6": + version "4.34.6" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.34.6.tgz#6b44c3b7257985d71b087fcb4ef01325e2fff201" + integrity sha512-wM4ztnutBqYFyvNeR7Av+reWI/enK9tDOTKNF+6Kk2Q96k9bwhDDOlnCUNRPvromlVXo04riSliMBs/Z7RteEg== + +"@rollup/rollup-linux-arm64-gnu@4.34.6": + version "4.34.6" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.34.6.tgz#ebb499cf1720115256d0c9ae7598c90cc2251bc5" + integrity sha512-9RyprECbRa9zEjXLtvvshhw4CMrRa3K+0wcp3KME0zmBe1ILmvcVHnypZ/aIDXpRyfhSYSuN4EPdCCj5Du8FIA== + "@rollup/rollup-linux-arm64-gnu@4.9.6": version "4.9.6" resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.9.6.tgz#19a3c0b6315c747ca9acf86e9b710cc2440f83c9" integrity sha512-Z3O60yxPtuCYobrtzjo0wlmvDdx2qZfeAWTyfOjEDqd08kthDKexLpV97KfAeUXPosENKd8uyJMRDfFMxcYkDQ== +"@rollup/rollup-linux-arm64-musl@4.34.6": + version "4.34.6" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.34.6.tgz#9658221b59d9e5643348f9a52fa5ef35b4dc07b1" + integrity sha512-qTmklhCTyaJSB05S+iSovfo++EwnIEZxHkzv5dep4qoszUMX5Ca4WM4zAVUMbfdviLgCSQOu5oU8YoGk1s6M9Q== + "@rollup/rollup-linux-arm64-musl@4.9.6": version "4.9.6" resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.9.6.tgz#94aaf95fdaf2ad9335983a4552759f98e6b2e850" integrity sha512-gpiG0qQJNdYEVad+1iAsGAbgAnZ8j07FapmnIAQgODKcOTjLEWM9sRb+MbQyVsYCnA0Im6M6QIq6ax7liws6eQ== +"@rollup/rollup-linux-loongarch64-gnu@4.34.6": + version "4.34.6" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.34.6.tgz#19418cc57579a5655af2d850a89d74b3f7e9aa92" + integrity sha512-4Qmkaps9yqmpjY5pvpkfOerYgKNUGzQpFxV6rnS7c/JfYbDSU0y6WpbbredB5cCpLFGJEqYX40WUmxMkwhWCjw== + +"@rollup/rollup-linux-powerpc64le-gnu@4.34.6": + version "4.34.6" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.34.6.tgz#fe0bce7778cb6ce86898c781f3f11369d1a4952c" + integrity sha512-Zsrtux3PuaxuBTX/zHdLaFmcofWGzaWW1scwLU3ZbW/X+hSsFbz9wDIp6XvnT7pzYRl9MezWqEqKy7ssmDEnuQ== + +"@rollup/rollup-linux-riscv64-gnu@4.34.6": + version "4.34.6" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.34.6.tgz#9c158360abf6e6f7794285642ba0898c580291f6" + integrity sha512-aK+Zp+CRM55iPrlyKiU3/zyhgzWBxLVrw2mwiQSYJRobCURb781+XstzvA8Gkjg/hbdQFuDw44aUOxVQFycrAg== + "@rollup/rollup-linux-riscv64-gnu@4.9.6": version "4.9.6" resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.9.6.tgz#160510e63f4b12618af4013bddf1761cf9fc9880" integrity sha512-+uCOcvVmFUYvVDr27aiyun9WgZk0tXe7ThuzoUTAukZJOwS5MrGbmSlNOhx1j80GdpqbOty05XqSl5w4dQvcOA== +"@rollup/rollup-linux-s390x-gnu@4.34.6": + version "4.34.6" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.34.6.tgz#f9113498d22962baacdda008b5587d568b05aa34" + integrity sha512-WoKLVrY9ogmaYPXwTH326+ErlCIgMmsoRSx6bO+l68YgJnlOXhygDYSZe/qbUJCSiCiZAQ+tKm88NcWuUXqOzw== + +"@rollup/rollup-linux-x64-gnu@4.34.6": + version "4.34.6" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.34.6.tgz#aec8d4cdf911cd869a72b8bd00833cb426664e0c" + integrity sha512-Sht4aFvmA4ToHd2vFzwMFaQCiYm2lDFho5rPcvPBT5pCdC+GwHG6CMch4GQfmWTQ1SwRKS0dhDYb54khSrjDWw== + "@rollup/rollup-linux-x64-gnu@4.9.6": version "4.9.6" resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.9.6.tgz#5ac5d068ce0726bd0a96ca260d5bd93721c0cb98" integrity sha512-HUNqM32dGzfBKuaDUBqFB7tP6VMN74eLZ33Q9Y1TBqRDn+qDonkAUyKWwF9BR9unV7QUzffLnz9GrnKvMqC/fw== +"@rollup/rollup-linux-x64-musl@4.34.6": + version "4.34.6" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.34.6.tgz#61c0a146bdd1b5e0dcda33690dd909b321d8f20f" + integrity sha512-zmmpOQh8vXc2QITsnCiODCDGXFC8LMi64+/oPpPx5qz3pqv0s6x46ps4xoycfUiVZps5PFn1gksZzo4RGTKT+A== + "@rollup/rollup-linux-x64-musl@4.9.6": version "4.9.6" resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.9.6.tgz#bafa759ab43e8eab9edf242a8259ffb4f2a57a5d" integrity sha512-ch7M+9Tr5R4FK40FHQk8VnML0Szi2KRujUgHXd/HjuH9ifH72GUmw6lStZBo3c3GB82vHa0ZoUfjfcM7JiiMrQ== +"@rollup/rollup-win32-arm64-msvc@4.34.6": + version "4.34.6" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.34.6.tgz#c6c5bf290a3a459c18871110bc2e7009ce35b15a" + integrity sha512-3/q1qUsO/tLqGBaD4uXsB6coVGB3usxw3qyeVb59aArCgedSF66MPdgRStUd7vbZOsko/CgVaY5fo2vkvPLWiA== + "@rollup/rollup-win32-arm64-msvc@4.9.6": version "4.9.6" resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.9.6.tgz#1cc3416682e5a20d8f088f26657e6e47f8db468e" integrity sha512-VD6qnR99dhmTQ1mJhIzXsRcTBvTjbfbGGwKAHcu+52cVl15AC/kplkhxzW/uT0Xl62Y/meBKDZvoJSJN+vTeGA== +"@rollup/rollup-win32-ia32-msvc@4.34.6": + version "4.34.6" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.34.6.tgz#16ca6bdadc9e054818b9c51f8dac82f6b8afab81" + integrity sha512-oLHxuyywc6efdKVTxvc0135zPrRdtYVjtVD5GUm55I3ODxhU/PwkQFD97z16Xzxa1Fz0AEe4W/2hzRtd+IfpOA== + "@rollup/rollup-win32-ia32-msvc@4.9.6": version "4.9.6" resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.9.6.tgz#7d2251e1aa5e8a1e47c86891fe4547a939503461" integrity sha512-J9AFDq/xiRI58eR2NIDfyVmTYGyIZmRcvcAoJ48oDld/NTR8wyiPUu2X/v1navJ+N/FGg68LEbX3Ejd6l8B7MQ== +"@rollup/rollup-win32-x64-msvc@4.34.6": + version "4.34.6" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.34.6.tgz#f3d03ce2d82723eb089188ea1494a719b09e1561" + integrity sha512-0PVwmgzZ8+TZ9oGBmdZoQVXflbvuwzN/HRclujpl4N/q3i+y0lqLw8n1bXA8ru3sApDjlmONaNAuYr38y1Kr9w== + "@rollup/rollup-win32-x64-msvc@4.9.6": version "4.9.6" resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.9.6.tgz#2c1fb69e02a3f1506f52698cfdc3a8b6386df9a6" @@ -2199,6 +2469,11 @@ resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.5.tgz#1d85d17269fe97694b9c592552dd9e5e33552157" integrity sha512-Brj9FiG2W1MRQSTB212YVPRrcbjkv48FoZi/u4l/zds/ieRrqsh7aUf6CLwkAq61oKXr/ZlTzlY66gLIj3TFTQ== +"@scure/base@~1.2.2", "@scure/base@~1.2.4": + version "1.2.4" + resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.2.4.tgz#002eb571a35d69bdb4c214d0995dff76a8dcd2a9" + integrity sha512-5Yy9czTO47mqz+/J8GM6GIId4umdCk1wc1q8rKERQulIoc8VP9pzDcghv10Tl2E7R96ZUx/PhND3ESYUQX8NuQ== + "@scure/bip32@1.1.5": version "1.1.5" resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.1.5.tgz#d2ccae16dcc2e75bc1d75f5ef3c66a338d1ba300" @@ -2226,6 +2501,15 @@ "@noble/hashes" "~1.3.2" "@scure/base" "~1.1.4" +"@scure/bip32@^1.5.0": + version "1.6.2" + resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.6.2.tgz#093caa94961619927659ed0e711a6e4bf35bffd0" + integrity sha512-t96EPDMbtGgtb7onKKqxRLfE5g05k7uHnHRM2xdE6BP/ZmxaLtPek4J4KfVn/90IQNrU1IOAqMgiDtUdtbe3nw== + dependencies: + "@noble/curves" "~1.8.1" + "@noble/hashes" "~1.7.1" + "@scure/base" "~1.2.2" + "@scure/bip39@1.1.1": version "1.1.1" resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.1.1.tgz#b54557b2e86214319405db819c4b6a370cf340c5" @@ -2250,6 +2534,14 @@ "@noble/hashes" "~1.3.2" "@scure/base" "~1.1.4" +"@scure/bip39@^1.4.0": + version "1.5.4" + resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.5.4.tgz#07fd920423aa671be4540d59bdd344cc1461db51" + integrity sha512-TFM4ni0vKvCfBpohoh+/lY05i9gRbSwXWngAsF4CABQxoaOHijxuaZ2R6cStDQ5CHtHO9aGJTr4ksVJASRRyMA== + dependencies: + "@noble/hashes" "~1.7.1" + "@scure/base" "~1.2.4" + "@sentry/core@5.30.0": version "5.30.0" resolved "https://registry.yarnpkg.com/@sentry/core/-/core-5.30.0.tgz#6b203664f69e75106ee8b5a2fe1d717379b331f3" @@ -2318,6 +2610,27 @@ "@sentry/types" "5.30.0" tslib "^1.9.3" +"@shikijs/engine-oniguruma@^1.27.2": + version "1.29.2" + resolved "https://registry.yarnpkg.com/@shikijs/engine-oniguruma/-/engine-oniguruma-1.29.2.tgz#d879717ced61d44e78feab16f701f6edd75434f1" + integrity sha512-7iiOx3SG8+g1MnlzZVDYiaeHe7Ez2Kf2HrJzdmGwkRisT7r4rak0e655AcM/tF9JG/kg5fMNYlLLKglbN7gBqA== + dependencies: + "@shikijs/types" "1.29.2" + "@shikijs/vscode-textmate" "^10.0.1" + +"@shikijs/types@1.29.2", "@shikijs/types@^1.27.2": + version "1.29.2" + resolved "https://registry.yarnpkg.com/@shikijs/types/-/types-1.29.2.tgz#a93fdb410d1af8360c67bf5fc1d1a68d58e21c4f" + integrity sha512-VJjK0eIijTZf0QSTODEXCqinjBn0joAHQ+aPSBzrv4O2d/QSbsMw+ZeSRx03kV34Hy7NzUvV/7NqfYGRLrASmw== + dependencies: + "@shikijs/vscode-textmate" "^10.0.1" + "@types/hast" "^3.0.4" + +"@shikijs/vscode-textmate@^10.0.1": + version "10.0.1" + resolved "https://registry.yarnpkg.com/@shikijs/vscode-textmate/-/vscode-textmate-10.0.1.tgz#d06d45b67ac5e9b0088e3f67ebd3f25c6c3d711a" + integrity sha512-fTIQwLF+Qhuws31iw7Ncl1R3HUDtGwIipiJ9iU+UsDUwMhegFcQKQHd51nZjb7CArq0MvON8rbgCGQYWHUKAdg== + "@sideway/address@^4.1.5": version "4.1.5" resolved "https://registry.yarnpkg.com/@sideway/address/-/address-4.1.5.tgz#4bc149a0076623ced99ca8208ba780d65a99b9d5" @@ -2335,11 +2648,6 @@ resolved "https://registry.yarnpkg.com/@sideway/pinpoint/-/pinpoint-2.0.0.tgz#cff8ffadc372ad29fd3f78277aeb29e632cc70df" integrity sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ== -"@sinclair/typebox@^0.27.8": - version "0.27.8" - resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" - integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== - "@sinonjs/commons@^2.0.0": version "2.0.0" resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-2.0.0.tgz#fd4ca5b063554307e8327b4564bd56d3b73924a3" @@ -2623,11 +2931,6 @@ dependencies: "@babel/types" "^7.20.7" -"@types/big.js@^6.2.2": - 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@^4.11.3": version "4.11.6" resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-4.11.6.tgz#c306c70d9358aaea33cd4eda092a742b9505967c" @@ -2677,6 +2980,11 @@ resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4" integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== +"@types/estree@1.0.6": + version "1.0.6" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.6.tgz#628effeeae2064a1b4e79f78e81d87b7e5fc7b50" + integrity sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw== + "@types/filesystem@*": version "0.0.35" resolved "https://registry.yarnpkg.com/@types/filesystem/-/filesystem-0.0.35.tgz#6d6766626083e2b397c09bdc57092827120db11d" @@ -2694,6 +3002,13 @@ resolved "https://registry.yarnpkg.com/@types/har-format/-/har-format-1.2.15.tgz#f352493638c2f89d706438a19a9eb300b493b506" integrity sha512-RpQH4rXLuvTXKR0zqHq3go0RVXYv/YVqv4TnPH95VbwUxZdQlK1EtcMvQvMpDngHbt13Csh9Z4qT9AbkiQH5BA== +"@types/hast@^3.0.4": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@types/hast/-/hast-3.0.4.tgz#1d6b39993b82cea6ad783945b0508c25903e15aa" + integrity sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ== + dependencies: + "@types/unist" "*" + "@types/json-schema@^7.0.12": version "7.0.15" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" @@ -2845,6 +3160,11 @@ resolved "https://registry.yarnpkg.com/@types/trusted-types/-/trusted-types-2.0.7.tgz#baccb07a970b91707df3a3e8ba6896c57ead2d11" integrity sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw== +"@types/unist@*": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/unist/-/unist-3.0.3.tgz#acaab0f919ce69cce629c2d4ed2eb4adc1b6c20c" + integrity sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q== + "@typescript-eslint/eslint-plugin@^7.0.2": version "7.0.2" resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.0.2.tgz#c13a34057be425167cc4a765158c46fdf2fd981d" @@ -3075,49 +3395,64 @@ "@types/babel__core" "^7.20.5" react-refresh "^0.14.0" -"@vitest/expect@1.3.1": - version "1.3.1" - resolved "https://registry.yarnpkg.com/@vitest/expect/-/expect-1.3.1.tgz#d4c14b89c43a25fd400a6b941f51ba27fe0cb918" - integrity sha512-xofQFwIzfdmLLlHa6ag0dPV8YsnKOCP1KdAeVVh34vSjN2dcUiXYCD9htu/9eM7t8Xln4v03U9HLxLpPlsXdZw== +"@vitest/expect@3.0.5": + version "3.0.5" + resolved "https://registry.yarnpkg.com/@vitest/expect/-/expect-3.0.5.tgz#aa0acd0976cf56842806e5dcaebd446543966b14" + integrity sha512-nNIOqupgZ4v5jWuQx2DSlHLEs7Q4Oh/7AYwNyE+k0UQzG7tSmjPXShUikn1mpNGzYEN2jJbTvLejwShMitovBA== dependencies: - "@vitest/spy" "1.3.1" - "@vitest/utils" "1.3.1" - chai "^4.3.10" + "@vitest/spy" "3.0.5" + "@vitest/utils" "3.0.5" + chai "^5.1.2" + tinyrainbow "^2.0.0" -"@vitest/runner@1.3.1": - version "1.3.1" - resolved "https://registry.yarnpkg.com/@vitest/runner/-/runner-1.3.1.tgz#e7f96cdf74842934782bfd310eef4b8695bbfa30" - integrity sha512-5FzF9c3jG/z5bgCnjr8j9LNq/9OxV2uEBAITOXfoe3rdZJTdO7jzThth7FXv/6b+kdY65tpRQB7WaKhNZwX+Kg== +"@vitest/mocker@3.0.5": + version "3.0.5" + resolved "https://registry.yarnpkg.com/@vitest/mocker/-/mocker-3.0.5.tgz#8dce3dc4cb0adfd9d554531cea836244f8c36bcd" + integrity sha512-CLPNBFBIE7x6aEGbIjaQAX03ZZlBMaWwAjBdMkIf/cAn6xzLTiM3zYqO/WAbieEjsAZir6tO71mzeHZoodThvw== dependencies: - "@vitest/utils" "1.3.1" - p-limit "^5.0.0" - pathe "^1.1.1" + "@vitest/spy" "3.0.5" + estree-walker "^3.0.3" + magic-string "^0.30.17" -"@vitest/snapshot@1.3.1": - version "1.3.1" - resolved "https://registry.yarnpkg.com/@vitest/snapshot/-/snapshot-1.3.1.tgz#193a5d7febf6ec5d22b3f8c5a093f9e4322e7a88" - integrity sha512-EF++BZbt6RZmOlE3SuTPu/NfwBF6q4ABS37HHXzs2LUVPBLx2QoY/K0fKpRChSo8eLiuxcbCVfqKgx/dplCDuQ== +"@vitest/pretty-format@3.0.5", "@vitest/pretty-format@^3.0.5": + version "3.0.5" + resolved "https://registry.yarnpkg.com/@vitest/pretty-format/-/pretty-format-3.0.5.tgz#10ae6a83ccc1a866e31b2d0c1a7a977ade02eff9" + integrity sha512-CjUtdmpOcm4RVtB+up8r2vVDLR16Mgm/bYdkGFe3Yj/scRfCpbSi2W/BDSDcFK7ohw8UXvjMbOp9H4fByd/cOA== dependencies: - magic-string "^0.30.5" - pathe "^1.1.1" - pretty-format "^29.7.0" + tinyrainbow "^2.0.0" -"@vitest/spy@1.3.1": - version "1.3.1" - resolved "https://registry.yarnpkg.com/@vitest/spy/-/spy-1.3.1.tgz#814245d46d011b99edd1c7528f5725c64e85a88b" - integrity sha512-xAcW+S099ylC9VLU7eZfdT9myV67Nor9w9zhf0mGCYJSO+zM2839tOeROTdikOi/8Qeusffvxb/MyBSOja1Uig== +"@vitest/runner@3.0.5": + version "3.0.5" + resolved "https://registry.yarnpkg.com/@vitest/runner/-/runner-3.0.5.tgz#c5960a1169465a2b9ac21f1d24a4cf1fe67c7501" + integrity sha512-BAiZFityFexZQi2yN4OX3OkJC6scwRo8EhRB0Z5HIGGgd2q+Nq29LgHU/+ovCtd0fOfXj5ZI6pwdlUmC5bpi8A== dependencies: - tinyspy "^2.2.0" + "@vitest/utils" "3.0.5" + pathe "^2.0.2" -"@vitest/utils@1.3.1": - version "1.3.1" - resolved "https://registry.yarnpkg.com/@vitest/utils/-/utils-1.3.1.tgz#7b05838654557544f694a372de767fcc9594d61a" - integrity sha512-d3Waie/299qqRyHTm2DjADeTaNdNSVsnwHPWrs20JMpjh6eiVq7ggggweO8rc4arhf6rRkWuHKwvxGvejUXZZQ== +"@vitest/snapshot@3.0.5": + version "3.0.5" + resolved "https://registry.yarnpkg.com/@vitest/snapshot/-/snapshot-3.0.5.tgz#afd0ae472dc5893b0bb10e3e673ef649958663f4" + integrity sha512-GJPZYcd7v8QNUJ7vRvLDmRwl+a1fGg4T/54lZXe+UOGy47F9yUfE18hRCtXL5aHN/AONu29NGzIXSVFh9K0feA== dependencies: - diff-sequences "^29.6.3" - estree-walker "^3.0.3" - loupe "^2.3.7" - pretty-format "^29.7.0" + "@vitest/pretty-format" "3.0.5" + magic-string "^0.30.17" + pathe "^2.0.2" + +"@vitest/spy@3.0.5": + version "3.0.5" + resolved "https://registry.yarnpkg.com/@vitest/spy/-/spy-3.0.5.tgz#7bb5d84ec21cc0d62170fda4e31cd0b46c1aeb8b" + integrity sha512-5fOzHj0WbUNqPK6blI/8VzZdkBlQLnT25knX0r4dbZI9qoZDf3qAdjoMmDcLG5A83W6oUUFJgUd0EYBc2P5xqg== + dependencies: + tinyspy "^3.0.2" + +"@vitest/utils@3.0.5": + version "3.0.5" + resolved "https://registry.yarnpkg.com/@vitest/utils/-/utils-3.0.5.tgz#dc3eaefd3534598917e939af59d9a9b6a5be5082" + integrity sha512-N9AX0NUoUtVwKwy21JtwzaqR5L5R5A99GAbrHfCCXK1lp593i/3AZAXhSP43wRQuxYsflrdzEfXZFo1reR1Nkg== + dependencies: + "@vitest/pretty-format" "3.0.5" + loupe "^3.1.2" + tinyrainbow "^2.0.0" "@wagmi/connectors@4.1.14": version "4.1.14" @@ -3417,17 +3752,17 @@ abitype@^0.8.0: resolved "https://registry.yarnpkg.com/abitype/-/abitype-0.8.11.tgz#66e1cf2cbf46f48d0e57132d7c1c392447536cc1" integrity sha512-bM4v2dKvX08sZ9IU38IN5BKmN+ZkOSd2oI4a9f0ejHYZQYV6cDr7j+d95ga0z2XHG36Y4jzoG5Z7qDqxp7fi/A== -abitype@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/abitype/-/abitype-1.0.0.tgz#237176dace81d90d018bebf3a45cb42f2a2d9e97" - integrity sha512-NMeMah//6bJ56H5XRj8QCV4AwuW6hB6zqz2LnhhLdcWVQOsXki6/Pn3APeqxCma62nXIcmZWdu1DlHWS74umVQ== +abitype@^1.0.6: + version "1.0.8" + resolved "https://registry.yarnpkg.com/abitype/-/abitype-1.0.8.tgz#3554f28b2e9d6e9f35eb59878193eabd1b9f46ba" + integrity sha512-ZeiI6h3GnW06uYDLx0etQtX/p8E24UaHHBj57RSjK7YBFe7iuVn07EDpOeP451D06sF27VOz9JJPlIKJmXgkEg== acorn-jsx@^5.3.2: version "5.3.2" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== -acorn-walk@^8.1.1, acorn-walk@^8.3.2: +acorn-walk@^8.1.1: version "8.3.2" resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.2.tgz#7703af9415f1b6db9315d6895503862e231d34aa" integrity sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A== @@ -3540,11 +3875,6 @@ ansi-regex@^6.0.1: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== -ansi-sequence-parser@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ansi-sequence-parser/-/ansi-sequence-parser-1.1.1.tgz#e0aa1cdcbc8f8bb0b5bca625aac41f5f056973cf" - integrity sha512-vJXt3yiaUL4UU546s3rPXlsry/RnM730G1+HkpKE012AN0sx1eOrxSu95oKDIonskeLTijMgqWZ3uDEe3NFvyg== - ansi-styles@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" @@ -3564,11 +3894,6 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0: dependencies: color-convert "^2.0.1" -ansi-styles@^5.0.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" - integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== - ansi-styles@^6.0.0, ansi-styles@^6.1.0, ansi-styles@^6.2.1: version "6.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" @@ -3725,10 +4050,10 @@ assert-never@^1.2.1: resolved "https://registry.yarnpkg.com/assert-never/-/assert-never-1.2.1.tgz#11f0e363bf146205fb08193b5c7b90f4d1cf44fe" integrity sha512-TaTivMB6pYI1kXwrFlEhLeGfOqoDNdTxjCdwRfFFkEA30Eu+k48W34nlok2EYWJfFFzqaEmichdNM7th6M5HNw== -assertion-error@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" - integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== +assertion-error@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-2.0.1.tgz#f641a196b335690b1070bf00b6e7593fec190bf7" + integrity sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA== ast-types-flow@^0.0.8: version "0.0.8" @@ -4005,10 +4330,10 @@ bufferutil@^4.0.8: dependencies: node-gyp-build "^4.3.0" -bundle-require@^4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/bundle-require/-/bundle-require-4.0.2.tgz#65fc74ff14eabbba36d26c9a6161bd78fff6b29e" - integrity sha512-jwzPOChofl67PSTW2SGubV9HBQAhhR2i6nskiOThauo9dzwDUgOWQScFVaJkjEfYX+UXiD+LEx8EblQMc2wIag== +bundle-require@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/bundle-require/-/bundle-require-5.1.0.tgz#8db66f41950da3d77af1ef3322f4c3e04009faee" + integrity sha512-3WrrOuZiyaaZPWiEt4G3+IffISVC9HYlWueJEBWED4ZH4aIAC2PnkdnuRrR94M+w6yGWn4AglWtJtBI8YqvgoA== dependencies: load-tsconfig "^0.2.3" @@ -4017,7 +4342,7 @@ bytes@3.1.2: resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== -cac@^6.7.12, cac@^6.7.14: +cac@^6.7.14: version "6.7.14" resolved "https://registry.yarnpkg.com/cac/-/cac-6.7.14.tgz#804e1e6f506ee363cb0e3ccbb09cad5dd9870959" integrity sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ== @@ -4073,18 +4398,16 @@ cfonts@^3.2.0: supports-color "^8" window-size "^1.1.1" -chai@^4.3.10: - 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.3" - deep-eql "^4.1.3" - get-func-name "^2.0.2" - loupe "^2.3.6" - pathval "^1.1.1" - type-detect "^4.0.8" +chai@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/chai/-/chai-5.1.2.tgz#3afbc340b994ae3610ca519a6c70ace77ad4378d" + integrity sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw== + dependencies: + assertion-error "^2.0.1" + check-error "^2.1.1" + deep-eql "^5.0.1" + loupe "^3.1.0" + pathval "^2.0.0" chalk@5.3.0: version "5.3.0" @@ -4124,14 +4447,12 @@ chardet@^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-error@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/check-error/-/check-error-2.1.1.tgz#87eb876ae71ee388fa0471fe423f494be1d96ccc" + integrity sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw== -chokidar@3.5.3, chokidar@^3.5.1, chokidar@^3.5.2, chokidar@^3.5.3: +chokidar@3.5.3, chokidar@^3.5.2, chokidar@^3.5.3: version "3.5.3" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== @@ -4161,6 +4482,13 @@ chokidar@^3.4.0: optionalDependencies: fsevents "~2.3.2" +chokidar@^4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-4.0.3.tgz#7be37a4c03c9aee1ecfe862a4a23b2c70c205d30" + integrity sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA== + dependencies: + readdirp "^4.0.1" + ci-info@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" @@ -4630,6 +4958,13 @@ debug@^3.2.7: dependencies: ms "^2.1.1" +debug@^4.3.7, debug@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.0.tgz#2b3f2aea2ffeb776477460267377dc8710faba8a" + integrity sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA== + dependencies: + ms "^2.1.3" + decamelize-keys@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.1.tgz#04a2d523b2f18d80d0158a43b895d56dff8d19d8" @@ -4653,12 +4988,10 @@ decode-uri-component@^0.2.2: resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9" integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ== -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" +deep-eql@^5.0.1: + version "5.0.2" + resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-5.0.2.tgz#4b756d8d770a9257300825d52a2c2cff99c3a341" + integrity sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q== deep-equal@^2.2.3: version "2.2.3" @@ -4796,11 +5129,6 @@ didyoumean@^1.2.2: resolved "https://registry.yarnpkg.com/didyoumean/-/didyoumean-1.2.2.tgz#989346ffe9e839b4555ecf5666edea0d3e8ad037" integrity sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw== -diff-sequences@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.6.3.tgz#4deaf894d11407c51efc8418012f9e70b84ea921" - integrity sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q== - diff@5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" @@ -4864,6 +5192,11 @@ dotenv@^16.4.5: resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.4.5.tgz#cdd3b3b604cb327e286b4762e13502f717cb099f" integrity sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg== +dotenv@^16.4.7: + version "16.4.7" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.4.7.tgz#0e20c5b82950140aa99be360a8a5f52335f53c26" + integrity sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ== + dotignore@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/dotignore/-/dotignore-0.1.2.tgz#f942f2200d28c3a76fbdd6f0ee9f3257c8a2e905" @@ -4977,6 +5310,11 @@ enquirer@^2.3.0: ansi-colors "^4.1.1" strip-ansi "^6.0.1" +entities@^4.4.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" + integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== + env-paths@^2.2.0: version "2.2.1" resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" @@ -5086,6 +5424,11 @@ es-iterator-helpers@^1.0.12, es-iterator-helpers@^1.0.15: iterator.prototype "^1.1.2" safe-array-concat "^1.0.1" +es-module-lexer@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.6.0.tgz#da49f587fd9e68ee2404fe4e256c0c7d3a81be21" + integrity sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ== + es-set-tostringtag@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz#11f7cc9f63376930a5f20be4915834f4bc74f9c9" @@ -5111,7 +5454,7 @@ es-to-primitive@^1.2.1: is-date-object "^1.0.1" is-symbol "^1.0.2" -esbuild@^0.19.2, esbuild@^0.19.3: +esbuild@^0.19.3: version "0.19.12" resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.19.12.tgz#dc82ee5dc79e82f5a5c3b4323a2a641827db3e04" integrity sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg== @@ -5140,6 +5483,37 @@ esbuild@^0.19.2, esbuild@^0.19.3: "@esbuild/win32-ia32" "0.19.12" "@esbuild/win32-x64" "0.19.12" +esbuild@^0.24.0, esbuild@^0.24.2: + version "0.24.2" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.24.2.tgz#b5b55bee7de017bff5fb8a4e3e44f2ebe2c3567d" + integrity sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA== + optionalDependencies: + "@esbuild/aix-ppc64" "0.24.2" + "@esbuild/android-arm" "0.24.2" + "@esbuild/android-arm64" "0.24.2" + "@esbuild/android-x64" "0.24.2" + "@esbuild/darwin-arm64" "0.24.2" + "@esbuild/darwin-x64" "0.24.2" + "@esbuild/freebsd-arm64" "0.24.2" + "@esbuild/freebsd-x64" "0.24.2" + "@esbuild/linux-arm" "0.24.2" + "@esbuild/linux-arm64" "0.24.2" + "@esbuild/linux-ia32" "0.24.2" + "@esbuild/linux-loong64" "0.24.2" + "@esbuild/linux-mips64el" "0.24.2" + "@esbuild/linux-ppc64" "0.24.2" + "@esbuild/linux-riscv64" "0.24.2" + "@esbuild/linux-s390x" "0.24.2" + "@esbuild/linux-x64" "0.24.2" + "@esbuild/netbsd-arm64" "0.24.2" + "@esbuild/netbsd-x64" "0.24.2" + "@esbuild/openbsd-arm64" "0.24.2" + "@esbuild/openbsd-x64" "0.24.2" + "@esbuild/sunos-x64" "0.24.2" + "@esbuild/win32-arm64" "0.24.2" + "@esbuild/win32-ia32" "0.24.2" + "@esbuild/win32-x64" "0.24.2" + escalade@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" @@ -5560,19 +5934,6 @@ ethers@^6.11.1: tslib "2.4.0" ws "8.5.0" -ethers@^6.13.1: - version "6.13.1" - resolved "https://registry.yarnpkg.com/ethers/-/ethers-6.13.1.tgz#2b9f9c7455cde9d38b30fe6589972eb083652961" - integrity sha512-hdJ2HOxg/xx97Lm9HdCWk949BfYqYWpyw4//78SiwOLgASyfrNszfMUNB2joKjvGUdwhHfaiMMFFwacVVoLR9A== - dependencies: - "@adraffy/ens-normalize" "1.10.1" - "@noble/curves" "1.2.0" - "@noble/hashes" "1.3.2" - "@types/node" "18.15.13" - aes-js "4.0.0-beta.5" - tslib "2.4.0" - ws "8.17.1" - ethjs-unit@0.1.6: version "0.1.6" resolved "https://registry.yarnpkg.com/ethjs-unit/-/ethjs-unit-0.1.6.tgz#c665921e476e87bce2a9d588a6fe0405b2c41699" @@ -5627,21 +5988,6 @@ execa@7.2.0: signal-exit "^3.0.7" strip-final-newline "^3.0.0" -execa@^5.0.0: - 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" - execa@^8.0.1: version "8.0.1" resolved "https://registry.yarnpkg.com/execa/-/execa-8.0.1.tgz#51f6a5943b580f963c3ca9c6321796db8cc39b8c" @@ -5657,6 +6003,11 @@ execa@^8.0.1: signal-exit "^4.1.0" strip-final-newline "^3.0.0" +expect-type@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/expect-type/-/expect-type-1.1.0.tgz#a146e414250d13dfc49eafcfd1344a4060fa4c75" + integrity sha512-bFi65yM+xZgk+u/KRIpekdSYkTB5W1pEf0Lt8Q8Msh7b+eQ7LXVtIB1Bkm4fvclDEL1b2CZkMhv2mOeF8tMdkA== + extendable-error@^0.1.5: version "0.1.7" resolved "https://registry.yarnpkg.com/extendable-error/-/extendable-error-0.1.7.tgz#60b9adf206264ac920058a7395685ae4670c2b96" @@ -5731,6 +6082,11 @@ fastq@^1.6.0: dependencies: reusify "^1.0.4" +fdir@^6.4.2: + version "6.4.3" + resolved "https://registry.yarnpkg.com/fdir/-/fdir-6.4.3.tgz#011cdacf837eca9b811c89dbb902df714273db72" + integrity sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw== + figures@^1.4.0: version "1.7.0" resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" @@ -5953,11 +6309,6 @@ get-east-asian-width@^1.0.0: resolved "https://registry.yarnpkg.com/get-east-asian-width/-/get-east-asian-width-1.2.0.tgz#5e6ebd9baee6fb8b7b6bd505221065f0cd91f64e" integrity sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA== -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.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2: version "1.2.3" resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.3.tgz#9d2d284a238e62672f556361e7d4e1a4686ae50e" @@ -5984,7 +6335,7 @@ get-port-please@^3.1.2: resolved "https://registry.yarnpkg.com/get-port-please/-/get-port-please-3.1.2.tgz#502795e56217128e4183025c89a48c71652f4e49" integrity sha512-Gxc29eLs1fbn6LQ4jSU4vXjlwyZhF5HsGuMAa7gqBP4Rw4yxxltyDUuF5MBclFzDTXO+ACchGQoeela4DSfzdQ== -get-stream@^6.0.0, get-stream@^6.0.1: +get-stream@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== @@ -6088,7 +6439,7 @@ globalthis@^1.0.3: dependencies: define-properties "^1.1.3" -globby@^11.0.0, globby@^11.0.3, globby@^11.1.0: +globby@^11.0.0, globby@^11.1.0: version "11.1.0" resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== @@ -6160,18 +6511,6 @@ h3@^1.10.1, h3@^1.8.2: uncrypto "^0.1.3" unenv "^1.9.0" -handlebars@^4.7.7: - version "4.7.8" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.8.tgz#41c42c18b1be2365439188c77c6afae71c0cd9e9" - integrity sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ== - dependencies: - minimist "^1.2.5" - neo-async "^2.6.2" - source-map "^0.6.1" - wordwrap "^1.0.0" - optionalDependencies: - uglify-js "^3.1.4" - hard-rejection@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/hard-rejection/-/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883" @@ -6383,11 +6722,6 @@ human-id@^1.0.2: resolved "https://registry.yarnpkg.com/human-id/-/human-id-1.0.2.tgz#e654d4b2b0d8b07e45da9f6020d8af17ec0a5df3" integrity sha512-UNopramDEhHJD+VR+ehk8rOslwSfByxPIZyJRfV739NDhN5LF1fa1MqnzKm2lGTQRjNrjK19Q5fhkgIfjlVUKw== -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== - human-signals@^4.3.0: version "4.3.1" resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-4.3.1.tgz#ab7f811e851fca97ffbd2c1fe9a958964de321b2" @@ -6911,7 +7245,7 @@ joi@^17.9.2: "@sideway/formula" "^3.0.1" "@sideway/pinpoint" "^2.0.0" -joycon@^3.0.1: +joycon@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/joycon/-/joycon-3.1.1.tgz#bce8596d6ae808f8b68168f5fc69280996894f03" integrity sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw== @@ -6936,11 +7270,6 @@ js-sha3@0.8.0, js-sha3@^0.8.0: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== -js-tokens@^8.0.2: - version "8.0.3" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-8.0.3.tgz#1c407ec905643603b38b6be6977300406ec48775" - integrity sha512-UfJMcSJc+SEXEl9lH/VLHSZbThQyLpw1vLO1Lb+j4RWDvG3N2f7yj3PVQA3cmkTBNldJ9eFnM+xEXxHIXrYiJw== - js-yaml@4.1.0, js-yaml@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" @@ -7144,11 +7473,23 @@ lilconfig@^3.0.0: resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-3.0.0.tgz#f8067feb033b5b74dab4602a5f5029420be749bc" integrity sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g== +lilconfig@^3.1.1: + version "3.1.3" + resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-3.1.3.tgz#a1bcfd6257f9585bf5ae14ceeebb7b559025e4c4" + integrity sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw== + lines-and-columns@^1.1.6: version "1.2.4" resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== +linkify-it@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/linkify-it/-/linkify-it-5.0.0.tgz#9ef238bfa6dc70bd8e7f9572b52d369af569b421" + integrity sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ== + dependencies: + uc.micro "^2.0.0" + lint-staged@^13.0.3: version "13.3.0" resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-13.3.0.tgz#7965d72a8d6a6c932f85e9c13ccf3596782d28a5" @@ -7277,14 +7618,6 @@ load-yaml-file@^0.2.0: pify "^4.0.1" strip-bom "^3.0.0" -local-pkg@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/local-pkg/-/local-pkg-0.5.0.tgz#093d25a346bae59a99f80e75f6e9d36d7e8c925c" - integrity sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg== - dependencies: - mlly "^1.4.2" - pkg-types "^1.0.3" - locate-path@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" @@ -7454,18 +7787,21 @@ loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0: dependencies: js-tokens "^3.0.0 || ^4.0.0" -loupe@^2.3.6, loupe@^2.3.7: - 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.1" +loupe@^3.1.0, loupe@^3.1.2: + version "3.1.3" + resolved "https://registry.yarnpkg.com/loupe/-/loupe-3.1.3.tgz#042a8f7986d77f3d0f98ef7990a2b2fef18b0fd2" + integrity sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug== lru-cache@^10.0.0, lru-cache@^10.0.1, lru-cache@^10.0.2, lru-cache@^10.1.0, lru-cache@^10.2.0, "lru-cache@^9.1.1 || ^10.0.0": version "10.2.0" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.0.tgz#0bd445ca57363465900f4d1f9bd8db343a4d95c3" integrity sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q== +lru-cache@^11.0.2: + version "11.0.2" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-11.0.2.tgz#fbd8e7cf8211f5e7e5d91905c415a3f55755ca39" + integrity sha512-123qHRfJBmo2jXDbo/a5YOQrJoHF/GNQTLzQ5+IdK5pWpceK17yRc6ozlWd25FxvGKQbIUs91fDFkXmDHTKcyA== + lru-cache@^4.0.1: version "4.1.5" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" @@ -7498,12 +7834,12 @@ lunr@^2.3.9: resolved "https://registry.yarnpkg.com/lunr/-/lunr-2.3.9.tgz#18b123142832337dd6e964df1a5a7707b25d35e1" integrity sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow== -magic-string@^0.30.5: - version "0.30.6" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.6.tgz#996e21b42f944e45591a68f0905d6a740a12506c" - integrity sha512-n62qCLbPjNjyo+owKtveQxZFZTBm+Ms6YoGD23Wew6Vw337PElFNifQpknPruVRQV57kVShPnLGo9vWxVhpPvA== +magic-string@^0.30.17: + version "0.30.17" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.17.tgz#450a449673d2460e5bbcfba9a61916a1714c7453" + integrity sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA== dependencies: - "@jridgewell/sourcemap-codec" "^1.4.15" + "@jridgewell/sourcemap-codec" "^1.5.0" make-error@^1.1.1: version "1.3.6" @@ -7520,10 +7856,17 @@ map-obj@^4.0.0: resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.3.0.tgz#9304f906e93faae70880da102a9f1df0ea8bb05a" integrity sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ== -marked@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/marked/-/marked-4.3.0.tgz#796362821b019f734054582038b116481b456cf3" - integrity sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A== +markdown-it@^14.1.0: + version "14.1.0" + resolved "https://registry.yarnpkg.com/markdown-it/-/markdown-it-14.1.0.tgz#3c3c5992883c633db4714ccb4d7b5935d98b7d45" + integrity sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg== + dependencies: + argparse "^2.0.1" + entities "^4.4.0" + linkify-it "^5.0.0" + mdurl "^2.0.0" + punycode.js "^2.3.1" + uc.micro "^2.1.0" md5.js@^1.3.4: version "1.3.5" @@ -7534,6 +7877,11 @@ md5.js@^1.3.4: inherits "^2.0.1" safe-buffer "^5.1.2" +mdurl@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-2.0.0.tgz#80676ec0433025dd3e17ee983d0fe8de5a2237e0" + integrity sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w== + media-query-parser@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/media-query-parser/-/media-query-parser-2.0.2.tgz#ff79e56cee92615a304a1c2fa4f2bd056c0a1d29" @@ -7658,7 +8006,7 @@ minimatch@5.0.1: dependencies: brace-expansion "^2.0.1" -minimatch@9.0.3, minimatch@^9.0.1, minimatch@^9.0.3: +minimatch@9.0.3, minimatch@^9.0.1: version "9.0.3" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== @@ -7679,6 +8027,13 @@ minimatch@^5.0.1: dependencies: brace-expansion "^2.0.1" +minimatch@^9.0.5: + version "9.0.5" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5" + integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== + dependencies: + brace-expansion "^2.0.1" + minimist-options@^4.0.2: version "4.1.0" resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619" @@ -7688,7 +8043,7 @@ minimist-options@^4.0.2: is-plain-obj "^1.1.0" kind-of "^6.0.3" -minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6, minimist@^1.2.8: +minimist@^1.2.0, minimist@^1.2.6, minimist@^1.2.8: version "1.2.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== @@ -7710,7 +8065,7 @@ mixme@^0.5.1: resolved "https://registry.yarnpkg.com/mixme/-/mixme-0.5.10.tgz#d653b2984b75d9018828f1ea333e51717ead5f51" integrity sha512-5H76ANWinB1H3twpJ6JY8uvAtpmFvHNArpilJAjXRKXSDDLPIMoZArw5SH0q9z+lLs8IrMw7Q2VWpWimFKFT1Q== -mlly@^1.2.0, mlly@^1.4.2, mlly@^1.5.0: +mlly@^1.2.0, mlly@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/mlly/-/mlly-1.5.0.tgz#8428a4617d54cc083d3009030ac79739a0e5447a" integrity sha512-NPVQvAY1xr1QoVeG0cy8yUYC7FQcOx6evl/RjT1wL5FvzPnzOysoqB/jmx/DhssT2dYa8nxECLAaFI/+gVLhDQ== @@ -7792,7 +8147,7 @@ ms@2.1.2: 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.1.1: +ms@2.1.3, ms@^2.1.1, ms@^2.1.3: version "2.1.3" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== @@ -7821,6 +8176,11 @@ nanoid@^3.3.4, nanoid@^3.3.7: resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== +nanoid@^3.3.8: + version "3.3.8" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.8.tgz#b1be3030bee36aaff18bacb375e5cce521684baf" + integrity sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w== + napi-wasm@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/napi-wasm/-/napi-wasm-1.1.0.tgz#bbe617823765ae9c1bc12ff5942370eae7b2ba4e" @@ -7831,11 +8191,6 @@ natural-compare@^1.4.0: resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== -neo-async@^2.6.2: - version "2.6.2" - resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" - integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== - next-transpile-modules@10.0.1: version "10.0.1" resolved "https://registry.yarnpkg.com/next-transpile-modules/-/next-transpile-modules-10.0.1.tgz#1ca2b735b14781f4792f6214f808b600574e0348" @@ -7927,10 +8282,10 @@ node-releases@^2.0.14: resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b" integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw== -nodemon@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-3.0.3.tgz#244a62d1c690eece3f6165c6cdb0db03ebd80b76" - integrity sha512-7jH/NXbFPxVaMwmBCC2B9F/V6X1VkEdNgx3iu9jji8WxWcvhMWkmhNWhI5077zknOnZnBzba9hZP6bCPJLSReQ== +nodemon@^3.1.9: + version "3.1.9" + resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-3.1.9.tgz#df502cdc3b120e1c3c0c6e4152349019efa7387b" + integrity sha512-hdr1oIb2p6ZSxu3PB2JWWYS7ZQ0qvaZsc3hK8DR8f02kRzc8rjYmxAIvdz+aYC+8F2IjNaB7HMcSDg8nQpJxyg== dependencies: chokidar "^3.5.2" debug "^4" @@ -7970,13 +8325,6 @@ normalize-range@^0.1.2: resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA== -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" - npm-run-path@^5.1.0: version "5.2.0" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-5.2.0.tgz#224cdd22c755560253dd71b83a1ef2f758b2e955" @@ -8115,7 +8463,7 @@ once@^1.3.0, once@^1.3.1, once@^1.4.0: dependencies: wrappy "1" -onetime@^5.1.0, onetime@^5.1.2: +onetime@^5.1.0: version "5.1.2" resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== @@ -8177,6 +8525,19 @@ outdent@^0.8.0: resolved "https://registry.yarnpkg.com/outdent/-/outdent-0.8.0.tgz#2ebc3e77bf49912543f1008100ff8e7f44428eb0" integrity sha512-KiOAIsdpUTcAXuykya5fnVVT+/5uS0Q1mrkRHcF89tpieSmY33O/tmc54CqwA+bfhbtEfZUNLHaPUiB9X3jt1A== +ox@^0.6.9: + version "0.6.9" + resolved "https://registry.yarnpkg.com/ox/-/ox-0.6.9.tgz#da1ee04fa10de30c8d04c15bfb80fe58b1f554bd" + integrity sha512-wi5ShvzE4eOcTwQVsIPdFr+8ycyX+5le/96iAJutaZAvCes1J0+RvpEPg5QDPDiaR0XQQAvZVl7AwqQcINuUug== + dependencies: + "@adraffy/ens-normalize" "^1.10.1" + "@noble/curves" "^1.6.0" + "@noble/hashes" "^1.5.0" + "@scure/bip32" "^1.5.0" + "@scure/bip39" "^1.4.0" + abitype "^1.0.6" + eventemitter3 "5.0.1" + p-filter@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/p-filter/-/p-filter-2.1.0.tgz#1b1472562ae7a0f742f0f3d3d3718ea66ff9c09c" @@ -8205,13 +8566,6 @@ p-limit@^3.0.2: dependencies: yocto-queue "^0.1.0" -p-limit@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-5.0.0.tgz#6946d5b7140b649b7a33a027d89b4c625b3a5985" - integrity sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ== - dependencies: - yocto-queue "^1.0.0" - p-locate@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" @@ -8305,7 +8659,7 @@ path-is-absolute@^1.0.0: 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: +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== @@ -8343,10 +8697,15 @@ pathe@^1.1.0, pathe@^1.1.1, pathe@^1.1.2: resolved "https://registry.yarnpkg.com/pathe/-/pathe-1.1.2.tgz#6c4cb47a945692e48a1ddd6e4094d170516437ec" integrity sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ== -pathval@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d" - integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== +pathe@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/pathe/-/pathe-2.0.2.tgz#5ed86644376915b3c7ee4d00ac8c348d671da3a5" + integrity sha512-15Ztpk+nov8DR524R4BF7uEuzESgzUEAV4Ah7CUMNGXdE5ELuvxElxGXndBl32vMSsWa1jpNf22Z+Er3sKwq+w== + +pathval@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/pathval/-/pathval-2.0.0.tgz#7e2550b422601d4f6b8e26f1301bc8f15a741a25" + integrity sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA== pbkdf2@^3.0.17: version "3.1.2" @@ -8364,11 +8723,21 @@ picocolors@^1, picocolors@^1.0.0: resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== +picocolors@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" + integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== + picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== +picomatch@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.2.tgz#77c742931e8f3b8820946c76cd0c1f13730d1dab" + integrity sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg== + pidtree@0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.6.0.tgz#90ad7b6d42d5841e69e0a2419ef38f8883aa057c" @@ -8492,6 +8861,13 @@ postcss-load-config@^4.0.1: lilconfig "^3.0.0" yaml "^2.3.4" +postcss-load-config@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-6.0.1.tgz#6fd7dcd8ae89badcf1b2d644489cbabf83aa8096" + integrity sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g== + dependencies: + lilconfig "^3.1.1" + postcss-nested@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/postcss-nested/-/postcss-nested-6.0.1.tgz#f83dc9846ca16d2f4fa864f16e9d9f7d0961662c" @@ -8529,7 +8905,7 @@ postcss@8.4.14: picocolors "^1.0.0" source-map-js "^1.0.2" -postcss@^8.4.23, postcss@^8.4.32, postcss@^8.4.4: +postcss@^8.4.23, postcss@^8.4.4: version "8.4.33" resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.33.tgz#1378e859c9f69bf6f638b990a0212f43e2aaa742" integrity sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg== @@ -8547,6 +8923,15 @@ postcss@^8.4.35: picocolors "^1.0.0" source-map-js "^1.0.2" +postcss@^8.5.1: + version "8.5.1" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.5.1.tgz#e2272a1f8a807fafa413218245630b5db10a3214" + integrity sha512-6oz2beyjc5VMn/KV1pPw8fliQkhBXrVn1Z3TVyqZxU8kZpzEKhBdmCFqI6ZbmGtamQvQGuU1sgPTk8ZrXDD7jQ== + dependencies: + nanoid "^3.3.8" + picocolors "^1.1.1" + source-map-js "^1.2.1" + preact@^10.16.0: version "10.19.3" resolved "https://registry.yarnpkg.com/preact/-/preact-10.19.3.tgz#7a7107ed2598a60676c943709ea3efb8aaafa899" @@ -8582,15 +8967,6 @@ prettier@^2.7.1, prettier@^3.2.5: resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.2.5.tgz#e52bc3090586e824964a8813b09aba6233b28368" integrity sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A== -pretty-format@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.7.0.tgz#ca42c758310f365bfa71a0bda0a807160b776812" - integrity sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ== - dependencies: - "@jest/schemas" "^29.6.3" - ansi-styles "^5.0.0" - react-is "^18.0.0" - pretty-ms@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/pretty-ms/-/pretty-ms-2.1.0.tgz#4257c256df3fb0b451d6affaab021884126981dc" @@ -8664,6 +9040,11 @@ pump@^3.0.0: end-of-stream "^1.1.0" once "^1.3.1" +punycode.js@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/punycode.js/-/punycode.js-2.3.1.tgz#6b53e56ad75588234e79f4affa90972c7dd8cdb7" + integrity sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA== + punycode@^2.1.0: version "2.3.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" @@ -8781,11 +9162,6 @@ react-is@^16.13.1, react-is@^16.7.0: resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== -react-is@^18.0.0: - version "18.2.0" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" - integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== - react-loading-skeleton@^3.4.0: version "3.4.0" resolved "https://registry.yarnpkg.com/react-loading-skeleton/-/react-loading-skeleton-3.4.0.tgz#c71a3a17259d08e4064974aa0b07f150a09dfd57" @@ -8931,6 +9307,11 @@ readable-stream@^3.1.1, readable-stream@^3.6.0: string_decoder "^1.1.1" util-deprecate "^1.0.1" +readdirp@^4.0.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-4.1.1.tgz#bd115327129672dc47f87408f05df9bd9ca3ef55" + integrity sha512-h80JrZu/MHUZCyHu5ciuoI0+WxsCxzxJTILn6Fs8rxSnFPh+UVHYfeIxK1nVGugMqkfC4vJcBOYbkfkwYK0+gw== + readdirp@~3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" @@ -9123,7 +9504,7 @@ rollup-plugin-visualizer@^5.9.2: source-map "^0.7.4" yargs "^17.5.1" -rollup@^4.0.2, rollup@^4.2.0: +rollup@^4.2.0: version "4.9.6" resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.9.6.tgz#4515facb0318ecca254a2ee1315e22e09efc50a0" integrity sha512-05lzkCS2uASX0CiLFybYfVkwNbKZG5NFQ6Go0VWyogFTXXbR039UVsegViTntkk4OglHBdF54ccApXRRuXRbsg== @@ -9145,6 +9526,34 @@ rollup@^4.0.2, rollup@^4.2.0: "@rollup/rollup-win32-x64-msvc" "4.9.6" fsevents "~2.3.2" +rollup@^4.24.0, rollup@^4.30.1: + version "4.34.6" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.34.6.tgz#a07e4d2621759e29034d909655e7a32eee9195c9" + integrity sha512-wc2cBWqJgkU3Iz5oztRkQbfVkbxoz5EhnCGOrnJvnLnQ7O0WhQUYyv18qQI79O8L7DdHrrlJNeCHd4VGpnaXKQ== + dependencies: + "@types/estree" "1.0.6" + optionalDependencies: + "@rollup/rollup-android-arm-eabi" "4.34.6" + "@rollup/rollup-android-arm64" "4.34.6" + "@rollup/rollup-darwin-arm64" "4.34.6" + "@rollup/rollup-darwin-x64" "4.34.6" + "@rollup/rollup-freebsd-arm64" "4.34.6" + "@rollup/rollup-freebsd-x64" "4.34.6" + "@rollup/rollup-linux-arm-gnueabihf" "4.34.6" + "@rollup/rollup-linux-arm-musleabihf" "4.34.6" + "@rollup/rollup-linux-arm64-gnu" "4.34.6" + "@rollup/rollup-linux-arm64-musl" "4.34.6" + "@rollup/rollup-linux-loongarch64-gnu" "4.34.6" + "@rollup/rollup-linux-powerpc64le-gnu" "4.34.6" + "@rollup/rollup-linux-riscv64-gnu" "4.34.6" + "@rollup/rollup-linux-s390x-gnu" "4.34.6" + "@rollup/rollup-linux-x64-gnu" "4.34.6" + "@rollup/rollup-linux-x64-musl" "4.34.6" + "@rollup/rollup-win32-arm64-msvc" "4.34.6" + "@rollup/rollup-win32-ia32-msvc" "4.34.6" + "@rollup/rollup-win32-x64-msvc" "4.34.6" + fsevents "~2.3.2" + run-parallel@^1.1.9: version "1.2.0" resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" @@ -9198,6 +9607,11 @@ safe-stable-stringify@^2.1.0: resolved "https://registry.yarnpkg.com/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz#138c84b6f6edb3db5f8ef3ef7115b8f55ccbf886" integrity sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g== +safe-stable-stringify@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz#4ca2f8e385f2831c432a719b108a3bf7af42a1dd" + integrity sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA== + "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" @@ -9324,16 +9738,6 @@ shebang-regex@^3.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== -shiki@^0.14.7: - version "0.14.7" - resolved "https://registry.yarnpkg.com/shiki/-/shiki-0.14.7.tgz#c3c9e1853e9737845f1d2ef81b31bcfb07056d4e" - integrity sha512-dNPAPrxSc87ua2sKJ3H5dQ/6ZaY8RNnaAqK+t0eG7p0Soi2ydiqbGOTaZCqaYvA/uZYfS1LJnemt3Q+mSfcPCg== - dependencies: - ansi-sequence-parser "^1.1.0" - jsonc-parser "^3.2.0" - vscode-oniguruma "^1.7.0" - vscode-textmate "^8.0.0" - side-channel@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" @@ -9348,7 +9752,7 @@ siginfo@^2.0.0: resolved "https://registry.yarnpkg.com/siginfo/-/siginfo-2.0.0.tgz#32e76c70b79724e3bb567cb9d543eb858ccfaf30" integrity sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g== -signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: +signal-exit@^3.0.2, signal-exit@^3.0.7: 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== @@ -9482,6 +9886,11 @@ source-map-js@^1.0.2: resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== +source-map-js@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46" + integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA== + source-map-support@^0.5.13: version "0.5.21" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" @@ -9507,7 +9916,7 @@ source-map@^0.5.7: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== -source-map@^0.6.0, source-map@^0.6.1: +source-map@^0.6.0: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== @@ -9629,11 +10038,16 @@ statuses@2.0.1: resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== -std-env@^3.5.0, std-env@^3.7.0: +std-env@^3.7.0: version "3.7.0" resolved "https://registry.yarnpkg.com/std-env/-/std-env-3.7.0.tgz#c9f7386ced6ecf13360b6c6c55b8aaa4ef7481d2" integrity sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg== +std-env@^3.8.0: + version "3.8.0" + resolved "https://registry.yarnpkg.com/std-env/-/std-env-3.8.0.tgz#b56ffc1baf1a29dcc80a3bdf11d7fca7c315e7d5" + integrity sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w== + stop-iteration-iterator@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz#6a60be0b4ee757d1ed5254858ec66b10c49285e4" @@ -9779,11 +10193,6 @@ strip-bom@^3.0.0: 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-final-newline@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-3.0.0.tgz#52894c313fbff318835280aed60ff71ebf12b8fd" @@ -9808,13 +10217,6 @@ strip-json-comments@3.1.1, strip-json-comments@^3.1.1: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== -strip-literal@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-literal/-/strip-literal-2.0.0.tgz#5d063580933e4e03ebb669b12db64d2200687527" - integrity sha512-f9vHgsCWBq2ugHAkGMiiYY+AYG0D/cbloKKg0nhaaaSNsujdGIpVXCNsrJpCKr5M0f4aI31mr13UjY6GAuXCKA== - dependencies: - js-tokens "^8.0.2" - styled-jsx@5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/styled-jsx/-/styled-jsx-5.1.0.tgz#4a5622ab9714bd3fcfaeec292aa555871f057563" @@ -9827,7 +10229,7 @@ stylis@4.2.0: resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.2.0.tgz#79daee0208964c8fe695a42fcffcac633a211a51" integrity sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw== -sucrase@^3.20.3, sucrase@^3.32.0: +sucrase@^3.32.0, sucrase@^3.35.0: version "3.35.0" resolved "https://registry.yarnpkg.com/sucrase/-/sucrase-3.35.0.tgz#57f17a3d7e19b36d8995f06679d121be914ae263" integrity sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA== @@ -10015,20 +10417,38 @@ through@2: resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== -tinybench@^2.5.1: - version "2.6.0" - resolved "https://registry.yarnpkg.com/tinybench/-/tinybench-2.6.0.tgz#1423284ee22de07c91b3752c048d2764714b341b" - integrity sha512-N8hW3PG/3aOoZAN5V/NSAEDz0ZixDSSt5b/a05iqtpgfLWMSVuCo7w0k2vVvEjdrIoeGqZzweX2WlyioNIHchA== +tinybench@^2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/tinybench/-/tinybench-2.9.0.tgz#103c9f8ba6d7237a47ab6dd1dcff77251863426b" + integrity sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg== -tinypool@^0.8.2: - version "0.8.2" - resolved "https://registry.yarnpkg.com/tinypool/-/tinypool-0.8.2.tgz#84013b03dc69dacb322563a475d4c0a9be00f82a" - integrity sha512-SUszKYe5wgsxnNOVlBYO6IC+8VGWdVGZWAqUxp3UErNBtptZvWbwyUOyzNL59zigz2rCA92QiL3wvG+JDSdJdQ== +tinyexec@^0.3.1, tinyexec@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/tinyexec/-/tinyexec-0.3.2.tgz#941794e657a85e496577995c6eef66f53f42b3d2" + integrity sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA== -tinyspy@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/tinyspy/-/tinyspy-2.2.0.tgz#9dc04b072746520b432f77ea2c2d17933de5d6ce" - integrity sha512-d2eda04AN/cPOR89F7Xv5bK/jrQEhmcLFe6HFldoeO9AJtps+fqEnh486vnT/8y4bw38pSyxDcTCAq+Ks2aJTg== +tinyglobby@^0.2.9: + version "0.2.10" + resolved "https://registry.yarnpkg.com/tinyglobby/-/tinyglobby-0.2.10.tgz#e712cf2dc9b95a1f5c5bbd159720e15833977a0f" + integrity sha512-Zc+8eJlFMvgatPZTl6A9L/yht8QqdmUNtURHaKZLmKBE12hNPSrqNkUp2cs3M/UKmNVVAMFQYSjYIVHDjW5zew== + dependencies: + fdir "^6.4.2" + picomatch "^4.0.2" + +tinypool@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/tinypool/-/tinypool-1.0.2.tgz#706193cc532f4c100f66aa00b01c42173d9051b2" + integrity sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA== + +tinyrainbow@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/tinyrainbow/-/tinyrainbow-2.0.0.tgz#9509b2162436315e80e3eee0fcce4474d2444294" + integrity sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw== + +tinyspy@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/tinyspy/-/tinyspy-3.0.2.tgz#86dd3cf3d737b15adcf17d7887c84a75201df20a" + integrity sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q== tmp@0.0.33, tmp@^0.0.33: version "0.0.33" @@ -10171,24 +10591,26 @@ tsort@0.0.1: resolved "https://registry.yarnpkg.com/tsort/-/tsort-0.0.1.tgz#e2280f5e817f8bf4275657fd0f9aebd44f5a2786" integrity sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw== -tsup@^8.0.2: - version "8.0.2" - resolved "https://registry.yarnpkg.com/tsup/-/tsup-8.0.2.tgz#c63192a08386515103e2c44ac5a23bdff75c5fa1" - integrity sha512-NY8xtQXdH7hDUAZwcQdY/Vzlw9johQsaqf7iwZ6g1DOUlFYQ5/AtVAjTvihhEyeRlGo4dLRVHtrRaL35M1daqQ== +tsup@^8.3.6: + version "8.3.6" + resolved "https://registry.yarnpkg.com/tsup/-/tsup-8.3.6.tgz#a10eb2dc27f84b510a0f00341ab75cad03d13a88" + integrity sha512-XkVtlDV/58S9Ye0JxUUTcrQk4S+EqlOHKzg6Roa62rdjL1nGWNUstG0xgI4vanHdfIpjP448J8vlN0oK6XOJ5g== dependencies: - bundle-require "^4.0.0" - cac "^6.7.12" - chokidar "^3.5.1" - debug "^4.3.1" - esbuild "^0.19.2" - execa "^5.0.0" - globby "^11.0.3" - joycon "^3.0.1" - postcss-load-config "^4.0.1" + bundle-require "^5.0.0" + cac "^6.7.14" + chokidar "^4.0.1" + consola "^3.2.3" + debug "^4.3.7" + esbuild "^0.24.0" + joycon "^3.1.1" + picocolors "^1.1.1" + postcss-load-config "^6.0.1" resolve-from "^5.0.0" - rollup "^4.0.2" + rollup "^4.24.0" source-map "0.8.0-beta.0" - sucrase "^3.20.3" + sucrase "^3.35.0" + tinyexec "^0.3.1" + tinyglobby "^0.2.9" tree-kill "^1.2.2" tty-table@^4.1.5: @@ -10276,7 +10698,7 @@ type-check@^0.4.0, type-check@~0.4.0: dependencies: prelude-ls "^1.2.1" -type-detect@4.0.8, type-detect@^4.0.0, type-detect@^4.0.8: +type-detect@4.0.8, type-detect@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== @@ -10360,22 +10782,21 @@ typed-array-length@^1.0.4: for-each "^0.3.3" is-typed-array "^1.1.9" -typedoc-plugin-markdown@^3.17.1: - version "3.17.1" - resolved "https://registry.yarnpkg.com/typedoc-plugin-markdown/-/typedoc-plugin-markdown-3.17.1.tgz#c33f42363c185adf842f4699166015f7fe0ed02b" - integrity sha512-QzdU3fj0Kzw2XSdoL15ExLASt2WPqD7FbLeaqwT70+XjKyTshBnUlQA5nNREO1C2P8Uen0CDjsBLMsCQ+zd0lw== - dependencies: - handlebars "^4.7.7" +typedoc-plugin-markdown@^4.4.1: + version "4.4.1" + resolved "https://registry.yarnpkg.com/typedoc-plugin-markdown/-/typedoc-plugin-markdown-4.4.1.tgz#f57266fa6916cb3837a9c84f59f3aaced309be9a" + integrity sha512-fx23nSCvewI9IR8lzIYtzDphETcgTDuxKcmHKGD4lo36oexC+B1k4NaCOY58Snqb4OlE8OXDAGVcQXYYuLRCNw== -typedoc@^0.25.8: - version "0.25.8" - resolved "https://registry.yarnpkg.com/typedoc/-/typedoc-0.25.8.tgz#7d0e1bf12d23bf1c459fd4893c82cb855911ff12" - integrity sha512-mh8oLW66nwmeB9uTa0Bdcjfis+48bAjSH3uqdzSuSawfduROQLlXw//WSNZLYDdhmMVB7YcYZicq6e8T0d271A== +typedoc@^0.27.6: + version "0.27.6" + resolved "https://registry.yarnpkg.com/typedoc/-/typedoc-0.27.6.tgz#7e8d067bd5386b7908afcb12c9054a83e8bb326b" + integrity sha512-oBFRoh2Px6jFx366db0lLlihcalq/JzyCVp7Vaq1yphL/tbgx2e+bkpkCgJPunaPvPwoTOXSwasfklWHm7GfAw== dependencies: + "@gerrit0/mini-shiki" "^1.24.0" lunr "^2.3.9" - marked "^4.3.0" - minimatch "^9.0.3" - shiki "^0.14.7" + markdown-it "^14.1.0" + minimatch "^9.0.5" + yaml "^2.6.1" typescript-logging@^1.0.1: version "1.0.1" @@ -10389,21 +10810,26 @@ typescript@^5.3.3: resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.3.3.tgz#b3ce6ba258e72e6305ba66f5c9b452aaee3ffe37" integrity sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw== +typescript@^5.7.3: + version "5.7.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.7.3.tgz#919b44a7dbb8583a9b856d162be24a54bf80073e" + integrity sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw== + ua-parser-js@^1.0.37: version "1.0.37" resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-1.0.37.tgz#b5dc7b163a5c1f0c510b08446aed4da92c46373f" integrity sha512-bhTyI94tZofjo+Dn8SN6Zv8nBDvyXTymAdM3LDI/0IboIUwTu1rEhW7v2TfiVsoYWgkQ4kOVqnI8APUFbIQIFQ== +uc.micro@^2.0.0, uc.micro@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-2.1.0.tgz#f8d3f7d0ec4c3dea35a7e3c8efa4cb8b45c9e7ee" + integrity sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A== + ufo@^1.3.0, ufo@^1.3.1, ufo@^1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/ufo/-/ufo-1.3.2.tgz#c7d719d0628a1c80c006d2240e0d169f6e3c0496" integrity sha512-o+ORpgGwaYQXgqGDwd+hkS4PuZ3QnmqMMxRuajK/a38L6fTpcE5GPIfrf+L/KemFzfUpeUQc1rRS1iDBozvnFA== -uglify-js@^3.1.4: - version "3.17.4" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.17.4.tgz#61678cf5fa3f5b7eb789bb345df29afb8257c22c" - integrity sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g== - uint8arrays@^3.0.0, uint8arrays@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/uint8arrays/-/uint8arrays-3.1.1.tgz#2d8762acce159ccd9936057572dade9459f65ae0" @@ -10626,16 +11052,16 @@ viem@^1.0.0, viem@^1.1.4, viem@^1.20.3, viem@^2.16.2: isows "1.0.4" ws "8.17.1" -vite-node@1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/vite-node/-/vite-node-1.3.1.tgz#a93f7372212f5d5df38e945046b945ac3f4855d2" - integrity sha512-azbRrqRxlWTJEVbzInZCTchx0X69M/XPTCz4H+TLvlTcR/xH/3hkRqhOakT41fMJCMzXTu4UvegkZiEoJAWvng== +vite-node@3.0.5: + version "3.0.5" + resolved "https://registry.yarnpkg.com/vite-node/-/vite-node-3.0.5.tgz#6a0d06f7a4bdaae6ddcdedc12d910d886cf7d62f" + integrity sha512-02JEJl7SbtwSDJdYS537nU6l+ktdvcREfLksk/NDAqtdKWGqHl+joXzEubHROmS3E6pip+Xgu2tFezMu75jH7A== dependencies: cac "^6.7.14" - debug "^4.3.4" - pathe "^1.1.1" - picocolors "^1.0.0" - vite "^5.0.0" + debug "^4.4.0" + es-module-lexer "^1.6.0" + pathe "^2.0.2" + vite "^5.0.0 || ^6.0.0" vite-tsconfig-paths@^4.3.1: version "4.3.1" @@ -10646,14 +11072,14 @@ vite-tsconfig-paths@^4.3.1: globrex "^0.1.2" tsconfck "^3.0.1" -vite@^5.0.0: - version "5.0.12" - resolved "https://registry.yarnpkg.com/vite/-/vite-5.0.12.tgz#8a2ffd4da36c132aec4adafe05d7adde38333c47" - integrity sha512-4hsnEkG3q0N4Tzf1+t6NdN9dg/L3BM+q8SWgbSPnJvrgH2kgdyzfVJwbR1ic69/4uMJJ/3dqDZZE5/WwqW8U1w== +"vite@^5.0.0 || ^6.0.0": + version "6.1.0" + resolved "https://registry.yarnpkg.com/vite/-/vite-6.1.0.tgz#00a4e99a23751af98a2e4701c65ba89ce23858a6" + integrity sha512-RjjMipCKVoR4hVfPY6GQTgveinjNuyLw+qruksLDvA5ktI1150VmcMBKmQaEWJhg/j6Uaf6dNCNA0AfdzUb/hQ== dependencies: - esbuild "^0.19.3" - postcss "^8.4.32" - rollup "^4.2.0" + esbuild "^0.24.2" + postcss "^8.5.1" + rollup "^4.30.1" optionalDependencies: fsevents "~2.3.3" @@ -10668,47 +11094,37 @@ vite@^5.1.4: optionalDependencies: fsevents "~2.3.3" -vitest@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/vitest/-/vitest-1.3.1.tgz#2d7e9861f030d88a4669392a4aecb40569d90937" - integrity sha512-/1QJqXs8YbCrfv/GPQ05wAZf2eakUPLPa18vkJAKE7RXOKfVHqMZZ1WlTjiwl6Gcn65M5vpNUB6EFLnEdRdEXQ== - dependencies: - "@vitest/expect" "1.3.1" - "@vitest/runner" "1.3.1" - "@vitest/snapshot" "1.3.1" - "@vitest/spy" "1.3.1" - "@vitest/utils" "1.3.1" - acorn-walk "^8.3.2" - chai "^4.3.10" - debug "^4.3.4" - execa "^8.0.1" - local-pkg "^0.5.0" - magic-string "^0.30.5" - pathe "^1.1.1" - picocolors "^1.0.0" - std-env "^3.5.0" - strip-literal "^2.0.0" - tinybench "^2.5.1" - tinypool "^0.8.2" - vite "^5.0.0" - vite-node "1.3.1" - why-is-node-running "^2.2.2" +vitest@^3.0.5: + version "3.0.5" + resolved "https://registry.yarnpkg.com/vitest/-/vitest-3.0.5.tgz#a9a3fa1203d85869c9ba66f3ea990b72d00ddeb0" + integrity sha512-4dof+HvqONw9bvsYxtkfUp2uHsTN9bV2CZIi1pWgoFpL1Lld8LA1ka9q/ONSsoScAKG7NVGf2stJTI7XRkXb2Q== + dependencies: + "@vitest/expect" "3.0.5" + "@vitest/mocker" "3.0.5" + "@vitest/pretty-format" "^3.0.5" + "@vitest/runner" "3.0.5" + "@vitest/snapshot" "3.0.5" + "@vitest/spy" "3.0.5" + "@vitest/utils" "3.0.5" + chai "^5.1.2" + debug "^4.4.0" + expect-type "^1.1.0" + magic-string "^0.30.17" + pathe "^2.0.2" + std-env "^3.8.0" + tinybench "^2.9.0" + tinyexec "^0.3.2" + tinypool "^1.0.2" + tinyrainbow "^2.0.0" + vite "^5.0.0 || ^6.0.0" + vite-node "3.0.5" + why-is-node-running "^2.3.0" void-elements@3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-3.1.0.tgz#614f7fbf8d801f0bb5f0661f5b2f5785750e4f09" integrity sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w== -vscode-oniguruma@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz#439bfad8fe71abd7798338d1cd3dc53a8beea94b" - integrity sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA== - -vscode-textmate@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/vscode-textmate/-/vscode-textmate-8.0.0.tgz#2c7a3b1163ef0441097e0b5d6389cd5504b59e5d" - integrity sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg== - wagmi@^2.5.11, wagmi@^2.5.7: version "2.5.7" resolved "https://registry.yarnpkg.com/wagmi/-/wagmi-2.5.7.tgz#dc5bdba16e8d5a3e8d7af6ab545cf438b564d9d1" @@ -10860,10 +11276,10 @@ which@^2.0.1: dependencies: isexe "^2.0.0" -why-is-node-running@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/why-is-node-running/-/why-is-node-running-2.2.2.tgz#4185b2b4699117819e7154594271e7e344c9973e" - integrity sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA== +why-is-node-running@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/why-is-node-running/-/why-is-node-running-2.3.0.tgz#a3f69a97107f494b3cdc3bdddd883a7d65cebf04" + integrity sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w== dependencies: siginfo "^2.0.0" stackback "0.0.2" @@ -10883,11 +11299,6 @@ window-size@^1.1.1: define-property "^1.0.0" is-number "^3.0.0" -wordwrap@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" - integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q== - workerpool@6.2.1: version "6.2.1" resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.1.tgz#46fc150c17d826b86a008e5a4508656777e9c343" @@ -11009,6 +11420,11 @@ yaml@^2.3.4: resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.3.4.tgz#53fc1d514be80aabf386dc6001eb29bf3b7523b2" integrity sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA== +yaml@^2.6.1: + version "2.7.0" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.7.0.tgz#aef9bb617a64c937a9a748803786ad8d3ffe1e98" + integrity sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA== + yargs-parser@20.2.4: version "20.2.4" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" @@ -11095,11 +11511,6 @@ yocto-queue@^0.1.0: resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== -yocto-queue@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-1.0.0.tgz#7f816433fb2cbc511ec8bf7d263c3b58a1a3c251" - integrity sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g== - zustand@4.4.1: version "4.4.1" resolved "https://registry.yarnpkg.com/zustand/-/zustand-4.4.1.tgz#0cd3a3e4756f21811bd956418fdc686877e8b3b0" From a7eb7fcc18711189a2a3bfad0327f72bba28d836 Mon Sep 17 00:00:00 2001 From: Ryan Goree Date: Sat, 8 Feb 2025 18:38:18 -0600 Subject: [PATCH 006/146] Update monorepo package.json, remove lint hook --- .husky/pre-commit | 4 - package.json | 27 +- yarn.lock | 1995 +++++++++++++++------------------------------ 3 files changed, 666 insertions(+), 1360 deletions(-) delete mode 100755 .husky/pre-commit diff --git a/.husky/pre-commit b/.husky/pre-commit deleted file mode 100755 index 25d22357..00000000 --- a/.husky/pre-commit +++ /dev/null @@ -1,4 +0,0 @@ -#!/usr/bin/env sh -. "$(dirname "$0")/_/husky.sh" - -npx lint-staged \ No newline at end of file diff --git a/package.json b/package.json index 4637ba74..f43287d2 100644 --- a/package.json +++ b/package.json @@ -20,32 +20,13 @@ "release": "turbo build && changeset publish" }, "devDependencies": { - "@changesets/cli": "^2.27.1", + "@changesets/cli": "^2.27.2", "eslint": "^8.56.0", - "husky": "^8.0.1", - "lint-staged": "^13.0.3", - "os-browserify": "^0.3.0", - "prettier": "^3.2.5", - "prettier-plugin-organize-imports": "^3.2.4", - "prettier-plugin-tailwindcss": "^0.5.11", + "prettier": "^3.4.2", + "prettier-plugin-organize-imports": "^4.1.0", + "prettier-plugin-tailwindcss": "^0.6.11", "turbo": "latest" }, - "lint-staged": { - "{apps,packages}/**/*.{gql,graphql,js,jsx,ts,tsx,json}": [ - "eslint --fix", - "prettier --write" - ] - }, - "resolutions": { - "react": "18.2.0", - "react-dom": "18.2.0", - "@types/react": "18.2.57", - "prettier": "^3.2.5", - "prettier-plugin-organize-imports": "^3.2.4", - "prettier-plugin-tailwindcss": "^0.5.11", - "viem": "^2.16.2", - "wagmi": "^2.5.7" - }, "engines": { "node": ">=18.0.0" }, diff --git a/yarn.lock b/yarn.lock index 204749a8..4c54e87a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -49,7 +49,7 @@ "@jridgewell/gen-mapping" "^0.3.0" "@jridgewell/trace-mapping" "^0.3.9" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.23.5": +"@babel/code-frame@^7.23.5": version "7.23.5" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.23.5.tgz#9009b69a8c602293476ad598ff53e4562e15c244" integrity sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA== @@ -124,7 +124,7 @@ dependencies: "@babel/types" "^7.22.5" -"@babel/helper-module-imports@^7.16.7", "@babel/helper-module-imports@^7.22.15": +"@babel/helper-module-imports@^7.22.15": version "7.22.15" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz#16146307acdc40cc00c3b2c647713076464bdbf0" integrity sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w== @@ -213,13 +213,20 @@ dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/runtime@^7.12.5", "@babel/runtime@^7.18.3", "@babel/runtime@^7.20.1", "@babel/runtime@^7.20.6", "@babel/runtime@^7.21.0", "@babel/runtime@^7.22.5", "@babel/runtime@^7.23.2", "@babel/runtime@^7.5.5": +"@babel/runtime@^7.12.5", "@babel/runtime@^7.21.0", "@babel/runtime@^7.23.2", "@babel/runtime@^7.5.5": version "7.23.9" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.9.tgz#47791a15e4603bb5f905bc0753801cf21d6345f7" integrity sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw== dependencies: regenerator-runtime "^0.14.0" +"@babel/runtime@^7.26.0": + version "7.26.7" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.26.7.tgz#f4e7fe527cd710f8dc0618610b61b4b060c3c341" + integrity sha512-AOPI3D+a8dXnja+iwsUqGRjr1BbZIe771sXdapOtYI531gSqpi92vXivKcq2asu/DFpdl1ceFAKZyRzK2PCVcQ== + dependencies: + regenerator-runtime "^0.14.0" + "@babel/template@^7.22.15", "@babel/template@^7.23.9": version "7.23.9" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.23.9.tgz#f881d0487cba2828d3259dcb9ef5005a9731011a" @@ -254,15 +261,15 @@ "@babel/helper-validator-identifier" "^7.22.20" to-fast-properties "^2.0.0" -"@changesets/apply-release-plan@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@changesets/apply-release-plan/-/apply-release-plan-7.0.0.tgz#ce3c3dfc5720550a5d592b54ad2f411f816ec5ff" - integrity sha512-vfi69JR416qC9hWmFGSxj7N6wA5J222XNBmezSVATPWDVPIF7gkd4d8CpbEbXmRWbVrkoli3oerGS6dcL/BGsQ== +"@changesets/apply-release-plan@^7.0.8": + version "7.0.8" + resolved "https://registry.yarnpkg.com/@changesets/apply-release-plan/-/apply-release-plan-7.0.8.tgz#9cfd46036789ad433fd855f34d41cd9ca1658aa0" + integrity sha512-qjMUj4DYQ1Z6qHawsn7S71SujrExJ+nceyKKyI9iB+M5p9lCL55afuEd6uLBPRpLGWQwkwvWegDHtwHJb1UjpA== dependencies: - "@babel/runtime" "^7.20.1" - "@changesets/config" "^3.0.0" + "@changesets/config" "^3.0.5" "@changesets/get-version-range-type" "^0.4.0" - "@changesets/git" "^3.0.0" + "@changesets/git" "^3.0.2" + "@changesets/should-skip-package" "^0.1.1" "@changesets/types" "^6.0.0" "@manypkg/get-packages" "^1.1.3" detect-indent "^6.0.0" @@ -273,14 +280,14 @@ resolve-from "^5.0.0" semver "^7.5.3" -"@changesets/assemble-release-plan@^6.0.0": - version "6.0.0" - resolved "https://registry.yarnpkg.com/@changesets/assemble-release-plan/-/assemble-release-plan-6.0.0.tgz#c69969b4bef7c32a8544b6941d1053260ca47e05" - integrity sha512-4QG7NuisAjisbW4hkLCmGW2lRYdPrKzro+fCtZaILX+3zdUELSvYjpL4GTv0E4aM9Mef3PuIQp89VmHJ4y2bfw== +"@changesets/assemble-release-plan@^6.0.5": + version "6.0.5" + resolved "https://registry.yarnpkg.com/@changesets/assemble-release-plan/-/assemble-release-plan-6.0.5.tgz#d987b01c2d91c8b2f81eedd2df56ba355e4ce536" + integrity sha512-IgvBWLNKZd6k4t72MBTBK3nkygi0j3t3zdC1zrfusYo0KpdsvnDjrMM9vPnTCLCMlfNs55jRL4gIMybxa64FCQ== dependencies: - "@babel/runtime" "^7.20.1" "@changesets/errors" "^0.2.0" - "@changesets/get-dependents-graph" "^2.0.0" + "@changesets/get-dependents-graph" "^2.1.2" + "@changesets/should-skip-package" "^0.1.1" "@changesets/types" "^6.0.0" "@manypkg/get-packages" "^1.1.3" semver "^7.5.3" @@ -292,56 +299,52 @@ dependencies: "@changesets/types" "^6.0.0" -"@changesets/cli@^2.27.1": - version "2.27.1" - resolved "https://registry.yarnpkg.com/@changesets/cli/-/cli-2.27.1.tgz#abce480fd30b9abbe2cfcf07d5d668c364ce2804" - integrity sha512-iJ91xlvRnnrJnELTp4eJJEOPjgpF3NOh4qeQehM6Ugiz9gJPRZ2t+TsXun6E3AMN4hScZKjqVXl0TX+C7AB3ZQ== +"@changesets/cli@^2.27.2": + version "2.27.12" + resolved "https://registry.yarnpkg.com/@changesets/cli/-/cli-2.27.12.tgz#1df106605ce243c21b180254dd658adbfba4e5b6" + integrity sha512-9o3fOfHYOvBnyEn0mcahB7wzaA3P4bGJf8PNqGit5PKaMEFdsRixik+txkrJWd2VX+O6wRFXpxQL8j/1ANKE9g== dependencies: - "@babel/runtime" "^7.20.1" - "@changesets/apply-release-plan" "^7.0.0" - "@changesets/assemble-release-plan" "^6.0.0" + "@changesets/apply-release-plan" "^7.0.8" + "@changesets/assemble-release-plan" "^6.0.5" "@changesets/changelog-git" "^0.2.0" - "@changesets/config" "^3.0.0" + "@changesets/config" "^3.0.5" "@changesets/errors" "^0.2.0" - "@changesets/get-dependents-graph" "^2.0.0" - "@changesets/get-release-plan" "^4.0.0" - "@changesets/git" "^3.0.0" - "@changesets/logger" "^0.1.0" - "@changesets/pre" "^2.0.0" - "@changesets/read" "^0.6.0" + "@changesets/get-dependents-graph" "^2.1.2" + "@changesets/get-release-plan" "^4.0.6" + "@changesets/git" "^3.0.2" + "@changesets/logger" "^0.1.1" + "@changesets/pre" "^2.0.1" + "@changesets/read" "^0.6.2" + "@changesets/should-skip-package" "^0.1.1" "@changesets/types" "^6.0.0" - "@changesets/write" "^0.3.0" + "@changesets/write" "^0.3.2" "@manypkg/get-packages" "^1.1.3" - "@types/semver" "^7.5.0" ansi-colors "^4.1.3" - chalk "^2.1.0" ci-info "^3.7.0" - enquirer "^2.3.0" + enquirer "^2.4.1" external-editor "^3.1.0" fs-extra "^7.0.1" - human-id "^1.0.2" - meow "^6.0.0" - outdent "^0.5.0" + mri "^1.2.0" p-limit "^2.2.0" - preferred-pm "^3.0.0" + package-manager-detector "^0.2.0" + picocolors "^1.1.0" resolve-from "^5.0.0" semver "^7.5.3" - spawndamnit "^2.0.0" + spawndamnit "^3.0.1" term-size "^2.1.0" - tty-table "^4.1.5" -"@changesets/config@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@changesets/config/-/config-3.0.0.tgz#a1a1cafc77134b117b4a9266459c84fdd360a6be" - integrity sha512-o/rwLNnAo/+j9Yvw9mkBQOZySDYyOr/q+wptRLcAVGlU6djOeP9v1nlalbL9MFsobuBVQbZCTp+dIzdq+CLQUA== +"@changesets/config@^3.0.5": + version "3.0.5" + resolved "https://registry.yarnpkg.com/@changesets/config/-/config-3.0.5.tgz#cb59e9f338a4b35d3266af8a32799cb940d54ee0" + integrity sha512-QyXLSSd10GquX7hY0Mt4yQFMEeqnO5z/XLpbIr4PAkNNoQNKwDyiSrx4yd749WddusH1v3OSiA0NRAYmH/APpQ== dependencies: "@changesets/errors" "^0.2.0" - "@changesets/get-dependents-graph" "^2.0.0" - "@changesets/logger" "^0.1.0" + "@changesets/get-dependents-graph" "^2.1.2" + "@changesets/logger" "^0.1.1" "@changesets/types" "^6.0.0" "@manypkg/get-packages" "^1.1.3" fs-extra "^7.0.1" - micromatch "^4.0.2" + micromatch "^4.0.8" "@changesets/errors@^0.2.0": version "0.2.0" @@ -350,27 +353,25 @@ dependencies: extendable-error "^0.1.5" -"@changesets/get-dependents-graph@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@changesets/get-dependents-graph/-/get-dependents-graph-2.0.0.tgz#97f0cc9fbec436e0d6ab95a6a59c08acf21ac714" - integrity sha512-cafUXponivK4vBgZ3yLu944mTvam06XEn2IZGjjKc0antpenkYANXiiE6GExV/yKdsCnE8dXVZ25yGqLYZmScA== +"@changesets/get-dependents-graph@^2.1.2": + version "2.1.2" + resolved "https://registry.yarnpkg.com/@changesets/get-dependents-graph/-/get-dependents-graph-2.1.2.tgz#108304652d4bf22c9fee9f1d31dcf9908c24ca51" + integrity sha512-sgcHRkiBY9i4zWYBwlVyAjEM9sAzs4wYVwJUdnbDLnVG3QwAaia1Mk5P8M7kraTOZN+vBET7n8KyB0YXCbFRLQ== dependencies: "@changesets/types" "^6.0.0" "@manypkg/get-packages" "^1.1.3" - chalk "^2.1.0" - fs-extra "^7.0.1" + picocolors "^1.1.0" semver "^7.5.3" -"@changesets/get-release-plan@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@changesets/get-release-plan/-/get-release-plan-4.0.0.tgz#8cb057da90a08796a335dfd18073234d33902069" - integrity sha512-9L9xCUeD/Tb6L/oKmpm8nyzsOzhdNBBbt/ZNcjynbHC07WW4E1eX8NMGC5g5SbM5z/V+MOrYsJ4lRW41GCbg3w== - dependencies: - "@babel/runtime" "^7.20.1" - "@changesets/assemble-release-plan" "^6.0.0" - "@changesets/config" "^3.0.0" - "@changesets/pre" "^2.0.0" - "@changesets/read" "^0.6.0" +"@changesets/get-release-plan@^4.0.6": + version "4.0.6" + resolved "https://registry.yarnpkg.com/@changesets/get-release-plan/-/get-release-plan-4.0.6.tgz#40d70c2524be51a70b7e1a778826854bb6c8562a" + integrity sha512-FHRwBkY7Eili04Y5YMOZb0ezQzKikTka4wL753vfUA5COSebt7KThqiuCN9BewE4/qFGgF/5t3AuzXx1/UAY4w== + dependencies: + "@changesets/assemble-release-plan" "^6.0.5" + "@changesets/config" "^3.0.5" + "@changesets/pre" "^2.0.1" + "@changesets/read" "^0.6.2" "@changesets/types" "^6.0.0" "@manypkg/get-packages" "^1.1.3" @@ -379,25 +380,23 @@ resolved "https://registry.yarnpkg.com/@changesets/get-version-range-type/-/get-version-range-type-0.4.0.tgz#429a90410eefef4368502c41c63413e291740bf5" integrity sha512-hwawtob9DryoGTpixy1D3ZXbGgJu1Rhr+ySH2PvTLHvkZuQ7sRT4oQwMh0hbqZH1weAooedEjRsbrWcGLCeyVQ== -"@changesets/git@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@changesets/git/-/git-3.0.0.tgz#e71d003752a97bc27988db6d410e0038a4a88055" - integrity sha512-vvhnZDHe2eiBNRFHEgMiGd2CT+164dfYyrJDhwwxTVD/OW0FUD6G7+4DIx1dNwkwjHyzisxGAU96q0sVNBns0w== +"@changesets/git@^3.0.2": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@changesets/git/-/git-3.0.2.tgz#669c700049dc3b8ba53f46de45f5c4b1e6ddea3b" + integrity sha512-r1/Kju9Y8OxRRdvna+nxpQIsMsRQn9dhhAZt94FLDeu0Hij2hnOozW8iqnHBgvu+KdnJppCveQwK4odwfw/aWQ== dependencies: - "@babel/runtime" "^7.20.1" "@changesets/errors" "^0.2.0" - "@changesets/types" "^6.0.0" "@manypkg/get-packages" "^1.1.3" is-subdir "^1.1.1" - micromatch "^4.0.2" - spawndamnit "^2.0.0" + micromatch "^4.0.8" + spawndamnit "^3.0.1" -"@changesets/logger@^0.1.0": - version "0.1.0" - resolved "https://registry.yarnpkg.com/@changesets/logger/-/logger-0.1.0.tgz#2d2a58536c5beeeaef52ab464931d99fcf24f17b" - integrity sha512-pBrJm4CQm9VqFVwWnSqKEfsS2ESnwqwH+xR7jETxIErZcfd1u2zBSqrHbRHR7xjhSgep9x2PSKFKY//FAshA3g== +"@changesets/logger@^0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@changesets/logger/-/logger-0.1.1.tgz#9926ac4dc8fb00472fe1711603b6b4755d64b435" + integrity sha512-OQtR36ZlnuTxKqoW4Sv6x5YIhOmClRd5pWsjZsddYxpWs517R0HkyiefQPIytCVh4ZcC5x9XaG8KTdd5iRQUfg== dependencies: - chalk "^2.1.0" + picocolors "^1.1.0" "@changesets/parse@^0.4.0": version "0.4.0" @@ -407,30 +406,36 @@ "@changesets/types" "^6.0.0" js-yaml "^3.13.1" -"@changesets/pre@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@changesets/pre/-/pre-2.0.0.tgz#ad3edf3d6ac287991d7ef5e26cf280d03c9e3764" - integrity sha512-HLTNYX/A4jZxc+Sq8D1AMBsv+1qD6rmmJtjsCJa/9MSRybdxh0mjbTvE6JYZQ/ZiQ0mMlDOlGPXTm9KLTU3jyw== +"@changesets/pre@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@changesets/pre/-/pre-2.0.1.tgz#3ed60f9d218b3b81d3074d72139582da11a94d5f" + integrity sha512-vvBJ/If4jKM4tPz9JdY2kGOgWmCowUYOi5Ycv8dyLnEE8FgpYYUo1mgJZxcdtGGP3aG8rAQulGLyyXGSLkIMTQ== dependencies: - "@babel/runtime" "^7.20.1" "@changesets/errors" "^0.2.0" "@changesets/types" "^6.0.0" "@manypkg/get-packages" "^1.1.3" fs-extra "^7.0.1" -"@changesets/read@^0.6.0": - version "0.6.0" - resolved "https://registry.yarnpkg.com/@changesets/read/-/read-0.6.0.tgz#27e13b58d0b0eb3b0a5cba48a3f4f71f05ef4610" - integrity sha512-ZypqX8+/im1Fm98K4YcZtmLKgjs1kDQ5zHpc2U1qdtNBmZZfo/IBiG162RoP0CUF05tvp2y4IspH11PLnPxuuw== +"@changesets/read@^0.6.2": + version "0.6.2" + resolved "https://registry.yarnpkg.com/@changesets/read/-/read-0.6.2.tgz#816cf75dd22a70e75ac279474e44be52fb3fb91b" + integrity sha512-wjfQpJvryY3zD61p8jR87mJdyx2FIhEcdXhKUqkja87toMrP/3jtg/Yg29upN+N4Ckf525/uvV7a4tzBlpk6gg== dependencies: - "@babel/runtime" "^7.20.1" - "@changesets/git" "^3.0.0" - "@changesets/logger" "^0.1.0" + "@changesets/git" "^3.0.2" + "@changesets/logger" "^0.1.1" "@changesets/parse" "^0.4.0" "@changesets/types" "^6.0.0" - chalk "^2.1.0" fs-extra "^7.0.1" p-filter "^2.1.0" + picocolors "^1.1.0" + +"@changesets/should-skip-package@^0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@changesets/should-skip-package/-/should-skip-package-0.1.1.tgz#76218ef4ce7691351a6dffdb356e8893267b0b3a" + integrity sha512-H9LjLbF6mMHLtJIc/eHR9Na+MifJ3VxtgP/Y+XLn4BF7tDTEN1HNYtH6QMcjP1uxp9sjaFYmW8xqloaCi/ckTg== + dependencies: + "@changesets/types" "^6.0.0" + "@manypkg/get-packages" "^1.1.3" "@changesets/types@^4.0.1": version "4.1.0" @@ -442,31 +447,25 @@ resolved "https://registry.yarnpkg.com/@changesets/types/-/types-6.0.0.tgz#e46abda9890610dd1fbe1617730173d2267544bd" integrity sha512-b1UkfNulgKoWfqyHtzKS5fOZYSJO+77adgL7DLRDr+/7jhChN+QcHnbjiQVOz/U+Ts3PGNySq7diAItzDgugfQ== -"@changesets/write@^0.3.0": - version "0.3.0" - resolved "https://registry.yarnpkg.com/@changesets/write/-/write-0.3.0.tgz#c6c5bc390cce4031da20eab8a4ca2d71453a1985" - integrity sha512-slGLb21fxZVUYbyea+94uFiD6ntQW0M2hIKNznFizDhZPDgn2c/fv1UzzlW43RVzh1BEDuIqW6hzlJ1OflNmcw== +"@changesets/write@^0.3.2": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@changesets/write/-/write-0.3.2.tgz#bee64e4ccdff480872df5d1e38f2b913cb940116" + integrity sha512-kDxDrPNpUgsjDbWBvUo27PzKX4gqeKOlhibaOXDJA6kuBisGqNHv/HwGJrAu8U/dSf8ZEFIeHIPtvSlZI1kULw== dependencies: - "@babel/runtime" "^7.20.1" "@changesets/types" "^6.0.0" fs-extra "^7.0.1" human-id "^1.0.2" prettier "^2.7.1" -"@coinbase/wallet-sdk@3.9.1": - version "3.9.1" - resolved "https://registry.yarnpkg.com/@coinbase/wallet-sdk/-/wallet-sdk-3.9.1.tgz#503a14671bb392d653623ef2340934e213ac971f" - integrity sha512-cGUE8wm1/cMI8irRMVOqbFWYcnNugqCtuy2lnnHfgloBg+GRLs9RsrkOUDMdv/StfUeeKhCDyYudsXXvcL1xIA== +"@coinbase/wallet-sdk@4.3.0": + version "4.3.0" + resolved "https://registry.yarnpkg.com/@coinbase/wallet-sdk/-/wallet-sdk-4.3.0.tgz#03b8fce92ac2b3b7cf132f64d6008ac081569b4e" + integrity sha512-T3+SNmiCw4HzDm4we9wCHCxlP0pqCiwKe4sOwPH3YAK2KSKjxPRydKu6UQJrdONFVLG7ujXvbd/6ZqmvJb8rkw== dependencies: - bn.js "^5.2.1" - buffer "^6.0.3" + "@noble/hashes" "^1.4.0" clsx "^1.2.1" - eth-block-tracker "^7.1.0" - eth-json-rpc-filters "^6.0.0" eventemitter3 "^5.0.1" - keccak "^3.0.3" - preact "^10.16.0" - sha.js "^2.4.11" + preact "^10.24.2" "@cspotcode/source-map-support@^0.8.0": version "0.8.1" @@ -525,113 +524,16 @@ resolved "https://registry.yarnpkg.com/@delvtech/fixed-point-wasm/-/fixed-point-wasm-0.0.7.tgz#616e7e5056eaa6f9c4f0d91445d4e8dbc95a9a08" integrity sha512-cGMlCccGqVMiPBtA1vvic/fc5ZoKBcYun9qma/MktKAn92obhbs0ib6it0Ev2mCD+pwKLOY0Ar+kIqWncEkq4A== -"@emotion/babel-plugin@^11.11.0": - version "11.11.0" - resolved "https://registry.yarnpkg.com/@emotion/babel-plugin/-/babel-plugin-11.11.0.tgz#c2d872b6a7767a9d176d007f5b31f7d504bb5d6c" - integrity sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ== - dependencies: - "@babel/helper-module-imports" "^7.16.7" - "@babel/runtime" "^7.18.3" - "@emotion/hash" "^0.9.1" - "@emotion/memoize" "^0.8.1" - "@emotion/serialize" "^1.1.2" - babel-plugin-macros "^3.1.0" - convert-source-map "^1.5.0" - escape-string-regexp "^4.0.0" - find-root "^1.1.0" - source-map "^0.5.7" - stylis "4.2.0" - -"@emotion/cache@^11.11.0": - version "11.11.0" - resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-11.11.0.tgz#809b33ee6b1cb1a625fef7a45bc568ccd9b8f3ff" - integrity sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ== - dependencies: - "@emotion/memoize" "^0.8.1" - "@emotion/sheet" "^1.2.2" - "@emotion/utils" "^1.2.1" - "@emotion/weak-memoize" "^0.3.1" - stylis "4.2.0" - -"@emotion/hash@^0.9.0", "@emotion/hash@^0.9.1": +"@ecies/ciphers@^0.2.2": + version "0.2.2" + resolved "https://registry.yarnpkg.com/@ecies/ciphers/-/ciphers-0.2.2.tgz#82a15b10a6e502b63fb30915d944b2eaf3ff17ff" + integrity sha512-ylfGR7PyTd+Rm2PqQowG08BCKA22QuX8NzrL+LxAAvazN10DMwdJ2fWwAzRj05FI/M8vNFGm3cv9Wq/GFWCBLg== + +"@emotion/hash@^0.9.0": version "0.9.1" resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.9.1.tgz#4ffb0055f7ef676ebc3a5a91fb621393294e2f43" integrity sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ== -"@emotion/is-prop-valid@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-1.2.1.tgz#23116cf1ed18bfeac910ec6436561ecb1a3885cc" - integrity sha512-61Mf7Ufx4aDxx1xlDeOm8aFFigGHE4z+0sKCa+IHCeZKiyP9RLD0Mmx7m8b9/Cf37f7NAvQOOJAbQQGVr5uERw== - dependencies: - "@emotion/memoize" "^0.8.1" - -"@emotion/memoize@^0.8.1": - version "0.8.1" - resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.8.1.tgz#c1ddb040429c6d21d38cc945fe75c818cfb68e17" - integrity sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA== - -"@emotion/react@^11.10.6": - version "11.11.3" - resolved "https://registry.yarnpkg.com/@emotion/react/-/react-11.11.3.tgz#96b855dc40a2a55f52a72f518a41db4f69c31a25" - integrity sha512-Cnn0kuq4DoONOMcnoVsTOR8E+AdnKFf//6kUWc4LCdnxj31pZWn7rIULd6Y7/Js1PiPHzn7SKCM9vB/jBni8eA== - dependencies: - "@babel/runtime" "^7.18.3" - "@emotion/babel-plugin" "^11.11.0" - "@emotion/cache" "^11.11.0" - "@emotion/serialize" "^1.1.3" - "@emotion/use-insertion-effect-with-fallbacks" "^1.0.1" - "@emotion/utils" "^1.2.1" - "@emotion/weak-memoize" "^0.3.1" - hoist-non-react-statics "^3.3.1" - -"@emotion/serialize@^1.1.2", "@emotion/serialize@^1.1.3": - version "1.1.3" - resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-1.1.3.tgz#84b77bfcfe3b7bb47d326602f640ccfcacd5ffb0" - integrity sha512-iD4D6QVZFDhcbH0RAG1uVu1CwVLMWUkCvAqqlewO/rxf8+87yIBAlt4+AxMiiKPLs5hFc0owNk/sLLAOROw3cA== - dependencies: - "@emotion/hash" "^0.9.1" - "@emotion/memoize" "^0.8.1" - "@emotion/unitless" "^0.8.1" - "@emotion/utils" "^1.2.1" - csstype "^3.0.2" - -"@emotion/sheet@^1.2.2": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-1.2.2.tgz#d58e788ee27267a14342303e1abb3d508b6d0fec" - integrity sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA== - -"@emotion/styled@^11.10.6": - version "11.11.0" - resolved "https://registry.yarnpkg.com/@emotion/styled/-/styled-11.11.0.tgz#26b75e1b5a1b7a629d7c0a8b708fbf5a9cdce346" - integrity sha512-hM5Nnvu9P3midq5aaXj4I+lnSfNi7Pmd4EWk1fOZ3pxookaQTNew6bp4JaCBYM4HVFZF9g7UjJmsUmC2JlxOng== - dependencies: - "@babel/runtime" "^7.18.3" - "@emotion/babel-plugin" "^11.11.0" - "@emotion/is-prop-valid" "^1.2.1" - "@emotion/serialize" "^1.1.2" - "@emotion/use-insertion-effect-with-fallbacks" "^1.0.1" - "@emotion/utils" "^1.2.1" - -"@emotion/unitless@^0.8.1": - version "0.8.1" - resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.8.1.tgz#182b5a4704ef8ad91bde93f7a860a88fd92c79a3" - integrity sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ== - -"@emotion/use-insertion-effect-with-fallbacks@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.1.tgz#08de79f54eb3406f9daaf77c76e35313da963963" - integrity sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw== - -"@emotion/utils@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-1.2.1.tgz#bbab58465738d31ae4cb3dbb6fc00a5991f755e4" - integrity sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg== - -"@emotion/weak-memoize@^0.3.1": - version "0.3.1" - resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.3.1.tgz#d0fce5d07b0620caa282b5131c297bb60f9d87e6" - integrity sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww== - "@ensdomains/address-encoder@1.0.0-rc.3": version "1.0.0-rc.3" resolved "https://registry.yarnpkg.com/@ensdomains/address-encoder/-/address-encoder-1.0.0-rc.3.tgz#78a8081bed834661e7fd21a9c9f67f927100fce5" @@ -1580,14 +1482,32 @@ "@metamask/safe-event-emitter" "^3.0.0" "@metamask/utils" "^8.3.0" -"@metamask/object-multiplex@^1.1.0": - version "1.3.0" - resolved "https://registry.yarnpkg.com/@metamask/object-multiplex/-/object-multiplex-1.3.0.tgz#459de4862aa5a5a025dabceadda0ffd553ca4b25" - integrity sha512-czcQeVYdSNtabd+NcYQnrM69MciiJyd1qvKH8WM2Id3C0ZiUUX5Xa/MK+/VUk633DBhVOwdNzAKIQ33lGyA+eQ== +"@metamask/json-rpc-engine@^8.0.1", "@metamask/json-rpc-engine@^8.0.2": + version "8.0.2" + resolved "https://registry.yarnpkg.com/@metamask/json-rpc-engine/-/json-rpc-engine-8.0.2.tgz#29510a871a8edef892f838ee854db18de0bf0d14" + integrity sha512-IoQPmql8q7ABLruW7i4EYVHWUbF74yrp63bRuXV5Zf9BQwcn5H9Ww1eLtROYvI1bUXwOiHZ6qT5CWTrDc/t/AA== + dependencies: + "@metamask/rpc-errors" "^6.2.1" + "@metamask/safe-event-emitter" "^3.0.0" + "@metamask/utils" "^8.3.0" + +"@metamask/json-rpc-middleware-stream@^7.0.1": + version "7.0.2" + resolved "https://registry.yarnpkg.com/@metamask/json-rpc-middleware-stream/-/json-rpc-middleware-stream-7.0.2.tgz#2e8b2cbc38968e3c6239a9144c35bbb08a8fb57d" + integrity sha512-yUdzsJK04Ev98Ck4D7lmRNQ8FPioXYhEUZOMS01LXW8qTvPGiRVXmVltj2p4wrLkh0vW7u6nv0mNl5xzC5Qmfg== + dependencies: + "@metamask/json-rpc-engine" "^8.0.2" + "@metamask/safe-event-emitter" "^3.0.0" + "@metamask/utils" "^8.3.0" + readable-stream "^3.6.2" + +"@metamask/object-multiplex@^2.0.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@metamask/object-multiplex/-/object-multiplex-2.1.0.tgz#5e2e908fc46aee581cbba809870eeee0e571cbb6" + integrity sha512-4vKIiv0DQxljcXwfpnbsXcfa5glMj5Zg9mqn4xpIWqkv6uJ2ma5/GtUfLFSxhlxnR8asRMv8dDmWya1Tc1sDFA== dependencies: - end-of-stream "^1.4.4" once "^1.4.0" - readable-stream "^2.3.3" + readable-stream "^3.6.2" "@metamask/onboarding@^1.0.1": version "1.0.1" @@ -1596,31 +1516,23 @@ dependencies: bowser "^2.9.0" -"@metamask/post-message-stream@^6.1.0": - version "6.2.0" - resolved "https://registry.yarnpkg.com/@metamask/post-message-stream/-/post-message-stream-6.2.0.tgz#3db0a50adc2b2206d1bb95739e7fff49e36e0324" - integrity sha512-WunZ0bruClF862mvbKQGETn5SM0XKGmocPMQR1Ew6sYix9/FDzeoZnoI8RkXk01E+70FCdxhTE/r8kk5SFOuTw== - dependencies: - "@metamask/utils" "^5.0.0" - readable-stream "2.3.3" - -"@metamask/providers@^10.2.1": - version "10.2.1" - resolved "https://registry.yarnpkg.com/@metamask/providers/-/providers-10.2.1.tgz#61304940adeccc7421dcda30ffd1d834273cc77b" - integrity sha512-p2TXw2a1Nb8czntDGfeIYQnk4LLVbd5vlcb3GY//lylYlKdSqp+uUTegCvxiFblRDOT68jsY8Ib1VEEzVUOolA== +"@metamask/providers@16.1.0": + version "16.1.0" + resolved "https://registry.yarnpkg.com/@metamask/providers/-/providers-16.1.0.tgz#7da593d17c541580fa3beab8d9d8a9b9ce19ea07" + integrity sha512-znVCvux30+3SaUwcUGaSf+pUckzT5ukPRpcBmy+muBLC0yaWnBcvDqGfcsw6CBIenUdFrVoAFa8B6jsuCY/a+g== dependencies: - "@metamask/object-multiplex" "^1.1.0" - "@metamask/safe-event-emitter" "^2.0.0" - "@types/chrome" "^0.0.136" + "@metamask/json-rpc-engine" "^8.0.1" + "@metamask/json-rpc-middleware-stream" "^7.0.1" + "@metamask/object-multiplex" "^2.0.0" + "@metamask/rpc-errors" "^6.2.1" + "@metamask/safe-event-emitter" "^3.1.1" + "@metamask/utils" "^8.3.0" detect-browser "^5.2.0" - eth-rpc-errors "^4.0.2" - extension-port-stream "^2.0.1" - fast-deep-equal "^2.0.1" + extension-port-stream "^3.0.0" + fast-deep-equal "^3.1.3" is-stream "^2.0.0" - json-rpc-engine "^6.1.0" - json-rpc-middleware-stream "^4.2.1" - pump "^3.0.0" - webextension-polyfill-ts "^0.25.0" + readable-stream "^3.6.2" + webextension-polyfill "^0.10.0" "@metamask/rpc-errors@^6.1.0": version "6.1.0" @@ -1630,6 +1542,14 @@ "@metamask/utils" "^8.1.0" fast-safe-stringify "^2.0.6" +"@metamask/rpc-errors@^6.2.1": + version "6.4.0" + resolved "https://registry.yarnpkg.com/@metamask/rpc-errors/-/rpc-errors-6.4.0.tgz#a7ce01c06c9a347ab853e55818ac5654a73bd006" + integrity sha512-1ugFO1UoirU2esS3juZanS/Fo8C8XYocCuBpfZI5N7ECtoG+zu0wF+uWZASik6CkO6w9n/Iebt4iI4pT0vptpg== + dependencies: + "@metamask/utils" "^9.0.0" + fast-safe-stringify "^2.0.6" + "@metamask/safe-event-emitter@^2.0.0": version "2.0.0" resolved "https://registry.yarnpkg.com/@metamask/safe-event-emitter/-/safe-event-emitter-2.0.0.tgz#af577b477c683fad17c619a78208cede06f9605c" @@ -1640,65 +1560,60 @@ resolved "https://registry.yarnpkg.com/@metamask/safe-event-emitter/-/safe-event-emitter-3.0.0.tgz#8c2b9073fe0722d48693143b0dc8448840daa3bd" integrity sha512-j6Z47VOmVyGMlnKXZmL0fyvWfEYtKWCA9yGZkU3FCsGZUT5lHGmvaV9JA5F2Y+010y7+ROtR3WMXIkvl/nVzqQ== -"@metamask/sdk-communication-layer@0.14.3": - version "0.14.3" - resolved "https://registry.yarnpkg.com/@metamask/sdk-communication-layer/-/sdk-communication-layer-0.14.3.tgz#0e7ec8e472641273da5802f3b357687ce12369c3" - integrity sha512-yjSbj8y7fFbQXv2HBzUX6D9C8BimkCYP6BDV7hdw53W8b/GlYCtXVxUFajQ9tuO1xPTRjR/xt/dkdr2aCi6WGw== +"@metamask/safe-event-emitter@^3.1.1": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@metamask/safe-event-emitter/-/safe-event-emitter-3.1.2.tgz#bfac8c7a1a149b5bbfe98f59fbfea512dfa3bad4" + integrity sha512-5yb2gMI1BDm0JybZezeoX/3XhPDOtTbcFvpTXM9kxsoZjPZFh4XciqRbpD6N86HYZqWDhEaKUDuOyR0sQHEjMA== + +"@metamask/sdk-communication-layer@0.32.0": + version "0.32.0" + resolved "https://registry.yarnpkg.com/@metamask/sdk-communication-layer/-/sdk-communication-layer-0.32.0.tgz#89710e807806836138ea5018b087731d6acab627" + integrity sha512-dmj/KFjMi1fsdZGIOtbhxdg3amxhKL/A5BqSU4uh/SyDKPub/OT+x5pX8bGjpTL1WPWY/Q0OIlvFyX3VWnT06Q== dependencies: bufferutil "^4.0.8" - cross-fetch "^3.1.5" date-fns "^2.29.3" - eciesjs "^0.3.16" - eventemitter2 "^6.4.5" - socket.io-client "^4.5.1" - utf-8-validate "^6.0.3" + debug "^4.3.4" + utf-8-validate "^5.0.2" uuid "^8.3.2" -"@metamask/sdk-install-modal-web@0.14.1": - version "0.14.1" - resolved "https://registry.yarnpkg.com/@metamask/sdk-install-modal-web/-/sdk-install-modal-web-0.14.1.tgz#c8e64b4f7d2dac262c2ec28025c541b258478c31" - integrity sha512-emT8HKbnfVwGhPxyUfMja6DWzvtJvDEBQxqCVx93H0HsyrrOzOC43iGCAosslw6o5h7gOfRKLqWmK8V7jQAS2Q== - dependencies: - "@emotion/react" "^11.10.6" - "@emotion/styled" "^11.10.6" - i18next "22.5.1" - qr-code-styling "^1.6.0-rc.1" - react "^18.2.0" - react-dom "^18.2.0" - react-i18next "^13.2.2" - -"@metamask/sdk@0.14.3": - version "0.14.3" - resolved "https://registry.yarnpkg.com/@metamask/sdk/-/sdk-0.14.3.tgz#ec1ecf00edef981fd17e2c5cf4ec40ce0a43a55c" - integrity sha512-BYLs//nY2wioVSih78gOQI6sLIYY3vWkwVqXGYUgkBV+bi49bv+9S0m+hZ2cwiRaxfMYtKs0KvhAQ8weiYwDrg== +"@metamask/sdk-install-modal-web@0.32.0": + version "0.32.0" + resolved "https://registry.yarnpkg.com/@metamask/sdk-install-modal-web/-/sdk-install-modal-web-0.32.0.tgz#86f80420ca364fa0d7710016fa5c81f95537ab23" + integrity sha512-TFoktj0JgfWnQaL3yFkApqNwcaqJ+dw4xcnrJueMP3aXkSNev2Ido+WVNOg4IIMxnmOrfAC9t0UJ0u/dC9MjOQ== + dependencies: + "@paulmillr/qr" "^0.2.1" + +"@metamask/sdk@0.32.0": + version "0.32.0" + resolved "https://registry.yarnpkg.com/@metamask/sdk/-/sdk-0.32.0.tgz#f0e179746fe69dccd032a9026884b45b519c1975" + integrity sha512-WmGAlP1oBuD9hk4CsdlG1WJFuPtYJY+dnTHJMeCyohTWD2GgkcLMUUuvu9lO1/NVzuOoSi1OrnjbuY1O/1NZ1g== dependencies: + "@babel/runtime" "^7.26.0" "@metamask/onboarding" "^1.0.1" - "@metamask/post-message-stream" "^6.1.0" - "@metamask/providers" "^10.2.1" - "@metamask/sdk-communication-layer" "0.14.3" - "@metamask/sdk-install-modal-web" "0.14.1" - "@react-native-async-storage/async-storage" "^1.17.11" - "@types/dom-screen-wake-lock" "^1.0.0" + "@metamask/providers" "16.1.0" + "@metamask/sdk-communication-layer" "0.32.0" + "@metamask/sdk-install-modal-web" "0.32.0" + "@paulmillr/qr" "^0.2.1" bowser "^2.9.0" cross-fetch "^4.0.0" - eciesjs "^0.3.15" + debug "^4.3.4" + eciesjs "^0.4.11" eth-rpc-errors "^4.0.3" - eventemitter2 "^6.4.7" - extension-port-stream "^2.0.1" - i18next "22.5.1" - i18next-browser-languagedetector "^7.1.0" + eventemitter2 "^6.4.9" obj-multiplex "^1.0.0" pump "^3.0.0" - qrcode-terminal-nooctal "^0.12.1" - react-i18next "^13.2.2" - react-native-webview "^11.26.0" - readable-stream "^2.3.7" - rollup-plugin-visualizer "^5.9.2" + readable-stream "^3.6.2" socket.io-client "^4.5.1" + tslib "^2.6.0" util "^0.12.4" uuid "^8.3.2" -"@metamask/utils@^5.0.0", "@metamask/utils@^5.0.1": +"@metamask/superstruct@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@metamask/superstruct/-/superstruct-3.1.0.tgz#148f786a674fba3ac885c1093ab718515bf7f648" + integrity sha512-N08M56HdOgBfRKkrgCMZvQppkZGcArEop3kixNEtVbJKm6P9Cfg0YkI6X0s1g78sNrj2fWUwvJADdZuzJgFttA== + +"@metamask/utils@^5.0.1": version "5.0.2" resolved "https://registry.yarnpkg.com/@metamask/utils/-/utils-5.0.2.tgz#140ba5061d90d9dac0280c19cab101bc18c8857c" integrity sha512-yfmE79bRQtnMzarnKfX7AEJBwFTxvTyw3nBQlu/5rmGXrjAeAMltoGxO62TFurxrQAFMNa/fEjIHNvungZp0+g== @@ -1723,6 +1638,21 @@ semver "^7.5.4" superstruct "^1.0.3" +"@metamask/utils@^9.0.0": + version "9.3.0" + resolved "https://registry.yarnpkg.com/@metamask/utils/-/utils-9.3.0.tgz#4726bd7f5d6a43ea8425b6d663ab9207f617c2d1" + integrity sha512-w8CVbdkDrVXFJbfBSlDfafDR6BAkpDmv1bC1UJVCoVny5tW2RKAdn9i68Xf7asYT4TnUhl/hN4zfUiKQq9II4g== + dependencies: + "@ethereumjs/tx" "^4.2.0" + "@metamask/superstruct" "^3.1.0" + "@noble/hashes" "^1.3.1" + "@scure/base" "^1.1.3" + "@types/debug" "^4.1.7" + debug "^4.3.4" + pony-cause "^2.1.10" + semver "^7.5.4" + uuid "^9.0.1" + "@motionone/animation@^10.15.1", "@motionone/animation@^10.17.0": version "10.17.0" resolved "https://registry.yarnpkg.com/@motionone/animation/-/animation-10.17.0.tgz#7633c6f684b5fee2b61c405881b8c24662c68fca" @@ -1869,6 +1799,11 @@ resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.0.0.tgz#c54a5a739dee04b20338d305226a2acdf701f67f" integrity sha512-FFOGGWwTCRMu9W7MF496Urefxtuo2lttxF1vwS+1rIRsKvuLrWhVaVTj3T8sf2EBL6gtJbmh4TYlizS+obnGKA== +"@noble/ciphers@^1.0.0": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@noble/ciphers/-/ciphers-1.2.1.tgz#3812b72c057a28b44ff0ad4aff5ca846e5b9cdc9" + integrity sha512-rONPWMC7PeExE077uLE4oqWrZ1IvAfz3oH9LibVAcVCopJiA9R62uavnbEzdkVmJYI6M6Zgkbeb07+tWjlq2XA== + "@noble/curves@1.2.0", "@noble/curves@~1.2.0": version "1.2.0" resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.2.0.tgz#92d7e12e4e49b23105a2555c6984d41733d65c35" @@ -1883,7 +1818,7 @@ dependencies: "@noble/hashes" "1.3.3" -"@noble/curves@^1.6.0", "@noble/curves@~1.8.1": +"@noble/curves@1.8.1", "@noble/curves@^1.6.0", "@noble/curves@~1.8.1": version "1.8.1" resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.8.1.tgz#19bc3970e205c99e4bdb1c64a4785706bce497ff" integrity sha512-warwspo+UYUPep0Q+vtdVB4Ugn8GGQj8iyB3gnRWsztmUHTI3S1nhdiWNsPUGL0vud7JlRRk1XEu7Lq1KGTnMQ== @@ -1905,7 +1840,7 @@ resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.3.tgz#39908da56a4adc270147bb07968bf3b16cfe1699" integrity sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA== -"@noble/hashes@1.7.1", "@noble/hashes@^1.5.0", "@noble/hashes@~1.7.1": +"@noble/hashes@1.7.1", "@noble/hashes@^1.4.0", "@noble/hashes@^1.5.0", "@noble/hashes@~1.7.1": version "1.7.1" resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.7.1.tgz#5738f6d765710921e7a751e00c20ae091ed8db0f" integrity sha512-B8XBPsn4vT/KJAGqDzbwztd+6Yte3P4V7iafm24bxgDe/mlRuK6xmWPuCNrKt2vDafZ8MfJLlchDG/vYafQEjQ== @@ -2230,6 +2165,11 @@ "@parcel/watcher-win32-ia32" "2.4.0" "@parcel/watcher-win32-x64" "2.4.0" +"@paulmillr/qr@^0.2.1": + version "0.2.1" + resolved "https://registry.yarnpkg.com/@paulmillr/qr/-/qr-0.2.1.tgz#76ade7080be4ac4824f638146fd8b6db1805eeca" + integrity sha512-IHnV6A+zxU7XwmKFinmYjUcwlyK9+xkG3/s9KcQhI9BjQKycrJ1JRO+FbNYPwZiPKW3je/DR0k7w8/gLa5eaxQ== + "@pkgjs/parseargs@^0.11.0": version "0.11.0" resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" @@ -2271,13 +2211,6 @@ react-remove-scroll "2.5.7" ua-parser-js "^1.0.37" -"@react-native-async-storage/async-storage@^1.17.11": - version "1.21.0" - resolved "https://registry.yarnpkg.com/@react-native-async-storage/async-storage/-/async-storage-1.21.0.tgz#d7e370028e228ab84637016ceeb495878b7a44c8" - integrity sha512-JL0w36KuFHFCvnbOXRekqVAUplmOyT/OuCQkogo6X98MtpSaJOKEAeZnYO8JB0U/RIEixZaGI5px73YbRm/oag== - dependencies: - merge-options "^3.0.4" - "@rollup/rollup-android-arm-eabi@4.34.6": version "4.34.6" resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.34.6.tgz#9b726b4dcafb9332991e9ca49d54bafc71d9d87f" @@ -2443,21 +2376,21 @@ resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.7.2.tgz#2d4260033e199b3032a08b41348ac10de21c47e9" integrity sha512-RbhOOTCNoCrbfkRyoXODZp75MlpiHMgbE5MEBZAnnnLyQNgrigEj4p0lzsMDyc1zVsJDLrivB58tgg3emX0eEA== -"@safe-global/safe-apps-provider@0.18.1": - version "0.18.1" - resolved "https://registry.yarnpkg.com/@safe-global/safe-apps-provider/-/safe-apps-provider-0.18.1.tgz#287b5a1e2ef3be630dacde54279409df3ced8202" - integrity sha512-V4a05A3EgJcriqtDoJklDz1BOinWhC6P0hjUSxshA4KOZM7rGPCTto/usXs09zr1vvL28evl/NldSTv97j2bmg== +"@safe-global/safe-apps-provider@0.18.5": + version "0.18.5" + resolved "https://registry.yarnpkg.com/@safe-global/safe-apps-provider/-/safe-apps-provider-0.18.5.tgz#745a932bda3739a8a298ae44ec6c465f6c4773b7" + integrity sha512-9v9wjBi3TwLsEJ3C2ujYoexp3pFJ0omDLH/GX91e2QB+uwCKTBYyhxFSrTQ9qzoyQd+bfsk4gjOGW87QcJhf7g== dependencies: - "@safe-global/safe-apps-sdk" "^8.1.0" + "@safe-global/safe-apps-sdk" "^9.1.0" events "^3.3.0" -"@safe-global/safe-apps-sdk@8.1.0", "@safe-global/safe-apps-sdk@^8.1.0": - version "8.1.0" - resolved "https://registry.yarnpkg.com/@safe-global/safe-apps-sdk/-/safe-apps-sdk-8.1.0.tgz#d1d0c69cd2bf4eef8a79c5d677d16971926aa64a" - integrity sha512-XJbEPuaVc7b9n23MqlF6c+ToYIS3f7P2Sel8f3cSBQ9WORE4xrSuvhMpK9fDSFqJ7by/brc+rmJR/5HViRr0/w== +"@safe-global/safe-apps-sdk@9.1.0", "@safe-global/safe-apps-sdk@^9.1.0": + version "9.1.0" + resolved "https://registry.yarnpkg.com/@safe-global/safe-apps-sdk/-/safe-apps-sdk-9.1.0.tgz#0e65913e0f202e529ed3c846e0f5a98c2d35aa98" + integrity sha512-N5p/ulfnnA2Pi2M3YeWjULeWbjo7ei22JwU/IXnhoHzKq3pYCN6ynL9mJBOlvDVv892EgLPCWCOwQk/uBT2v0Q== dependencies: "@safe-global/safe-gateway-typescript-sdk" "^3.5.3" - viem "^1.0.0" + viem "^2.1.1" "@safe-global/safe-gateway-typescript-sdk@^3.5.3": version "3.14.0" @@ -2501,7 +2434,7 @@ "@noble/hashes" "~1.3.2" "@scure/base" "~1.1.4" -"@scure/bip32@^1.5.0": +"@scure/bip32@1.6.2", "@scure/bip32@^1.5.0": version "1.6.2" resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.6.2.tgz#093caa94961619927659ed0e711a6e4bf35bffd0" integrity sha512-t96EPDMbtGgtb7onKKqxRLfE5g05k7uHnHRM2xdE6BP/ZmxaLtPek4J4KfVn/90IQNrU1IOAqMgiDtUdtbe3nw== @@ -2534,7 +2467,7 @@ "@noble/hashes" "~1.3.2" "@scure/base" "~1.1.4" -"@scure/bip39@^1.4.0": +"@scure/bip39@1.5.4", "@scure/bip39@^1.4.0": version "1.5.4" resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.5.4.tgz#07fd920423aa671be4540d59bdd344cc1461db51" integrity sha512-TFM4ni0vKvCfBpohoh+/lY05i9gRbSwXWngAsF4CABQxoaOHijxuaZ2R6cStDQ5CHtHO9aGJTr4ksVJASRRyMA== @@ -2782,7 +2715,7 @@ "@stablelib/constant-time" "^1.0.1" "@stablelib/wipe" "^1.0.1" -"@stablelib/random@^1.0.1", "@stablelib/random@^1.0.2": +"@stablelib/random@1.0.2", "@stablelib/random@^1.0.1", "@stablelib/random@^1.0.2": version "1.0.2" resolved "https://registry.yarnpkg.com/@stablelib/random/-/random-1.0.2.tgz#2dece393636489bf7e19c51229dd7900eddf742c" integrity sha512-rIsE83Xpb7clHPVRlBj8qNe5L8ISQOzjghYQm/dZ7VaM2KHYwMW5adjQjrzTZCchFnNCNhkwtnOBa9HTMJCI8w== @@ -2813,7 +2746,7 @@ resolved "https://registry.yarnpkg.com/@stablelib/wipe/-/wipe-1.0.1.tgz#d21401f1d59ade56a62e139462a97f104ed19a36" integrity sha512-WfqfX/eXGiAd3RJe4VU2snh/ZPwtSjLG4ynQ/vYzvghTh7dHFcI1wl+nrkWG6lGhukOxOsUHfv8dUXr58D0ayg== -"@stablelib/x25519@^1.0.3": +"@stablelib/x25519@1.0.3": version "1.0.3" resolved "https://registry.yarnpkg.com/@stablelib/x25519/-/x25519-1.0.3.tgz#13c8174f774ea9f3e5e42213cbf9fc68a3c7b7fd" integrity sha512-KnTbKmUhPhHavzobclVJQG5kuivH+qDLpe84iRqX3CLrKp881cF160JvXJ+hjn1aMyCwYOKeIZefIH/P5cJoRw== @@ -2945,14 +2878,6 @@ dependencies: "@types/node" "*" -"@types/chrome@^0.0.136": - version "0.0.136" - resolved "https://registry.yarnpkg.com/@types/chrome/-/chrome-0.0.136.tgz#7c011b9f997b0156f25a140188a0c5689d3f368f" - integrity sha512-XDEiRhLkMd+SB7Iw3ZUIj/fov3wLd4HyTdLltVszkgl1dBfc3Rb7oPMVZ2Mz2TLqnF7Ow+StbR8E7r9lqpb4DA== - dependencies: - "@types/filesystem" "*" - "@types/har-format" "*" - "@types/cli-table@^0.3.4": version "0.3.4" resolved "https://registry.yarnpkg.com/@types/cli-table/-/cli-table-0.3.4.tgz#ecc3efce1b4d13503de59d2ddb49b8f9fd7203e7" @@ -2970,11 +2895,6 @@ dependencies: "@types/ms" "*" -"@types/dom-screen-wake-lock@^1.0.0": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@types/dom-screen-wake-lock/-/dom-screen-wake-lock-1.0.3.tgz#c3588a5f6f40fae957f9ce5be9bc4927a61bb9a0" - integrity sha512-3Iten7X3Zgwvk6kh6/NRdwN7WbZ760YgFCsF5AxDifltUQzW1RaW+WRmcVtgwFzLjaNu64H+0MPJ13yRa8g3Dw== - "@types/estree@1.0.5", "@types/estree@^1.0.0": version "1.0.5" resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4" @@ -2985,23 +2905,6 @@ resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.6.tgz#628effeeae2064a1b4e79f78e81d87b7e5fc7b50" integrity sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw== -"@types/filesystem@*": - version "0.0.35" - resolved "https://registry.yarnpkg.com/@types/filesystem/-/filesystem-0.0.35.tgz#6d6766626083e2b397c09bdc57092827120db11d" - integrity sha512-1eKvCaIBdrD2mmMgy5dwh564rVvfEhZTWVQQGRNn0Nt4ZEnJ0C8oSUCzvMKRA4lGde5oEVo+q2MrTTbV/GHDCQ== - dependencies: - "@types/filewriter" "*" - -"@types/filewriter@*": - version "0.0.33" - resolved "https://registry.yarnpkg.com/@types/filewriter/-/filewriter-0.0.33.tgz#d9d611db9d9cd99ae4e458de420eeb64ad604ea8" - integrity sha512-xFU8ZXTw4gd358lb2jw25nxY9QAgqn2+bKKjKOYfNCzN4DKCFetK7sPtrlpg66Ywe3vWY9FNxprZawAh9wfJ3g== - -"@types/har-format@*": - version "1.2.15" - resolved "https://registry.yarnpkg.com/@types/har-format/-/har-format-1.2.15.tgz#f352493638c2f89d706438a19a9eb300b493b506" - integrity sha512-RpQH4rXLuvTXKR0zqHq3go0RVXYv/YVqv4TnPH95VbwUxZdQlK1EtcMvQvMpDngHbt13Csh9Z4qT9AbkiQH5BA== - "@types/hast@^3.0.4": version "3.0.4" resolved "https://registry.yarnpkg.com/@types/hast/-/hast-3.0.4.tgz#1d6b39993b82cea6ad783945b0508c25903e15aa" @@ -3043,11 +2946,6 @@ resolved "https://registry.yarnpkg.com/@types/lru-cache/-/lru-cache-5.1.1.tgz#c48c2e27b65d2a153b19bfc1a317e30872e01eef" integrity sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw== -"@types/minimist@^1.2.0": - version "1.2.5" - resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.5.tgz#ec10755e871497bcd83efe927e43ec46e8c0747e" - integrity sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag== - "@types/ms@*": version "0.7.34" resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.34.tgz#10964ba0dee6ac4cd462e2795b6bebd407303433" @@ -3077,16 +2975,6 @@ dependencies: undici-types "~5.26.4" -"@types/normalize-package-data@^2.4.0": - version "2.4.4" - resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz#56e2cc26c397c038fab0e3a917a12d5c5909e901" - integrity sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA== - -"@types/parse-json@^4.0.0": - version "4.0.2" - resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.2.tgz#5950e50960793055845e956c427fc2b0d70c5239" - integrity sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw== - "@types/pbkdf2@^3.0.0": version "3.1.2" resolved "https://registry.yarnpkg.com/@types/pbkdf2/-/pbkdf2-3.1.2.tgz#2dc43808e9985a2c69ff02e2d2027bd4fe33e8dc" @@ -3136,7 +3024,7 @@ resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.8.tgz#ce5ace04cfeabe7ef87c0091e50752e36707deff" integrity sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A== -"@types/secp256k1@^4.0.1", "@types/secp256k1@^4.0.4": +"@types/secp256k1@^4.0.1": version "4.0.6" resolved "https://registry.yarnpkg.com/@types/secp256k1/-/secp256k1-4.0.6.tgz#d60ba2349a51c2cbc5e816dcd831a42029d376bf" integrity sha512-hHxJU6PAEUn0TP4S/ZOzuTUvJWuZ6eIKeNKb5RBpODvSl6hp1Wrw4s7ATY50rklRCScUDpHzVA/DQdSjJ3UoYQ== @@ -3454,49 +3342,48 @@ loupe "^3.1.2" tinyrainbow "^2.0.0" -"@wagmi/connectors@4.1.14": - version "4.1.14" - resolved "https://registry.yarnpkg.com/@wagmi/connectors/-/connectors-4.1.14.tgz#66b945408b145c117c696f3543021232106bfcb2" - integrity sha512-e8I89FsNBtzhIilU3nqmgMR9xvSgCfmkWLz9iCKBTqyitbK5EJU7WTEtjjYFm1v2J//JeAwaA2XEKtG9BLR9jQ== +"@wagmi/connectors@5.7.7": + version "5.7.7" + resolved "https://registry.yarnpkg.com/@wagmi/connectors/-/connectors-5.7.7.tgz#35fe03d69ca3f1494c0e97a758884e06e535eefd" + integrity sha512-hveKxuR35ZQQyteLo7aiN/TBVECYKVbLNTYGGgqzTNHJ8vVoblTP9PwPrRPGOPi5ji8raYSFWShxNK7QpGL+Kg== dependencies: - "@coinbase/wallet-sdk" "3.9.1" - "@metamask/sdk" "0.14.3" - "@safe-global/safe-apps-provider" "0.18.1" - "@safe-global/safe-apps-sdk" "8.1.0" - "@walletconnect/ethereum-provider" "2.11.1" - "@walletconnect/modal" "2.6.2" + "@coinbase/wallet-sdk" "4.3.0" + "@metamask/sdk" "0.32.0" + "@safe-global/safe-apps-provider" "0.18.5" + "@safe-global/safe-apps-sdk" "9.1.0" + "@walletconnect/ethereum-provider" "2.17.0" + cbw-sdk "npm:@coinbase/wallet-sdk@3.9.3" -"@wagmi/core@2.6.5": - version "2.6.5" - resolved "https://registry.yarnpkg.com/@wagmi/core/-/core-2.6.5.tgz#7d1b7d94083d0b01c9ac4bb69e37d0d82b1640b5" - integrity sha512-DLyrc0o+dx05oIhBJuxnS7ekS5e6rB5mytlqPme+Km7aLdeBdcfYB4yJyYCyWoi93OLa7M5sbflTttz3o56bKw== +"@wagmi/core@2.16.4": + version "2.16.4" + resolved "https://registry.yarnpkg.com/@wagmi/core/-/core-2.16.4.tgz#96f1a2803dbf3ca110938402bdf2d99ab8da638e" + integrity sha512-E4jY4A98gwuHCjzuEajHIG/WhNDY5BChVHMjflV9Bx5CO7COqYRG2dcRLuF6Bo0LQNvVvXDAFUwR2JShJnT5pA== dependencies: eventemitter3 "5.0.1" - mipd "0.0.5" - zustand "4.4.1" + mipd "0.0.7" + zustand "5.0.0" -"@walletconnect/core@2.11.1": - version "2.11.1" - resolved "https://registry.yarnpkg.com/@walletconnect/core/-/core-2.11.1.tgz#da2be26b8b6514c74f06dc9a5ffb450bdec3456d" - integrity sha512-T57Vd7YdbHPsy3tthBuwrhaZNafN0+PqjISFRNeJy/bsKdXxpJg2hGSARuOTpCO7V6VcaatqlaSMuG3DrnG5rA== +"@walletconnect/core@2.17.0": + version "2.17.0" + resolved "https://registry.yarnpkg.com/@walletconnect/core/-/core-2.17.0.tgz#bf490e85a4702eff0f7cf81ba0d3c1016dffff33" + integrity sha512-On+uSaCfWdsMIQsECwWHZBmUXfrnqmv6B8SXRRuTJgd8tUpEvBkLQH4X7XkSm3zW6ozEkQTCagZ2ox2YPn3kbw== dependencies: - "@walletconnect/heartbeat" "1.2.1" - "@walletconnect/jsonrpc-provider" "1.0.13" - "@walletconnect/jsonrpc-types" "1.0.3" + "@walletconnect/heartbeat" "1.2.2" + "@walletconnect/jsonrpc-provider" "1.0.14" + "@walletconnect/jsonrpc-types" "1.0.4" "@walletconnect/jsonrpc-utils" "1.0.8" "@walletconnect/jsonrpc-ws-connection" "1.0.14" - "@walletconnect/keyvaluestorage" "^1.1.1" - "@walletconnect/logger" "^2.0.1" - "@walletconnect/relay-api" "^1.0.9" - "@walletconnect/relay-auth" "^1.0.4" - "@walletconnect/safe-json" "^1.0.2" - "@walletconnect/time" "^1.0.2" - "@walletconnect/types" "2.11.1" - "@walletconnect/utils" "2.11.1" - events "^3.3.0" - isomorphic-unfetch "3.1.0" + "@walletconnect/keyvaluestorage" "1.1.1" + "@walletconnect/logger" "2.1.2" + "@walletconnect/relay-api" "1.0.11" + "@walletconnect/relay-auth" "1.0.4" + "@walletconnect/safe-json" "1.0.2" + "@walletconnect/time" "1.0.2" + "@walletconnect/types" "2.17.0" + "@walletconnect/utils" "2.17.0" + events "3.3.0" lodash.isequal "4.5.0" - uint8arrays "^3.1.0" + uint8arrays "3.1.0" "@walletconnect/environment@^1.0.1": version "1.0.1" @@ -3505,23 +3392,23 @@ dependencies: tslib "1.14.1" -"@walletconnect/ethereum-provider@2.11.1": - version "2.11.1" - resolved "https://registry.yarnpkg.com/@walletconnect/ethereum-provider/-/ethereum-provider-2.11.1.tgz#6e0174ec9026940eaadeedc53417e222eb45f5aa" - integrity sha512-UfQH0ho24aa2M1xYmanbJv2ggQPebKmQytp2j20QEvURJ2R0v7YKWZ+0PfwOs6o6cuGw6gGxy/0WQXQRZSAsfg== +"@walletconnect/ethereum-provider@2.17.0": + version "2.17.0" + resolved "https://registry.yarnpkg.com/@walletconnect/ethereum-provider/-/ethereum-provider-2.17.0.tgz#d74feaaed6180a6799e96760d7ee867ff3a083d2" + integrity sha512-b+KTAXOb6JjoxkwpgYQQKPUcTwENGmdEdZoIDLeRicUmZTn/IQKfkMoC2frClB4YxkyoVMtj1oMV2JAax+yu9A== dependencies: - "@walletconnect/jsonrpc-http-connection" "^1.0.7" - "@walletconnect/jsonrpc-provider" "^1.0.13" - "@walletconnect/jsonrpc-types" "^1.0.3" - "@walletconnect/jsonrpc-utils" "^1.0.8" - "@walletconnect/modal" "^2.6.2" - "@walletconnect/sign-client" "2.11.1" - "@walletconnect/types" "2.11.1" - "@walletconnect/universal-provider" "2.11.1" - "@walletconnect/utils" "2.11.1" - events "^3.3.0" - -"@walletconnect/events@^1.0.1": + "@walletconnect/jsonrpc-http-connection" "1.0.8" + "@walletconnect/jsonrpc-provider" "1.0.14" + "@walletconnect/jsonrpc-types" "1.0.4" + "@walletconnect/jsonrpc-utils" "1.0.8" + "@walletconnect/modal" "2.7.0" + "@walletconnect/sign-client" "2.17.0" + "@walletconnect/types" "2.17.0" + "@walletconnect/universal-provider" "2.17.0" + "@walletconnect/utils" "2.17.0" + events "3.3.0" + +"@walletconnect/events@1.0.1", "@walletconnect/events@^1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@walletconnect/events/-/events-1.0.1.tgz#2b5f9c7202019e229d7ccae1369a9e86bda7816c" integrity sha512-NPTqaoi0oPBVNuLv7qPaJazmGHs5JGyO8eEAk5VGKmJzDR7AHzD4k6ilox5kxk1iwiOnFopBOOMLs86Oa76HpQ== @@ -3529,35 +3416,43 @@ keyvaluestorage-interface "^1.0.0" tslib "1.14.1" -"@walletconnect/heartbeat@1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@walletconnect/heartbeat/-/heartbeat-1.2.1.tgz#afaa3a53232ae182d7c9cff41c1084472d8f32e9" - integrity sha512-yVzws616xsDLJxuG/28FqtZ5rzrTA4gUjdEMTbWB5Y8V1XHRmqq4efAxCw5ie7WjbXFSUyBHaWlMR+2/CpQC5Q== +"@walletconnect/heartbeat@1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@walletconnect/heartbeat/-/heartbeat-1.2.2.tgz#e8dc5179db7769950c6f9cf59b23516d9b95227d" + integrity sha512-uASiRmC5MwhuRuf05vq4AT48Pq8RMi876zV8rr8cV969uTOzWdB/k+Lj5yI2PBtB1bGQisGen7MM1GcZlQTBXw== dependencies: "@walletconnect/events" "^1.0.1" "@walletconnect/time" "^1.0.2" - tslib "1.14.1" + events "^3.3.0" -"@walletconnect/jsonrpc-http-connection@^1.0.7": - version "1.0.7" - resolved "https://registry.yarnpkg.com/@walletconnect/jsonrpc-http-connection/-/jsonrpc-http-connection-1.0.7.tgz#a6973569b8854c22da707a759d241e4f5c2d5a98" - integrity sha512-qlfh8fCfu8LOM9JRR9KE0s0wxP6ZG9/Jom8M0qsoIQeKF3Ni0FyV4V1qy/cc7nfI46SLQLSl4tgWSfLiE1swyQ== +"@walletconnect/jsonrpc-http-connection@1.0.8": + version "1.0.8" + resolved "https://registry.yarnpkg.com/@walletconnect/jsonrpc-http-connection/-/jsonrpc-http-connection-1.0.8.tgz#2f4c3948f074960a3edd07909560f3be13e2c7ae" + integrity sha512-+B7cRuaxijLeFDJUq5hAzNyef3e3tBDIxyaCNmFtjwnod5AGis3RToNqzFU33vpVcxFhofkpE7Cx+5MYejbMGw== dependencies: "@walletconnect/jsonrpc-utils" "^1.0.6" "@walletconnect/safe-json" "^1.0.1" cross-fetch "^3.1.4" - tslib "1.14.1" + events "^3.3.0" -"@walletconnect/jsonrpc-provider@1.0.13", "@walletconnect/jsonrpc-provider@^1.0.13": - version "1.0.13" - resolved "https://registry.yarnpkg.com/@walletconnect/jsonrpc-provider/-/jsonrpc-provider-1.0.13.tgz#9a74da648d015e1fffc745f0c7d629457f53648b" - integrity sha512-K73EpThqHnSR26gOyNEL+acEex3P7VWZe6KE12ZwKzAt2H4e5gldZHbjsu2QR9cLeJ8AXuO7kEMOIcRv1QEc7g== +"@walletconnect/jsonrpc-provider@1.0.14": + version "1.0.14" + resolved "https://registry.yarnpkg.com/@walletconnect/jsonrpc-provider/-/jsonrpc-provider-1.0.14.tgz#696f3e3b6d728b361f2e8b853cfc6afbdf2e4e3e" + integrity sha512-rtsNY1XqHvWj0EtITNeuf8PHMvlCLiS3EjQL+WOkxEOA4KPxsohFnBDeyPYiNm4ZvkQdLnece36opYidmtbmow== dependencies: "@walletconnect/jsonrpc-utils" "^1.0.8" "@walletconnect/safe-json" "^1.0.2" - tslib "1.14.1" + events "^3.3.0" + +"@walletconnect/jsonrpc-types@1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@walletconnect/jsonrpc-types/-/jsonrpc-types-1.0.4.tgz#ce1a667d79eadf2a2d9d002c152ceb68739c230c" + integrity sha512-P6679fG/M+wuWg9TY8mh6xFSdYnFyFjwFelxyISxMDrlbXokorEVXYOxiqEbrU3x1BmBoCAJJ+vtEaEoMlpCBQ== + dependencies: + events "^3.3.0" + keyvaluestorage-interface "^1.0.0" -"@walletconnect/jsonrpc-types@1.0.3", "@walletconnect/jsonrpc-types@^1.0.2", "@walletconnect/jsonrpc-types@^1.0.3": +"@walletconnect/jsonrpc-types@^1.0.2", "@walletconnect/jsonrpc-types@^1.0.3": version "1.0.3" resolved "https://registry.yarnpkg.com/@walletconnect/jsonrpc-types/-/jsonrpc-types-1.0.3.tgz#65e3b77046f1a7fa8347ae02bc1b841abe6f290c" integrity sha512-iIQ8hboBl3o5ufmJ8cuduGad0CQm3ZlsHtujv9Eu16xq89q+BG7Nh5VLxxUgmtpnrePgFkTwXirCTkwJH1v+Yw== @@ -3565,7 +3460,7 @@ keyvaluestorage-interface "^1.0.0" tslib "1.14.1" -"@walletconnect/jsonrpc-utils@1.0.8", "@walletconnect/jsonrpc-utils@^1.0.6", "@walletconnect/jsonrpc-utils@^1.0.7", "@walletconnect/jsonrpc-utils@^1.0.8": +"@walletconnect/jsonrpc-utils@1.0.8", "@walletconnect/jsonrpc-utils@^1.0.6", "@walletconnect/jsonrpc-utils@^1.0.8": version "1.0.8" resolved "https://registry.yarnpkg.com/@walletconnect/jsonrpc-utils/-/jsonrpc-utils-1.0.8.tgz#82d0cc6a5d6ff0ecc277cb35f71402c91ad48d72" integrity sha512-vdeb03bD8VzJUL6ZtzRYsFMq1eZQcM3EAzT0a3st59dyLfJ0wq+tKMpmGH7HlB7waD858UWgfIcudbPFsbzVdw== @@ -3584,7 +3479,7 @@ events "^3.3.0" ws "^7.5.1" -"@walletconnect/keyvaluestorage@^1.1.1": +"@walletconnect/keyvaluestorage@1.1.1": version "1.1.1" resolved "https://registry.yarnpkg.com/@walletconnect/keyvaluestorage/-/keyvaluestorage-1.1.1.tgz#dd2caddabfbaf80f6b8993a0704d8b83115a1842" integrity sha512-V7ZQq2+mSxAq7MrRqDxanTzu2RcElfK1PfNYiaVnJgJ7Q7G7hTVwF8voIBx92qsRyGHZihrwNPHuZd1aKkd0rA== @@ -3593,48 +3488,47 @@ idb-keyval "^6.2.1" unstorage "^1.9.0" -"@walletconnect/logger@^2.0.1": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@walletconnect/logger/-/logger-2.0.1.tgz#7f489b96e9a1ff6bf3e58f0fbd6d69718bf844a8" - integrity sha512-SsTKdsgWm+oDTBeNE/zHxxr5eJfZmE9/5yp/Ku+zJtcTAjELb3DXueWkDXmE9h8uHIbJzIb5wj5lPdzyrjT6hQ== +"@walletconnect/logger@2.1.2": + version "2.1.2" + resolved "https://registry.yarnpkg.com/@walletconnect/logger/-/logger-2.1.2.tgz#813c9af61b96323a99f16c10089bfeb525e2a272" + integrity sha512-aAb28I3S6pYXZHQm5ESB+V6rDqIYfsnHaQyzFbwUUBFY4H0OXx/YtTl8lvhUNhMMfb9UxbwEBS253TlXUYJWSw== dependencies: + "@walletconnect/safe-json" "^1.0.2" pino "7.11.0" - tslib "1.14.1" -"@walletconnect/modal-core@2.6.2": - version "2.6.2" - resolved "https://registry.yarnpkg.com/@walletconnect/modal-core/-/modal-core-2.6.2.tgz#d73e45d96668764e0c8668ea07a45bb8b81119e9" - integrity sha512-cv8ibvdOJQv2B+nyxP9IIFdxvQznMz8OOr/oR/AaUZym4hjXNL/l1a2UlSQBXrVjo3xxbouMxLb3kBsHoYP2CA== +"@walletconnect/modal-core@2.7.0": + version "2.7.0" + resolved "https://registry.yarnpkg.com/@walletconnect/modal-core/-/modal-core-2.7.0.tgz#73c13c3b7b0abf9ccdbac9b242254a86327ce0a4" + integrity sha512-oyMIfdlNdpyKF2kTJowTixZSo0PGlCJRdssUN/EZdA6H6v03hZnf09JnwpljZNfir2M65Dvjm/15nGrDQnlxSA== dependencies: valtio "1.11.2" -"@walletconnect/modal-ui@2.6.2": - version "2.6.2" - resolved "https://registry.yarnpkg.com/@walletconnect/modal-ui/-/modal-ui-2.6.2.tgz#fa57c087c57b7f76aaae93deab0f84bb68b59cf9" - integrity sha512-rbdstM1HPGvr7jprQkyPggX7rP4XiCG85ZA+zWBEX0dVQg8PpAgRUqpeub4xQKDgY7pY/xLRXSiCVdWGqvG2HA== +"@walletconnect/modal-ui@2.7.0": + version "2.7.0" + resolved "https://registry.yarnpkg.com/@walletconnect/modal-ui/-/modal-ui-2.7.0.tgz#dbbb7ee46a5a25f7d39db622706f2d197b268cbb" + integrity sha512-gERYvU7D7K1ANCN/8vUgsE0d2hnRemfAFZ2novm9aZBg7TEd/4EgB+AqbJ+1dc7GhOL6dazckVq78TgccHb7mQ== dependencies: - "@walletconnect/modal-core" "2.6.2" + "@walletconnect/modal-core" "2.7.0" lit "2.8.0" motion "10.16.2" qrcode "1.5.3" -"@walletconnect/modal@2.6.2", "@walletconnect/modal@^2.6.2": - version "2.6.2" - resolved "https://registry.yarnpkg.com/@walletconnect/modal/-/modal-2.6.2.tgz#4b534a836f5039eeb3268b80be7217a94dd12651" - integrity sha512-eFopgKi8AjKf/0U4SemvcYw9zlLpx9njVN8sf6DAkowC2Md0gPU/UNEbH1Wwj407pEKnEds98pKWib1NN1ACoA== +"@walletconnect/modal@2.7.0": + version "2.7.0" + resolved "https://registry.yarnpkg.com/@walletconnect/modal/-/modal-2.7.0.tgz#55f969796d104cce1205f5f844d8f8438b79723a" + integrity sha512-RQVt58oJ+rwqnPcIvRFeMGKuXb9qkgSmwz4noF8JZGUym3gUAzVs+uW2NQ1Owm9XOJAV+sANrtJ+VoVq1ftElw== dependencies: - "@walletconnect/modal-core" "2.6.2" - "@walletconnect/modal-ui" "2.6.2" + "@walletconnect/modal-core" "2.7.0" + "@walletconnect/modal-ui" "2.7.0" -"@walletconnect/relay-api@^1.0.9": - version "1.0.9" - resolved "https://registry.yarnpkg.com/@walletconnect/relay-api/-/relay-api-1.0.9.tgz#f8c2c3993dddaa9f33ed42197fc9bfebd790ecaf" - integrity sha512-Q3+rylJOqRkO1D9Su0DPE3mmznbAalYapJ9qmzDgK28mYF9alcP3UwG/og5V7l7CFOqzCLi7B8BvcBUrpDj0Rg== +"@walletconnect/relay-api@1.0.11": + version "1.0.11" + resolved "https://registry.yarnpkg.com/@walletconnect/relay-api/-/relay-api-1.0.11.tgz#80ab7ef2e83c6c173be1a59756f95e515fb63224" + integrity sha512-tLPErkze/HmC9aCmdZOhtVmYZq1wKfWTJtygQHoWtgg722Jd4homo54Cs4ak2RUFUZIGO2RsOpIcWipaua5D5Q== dependencies: "@walletconnect/jsonrpc-types" "^1.0.2" - tslib "1.14.1" -"@walletconnect/relay-auth@^1.0.4": +"@walletconnect/relay-auth@1.0.4": version "1.0.4" resolved "https://registry.yarnpkg.com/@walletconnect/relay-auth/-/relay-auth-1.0.4.tgz#0b5c55c9aa3b0ef61f526ce679f3ff8a5c4c2c7c" integrity sha512-kKJcS6+WxYq5kshpPaxGHdwf5y98ZwbfuS4EE/NkQzqrDFm5Cj+dP8LofzWvjrrLkZq7Afy7WrQMXdLy8Sx7HQ== @@ -3646,90 +3540,92 @@ tslib "1.14.1" uint8arrays "^3.0.0" -"@walletconnect/safe-json@^1.0.1", "@walletconnect/safe-json@^1.0.2": +"@walletconnect/safe-json@1.0.2", "@walletconnect/safe-json@^1.0.1", "@walletconnect/safe-json@^1.0.2": version "1.0.2" resolved "https://registry.yarnpkg.com/@walletconnect/safe-json/-/safe-json-1.0.2.tgz#7237e5ca48046e4476154e503c6d3c914126fa77" integrity sha512-Ogb7I27kZ3LPC3ibn8ldyUr5544t3/STow9+lzz7Sfo808YD7SBWk7SAsdBFlYgP2zDRy2hS3sKRcuSRM0OTmA== dependencies: tslib "1.14.1" -"@walletconnect/sign-client@2.11.1": - version "2.11.1" - resolved "https://registry.yarnpkg.com/@walletconnect/sign-client/-/sign-client-2.11.1.tgz#c073b8d2d594e792bb783d36c8b021bd37a9d4f6" - integrity sha512-s3oKSx6/F5X2WmkV1jfJImBFACf9Km5HpTb+n5q+mobJVpUQw/clvoVyIrNNppLhm1V1S/ylHXh0qCrDppDpCA== +"@walletconnect/sign-client@2.17.0": + version "2.17.0" + resolved "https://registry.yarnpkg.com/@walletconnect/sign-client/-/sign-client-2.17.0.tgz#efe811b1bb10082d964e2f0378aaa1b40f424503" + integrity sha512-sErYwvSSHQolNXni47L3Bm10ptJc1s1YoJvJd34s5E9h9+d3rj7PrhbiW9X82deN+Dm5oA8X9tC4xty1yIBrVg== dependencies: - "@walletconnect/core" "2.11.1" - "@walletconnect/events" "^1.0.1" - "@walletconnect/heartbeat" "1.2.1" + "@walletconnect/core" "2.17.0" + "@walletconnect/events" "1.0.1" + "@walletconnect/heartbeat" "1.2.2" "@walletconnect/jsonrpc-utils" "1.0.8" - "@walletconnect/logger" "^2.0.1" - "@walletconnect/time" "^1.0.2" - "@walletconnect/types" "2.11.1" - "@walletconnect/utils" "2.11.1" - events "^3.3.0" + "@walletconnect/logger" "2.1.2" + "@walletconnect/time" "1.0.2" + "@walletconnect/types" "2.17.0" + "@walletconnect/utils" "2.17.0" + events "3.3.0" -"@walletconnect/time@^1.0.2": +"@walletconnect/time@1.0.2", "@walletconnect/time@^1.0.2": version "1.0.2" resolved "https://registry.yarnpkg.com/@walletconnect/time/-/time-1.0.2.tgz#6c5888b835750ecb4299d28eecc5e72c6d336523" integrity sha512-uzdd9woDcJ1AaBZRhqy5rNC9laqWGErfc4dxA9a87mPdKOgWMD85mcFo9dIYIts/Jwocfwn07EC6EzclKubk/g== dependencies: tslib "1.14.1" -"@walletconnect/types@2.11.1": - version "2.11.1" - resolved "https://registry.yarnpkg.com/@walletconnect/types/-/types-2.11.1.tgz#4f705b43ddc286b69eb9bf91bb6e9496d20de0e3" - integrity sha512-UbdbX+d6MOK0AXKxt5imV3KvAcLVpZUHylaRDIP5ffwVylM/p4DHnKppil1Qq5N+IGDr3RsUwLGFkKjqsQYRKw== - dependencies: - "@walletconnect/events" "^1.0.1" - "@walletconnect/heartbeat" "1.2.1" - "@walletconnect/jsonrpc-types" "1.0.3" - "@walletconnect/keyvaluestorage" "^1.1.1" - "@walletconnect/logger" "^2.0.1" - events "^3.3.0" - -"@walletconnect/universal-provider@2.11.1": - version "2.11.1" - resolved "https://registry.yarnpkg.com/@walletconnect/universal-provider/-/universal-provider-2.11.1.tgz#988f2a78325eb52ef7481a220851a56efb209d64" - integrity sha512-BJvPYByIfbBYF4x8mqDV79ebQX0tD54pp8itsqrHWn0qKZeJyIH8sQ69yY0GnbJrzoFS3ZLULdC0yDxWDeuRGw== - dependencies: - "@walletconnect/jsonrpc-http-connection" "^1.0.7" - "@walletconnect/jsonrpc-provider" "1.0.13" - "@walletconnect/jsonrpc-types" "^1.0.2" - "@walletconnect/jsonrpc-utils" "^1.0.7" - "@walletconnect/logger" "^2.0.1" - "@walletconnect/sign-client" "2.11.1" - "@walletconnect/types" "2.11.1" - "@walletconnect/utils" "2.11.1" - events "^3.3.0" +"@walletconnect/types@2.17.0": + version "2.17.0" + resolved "https://registry.yarnpkg.com/@walletconnect/types/-/types-2.17.0.tgz#20eda5791e3172f8ab9146caa3f317701d4b3232" + integrity sha512-i1pn9URpvt9bcjRDkabuAmpA9K7mzyKoLJlbsAujRVX7pfaG7wur7u9Jz0bk1HxvuABL5LHNncTnVKSXKQ5jZA== + dependencies: + "@walletconnect/events" "1.0.1" + "@walletconnect/heartbeat" "1.2.2" + "@walletconnect/jsonrpc-types" "1.0.4" + "@walletconnect/keyvaluestorage" "1.1.1" + "@walletconnect/logger" "2.1.2" + events "3.3.0" + +"@walletconnect/universal-provider@2.17.0": + version "2.17.0" + resolved "https://registry.yarnpkg.com/@walletconnect/universal-provider/-/universal-provider-2.17.0.tgz#c9d4bbd9b8f0e41b500b2488ccbc207dc5f7a170" + integrity sha512-d3V5Be7AqLrvzcdMZSBS8DmGDRdqnyLk1DWmRKAGgR6ieUWykhhUKlvfeoZtvJrIXrY7rUGYpH1X41UtFkW5Pw== + dependencies: + "@walletconnect/jsonrpc-http-connection" "1.0.8" + "@walletconnect/jsonrpc-provider" "1.0.14" + "@walletconnect/jsonrpc-types" "1.0.4" + "@walletconnect/jsonrpc-utils" "1.0.8" + "@walletconnect/logger" "2.1.2" + "@walletconnect/sign-client" "2.17.0" + "@walletconnect/types" "2.17.0" + "@walletconnect/utils" "2.17.0" + events "3.3.0" -"@walletconnect/utils@2.11.1": - version "2.11.1" - resolved "https://registry.yarnpkg.com/@walletconnect/utils/-/utils-2.11.1.tgz#56116d9c410c6f2ae8d562017cf6876cccb366f1" - integrity sha512-wRFDHN86dZ05mCET1H3912odIeQa8j7cZKxl1FlWRpV2YsILj9HCYSX6Uq2brwO02Kv2vryke44G1r8XI/LViA== +"@walletconnect/utils@2.17.0": + version "2.17.0" + resolved "https://registry.yarnpkg.com/@walletconnect/utils/-/utils-2.17.0.tgz#02b3af0b80d0c1a994d692d829d066271b04d071" + integrity sha512-1aeQvjwsXy4Yh9G6g2eGmXrEl+BzkNjHRdCrGdMYqFTFa8ROEJfTGsSH3pLsNDlOY94CoBUvJvM55q/PMoN/FQ== dependencies: "@stablelib/chacha20poly1305" "1.0.1" "@stablelib/hkdf" "1.0.1" - "@stablelib/random" "^1.0.2" + "@stablelib/random" "1.0.2" "@stablelib/sha256" "1.0.1" - "@stablelib/x25519" "^1.0.3" - "@walletconnect/relay-api" "^1.0.9" - "@walletconnect/safe-json" "^1.0.2" - "@walletconnect/time" "^1.0.2" - "@walletconnect/types" "2.11.1" - "@walletconnect/window-getters" "^1.0.1" - "@walletconnect/window-metadata" "^1.0.1" + "@stablelib/x25519" "1.0.3" + "@walletconnect/relay-api" "1.0.11" + "@walletconnect/relay-auth" "1.0.4" + "@walletconnect/safe-json" "1.0.2" + "@walletconnect/time" "1.0.2" + "@walletconnect/types" "2.17.0" + "@walletconnect/window-getters" "1.0.1" + "@walletconnect/window-metadata" "1.0.1" detect-browser "5.3.0" + elliptic "^6.5.7" query-string "7.1.3" - uint8arrays "^3.1.0" + uint8arrays "3.1.0" -"@walletconnect/window-getters@^1.0.1": +"@walletconnect/window-getters@1.0.1", "@walletconnect/window-getters@^1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@walletconnect/window-getters/-/window-getters-1.0.1.tgz#f36d1c72558a7f6b87ecc4451fc8bd44f63cbbdc" integrity sha512-vHp+HqzGxORPAN8gY03qnbTMnhqIwjeRJNOMOAzePRg4xVEEE2WvYsI9G2NMjOknA8hnuYbU3/hwLcKbjhc8+Q== dependencies: tslib "1.14.1" -"@walletconnect/window-metadata@^1.0.1": +"@walletconnect/window-metadata@1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@walletconnect/window-metadata/-/window-metadata-1.0.1.tgz#2124f75447b7e989e4e4e1581d55d25bc75f7be5" integrity sha512-9koTqyGrM2cqFRW517BPY/iEtUDx2r1+Pwwu5m7sJ7ka79wi3EyqhqcICk/yDmv6jAS1rjKgTKXlEhanYjijcA== @@ -3742,20 +3638,32 @@ abbrev@1: resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== +abitype@0.9.8: + version "0.9.8" + resolved "https://registry.yarnpkg.com/abitype/-/abitype-0.9.8.tgz#1f120b6b717459deafd213dfbf3a3dd1bf10ae8c" + integrity sha512-puLifILdm+8sjyss4S+fsUN09obiT1g2YW6CtcQF+QDzxR0euzgEB29MZujC6zMk2a6SVmtttq1fc6+YFA7WYQ== + abitype@1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/abitype/-/abitype-1.0.4.tgz#a817ff44860e8a84e9a37ed22aa9b738dbb51dba" integrity sha512-UivtYZOGJGE8rsrM/N5vdRkUpqEZVmuTumfTuolm7m/6O09wprd958rx8kUBwVAAAhQDveGAgD0GJdBuR8s6tw== +abitype@1.0.8, abitype@^1.0.6: + version "1.0.8" + resolved "https://registry.yarnpkg.com/abitype/-/abitype-1.0.8.tgz#3554f28b2e9d6e9f35eb59878193eabd1b9f46ba" + integrity sha512-ZeiI6h3GnW06uYDLx0etQtX/p8E24UaHHBj57RSjK7YBFe7iuVn07EDpOeP451D06sF27VOz9JJPlIKJmXgkEg== + abitype@^0.8.0: version "0.8.11" resolved "https://registry.yarnpkg.com/abitype/-/abitype-0.8.11.tgz#66e1cf2cbf46f48d0e57132d7c1c392447536cc1" integrity sha512-bM4v2dKvX08sZ9IU38IN5BKmN+ZkOSd2oI4a9f0ejHYZQYV6cDr7j+d95ga0z2XHG36Y4jzoG5Z7qDqxp7fi/A== -abitype@^1.0.6: - version "1.0.8" - resolved "https://registry.yarnpkg.com/abitype/-/abitype-1.0.8.tgz#3554f28b2e9d6e9f35eb59878193eabd1b9f46ba" - integrity sha512-ZeiI6h3GnW06uYDLx0etQtX/p8E24UaHHBj57RSjK7YBFe7iuVn07EDpOeP451D06sF27VOz9JJPlIKJmXgkEg== +abort-controller@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" + integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== + dependencies: + event-target-shim "^5.0.0" acorn-jsx@^5.3.2: version "5.3.2" @@ -3846,13 +3754,6 @@ ansi-escapes@^4.3.0: dependencies: type-fest "^0.21.3" -ansi-escapes@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-5.0.0.tgz#b6a0caf0eef0c41af190e9a749e0c00ec04bb2a6" - integrity sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA== - dependencies: - type-fest "^1.0.2" - ansi-escapes@^6.2.0: version "6.2.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-6.2.0.tgz#8a13ce75286f417f1963487d86ba9f90dccf9947" @@ -3986,7 +3887,7 @@ array.prototype.findlastindex@^1.2.3: es-shim-unscopables "^1.0.0" get-intrinsic "^1.2.1" -array.prototype.flat@^1.2.3, array.prototype.flat@^1.3.1, array.prototype.flat@^1.3.2: +array.prototype.flat@^1.3.1, array.prototype.flat@^1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz#1476217df8cff17d72ee8f3ba06738db5b387d18" integrity sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA== @@ -4030,11 +3931,6 @@ arraybuffer.prototype.slice@^1.0.2: is-array-buffer "^3.0.2" is-shared-array-buffer "^1.0.2" -arrify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" - integrity sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA== - asn1.js@^5.0.0: version "5.4.1" resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07" @@ -4121,15 +4017,6 @@ axobject-query@^3.2.1: dependencies: dequal "^2.0.3" -babel-plugin-macros@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz#9ef6dc74deb934b4db344dc973ee851d148c50c1" - integrity sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg== - dependencies: - "@babel/runtime" "^7.12.5" - cosmiconfig "^7.0.0" - resolve "^1.19.0" - balanced-match@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" @@ -4240,12 +4127,12 @@ braces@^3.0.2, braces@~3.0.2: dependencies: fill-range "^7.0.1" -breakword@^1.0.5: - version "1.0.6" - resolved "https://registry.yarnpkg.com/breakword/-/breakword-1.0.6.tgz#242506e7b871b7fad1bce8dc05cb0f2a129c12bd" - integrity sha512-yjxDAYyK/pBvws9H4xKYpLDpYKEH6CzrBPAuXq3x18I+c/2MkVtT3qAr7Oloi6Dss9qNhPVueAAVU1CSeNDIXw== +braces@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" + integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== dependencies: - wcwidth "^1.0.1" + fill-range "^7.1.1" brorand@^1.1.0: version "1.1.0" @@ -4366,16 +4253,7 @@ camelcase-css@^2.0.1: resolved "https://registry.yarnpkg.com/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5" integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA== -camelcase-keys@^6.2.2: - version "6.2.2" - resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-6.2.2.tgz#5e755d6ba51aa223ec7d3d52f25778210f9dc3c0" - integrity sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg== - dependencies: - camelcase "^5.3.1" - map-obj "^4.0.0" - quick-lru "^4.0.1" - -camelcase@^5.0.0, camelcase@^5.3.1: +camelcase@^5.0.0: version "5.3.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== @@ -4390,6 +4268,21 @@ caniuse-lite@^1.0.30001406, caniuse-lite@^1.0.30001578, caniuse-lite@^1.0.300015 resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001583.tgz#abb2970cc370801dc7e27bf290509dc132cfa390" integrity sha512-acWTYaha8xfhA/Du/z4sNZjHUWjkiuoAi2LM+T/aL+kemKQgPT1xBb/YKjlQ0Qo8gvbHsGNplrEJ+9G3gL7i4Q== +"cbw-sdk@npm:@coinbase/wallet-sdk@3.9.3": + version "3.9.3" + resolved "https://registry.yarnpkg.com/@coinbase/wallet-sdk/-/wallet-sdk-3.9.3.tgz#daf10cb0c85d0363315b7270cb3f02bedc408aab" + integrity sha512-N/A2DRIf0Y3PHc1XAMvbBUu4zisna6qAdqABMZwBMNEfWrXpAwx16pZGkYCLGE+Rvv1edbcB2LYDRnACNcmCiw== + dependencies: + bn.js "^5.2.1" + buffer "^6.0.3" + clsx "^1.2.1" + eth-block-tracker "^7.1.0" + eth-json-rpc-filters "^6.0.0" + eventemitter3 "^5.0.1" + keccak "^3.0.3" + preact "^10.16.0" + sha.js "^2.4.11" + cfonts@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/cfonts/-/cfonts-3.2.0.tgz#3c72b79679e48d19c620614d1134326a1f22cdec" @@ -4409,11 +4302,6 @@ chai@^5.1.2: loupe "^3.1.0" pathval "^2.0.0" -chalk@5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.3.0.tgz#67c20a7ebef70e7f3970a01f90fa210cb6860385" - integrity sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w== - chalk@^1.0.0: version "1.1.3" resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" @@ -4425,7 +4313,7 @@ chalk@^1.0.0: strip-ansi "^3.0.0" supports-color "^2.0.0" -chalk@^2.1.0, chalk@^2.3.2, chalk@^2.4.2: +chalk@^2.3.2, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -4434,7 +4322,7 @@ chalk@^2.1.0, chalk@^2.3.2, chalk@^2.4.2: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1, chalk@^4.1.2: +chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -4543,14 +4431,6 @@ cli-table@^0.3.11: dependencies: colors "1.0.3" -cli-truncate@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-3.1.0.tgz#3f23ab12535e3d73e839bb43e73c9de487db1389" - integrity sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA== - dependencies: - slice-ansi "^5.0.0" - string-width "^5.0.0" - cli-truncate@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-4.0.0.tgz#6cc28a2924fee9e25ce91e973db56c7066e6172a" @@ -4713,11 +4593,6 @@ command-exists@^1.2.8: resolved "https://registry.yarnpkg.com/command-exists/-/command-exists-1.2.9.tgz#c50725af3808c8ab0260fd60b01fbfa25b954f69" integrity sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w== -commander@11.0.0: - version "11.0.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-11.0.0.tgz#43e19c25dbedc8256203538e8d7e9346877a6f67" - integrity sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ== - commander@3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/commander/-/commander-3.0.2.tgz#6837c3fb677ad9933d1cfba42dd14d5117d6b39e" @@ -4738,11 +4613,6 @@ consola@^3.2.3: resolved "https://registry.yarnpkg.com/consola/-/consola-3.2.3.tgz#0741857aa88cfa0d6fd53f1cff0375136e98502f" integrity sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ== -convert-source-map@^1.5.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" - integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== - convert-source-map@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" @@ -4768,17 +4638,6 @@ core-util-is@~1.0.0: resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== -cosmiconfig@^7.0.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.1.0.tgz#1443b9afa596b670082ea46cbd8f6a62b84635f6" - integrity sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA== - dependencies: - "@types/parse-json" "^4.0.0" - import-fresh "^3.2.1" - parse-json "^5.0.0" - path-type "^4.0.0" - yaml "^1.10.0" - crc-32@^1.2.0: version "1.2.2" resolved "https://registry.yarnpkg.com/crc-32/-/crc-32-1.2.2.tgz#3cad35a934b8bf71f25ca524b6da51fb7eace2ff" @@ -4826,15 +4685,6 @@ cross-fetch@^4.0.0: dependencies: node-fetch "^2.6.12" -cross-spawn@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" - integrity sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A== - dependencies: - lru-cache "^4.0.1" - shebang-command "^1.2.0" - which "^1.2.9" - cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" @@ -4844,6 +4694,15 @@ cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: shebang-command "^2.0.0" which "^2.0.1" +cross-spawn@^7.0.5: + version "7.0.6" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" + integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + crossws@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/crossws/-/crossws-0.1.1.tgz#3a85a8140568e4828d9747a884171ea7e6a8bbe2" @@ -4877,31 +4736,6 @@ csstype@^3.0.2, csstype@^3.0.7: resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81" integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== -csv-generate@^3.4.3: - version "3.4.3" - resolved "https://registry.yarnpkg.com/csv-generate/-/csv-generate-3.4.3.tgz#bc42d943b45aea52afa896874291da4b9108ffff" - integrity sha512-w/T+rqR0vwvHqWs/1ZyMDWtHHSJaN06klRqJXBEpDJaM/+dZkso0OKh1VcuuYvK3XM53KysVNq8Ko/epCK8wOw== - -csv-parse@^4.16.3: - version "4.16.3" - resolved "https://registry.yarnpkg.com/csv-parse/-/csv-parse-4.16.3.tgz#7ca624d517212ebc520a36873c3478fa66efbaf7" - integrity sha512-cO1I/zmz4w2dcKHVvpCr7JVRu8/FymG5OEpmvsZYlccYolPBLoVGKUHgNoc4ZGkFeFlWGEDmMyBM+TTqRdW/wg== - -csv-stringify@^5.6.5: - version "5.6.5" - resolved "https://registry.yarnpkg.com/csv-stringify/-/csv-stringify-5.6.5.tgz#c6d74badda4b49a79bf4e72f91cce1e33b94de00" - integrity sha512-PjiQ659aQ+fUTQqSrd1XEDnOr52jh30RBurfzkscaE2tPaFsDH5wOAHJiw8XAHphRknCwMUE9KRayc4K/NbO8A== - -csv@^5.5.3: - version "5.5.3" - resolved "https://registry.yarnpkg.com/csv/-/csv-5.5.3.tgz#cd26c1e45eae00ce6a9b7b27dcb94955ec95207d" - integrity sha512-QTaY0XjjhTQOdguARF0lGKm5/mEq9PD9/VhZZegHDIBq2tQwgNpHc3dneD4mGo2iJs+fTKv5Bp0fZ+BRuY3Z0g== - dependencies: - csv-generate "^3.4.3" - csv-parse "^4.16.3" - csv-stringify "^5.6.5" - stream-transform "^2.1.3" - culori@^3: version "3.3.0" resolved "https://registry.yarnpkg.com/culori/-/culori-3.3.0.tgz#e33530adbd124d53bd6550394397e695eaaed739" @@ -4965,15 +4799,7 @@ debug@^4.3.7, debug@^4.4.0: dependencies: ms "^2.1.3" -decamelize-keys@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.1.tgz#04a2d523b2f18d80d0158a43b895d56dff8d19d8" - integrity sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg== - dependencies: - decamelize "^1.1.0" - map-obj "^1.0.0" - -decamelize@^1.1.0, decamelize@^1.2.0: +decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== @@ -5032,13 +4858,6 @@ deepmerge@^4.2.2: resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== -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.1: version "1.1.1" resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.1.tgz#c35f7cd0ab09883480d12ac5cb213715587800b3" @@ -5048,11 +4867,6 @@ define-data-property@^1.0.1, define-data-property@^1.1.1: gopd "^1.0.1" has-property-descriptors "^1.0.0" -define-lazy-prop@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" - integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== - define-properties@^1.1.3, define-properties@^1.2.0, define-properties@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" @@ -5224,14 +5038,15 @@ eastasianwidth@^0.2.0: resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== -eciesjs@^0.3.15, eciesjs@^0.3.16: - version "0.3.18" - resolved "https://registry.yarnpkg.com/eciesjs/-/eciesjs-0.3.18.tgz#67b5d73a8466e40a45bbc2f2a3177e71e9c0643d" - integrity sha512-RQhegEtLSyIiGJmFTZfvCTHER/fymipXFVx6OwSRYD6hOuy+6Kjpk0dGvIfP9kxn/smBpxQy71uxpGO406ITCw== +eciesjs@^0.4.11: + version "0.4.13" + resolved "https://registry.yarnpkg.com/eciesjs/-/eciesjs-0.4.13.tgz#89fbe2bc37d6dced8c3d1bccac21cceb20bcdcf3" + integrity sha512-zBdtR4K+wbj10bWPpIOF9DW+eFYQu8miU5ypunh0t4Bvt83ZPlEWgT5Dq/0G6uwEXumZKjfb5BZxYUZQ2Hzn/Q== dependencies: - "@types/secp256k1" "^4.0.4" - futoin-hkdf "^1.5.3" - secp256k1 "^5.0.0" + "@ecies/ciphers" "^0.2.2" + "@noble/ciphers" "^1.0.0" + "@noble/curves" "^1.6.0" + "@noble/hashes" "^1.5.0" electron-to-chromium@^1.4.648: version "1.4.656" @@ -5251,7 +5066,20 @@ elliptic@6.5.4, elliptic@^6.5.2, elliptic@^6.5.4: minimalistic-assert "^1.0.1" minimalistic-crypto-utils "^1.0.1" -emoji-regex@^10.3.0: +elliptic@^6.5.7: + version "6.6.1" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.6.1.tgz#3b8ffb02670bf69e382c7f65bf524c97c5405c06" + integrity sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g== + 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@^10.3.0: version "10.3.0" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-10.3.0.tgz#76998b9268409eb3dae3de989254d456e70cfe23" integrity sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw== @@ -5271,7 +5099,7 @@ encode-utf8@^1.0.3: resolved "https://registry.yarnpkg.com/encode-utf8/-/encode-utf8-1.0.3.tgz#f30fdd31da07fb596f281beb2f6b027851994cda" integrity sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw== -end-of-stream@^1.1.0, end-of-stream@^1.4.0, end-of-stream@^1.4.1, end-of-stream@^1.4.4: +end-of-stream@^1.1.0, end-of-stream@^1.4.0, end-of-stream@^1.4.1: version "1.4.4" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== @@ -5302,7 +5130,7 @@ enhanced-resolve@^5.10.0, enhanced-resolve@^5.12.0: graceful-fs "^4.2.4" tapable "^2.2.0" -enquirer@^2.3.0: +enquirer@^2.3.0, enquirer@^2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.4.1.tgz#93334b3fbd74fc7097b224ab4a8fb7e40bf4ae56" integrity sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ== @@ -5519,11 +5347,6 @@ escalade@^3.1.1: resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== -escape-string-regexp@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" - integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== - escape-string-regexp@4.0.0, escape-string-regexp@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" @@ -5950,7 +5773,12 @@ ethjs-util@0.1.6, ethjs-util@^0.1.6: is-hex-prefixed "1.0.0" strip-hex-prefix "1.0.0" -eventemitter2@^6.4.5, eventemitter2@^6.4.7: +event-target-shim@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" + integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== + +eventemitter2@^6.4.9: version "6.4.9" resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-6.4.9.tgz#41f2750781b4230ed58827bc119d293471ecb125" integrity sha512-JEPTiaOt9f04oa6NOkc4aH+nVp5I3wEjpHbIPqfgCdD5v5bUzy7xQqwcVO2aDQgOWhI28da57HksMrzK9HlRxg== @@ -5960,7 +5788,7 @@ eventemitter3@5.0.1, eventemitter3@^5.0.1: resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-5.0.1.tgz#53f5ffd0a492ac800721bb42c66b841de96423c4" integrity sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA== -events@^3.3.0: +events@3.3.0, events@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== @@ -5973,21 +5801,6 @@ evp_bytestokey@^1.0.3: md5.js "^1.3.4" safe-buffer "^5.1.1" -execa@7.2.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-7.2.0.tgz#657e75ba984f42a70f38928cedc87d6f2d4fe4e9" - integrity sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA== - dependencies: - cross-spawn "^7.0.3" - get-stream "^6.0.1" - human-signals "^4.3.0" - is-stream "^3.0.0" - merge-stream "^2.0.0" - npm-run-path "^5.1.0" - onetime "^6.0.0" - signal-exit "^3.0.7" - strip-final-newline "^3.0.0" - execa@^8.0.1: version "8.0.1" resolved "https://registry.yarnpkg.com/execa/-/execa-8.0.1.tgz#51f6a5943b580f963c3ca9c6321796db8cc39b8c" @@ -6013,11 +5826,12 @@ extendable-error@^0.1.5: resolved "https://registry.yarnpkg.com/extendable-error/-/extendable-error-0.1.7.tgz#60b9adf206264ac920058a7395685ae4670c2b96" integrity sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg== -extension-port-stream@^2.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/extension-port-stream/-/extension-port-stream-2.1.1.tgz#ec11f2a5ed95655d8c40805d7cb0c39939ee9ef4" - integrity sha512-qknp5o5rj2J9CRKfVB8KJr+uXQlrojNZzdESUPhKYLXf97TPcGf6qWWKmpsNNtUyOdzFhab1ON0jzouNxHHvow== +extension-port-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/extension-port-stream/-/extension-port-stream-3.0.0.tgz#00a7185fe2322708a36ed24843c81bd754925fef" + integrity sha512-an2S5quJMiy5bnZKEf6AkfH/7r8CzHvhchU40gxN+OM6HPhe7Z9T1FUychcf2M9PpPOO0Hf7BAEfJkw2TDIBDw== dependencies: + readable-stream "^3.6.2 || ^4.4.2" webextension-polyfill ">=0.10.0 <1.0" external-editor@^3.1.0: @@ -6029,11 +5843,6 @@ external-editor@^3.1.0: iconv-lite "^0.4.24" tmp "^0.0.33" -fast-deep-equal@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" - integrity sha512-bCK/2Z4zLidyB4ReuIsvALH6w31YfAQDmXMqMx6FyfHqvBxtjC0eRumeSu4Bs3XtXwpyIywtSTrVT99BxY1f9w== - fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" @@ -6116,16 +5925,18 @@ fill-range@^7.0.1: dependencies: to-regex-range "^5.0.1" +fill-range@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" + integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== + dependencies: + to-regex-range "^5.0.1" + filter-obj@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/filter-obj/-/filter-obj-1.1.0.tgz#9b311112bc6c6127a16e016c6c5d7f19e0805c5b" integrity sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ== -find-root@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4" - integrity sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng== - find-up@5.0.0, find-up@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" @@ -6141,7 +5952,7 @@ find-up@^2.0.0, find-up@^2.1.0: dependencies: locate-path "^2.0.0" -find-up@^4.0.0, find-up@^4.1.0: +find-up@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== @@ -6149,14 +5960,6 @@ find-up@^4.0.0, find-up@^4.1.0: locate-path "^5.0.0" path-exists "^4.0.0" -find-yarn-workspace-root2@1.2.16: - version "1.2.16" - resolved "https://registry.yarnpkg.com/find-yarn-workspace-root2/-/find-yarn-workspace-root2-1.2.16.tgz#60287009dd2f324f59646bdb4b7610a6b301c2a9" - integrity sha512-hr6hb1w8ePMpPVUK39S4RlwJzi+xPLuVuG8XlwXU3KD5Yn3qgBWVfy3AzNlDhWvE1EORCE65/Qm26rFQt3VLVA== - dependencies: - micromatch "^4.0.2" - pkg-dir "^4.2.0" - flat-cache@^3.0.4: version "3.2.0" resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.2.0.tgz#2c0c2d5040c99b1632771a9d105725c0115363ee" @@ -6284,11 +6087,6 @@ fuse.js@^7.0.0: resolved "https://registry.yarnpkg.com/fuse.js/-/fuse.js-7.0.0.tgz#6573c9fcd4c8268e403b4fc7d7131ffcf99a9eb2" integrity sha512-14F4hBIxqKvD4Zz/XjDc3y94mNZN6pRv3U13Udo0lNLCWRBUsrMv2xwcF/y/Z5sV6+FQW+/ow68cHpm4sunt8Q== -futoin-hkdf@^1.5.3: - version "1.5.3" - resolved "https://registry.yarnpkg.com/futoin-hkdf/-/futoin-hkdf-1.5.3.tgz#6c8024f2e1429da086d4e18289ef2239ad33ee35" - integrity sha512-SewY5KdMpaoCeh7jachEWFsh1nNlaDjNHZXWqL5IGwtpEYHTgkr2+AMCgNwKWkcc0wpSYrZfR7he4WdmHFtDxQ== - gensync@^1.0.0-beta.2: version "1.0.0-beta.2" resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" @@ -6335,11 +6133,6 @@ get-port-please@^3.1.2: resolved "https://registry.yarnpkg.com/get-port-please/-/get-port-please-3.1.2.tgz#502795e56217128e4183025c89a48c71652f4e49" integrity sha512-Gxc29eLs1fbn6LQ4jSU4vXjlwyZhF5HsGuMAa7gqBP4Rw4yxxltyDUuF5MBclFzDTXO+ACchGQoeela4DSfzdQ== -get-stream@^6.0.1: - 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-stream@^8.0.1: version "8.0.1" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-8.0.1.tgz#def9dfd71742cd7754a7761ed43749a27d02eca2" @@ -6473,11 +6266,6 @@ graceful-fs@^4.1.2, graceful-fs@^4.1.5, graceful-fs@^4.1.6, graceful-fs@^4.1.9, resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== -grapheme-splitter@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" - integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== - graphemer@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" @@ -6511,11 +6299,6 @@ h3@^1.10.1, h3@^1.8.2: uncrypto "^0.1.3" unenv "^1.9.0" -hard-rejection@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/hard-rejection/-/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883" - integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA== - hardhat@^2.20.1: version "2.20.1" resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.20.1.tgz#3ad8f2b003a96c9ce80a55fec3575580ff2ddcd4" @@ -6674,25 +6457,6 @@ hmac-drbg@^1.0.1: minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.1" -hoist-non-react-statics@^3.3.1: - version "3.3.2" - resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" - integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== - dependencies: - react-is "^16.7.0" - -hosted-git-info@^2.1.4: - version "2.8.9" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" - integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== - -html-parse-stringify@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/html-parse-stringify/-/html-parse-stringify-3.0.1.tgz#dfc1017347ce9f77c8141a507f233040c59c55d2" - integrity sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg== - dependencies: - void-elements "3.1.0" - http-errors@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" @@ -6722,35 +6486,11 @@ human-id@^1.0.2: resolved "https://registry.yarnpkg.com/human-id/-/human-id-1.0.2.tgz#e654d4b2b0d8b07e45da9f6020d8af17ec0a5df3" integrity sha512-UNopramDEhHJD+VR+ehk8rOslwSfByxPIZyJRfV739NDhN5LF1fa1MqnzKm2lGTQRjNrjK19Q5fhkgIfjlVUKw== -human-signals@^4.3.0: - version "4.3.1" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-4.3.1.tgz#ab7f811e851fca97ffbd2c1fe9a958964de321b2" - integrity sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ== - human-signals@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-5.0.0.tgz#42665a284f9ae0dade3ba41ebc37eb4b852f3a28" integrity sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ== -husky@^8.0.1: - version "8.0.3" - resolved "https://registry.yarnpkg.com/husky/-/husky-8.0.3.tgz#4936d7212e46d1dea28fef29bb3a108872cd9184" - integrity sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg== - -i18next-browser-languagedetector@^7.1.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/i18next-browser-languagedetector/-/i18next-browser-languagedetector-7.2.0.tgz#de0321cba6881be37d82e20e4d6f05aa75f6e37f" - integrity sha512-U00DbDtFIYD3wkWsr2aVGfXGAj2TgnELzOX9qv8bT0aJtvPV9CRO77h+vgmHFBMe7LAxdwvT/7VkCWGya6L3tA== - dependencies: - "@babel/runtime" "^7.23.2" - -i18next@22.5.1: - version "22.5.1" - resolved "https://registry.yarnpkg.com/i18next/-/i18next-22.5.1.tgz#99df0b318741a506000c243429a7352e5f44d424" - integrity sha512-8TGPgM3pAD+VRsMtUMNknRz3kzqwp/gPALrWMsDnmC1mKqJwpWyooQRLMcbTwq8z8YwSmuj+ZYvc+xCuEpkssA== - dependencies: - "@babel/runtime" "^7.20.6" - iconv-lite@0.4.24, iconv-lite@^0.4.24: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" @@ -6828,7 +6568,7 @@ internal-slot@^1.0.4, internal-slot@^1.0.5: hasown "^2.0.0" side-channel "^1.0.4" -invariant@2.2.4, 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== @@ -6958,11 +6698,6 @@ is-descriptor@^1.0.0: is-accessor-descriptor "^1.0.1" is-data-descriptor "^1.0.1" -is-docker@^2.0.0, is-docker@^2.1.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" - integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== - is-docker@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-3.0.0.tgz#90093aa3106277d8a77a5910dbae71747e15a200" @@ -7062,11 +6797,6 @@ is-path-inside@^3.0.3: resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== -is-plain-obj@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" - integrity sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg== - is-plain-obj@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" @@ -7160,13 +6890,6 @@ is-windows@^1.0.0: resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== -is-wsl@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" - integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== - dependencies: - is-docker "^2.0.0" - is-wsl@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-3.1.0.tgz#e1c657e39c10090afcbedec61720f6b924c3cbd2" @@ -7196,19 +6919,21 @@ isexe@^2.0.0: resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== -isomorphic-unfetch@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/isomorphic-unfetch/-/isomorphic-unfetch-3.1.0.tgz#87341d5f4f7b63843d468438128cb087b7c3e98f" - integrity sha512-geDJjpoZ8N0kWexiwkX8F9NkTsXhetLPVbZFQ+JTW239QNOwvB0gniuR1Wc6f0AMTn7/mFGyXvHTifrCp/GH8Q== - dependencies: - node-fetch "^2.6.1" - unfetch "^4.2.0" +isows@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/isows/-/isows-1.0.3.tgz#93c1cf0575daf56e7120bab5c8c448b0809d0d74" + integrity sha512-2cKei4vlmg2cxEjm3wVSqn8pcoRF/LX/wpifuuNquFO4SQmPwarClT+SUCA2lt+l581tTeZIPIZuIDo2jWN1fg== isows@1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/isows/-/isows-1.0.4.tgz#810cd0d90cc4995c26395d2aa4cfa4037ebdf061" integrity sha512-hEzjY+x9u9hPmBom9IIAqdJCwNLax+xrPb51vEPpERoFlIxgmZcHzsT5jKG06nvInKOBGvReAVz80Umed5CczQ== +isows@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/isows/-/isows-1.0.6.tgz#0da29d706fa51551c663c627ace42769850f86e7" + integrity sha512-lPHCayd40oW98/I0uvgaHKWCSvkzY27LjWLbtzOm64yQ+G3Q5npjjbdppU65iZXkK1Zt+kH9pfegli0AYfwYYw== + iterator.prototype@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/iterator.prototype/-/iterator.prototype-1.1.2.tgz#5e29c8924f01916cb9335f1ff80619dcff22b0c0" @@ -7277,7 +7002,7 @@ js-yaml@4.1.0, js-yaml@^4.1.0: dependencies: argparse "^2.0.1" -js-yaml@^3.13.0, js-yaml@^3.13.1, js-yaml@^3.6.1: +js-yaml@^3.13.1, js-yaml@^3.6.1: version "3.14.1" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== @@ -7300,11 +7025,6 @@ json-parse-better-errors@^1.0.1: resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== -json-parse-even-better-errors@^2.3.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" - integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== - json-rpc-engine@^6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/json-rpc-engine/-/json-rpc-engine-6.1.0.tgz#bf5ff7d029e1c1bf20cb6c0e9f348dcd8be5a393" @@ -7313,15 +7033,6 @@ json-rpc-engine@^6.1.0: "@metamask/safe-event-emitter" "^2.0.0" eth-rpc-errors "^4.0.2" -json-rpc-middleware-stream@^4.2.1: - version "4.2.3" - resolved "https://registry.yarnpkg.com/json-rpc-middleware-stream/-/json-rpc-middleware-stream-4.2.3.tgz#08340846ffaa2a60287930773546eb4b7f7dbba2" - integrity sha512-4iFb0yffm5vo3eFKDbQgke9o17XBcLQ2c3sONrXSbcOLzP8LTojqo8hRGVgtJShhm5q4ZDSNq039fAx9o65E1w== - dependencies: - "@metamask/safe-event-emitter" "^3.0.0" - json-rpc-engine "^6.1.0" - readable-stream "^2.3.3" - json-rpc-random-id@^1.0.0, json-rpc-random-id@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json-rpc-random-id/-/json-rpc-random-id-1.0.1.tgz#ba49d96aded1444dbb8da3d203748acbbcdec8c8" @@ -7421,11 +7132,6 @@ kind-of@^3.0.2: dependencies: is-buffer "^1.1.5" -kind-of@^6.0.3: - 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== - klaw@^1.0.0: version "1.3.1" resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439" @@ -7438,11 +7144,6 @@ kleur@^3.0.3: resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== -kleur@^4.1.5: - version "4.1.5" - resolved "https://registry.yarnpkg.com/kleur/-/kleur-4.1.5.tgz#95106101795f7050c6c650f350c683febddb1780" - integrity sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ== - language-subtag-registry@^0.3.20: version "0.3.22" resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz#2e1500861b2e457eba7e7ae86877cbd08fa1fd1d" @@ -7463,7 +7164,7 @@ levn@^0.4.1: prelude-ls "^1.2.1" type-check "~0.4.0" -lilconfig@2.1.0, lilconfig@^2.1.0: +lilconfig@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.1.0.tgz#78e23ac89ebb7e1bfbf25b18043de756548e7f52" integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ== @@ -7490,22 +7191,6 @@ linkify-it@^5.0.0: dependencies: uc.micro "^2.0.0" -lint-staged@^13.0.3: - version "13.3.0" - resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-13.3.0.tgz#7965d72a8d6a6c932f85e9c13ccf3596782d28a5" - integrity sha512-mPRtrYnipYYv1FEE134ufbWpeggNTo+O/UPzngoaKzbzHAthvR55am+8GfHTnqNRQVRRrYQLGW9ZyUoD7DsBHQ== - dependencies: - chalk "5.3.0" - commander "11.0.0" - debug "4.3.4" - execa "7.2.0" - lilconfig "2.1.0" - listr2 "6.6.1" - micromatch "4.0.5" - pidtree "0.6.0" - string-argv "0.3.2" - yaml "2.3.1" - listhen@^1.5.5: version "1.6.0" resolved "https://registry.yarnpkg.com/listhen/-/listhen-1.6.0.tgz#df26c527c59b87557be4d0408d4a09626bd946c8" @@ -7530,18 +7215,6 @@ listhen@^1.5.5: untun "^0.1.3" uqr "^0.1.2" -listr2@6.6.1: - version "6.6.1" - resolved "https://registry.yarnpkg.com/listr2/-/listr2-6.6.1.tgz#08b2329e7e8ba6298481464937099f4a2cd7f95d" - integrity sha512-+rAXGHh0fkEWdXBmX+L6mmfmXmXvDGEKzkjxO+8mP3+nI/r/CWznVBvsibXdxda9Zz0OW2e2ikphN3OwCT/jSg== - dependencies: - cli-truncate "^3.1.0" - colorette "^2.0.20" - eventemitter3 "^5.0.1" - log-update "^5.0.1" - rfdc "^1.3.0" - wrap-ansi "^8.1.0" - listr2@^8.0.2: version "8.0.2" resolved "https://registry.yarnpkg.com/listr2/-/listr2-8.0.2.tgz#07649d1f93ee28c9922c0fca64eaf348b7e4a6b7" @@ -7608,16 +7281,6 @@ load-tsconfig@^0.2.3: resolved "https://registry.yarnpkg.com/load-tsconfig/-/load-tsconfig-0.2.5.tgz#453b8cd8961bfb912dea77eb6c168fe8cca3d3a1" integrity sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg== -load-yaml-file@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/load-yaml-file/-/load-yaml-file-0.2.0.tgz#af854edaf2bea89346c07549122753c07372f64d" - integrity sha512-OfCBkGEw4nN6JLtgRidPX6QxjBQGQf72q3si2uvqyFEMbycSFFHwAZeXx6cJgFM9wmLrf9zBwCP3Ivqa+LLZPw== - dependencies: - graceful-fs "^4.1.5" - js-yaml "^3.13.0" - pify "^4.0.1" - strip-bom "^3.0.0" - locate-path@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" @@ -7758,17 +7421,6 @@ log-symbols@4.1.0: chalk "^4.1.0" is-unicode-supported "^0.1.0" -log-update@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/log-update/-/log-update-5.0.1.tgz#9e928bf70cb183c1f0c9e91d9e6b7115d597ce09" - integrity sha512-5UtUDQ/6edw4ofyljDNcOVJQ4c7OjDro4h3y8e1GQL5iYElYclVHJ3zeWchylvMaKnDbDilC8irOVyexnA/Slw== - dependencies: - ansi-escapes "^5.0.0" - cli-cursor "^4.0.0" - slice-ansi "^5.0.0" - strip-ansi "^7.0.1" - wrap-ansi "^8.0.1" - log-update@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/log-update/-/log-update-6.0.0.tgz#0ddeb7ac6ad658c944c1de902993fce7c33f5e59" @@ -7802,14 +7454,6 @@ lru-cache@^11.0.2: resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-11.0.2.tgz#fbd8e7cf8211f5e7e5d91905c415a3f55755ca39" integrity sha512-123qHRfJBmo2jXDbo/a5YOQrJoHF/GNQTLzQ5+IdK5pWpceK17yRc6ozlWd25FxvGKQbIUs91fDFkXmDHTKcyA== -lru-cache@^4.0.1: - version "4.1.5" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" - integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== - dependencies: - pseudomap "^1.0.2" - yallist "^2.1.2" - lru-cache@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" @@ -7846,16 +7490,6 @@ make-error@^1.1.1: resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== -map-obj@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" - integrity sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg== - -map-obj@^4.0.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.3.0.tgz#9304f906e93faae70880da102a9f1df0ea8bb05a" - integrity sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ== - markdown-it@^14.1.0: version "14.1.0" resolved "https://registry.yarnpkg.com/markdown-it/-/markdown-it-14.1.0.tgz#3c3c5992883c633db4714ccb4d7b5935d98b7d45" @@ -7894,30 +7528,6 @@ memorystream@^0.3.1: resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2" integrity sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw== -meow@^6.0.0: - version "6.1.1" - resolved "https://registry.yarnpkg.com/meow/-/meow-6.1.1.tgz#1ad64c4b76b2a24dfb2f635fddcadf320d251467" - integrity sha512-3YffViIt2QWgTy6Pale5QpopX/IvU3LPL03jOTqp6pGj3VjesdO/U8CuHMKpnQr4shCNCM5fd5XFFvIIl6JBHg== - dependencies: - "@types/minimist" "^1.2.0" - camelcase-keys "^6.2.2" - decamelize-keys "^1.1.0" - hard-rejection "^2.1.0" - minimist-options "^4.0.2" - normalize-package-data "^2.5.0" - read-pkg-up "^7.0.1" - redent "^3.0.0" - trim-newlines "^3.0.0" - type-fest "^0.13.1" - yargs-parser "^18.1.3" - -merge-options@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/merge-options/-/merge-options-3.0.4.tgz#84709c2aa2a4b24c1981f66c179fe5565cc6dbb7" - integrity sha512-2Sug1+knBjkaMsMgf1ctR1Ujx+Ayku4EdJN4Z+C2+JzoeF7A3OZ9KM2GY0CpQS51NR61LTurMJrRKPhSs3ZRTQ== - dependencies: - is-plain-obj "^2.1.0" - merge-stream@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" @@ -7949,7 +7559,7 @@ micro-ftch@^0.3.1: resolved "https://registry.yarnpkg.com/micro-ftch/-/micro-ftch-0.3.1.tgz#6cb83388de4c1f279a034fb0cf96dfc050853c5f" integrity sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg== -micromatch@4.0.5, micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.5: +micromatch@^4.0.4, micromatch@^4.0.5: version "4.0.5" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== @@ -7957,6 +7567,14 @@ micromatch@4.0.5, micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.5: braces "^3.0.2" picomatch "^2.3.1" +micromatch@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" + integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== + dependencies: + braces "^3.0.3" + picomatch "^2.3.1" + mime-db@1.52.0: version "1.52.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" @@ -7984,11 +7602,6 @@ mimic-fn@^4.0.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-4.0.0.tgz#60a90550d5cb0b239cca65d893b1a53b29871ecc" integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw== -min-indent@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" - integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== - 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" @@ -8034,15 +7647,6 @@ minimatch@^9.0.5: dependencies: brace-expansion "^2.0.1" -minimist-options@^4.0.2: - version "4.1.0" - resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619" - integrity sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A== - dependencies: - arrify "^1.0.1" - is-plain-obj "^1.1.0" - kind-of "^6.0.3" - minimist@^1.2.0, minimist@^1.2.6, minimist@^1.2.8: version "1.2.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" @@ -8053,17 +7657,10 @@ minimist@^1.2.0, minimist@^1.2.6, minimist@^1.2.8: resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.4.tgz#dbce03740f50a4786ba994c1fb908844d27b038c" integrity sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ== -mipd@0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/mipd/-/mipd-0.0.5.tgz#367ee796531c23f0631f129038700b1406663aec" - integrity sha512-gbKA784D2WKb5H/GtqEv+Ofd1S9Zj+Z/PGDIl1u1QAbswkxD28BQ5bSXQxkeBzPBABg1iDSbiwGG1XqlOxRspA== - dependencies: - viem "^1.1.4" - -mixme@^0.5.1: - version "0.5.10" - resolved "https://registry.yarnpkg.com/mixme/-/mixme-0.5.10.tgz#d653b2984b75d9018828f1ea333e51717ead5f51" - integrity sha512-5H76ANWinB1H3twpJ6JY8uvAtpmFvHNArpilJAjXRKXSDDLPIMoZArw5SH0q9z+lLs8IrMw7Q2VWpWimFKFT1Q== +mipd@0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/mipd/-/mipd-0.0.7.tgz#bb5559e21fa18dc3d9fe1c08902ef14b7ce32fd9" + integrity sha512-aAPZPNDQ3uMTdKbuO2YmAw2TxLHO0moa4YKAyETM/DTj5FloZo+a+8tU+iv4GmW+sOxKLSRwcSFuczk+Cpt6fg== mlly@^1.2.0, mlly@^1.5.0: version "1.5.0" @@ -8240,11 +7837,6 @@ node-addon-api@^2.0.0: resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-2.0.2.tgz#432cfa82962ce494b132e9d72a15b29f71ff5d32" integrity sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA== -node-addon-api@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-5.1.0.tgz#49da1ca055e109a23d537e9de43c09cca21eb762" - integrity sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA== - node-addon-api@^7.0.0: version "7.1.0" resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-7.1.0.tgz#71f609369379c08e251c558527a107107b5e0fdb" @@ -8260,7 +7852,7 @@ node-fetch-native@^1.6.2: resolved "https://registry.yarnpkg.com/node-fetch-native/-/node-fetch-native-1.6.2.tgz#f439000d972eb0c8a741b65dcda412322955e1c6" integrity sha512-69mtXOFZ6hSkYiXAVB5SqaRvrbITC/NPyqv7yuu/qw0nmgPyYbIMYYNIDhNtwPrzk0ptrimrLz/hhjvm4w5Z+w== -node-fetch@^2.6.1, node-fetch@^2.6.12: +node-fetch@^2.6.12: 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== @@ -8305,16 +7897,6 @@ nopt@~1.0.10: dependencies: abbrev "1" -normalize-package-data@^2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" - integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== - dependencies: - hosted-git-info "^2.1.4" - resolve "^1.10.0" - semver "2 || 3 || 4 || 5" - validate-npm-package-license "^3.0.1" - normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" @@ -8477,15 +8059,6 @@ onetime@^6.0.0: dependencies: mimic-fn "^4.0.0" -open@^8.4.0: - version "8.4.2" - resolved "https://registry.yarnpkg.com/open/-/open-8.4.2.tgz#5b5ffe2a8f793dcd2aad73e550cb87b59cb084f9" - integrity sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ== - dependencies: - define-lazy-prop "^2.0.0" - is-docker "^2.1.1" - is-wsl "^2.2.0" - openpgp@^5.5.0: version "5.11.0" resolved "https://registry.yarnpkg.com/openpgp/-/openpgp-5.11.0.tgz#cec5b285d188148f7b5201b9aceb53850cc286a2" @@ -8505,11 +8078,6 @@ optionator@^0.9.3: prelude-ls "^1.2.1" type-check "^0.4.0" -os-browserify@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" - integrity sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A== - os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" @@ -8525,6 +8093,19 @@ outdent@^0.8.0: resolved "https://registry.yarnpkg.com/outdent/-/outdent-0.8.0.tgz#2ebc3e77bf49912543f1008100ff8e7f44428eb0" integrity sha512-KiOAIsdpUTcAXuykya5fnVVT+/5uS0Q1mrkRHcF89tpieSmY33O/tmc54CqwA+bfhbtEfZUNLHaPUiB9X3jt1A== +ox@0.6.7: + version "0.6.7" + resolved "https://registry.yarnpkg.com/ox/-/ox-0.6.7.tgz#afd53f2ecef68b8526660e9d29dee6e6b599a832" + integrity sha512-17Gk/eFsFRAZ80p5eKqv89a57uXjd3NgIf1CaXojATPBuujVc/fQSVhBeAU9JCRB+k7J50WQAyWTxK19T9GgbA== + dependencies: + "@adraffy/ens-normalize" "^1.10.1" + "@noble/curves" "^1.6.0" + "@noble/hashes" "^1.5.0" + "@scure/bip32" "^1.5.0" + "@scure/bip39" "^1.4.0" + abitype "^1.0.6" + eventemitter3 "5.0.1" + ox@^0.6.9: version "0.6.9" resolved "https://registry.yarnpkg.com/ox/-/ox-0.6.9.tgz#da1ee04fa10de30c8d04c15bfb80fe58b1f554bd" @@ -8609,6 +8190,11 @@ p-try@^2.0.0: resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== +package-manager-detector@^0.2.0: + version "0.2.9" + resolved "https://registry.yarnpkg.com/package-manager-detector/-/package-manager-detector-0.2.9.tgz#20990785afa69d38b4520ccc83b34e9f69cb970f" + integrity sha512-+vYvA/Y31l8Zk8dwxHhL3JfTuHPm6tlxM2A3GeQyl7ovYnSp1+mzAxClxaOr0qO1TtPxbQxetI7v5XqKLJZk7Q== + pako@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/pako/-/pako-2.1.0.tgz#266cc37f98c7d883545d11335c00fbd4062c9a86" @@ -8629,16 +8215,6 @@ parse-json@^4.0.0: error-ex "^1.3.1" json-parse-better-errors "^1.0.1" -parse-json@^5.0.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" - integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== - dependencies: - "@babel/code-frame" "^7.0.0" - error-ex "^1.3.1" - json-parse-even-better-errors "^2.3.0" - lines-and-columns "^1.1.6" - parse-ms@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/parse-ms/-/parse-ms-1.0.1.tgz#56346d4749d78f23430ca0c713850aef91aa361d" @@ -8723,7 +8299,7 @@ picocolors@^1, picocolors@^1.0.0: resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== -picocolors@^1.1.1: +picocolors@^1.1.0, picocolors@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== @@ -8738,11 +8314,6 @@ picomatch@^4.0.2: resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.2.tgz#77c742931e8f3b8820946c76cd0c1f13730d1dab" integrity sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg== -pidtree@0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.6.0.tgz#90ad7b6d42d5841e69e0a2419ef38f8883aa057c" - integrity sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g== - pify@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" @@ -8806,13 +8377,6 @@ pkg-conf@^2.1.0: find-up "^2.0.0" load-json-file "^4.0.0" -pkg-dir@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" - integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== - dependencies: - find-up "^4.0.0" - pkg-types@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/pkg-types/-/pkg-types-1.0.3.tgz#988b42ab19254c01614d13f4f65a2cfc7880f868" @@ -8937,35 +8501,35 @@ preact@^10.16.0: resolved "https://registry.yarnpkg.com/preact/-/preact-10.19.3.tgz#7a7107ed2598a60676c943709ea3efb8aaafa899" integrity sha512-nHHTeFVBTHRGxJXKkKu5hT8C/YWBkPso4/Gad6xuj5dbptt9iF9NZr9pHbPhBrnT2klheu7mHTxTZ/LjwJiEiQ== -preferred-pm@^3.0.0: - version "3.1.3" - resolved "https://registry.yarnpkg.com/preferred-pm/-/preferred-pm-3.1.3.tgz#4125ea5154603136c3b6444e5f5c94ecf90e4916" - integrity sha512-MkXsENfftWSRpzCzImcp4FRsCc3y1opwB73CfCNWyzMqArju2CrlMHlqB7VexKiPEOjGMbttv1r9fSCn5S610w== - dependencies: - find-up "^5.0.0" - find-yarn-workspace-root2 "1.2.16" - path-exists "^4.0.0" - which-pm "2.0.0" +preact@^10.24.2: + version "10.25.4" + resolved "https://registry.yarnpkg.com/preact/-/preact-10.25.4.tgz#c1d00bee9d7b9dcd06a2311d9951973b506ae8ac" + integrity sha512-jLdZDb+Q+odkHJ+MpW/9U5cODzqnB+fy2EiHSZES7ldV5LK7yjlVzTp7R8Xy6W6y75kfK8iWYtFVH7lvjwrCMA== prelude-ls@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== -prettier-plugin-organize-imports@^3.2.4: - version "3.2.4" - resolved "https://registry.yarnpkg.com/prettier-plugin-organize-imports/-/prettier-plugin-organize-imports-3.2.4.tgz#77967f69d335e9c8e6e5d224074609309c62845e" - integrity sha512-6m8WBhIp0dfwu0SkgfOxJqh+HpdyfqSSLfKKRZSFbDuEQXDDndb8fTpRWkUrX/uBenkex3MgnVk0J3b3Y5byog== +prettier-plugin-organize-imports@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/prettier-plugin-organize-imports/-/prettier-plugin-organize-imports-4.1.0.tgz#f3d3764046a8e7ba6491431158b9be6ffd83b90f" + integrity sha512-5aWRdCgv645xaa58X8lOxzZoiHAldAPChljr/MT0crXVOWTZ+Svl4hIWlz+niYSlO6ikE5UXkN1JrRvIP2ut0A== + +prettier-plugin-tailwindcss@^0.6.11: + version "0.6.11" + resolved "https://registry.yarnpkg.com/prettier-plugin-tailwindcss/-/prettier-plugin-tailwindcss-0.6.11.tgz#cfacd60c4f81997353ee913e589037f796df0f5f" + integrity sha512-YxaYSIvZPAqhrrEpRtonnrXdghZg1irNg4qrjboCXrpybLWVs55cW2N3juhspVJiO0JBvYJT8SYsJpc8OQSnsA== -prettier-plugin-tailwindcss@^0.5.11: - version "0.5.11" - resolved "https://registry.yarnpkg.com/prettier-plugin-tailwindcss/-/prettier-plugin-tailwindcss-0.5.11.tgz#1aa9308c3285b3cb7942aaeaec8d0e0775ac54d0" - integrity sha512-AvI/DNyMctyyxGOjyePgi/gqj5hJYClZ1avtQvLlqMT3uDZkRbi4HhGUpok3DRzv9z7Lti85Kdj3s3/1CeNI0w== +prettier@^2.7.1: + version "2.8.8" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" + integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== -prettier@^2.7.1, prettier@^3.2.5: - version "3.2.5" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.2.5.tgz#e52bc3090586e824964a8813b09aba6233b28368" - integrity sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A== +prettier@^3.4.2: + version "3.4.2" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.4.2.tgz#a5ce1fb522a588bf2b78ca44c6e6fe5aa5a2b13f" + integrity sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ== pretty-ms@^2.1.0: version "2.1.0" @@ -8991,6 +8555,11 @@ process-warning@^1.0.0: resolved "https://registry.yarnpkg.com/process-warning/-/process-warning-1.0.0.tgz#980a0b25dc38cd6034181be4b7726d89066b4616" integrity sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q== +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== + prompts@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" @@ -9022,11 +8591,6 @@ proxy-compare@2.5.1: resolved "https://registry.yarnpkg.com/proxy-compare/-/proxy-compare-2.5.1.tgz#17818e33d1653fbac8c2ec31406bce8a2966f600" integrity sha512-oyfc0Tx87Cpwva5ZXezSp5V9vht1c7dZBhvuV/y3ctkgMVUmiAGDVeeB0dKhGSyT0v1ZTEQYpe/RXlBVBNuCLA== -pseudomap@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" - integrity sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ== - pstree.remy@^1.1.8: version "1.1.8" resolved "https://registry.yarnpkg.com/pstree.remy/-/pstree.remy-1.1.8.tgz#c242224f4a67c21f686839bbdb4ac282b8373d3a" @@ -9050,23 +8614,6 @@ punycode@^2.1.0: resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== -qr-code-styling@^1.6.0-rc.1: - version "1.6.0-rc.1" - resolved "https://registry.yarnpkg.com/qr-code-styling/-/qr-code-styling-1.6.0-rc.1.tgz#6c89e185fa50cc9135101085c12ae95b06f1b290" - integrity sha512-ModRIiW6oUnsP18QzrRYZSc/CFKFKIdj7pUs57AEVH20ajlglRpN3HukjHk0UbNMTlKGuaYl7Gt6/O5Gg2NU2Q== - dependencies: - qrcode-generator "^1.4.3" - -qrcode-generator@^1.4.3: - version "1.4.4" - resolved "https://registry.yarnpkg.com/qrcode-generator/-/qrcode-generator-1.4.4.tgz#63f771224854759329a99048806a53ed278740e7" - integrity sha512-HM7yY8O2ilqhmULxGMpcHSF1EhJJ9yBj8gvDEuZ6M+KGJ0YY2hKpnXvRD+hZPLrDVck3ExIGhmPtSdcjC+guuw== - -qrcode-terminal-nooctal@^0.12.1: - version "0.12.1" - resolved "https://registry.yarnpkg.com/qrcode-terminal-nooctal/-/qrcode-terminal-nooctal-0.12.1.tgz#45016aca0d82b2818de7af0a06d072ad671fbe2e" - integrity sha512-jy/kkD0iIMDjTucB+5T6KBsnirlhegDH47vHgrj5MejchSQmi/EAMM0xMFeePgV9CJkkAapNakpVUWYgHvtdKg== - qrcode@1.5.3: version "1.5.3" resolved "https://registry.yarnpkg.com/qrcode/-/qrcode-1.5.3.tgz#03afa80912c0dccf12bc93f615a535aad1066170" @@ -9102,11 +8649,6 @@ quick-format-unescaped@^4.0.3: resolved "https://registry.yarnpkg.com/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz#93ef6dd8d3453cbc7970dd614fad4c5954d6b5a7" integrity sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg== -quick-lru@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f" - integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g== - radix3@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/radix3/-/radix3-1.1.0.tgz#9745df67a49c522e94a33d0a93cf743f104b6e0d" @@ -9149,15 +8691,7 @@ react-hot-toast@^2.4.1: dependencies: goober "^2.1.10" -react-i18next@^13.2.2: - version "13.5.0" - resolved "https://registry.yarnpkg.com/react-i18next/-/react-i18next-13.5.0.tgz#44198f747628267a115c565f0c736a50a76b1ab0" - integrity sha512-CFJ5NDGJ2MUyBohEHxljOq/39NQ972rh1ajnadG9BjTk+UXbHLq4z5DKEbEQBDoIhUmmbuS/fIMJKo6VOax1HA== - dependencies: - "@babel/runtime" "^7.22.5" - html-parse-stringify "^3.0.1" - -react-is@^16.13.1, react-is@^16.7.0: +react-is@^16.13.1: version "16.13.1" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== @@ -9167,14 +8701,6 @@ react-loading-skeleton@^3.4.0: resolved "https://registry.yarnpkg.com/react-loading-skeleton/-/react-loading-skeleton-3.4.0.tgz#c71a3a17259d08e4064974aa0b07f150a09dfd57" integrity sha512-1oJEBc9+wn7BbkQQk7YodlYEIjgeR+GrRjD+QXkVjwZN7LGIcAFHrx4NhT7UHGBxNY1+zax3c+Fo6XQM4R7CgA== -react-native-webview@^11.26.0: - version "11.26.1" - resolved "https://registry.yarnpkg.com/react-native-webview/-/react-native-webview-11.26.1.tgz#658c09ed5162dc170b361e48c2dd26c9712879da" - integrity sha512-hC7BkxOpf+z0UKhxFSFTPAM4shQzYmZHoELa6/8a/MspcjEP7ukYKpuSUTLDywQditT8yI9idfcKvfZDKQExGw== - dependencies: - escape-string-regexp "2.0.0" - invariant "2.2.4" - react-refresh@^0.14.0: version "0.14.0" resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.14.0.tgz#4e02825378a5f227079554d4284889354e5f553e" @@ -9230,25 +8756,6 @@ read-cache@^1.0.0: dependencies: pify "^2.3.0" -read-pkg-up@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" - integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== - dependencies: - find-up "^4.1.0" - read-pkg "^5.2.0" - type-fest "^0.8.1" - -read-pkg@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" - integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== - dependencies: - "@types/normalize-package-data" "^2.4.0" - normalize-package-data "^2.5.0" - parse-json "^5.0.0" - type-fest "^0.6.0" - read-yaml-file@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/read-yaml-file/-/read-yaml-file-1.1.0.tgz#9362bbcbdc77007cc8ea4519fe1c0b821a7ce0d8" @@ -9272,20 +8779,7 @@ readable-stream@2.2.9: string_decoder "~1.0.0" util-deprecate "~1.0.1" -readable-stream@2.3.3: - version "2.3.3" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.3.tgz#368f2512d79f9d46fdfc71349ae7878bbc1eb95c" - integrity sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~1.0.6" - safe-buffer "~5.1.1" - string_decoder "~1.0.3" - util-deprecate "~1.0.1" - -readable-stream@^2.3.3, readable-stream@^2.3.7, readable-stream@~2.3.6: +readable-stream@^2.3.3, readable-stream@~2.3.6: version "2.3.8" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== @@ -9298,7 +8792,7 @@ readable-stream@^2.3.3, readable-stream@^2.3.7, readable-stream@~2.3.6: string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@^3.1.1, readable-stream@^3.6.0: +readable-stream@^3.1.1, readable-stream@^3.6.0, readable-stream@^3.6.2: version "3.6.2" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== @@ -9307,6 +8801,17 @@ readable-stream@^3.1.1, readable-stream@^3.6.0: string_decoder "^1.1.1" util-deprecate "^1.0.1" +"readable-stream@^3.6.2 || ^4.4.2": + version "4.7.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-4.7.0.tgz#cedbd8a1146c13dfff8dab14068028d58c15ac91" + integrity sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg== + dependencies: + abort-controller "^3.0.0" + buffer "^6.0.3" + events "^3.3.0" + process "^0.11.10" + string_decoder "^1.3.0" + readdirp@^4.0.1: version "4.1.1" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-4.1.1.tgz#bd115327129672dc47f87408f05df9bd9ca3ef55" @@ -9324,14 +8829,6 @@ real-require@^0.1.0: resolved "https://registry.yarnpkg.com/real-require/-/real-require-0.1.0.tgz#736ac214caa20632847b7ca8c1056a0767df9381" integrity sha512-r/H9MzAWtrv8aSVjPCMFpDMl5q66GqtmmRkRjpHTsp4zBAa+snZyiQNlMONiUmEJcsnaw0wCauJ2GWODr/aFkg== -redent@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f" - integrity sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg== - dependencies: - indent-string "^4.0.0" - strip-indent "^3.0.0" - redis-errors@^1.0.0, redis-errors@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/redis-errors/-/redis-errors-1.2.0.tgz#eb62d2adb15e4eaf4610c04afe1529384250abad" @@ -9417,7 +8914,7 @@ resolve@1.17.0: dependencies: path-parse "^1.0.6" -resolve@^1.1.7, resolve@^1.10.0, resolve@^1.19.0, resolve@^1.22.2, resolve@^1.22.4: +resolve@^1.1.7, resolve@^1.22.2, resolve@^1.22.4: version "1.22.8" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== @@ -9453,7 +8950,7 @@ reusify@^1.0.4: resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== -rfdc@^1.3.0, rfdc@^1.3.1: +rfdc@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.1.tgz#2b6d4df52dffe8bb346992a10ea9451f24373a8f" integrity sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg== @@ -9494,16 +8991,6 @@ rlp@^2.2.3: dependencies: bn.js "^5.2.0" -rollup-plugin-visualizer@^5.9.2: - version "5.12.0" - resolved "https://registry.yarnpkg.com/rollup-plugin-visualizer/-/rollup-plugin-visualizer-5.12.0.tgz#661542191ce78ee4f378995297260d0c1efb1302" - integrity sha512-8/NU9jXcHRs7Nnj07PF2o4gjxmm9lXIrZ8r175bT9dK8qoLlvKTwRMArRCMgpMGlq8CTLugRvEmyMeMXIU2pNQ== - dependencies: - open "^8.4.0" - picomatch "^2.3.1" - source-map "^0.7.4" - yargs "^17.5.1" - rollup@^4.2.0: version "4.9.6" resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.9.6.tgz#4515facb0318ecca254a2ee1315e22e09efc50a0" @@ -9638,16 +9125,7 @@ secp256k1@^4.0.1: node-addon-api "^2.0.0" node-gyp-build "^4.2.0" -secp256k1@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-5.0.0.tgz#be6f0c8c7722e2481e9773336d351de8cddd12f7" - integrity sha512-TKWX8xvoGHrxVdqbYeZM9w+izTF4b9z3NhSaDkdn81btvuh+ivbIMGT/zQvDtTFWhRlThpoz6LEYTr7n8A5GcA== - dependencies: - elliptic "^6.5.4" - node-addon-api "^5.0.0" - node-gyp-build "^4.2.0" - -"semver@2 || 3 || 4 || 5", semver@^5.5.0: +semver@^5.5.0: version "5.7.2" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== @@ -9714,13 +9192,6 @@ sha.js@^2.4.0, sha.js@^2.4.11, sha.js@^2.4.8: inherits "^2.0.1" safe-buffer "^5.0.1" -shebang-command@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" - integrity sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg== - dependencies: - shebang-regex "^1.0.0" - shebang-command@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" @@ -9728,11 +9199,6 @@ shebang-command@^2.0.0: dependencies: shebang-regex "^3.0.0" -shebang-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" - integrity sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ== - shebang-regex@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" @@ -9752,7 +9218,7 @@ siginfo@^2.0.0: resolved "https://registry.yarnpkg.com/siginfo/-/siginfo-2.0.0.tgz#32e76c70b79724e3bb567cb9d543eb858ccfaf30" integrity sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g== -signal-exit@^3.0.2, signal-exit@^3.0.7: +signal-exit@^3.0.2: 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== @@ -9829,18 +9295,6 @@ slice-ansi@^7.0.0: ansi-styles "^6.2.1" is-fullwidth-code-point "^5.0.0" -smartwrap@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/smartwrap/-/smartwrap-2.0.2.tgz#7e25d3dd58b51c6ca4aba3a9e391650ea62698a4" - integrity sha512-vCsKNQxb7PnCNd2wY1WClWifAc2lwqsG8OaswpJkVJsvMGcnEntdTCDajZCkk93Ay1U3t/9puJmb525Rg5MZBA== - dependencies: - array.prototype.flat "^1.2.3" - breakword "^1.0.5" - grapheme-splitter "^1.0.4" - strip-ansi "^6.0.0" - wcwidth "^1.0.1" - yargs "^15.1.0" - socket.io-client@^4.5.1, socket.io-client@^4.7.2: version "4.7.4" resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-4.7.4.tgz#5f0e060ff34ac0a4b4c5abaaa88e0d1d928c64c8" @@ -9911,54 +9365,18 @@ source-map@0.8.0-beta.0: dependencies: whatwg-url "^7.0.0" -source-map@^0.5.7: - version "0.5.7" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== - source-map@^0.6.0: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== -source-map@^0.7.4: - version "0.7.4" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656" - integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== - -spawndamnit@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/spawndamnit/-/spawndamnit-2.0.0.tgz#9f762ac5c3476abb994b42ad592b5ad22bb4b0ad" - integrity sha512-j4JKEcncSjFlqIwU5L/rp2N5SIPsdxaRsIv678+TZxZ0SRDJTm8JrxJMjE/XuiEZNEir3S8l0Fa3Ke339WI4qA== - dependencies: - cross-spawn "^5.1.0" - signal-exit "^3.0.2" - -spdx-correct@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.2.0.tgz#4f5ab0668f0059e34f9c00dce331784a12de4e9c" - integrity sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA== - dependencies: - spdx-expression-parse "^3.0.0" - spdx-license-ids "^3.0.0" - -spdx-exceptions@^2.1.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz#5d607d27fc806f66d7b64a766650fa890f04ed66" - integrity sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w== - -spdx-expression-parse@^3.0.0: +spawndamnit@^3.0.1: version "3.0.1" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" - integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== + resolved "https://registry.yarnpkg.com/spawndamnit/-/spawndamnit-3.0.1.tgz#44410235d3dc4e21f8e4f740ae3266e4486c2aed" + integrity sha512-MmnduQUuHCoFckZoWnXsTg7JaiLBJrKFj9UI2MbRPGaJeVpsLcVBu6P/IGZovziM/YBsellCmsprgNA+w0CzVg== dependencies: - spdx-exceptions "^2.1.0" - spdx-license-ids "^3.0.0" - -spdx-license-ids@^3.0.0: - version "3.0.17" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.17.tgz#887da8aa73218e51a1d917502d79863161a93f9c" - integrity sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg== + cross-spawn "^7.0.5" + signal-exit "^4.0.1" split-on-first@^1.0.0: version "1.1.0" @@ -10060,24 +9478,12 @@ stream-shift@^1.0.0: resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.3.tgz#85b8fab4d71010fc3ba8772e8046cc49b8a3864b" integrity sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ== -stream-transform@^2.1.3: - version "2.1.3" - resolved "https://registry.yarnpkg.com/stream-transform/-/stream-transform-2.1.3.tgz#a1c3ecd72ddbf500aa8d342b0b9df38f5aa598e3" - integrity sha512-9GHUiM5hMiCi6Y03jD2ARC1ettBXkQBoQAe7nJsPknnI0ow10aXjTnew8QtYQmLjzn974BnmWEAJgCY6ZP1DeQ== - dependencies: - mixme "^0.5.1" - strict-uri-encode@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546" integrity sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ== -string-argv@0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.2.tgz#2b6d0ef24b656274d957d54e0a4bbf6153dc02b6" - integrity sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q== - -"string-width-cjs@npm:string-width@^4.2.0", string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2, string-width@^4.2.3: +"string-width-cjs@npm:string-width@^4.2.0", string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -10086,7 +9492,7 @@ string-argv@0.3.2: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" -string-width@^5.0.0, string-width@^5.0.1, string-width@^5.1.2: +string-width@^5.0.1, string-width@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== @@ -10146,14 +9552,14 @@ string.prototype.trimstart@^1.0.7: define-properties "^1.2.0" es-abstract "^1.22.1" -string_decoder@^1.1.1: +string_decoder@^1.1.1, string_decoder@^1.3.0: 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" -string_decoder@~1.0.0, string_decoder@~1.0.3: +string_decoder@~1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab" integrity sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ== @@ -10205,13 +9611,6 @@ strip-hex-prefix@1.0.0: dependencies: is-hex-prefixed "1.0.0" -strip-indent@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" - integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== - dependencies: - min-indent "^1.0.0" - strip-json-comments@3.1.1, strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" @@ -10224,11 +9623,6 @@ styled-jsx@5.1.0: dependencies: client-only "0.0.1" -stylis@4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.2.0.tgz#79daee0208964c8fe695a42fcffcac633a211a51" - integrity sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw== - sucrase@^3.32.0, sucrase@^3.35.0: version "3.35.0" resolved "https://registry.yarnpkg.com/sucrase/-/sucrase-3.35.0.tgz#57f17a3d7e19b36d8995f06679d121be914ae263" @@ -10508,11 +9902,6 @@ treeify@^1.1.0: resolved "https://registry.yarnpkg.com/treeify/-/treeify-1.1.0.tgz#4e31c6a463accd0943879f30667c4fdaff411bb8" integrity sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A== -trim-newlines@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.1.tgz#260a5d962d8b752425b32f3a7db0dcacd176c144" - integrity sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw== - trim@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/trim/-/trim-0.0.1.tgz#5858547f6b290757ee95cccc666fb50084c460dd" @@ -10586,6 +9975,11 @@ tslib@^2.0.0, tslib@^2.1.0, tslib@^2.3.0, tslib@^2.3.1, tslib@^2.4.0: resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== +tslib@^2.6.0: + version "2.8.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" + integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== + tsort@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/tsort/-/tsort-0.0.1.tgz#e2280f5e817f8bf4275657fd0f9aebd44f5a2786" @@ -10613,19 +10007,6 @@ tsup@^8.3.6: tinyglobby "^0.2.9" tree-kill "^1.2.2" -tty-table@^4.1.5: - version "4.2.3" - resolved "https://registry.yarnpkg.com/tty-table/-/tty-table-4.2.3.tgz#e33eb4007a0a9c976c97c37fa13ba66329a5c515" - integrity sha512-Fs15mu0vGzCrj8fmJNP7Ynxt5J7praPXqFN0leZeZBXJwkMxv9cb2D454k1ltrtUSJbZ4yH4e0CynsHLxmUfFA== - dependencies: - chalk "^4.1.2" - csv "^5.5.3" - kleur "^4.1.5" - smartwrap "^2.0.2" - strip-ansi "^6.0.1" - wcwidth "^1.0.1" - yargs "^17.7.1" - turbo-darwin-64@1.12.2: version "1.12.2" resolved "https://registry.yarnpkg.com/turbo-darwin-64/-/turbo-darwin-64-1.12.2.tgz#4b5e48065b874b2379a45c2db71ce69d7c35c027" @@ -10703,11 +10084,6 @@ type-detect@4.0.8, type-detect@^4.0.8: resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== -type-fest@^0.13.1: - version "0.13.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.13.1.tgz#0172cb5bce80b0bd542ea348db50c7e21834d934" - integrity sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg== - type-fest@^0.20.2: version "0.20.2" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" @@ -10718,26 +10094,11 @@ type-fest@^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== -type-fest@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" - integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== - type-fest@^0.7.1: version "0.7.1" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.7.1.tgz#8dda65feaf03ed78f0a3f9678f1869147f7c5c48" integrity sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg== -type-fest@^0.8.1: - version "0.8.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" - integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== - -type-fest@^1.0.2: - version "1.4.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-1.4.0.tgz#e9fb813fe3bf1744ec359d55d1affefa76f14be1" - integrity sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA== - type-fest@^3.0.0: version "3.13.1" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-3.13.1.tgz#bb744c1f0678bea7543a2d1ec24e83e68e8c8706" @@ -10830,7 +10191,14 @@ ufo@^1.3.0, ufo@^1.3.1, ufo@^1.3.2: resolved "https://registry.yarnpkg.com/ufo/-/ufo-1.3.2.tgz#c7d719d0628a1c80c006d2240e0d169f6e3c0496" integrity sha512-o+ORpgGwaYQXgqGDwd+hkS4PuZ3QnmqMMxRuajK/a38L6fTpcE5GPIfrf+L/KemFzfUpeUQc1rRS1iDBozvnFA== -uint8arrays@^3.0.0, uint8arrays@^3.1.0: +uint8arrays@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/uint8arrays/-/uint8arrays-3.1.0.tgz#8186b8eafce68f28bd29bd29d683a311778901e2" + integrity sha512-ei5rfKtoRO8OyOIor2Rz5fhzjThwIHJZ3uyDPnDHTXbP0aMQ1RN/6AI5B5d9dBxJOU+BvOAk7ZQ1xphsX8Lrog== + dependencies: + multiformats "^9.4.2" + +uint8arrays@^3.0.0: version "3.1.1" resolved "https://registry.yarnpkg.com/uint8arrays/-/uint8arrays-3.1.1.tgz#2d8762acce159ccd9936057572dade9459f65ae0" integrity sha512-+QJa8QRnbdXVpHYjLoTpJIdCTiw9Ir62nocClWuXIq2JIh4Uta0cQsTSpFL678p2CN8B+XSApwcU+pQEqVpKWg== @@ -10880,11 +10248,6 @@ unenv@^1.9.0: node-fetch-native "^1.6.1" pathe "^1.1.1" -unfetch@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/unfetch/-/unfetch-4.2.0.tgz#7e21b0ef7d363d8d9af0fb929a5555f6ef97a3be" - integrity sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA== - unique-names-generator@^4.7.1: version "4.7.1" resolved "https://registry.yarnpkg.com/unique-names-generator/-/unique-names-generator-4.7.1.tgz#966407b12ba97f618928f77322cfac8c80df5597" @@ -10974,10 +10337,15 @@ use-sync-external-store@1.2.0: resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz#7dbefd6ef3fe4e767a0cf5d7287aacfb5846928a" integrity sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA== -utf-8-validate@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-6.0.3.tgz#7d8c936d854e86b24d1d655f138ee27d2636d777" - integrity sha512-uIuGf9TWQ/y+0Lp+KGZCMuJWc3N9BHA+l/UmHd/oUHwJJDeysyTRxNQVkbzsIWfGFbRe3OcgML/i0mvVRPOyDA== +use-sync-external-store@1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.4.0.tgz#adbc795d8eeb47029963016cefdf89dc799fcebc" + integrity sha512-9WXSPC5fMv61vaupRkCKCxsPxBocVnwakBEkMIHHpkTTg6icbJtg6jzgtLDm4bl3cSHAca52rYWih0k4K3PfHw== + +utf-8-validate@^5.0.2: + 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" @@ -11007,7 +10375,7 @@ uuid@^8.3.2: resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== -uuid@^9.0.0: +uuid@^9.0.0, uuid@^9.0.1: version "9.0.1" resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30" integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== @@ -11017,14 +10385,6 @@ v8-compile-cache-lib@^3.0.1: resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== -validate-npm-package-license@^3.0.1: - version "3.0.4" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" - integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== - dependencies: - spdx-correct "^3.0.0" - spdx-expression-parse "^3.0.0" - valtio@1.11.2: version "1.11.2" resolved "https://registry.yarnpkg.com/valtio/-/valtio-1.11.2.tgz#b8049c02dfe65620635d23ebae9121a741bb6530" @@ -11038,7 +10398,35 @@ video-stream-merger@^4.0.1: resolved "https://registry.yarnpkg.com/video-stream-merger/-/video-stream-merger-4.0.1.tgz#b0061251bd211121d1256ccf9e2be9477e59d5cb" integrity sha512-VazYSr8tk6S/zkOq5jpR/ryy1HnGxm5XCw+d2Ejpqy1m6d71oZpyFG82dUkgAo7dg/lk3k4TqvJPtuRUtR8URA== -viem@^1.0.0, viem@^1.1.4, viem@^1.20.3, viem@^2.16.2: +viem@^1.20.3: + version "1.21.4" + resolved "https://registry.yarnpkg.com/viem/-/viem-1.21.4.tgz#883760e9222540a5a7e0339809202b45fe6a842d" + integrity sha512-BNVYdSaUjeS2zKQgPs+49e5JKocfo60Ib2yiXOWBT6LuVxY1I/6fFX3waEtpXvL1Xn4qu+BVitVtMh9lyThyhQ== + dependencies: + "@adraffy/ens-normalize" "1.10.0" + "@noble/curves" "1.2.0" + "@noble/hashes" "1.3.2" + "@scure/bip32" "1.3.2" + "@scure/bip39" "1.2.1" + abitype "0.9.8" + isows "1.0.3" + ws "8.13.0" + +viem@^2.1.1: + version "2.22.23" + resolved "https://registry.yarnpkg.com/viem/-/viem-2.22.23.tgz#59949d41fd5a22317bed2cf7ea8e85d74e63fedf" + integrity sha512-MheOu+joowphTCfCgdQ9BGU/z1IeHa6/ZIYNVc6KTwDklj671YS87cGv5kRCSU0vAfzN+5wjWyIffM8000KGkQ== + dependencies: + "@noble/curves" "1.8.1" + "@noble/hashes" "1.7.1" + "@scure/bip32" "1.6.2" + "@scure/bip39" "1.5.4" + abitype "1.0.8" + isows "1.0.6" + ox "0.6.7" + ws "8.18.0" + +viem@^2.16.2: version "2.16.2" resolved "https://registry.yarnpkg.com/viem/-/viem-2.16.2.tgz#227e14c61afc9057d2290501649e37f7ed0379be" integrity sha512-qor3v1cJFR3jcPtcJxPbKfKURAH2agNf2IWZIaSReV6teNLERiu4Sr7kbqpkIeTAEpiDCVQwg336M+mub1m+pg== @@ -11120,26 +10508,14 @@ vitest@^3.0.5: vite-node "3.0.5" why-is-node-running "^2.3.0" -void-elements@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-3.1.0.tgz#614f7fbf8d801f0bb5f0661f5b2f5785750e4f09" - integrity sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w== - -wagmi@^2.5.11, wagmi@^2.5.7: - version "2.5.7" - resolved "https://registry.yarnpkg.com/wagmi/-/wagmi-2.5.7.tgz#dc5bdba16e8d5a3e8d7af6ab545cf438b564d9d1" - integrity sha512-xSuteMXFKvra4xDddqZbZv/gQlcg3X+To5AoZW7WoAm0iVlF8/vEGpQzCWy6KZs2z1szxPrr0YnH3Zr1Qj4E/A== - dependencies: - "@wagmi/connectors" "4.1.14" - "@wagmi/core" "2.6.5" - use-sync-external-store "1.2.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== +wagmi@^2.5.11: + version "2.14.11" + resolved "https://registry.yarnpkg.com/wagmi/-/wagmi-2.14.11.tgz#bfdd479e88bb3907efb412d04b5135a0017d5090" + integrity sha512-Qj79cq+9MAcnKict9QLo60Lc4S2IXVVE94HBwCmczDrFtoM31NxfX4uQP73Elj2fV9lXH4/dw3jlb8eDhlm6iQ== dependencies: - defaults "^1.0.3" + "@wagmi/connectors" "5.7.7" + "@wagmi/core" "2.16.4" + use-sync-external-store "1.4.0" web3-utils@^1.3.4: version "1.10.3" @@ -11155,23 +10531,11 @@ web3-utils@^1.3.4: randombytes "^2.1.0" utf8 "3.0.0" -webextension-polyfill-ts@^0.25.0: - version "0.25.0" - resolved "https://registry.yarnpkg.com/webextension-polyfill-ts/-/webextension-polyfill-ts-0.25.0.tgz#fff041626365dbd0e29c40b197e989a55ec221ca" - integrity sha512-ikQhwwHYkpBu00pFaUzIKY26I6L87DeRI+Q6jBT1daZUNuu8dSrg5U9l/ZbqdaQ1M/TTSPKeAa3kolP5liuedw== - dependencies: - webextension-polyfill "^0.7.0" - -"webextension-polyfill@>=0.10.0 <1.0": +"webextension-polyfill@>=0.10.0 <1.0", webextension-polyfill@^0.10.0: version "0.10.0" resolved "https://registry.yarnpkg.com/webextension-polyfill/-/webextension-polyfill-0.10.0.tgz#ccb28101c910ba8cf955f7e6a263e662d744dbb8" integrity sha512-c5s35LgVa5tFaHhrZDnr3FpQpjj1BB+RXhLTYUxGqBVN460HkbM8TBtEqdXWbpTKfzwCcjAZVF7zXCYSKtcp9g== -webextension-polyfill@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/webextension-polyfill/-/webextension-polyfill-0.7.0.tgz#0df1120ff0266056319ce1a622b09ad8d4a56505" - integrity sha512-su48BkMLxqzTTvPSE1eWxKToPS2Tv5DLGxKexLEVpwFd6Po6N8hhSLIvG6acPAg7qERoEaDL+Y5HQJeJeml5Aw== - webidl-conversions@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" @@ -11243,14 +10607,6 @@ which-module@^2.0.0: resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.1.tgz#776b1fe35d90aebe99e8ac15eb24093389a4a409" integrity sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ== -which-pm@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/which-pm/-/which-pm-2.0.0.tgz#8245609ecfe64bf751d0eef2f376d83bf1ddb7ae" - integrity sha512-Lhs9Pmyph0p5n5Z3mVnN0yWcbQYUAD7rbQUiMsQxOJ3T57k7RFe35SUwWMf7dsbDZks1uOmw4AecB/JMDj3v/w== - dependencies: - load-yaml-file "^0.2.0" - path-exists "^4.0.0" - which-typed-array@^1.1.13, which-typed-array@^1.1.14, which-typed-array@^1.1.2, which-typed-array@^1.1.9: version "1.1.14" resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.14.tgz#1f78a111aee1e131ca66164d8bdc3ab062c95a06" @@ -11262,13 +10618,6 @@ which-typed-array@^1.1.13, which-typed-array@^1.1.14, which-typed-array@^1.1.2, gopd "^1.0.1" has-tostringtag "^1.0.1" -which@^1.2.9: - version "1.3.1" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" - integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== - dependencies: - isexe "^2.0.0" - which@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" @@ -11322,7 +10671,7 @@ wrap-ansi@^6.2.0: string-width "^4.1.0" strip-ansi "^6.0.0" -wrap-ansi@^8.0.1, wrap-ansi@^8.1.0: +wrap-ansi@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== @@ -11350,11 +10699,21 @@ ws@7.4.6: resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== +ws@8.13.0: + version "8.13.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.13.0.tgz#9a9fb92f93cf41512a0735c8f4dd09b8a1211cd0" + integrity sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA== + ws@8.17.1: version "8.17.1" resolved "https://registry.yarnpkg.com/ws/-/ws-8.17.1.tgz#9293da530bb548febc95371d90f9c878727d919b" integrity sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ== +ws@8.18.0: + version "8.18.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.0.tgz#0d7505a6eafe2b0e712d232b42279f53bc289bbc" + integrity sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw== + ws@8.5.0: version "8.5.0" resolved "https://registry.yarnpkg.com/ws/-/ws-8.5.0.tgz#bfb4be96600757fe5382de12c670dab984a1ed4f" @@ -11390,11 +10749,6 @@ y18n@^5.0.5: resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== -yallist@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" - integrity sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A== - yallist@^3.0.2: version "3.1.1" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" @@ -11405,16 +10759,6 @@ yallist@^4.0.0: resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== -yaml@2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.3.1.tgz#02fe0975d23cd441242aa7204e09fc28ac2ac33b" - integrity sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ== - -yaml@^1.10.0: - version "1.10.2" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" - integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== - yaml@^2.3.4: version "2.3.4" resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.3.4.tgz#53fc1d514be80aabf386dc6001eb29bf3b7523b2" @@ -11430,7 +10774,7 @@ yargs-parser@20.2.4: resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== -yargs-parser@^18.1.2, yargs-parser@^18.1.3: +yargs-parser@^18.1.2: version "18.1.3" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== @@ -11471,7 +10815,7 @@ yargs@16.2.0: y18n "^5.0.5" yargs-parser "^20.2.2" -yargs@^15.1.0, yargs@^15.3.1: +yargs@^15.3.1: version "15.4.1" resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== @@ -11488,19 +10832,6 @@ yargs@^15.1.0, yargs@^15.3.1: y18n "^4.0.0" yargs-parser "^18.1.2" -yargs@^17.5.1, yargs@^17.7.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@3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" @@ -11511,12 +10842,10 @@ yocto-queue@^0.1.0: resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== -zustand@4.4.1: - version "4.4.1" - resolved "https://registry.yarnpkg.com/zustand/-/zustand-4.4.1.tgz#0cd3a3e4756f21811bd956418fdc686877e8b3b0" - integrity sha512-QCPfstAS4EBiTQzlaGP1gmorkh/UL1Leaj2tdj+zZCZ/9bm0WS7sI2wnfD5lpOszFqWJ1DcPnGoY8RDL61uokw== - dependencies: - use-sync-external-store "1.2.0" +zustand@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/zustand/-/zustand-5.0.0.tgz#71f8aaecf185592a3ba2743d7516607361899da9" + integrity sha512-LE+VcmbartOPM+auOjCCLQOsQ05zUTp8RkgwRzefUk+2jISdMMFnxvyTjA4YNWr5ZGXYbVsEMZosttuxUBkojQ== zustand@^4.3.9: version "4.5.0" From ec81bdb88e65d593cc87a6465c52844659012bd3 Mon Sep 17 00:00:00 2001 From: Ryan Goree Date: Sat, 8 Feb 2025 18:36:26 -0600 Subject: [PATCH 007/146] Update turbo.json --- turbo.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/turbo.json b/turbo.json index 6b8d81c1..1bf650b9 100644 --- a/turbo.json +++ b/turbo.json @@ -1,7 +1,7 @@ { "$schema": "https://turborepo.org/schema.json", "globalDependencies": ["**/.env.*local"], - "pipeline": { + "tasks": { "build": { "dependsOn": ["^build"], "outputs": ["dist/**", ".next/**"] From c89d9f1881e63c5ab76831e6e6fa055e32c9f9d9 Mon Sep 17 00:00:00 2001 From: Ryan Goree Date: Sat, 8 Feb 2025 18:47:44 -0600 Subject: [PATCH 008/146] Delete old utils that will come from drift --- packages/council-js/src/contract/extend.ts | 91 ------------------- packages/council-js/src/contract/factory.ts | 22 ----- packages/council-js/src/exports/airdrop.ts | 5 - packages/council-js/src/exports/contract.ts | 12 --- packages/council-js/src/exports/council.ts | 8 -- packages/council-js/src/exports/errors.ts | 1 - packages/council-js/src/exports/index.ts | 12 --- packages/council-js/src/exports/model.ts | 7 -- packages/council-js/src/exports/proposal.ts | 9 -- packages/council-js/src/exports/token.ts | 2 - packages/council-js/src/exports/utils.ts | 5 - packages/council-js/src/exports/vaults.ts | 30 ------ packages/council-js/src/exports/vote.ts | 1 - packages/council-js/src/exports/voter.ts | 1 - packages/council-js/src/exports/voting.ts | 15 --- packages/council-js/src/models/Model.ts | 68 -------------- .../src/test/stubContractFactory.ts | 26 ------ packages/council-js/src/types.ts | 3 - .../src/utils/blockToReadOptions.ts | 22 ----- packages/council-js/src/utils/formatUnits.ts | 5 - .../council-js/src/utils/getBlockOrThrow.ts | 19 ---- 21 files changed, 364 deletions(-) delete mode 100644 packages/council-js/src/contract/extend.ts delete mode 100644 packages/council-js/src/contract/factory.ts delete mode 100644 packages/council-js/src/exports/airdrop.ts delete mode 100644 packages/council-js/src/exports/contract.ts delete mode 100644 packages/council-js/src/exports/council.ts delete mode 100644 packages/council-js/src/exports/errors.ts delete mode 100644 packages/council-js/src/exports/index.ts delete mode 100644 packages/council-js/src/exports/model.ts delete mode 100644 packages/council-js/src/exports/proposal.ts delete mode 100644 packages/council-js/src/exports/token.ts delete mode 100644 packages/council-js/src/exports/utils.ts delete mode 100644 packages/council-js/src/exports/vaults.ts delete mode 100644 packages/council-js/src/exports/vote.ts delete mode 100644 packages/council-js/src/exports/voter.ts delete mode 100644 packages/council-js/src/exports/voting.ts delete mode 100644 packages/council-js/src/models/Model.ts delete mode 100644 packages/council-js/src/test/stubContractFactory.ts delete mode 100644 packages/council-js/src/types.ts delete mode 100644 packages/council-js/src/utils/blockToReadOptions.ts delete mode 100644 packages/council-js/src/utils/formatUnits.ts delete mode 100644 packages/council-js/src/utils/getBlockOrThrow.ts diff --git a/packages/council-js/src/contract/extend.ts b/packages/council-js/src/contract/extend.ts deleted file mode 100644 index 301ac4cf..00000000 --- a/packages/council-js/src/contract/extend.ts +++ /dev/null @@ -1,91 +0,0 @@ -import { - CachedReadContract, - CachedReadWriteContract, - CreateCachedReadContractOptions, - CreateCachedReadWriteContractOptions, - Network, - createCachedReadContract, - createCachedReadWriteContract, -} from "@delvtech/evm-client"; -import { Abi } from "abitype"; -import { Prettify } from "src/types"; -import { getEventsWithSplitAndRetry } from "src/utils/getEventsWithSplitAndRetry"; - -interface ExtendOptions { - network: Network; - /** - * The maximum number of times to split a failed event query into smaller - * block ranges and retry. This number has the potential to increase the - * number of requests exponentially, so the number should be considered - * carefully. Defaults to 5. - */ - maxEventQuerySplits?: number; -} - -export type ExtendReadContractOptions = Prettify< - ExtendOptions & CreateCachedReadContractOptions ->; - -/** - * Extends a read contract with custom event fetching logic and caching. When - * event queries fail, the range of blocks is recursively split in half and the - * query is retried until the `maxEventQuerySplits` is reached. - */ -export function extendReadContract({ - contract, - network, - cache, - namespace, - maxEventQuerySplits = 5, -}: ExtendReadContractOptions): CachedReadContract { - return createCachedReadContract({ - contract: { - ...contract, - getEvents(eventName, options) { - return getEventsWithSplitAndRetry({ - contract, - network, - eventName, - options, - attemptsLeft: maxEventQuerySplits, - }); - }, - }, - cache, - namespace, - }); -} - -export type ExtendReadWriteContractOptions = Prettify< - ExtendOptions & CreateCachedReadWriteContractOptions ->; - -/** - * Extends a read contract with custom event fetching logic and caching. When - * event queries fail, the range of blocks is recursively split in half and the - * query is retried until the `maxEventQuerySplits` is reached. - */ -export function extendReadWriteContract({ - contract, - network, - cache, - namespace, - maxEventQuerySplits = 5, -}: ExtendReadWriteContractOptions): CachedReadWriteContract { - return createCachedReadWriteContract({ - contract: { - ...contract, - getEvents(eventName, options) { - return getEventsWithSplitAndRetry({ - contract, - network, - eventName, - options, - attemptsLeft: maxEventQuerySplits, - }); - }, - }, - cache, - namespace, - }); -} diff --git a/packages/council-js/src/contract/factory.ts b/packages/council-js/src/contract/factory.ts deleted file mode 100644 index 2e295520..00000000 --- a/packages/council-js/src/contract/factory.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { - CachedReadContract, - CachedReadWriteContract, - CreateCachedReadContractOptions, -} from "@delvtech/evm-client"; -import { Abi } from "abitype"; -import { Prettify } from "src/types"; - -export type ContractFactoryOptions = Prettify< - Omit & { - abi: TAbi; - address: `0x${string}`; - } ->; - -export type ReadContractFactory = ( - options: ContractFactoryOptions, -) => CachedReadContract; - -export type ReadWriteContractFactory = ( - options: ContractFactoryOptions, -) => CachedReadWriteContract; diff --git a/packages/council-js/src/exports/airdrop.ts b/packages/council-js/src/exports/airdrop.ts deleted file mode 100644 index 5145fc14..00000000 --- a/packages/council-js/src/exports/airdrop.ts +++ /dev/null @@ -1,5 +0,0 @@ -export { - ReadAirdrop, - type ReadAirdropOptions, -} from "src/models/airdrop/ReadAirdrop"; -export { ReadWriteAirdrop } from "src/models/airdrop/ReadWriteAirdrop"; diff --git a/packages/council-js/src/exports/contract.ts b/packages/council-js/src/exports/contract.ts deleted file mode 100644 index 36b6f224..00000000 --- a/packages/council-js/src/exports/contract.ts +++ /dev/null @@ -1,12 +0,0 @@ -export type { - ContractFactoryOptions, - ReadContractFactory, - ReadWriteContractFactory, -} from "src/contract/factory"; - -export { - extendReadContract, - extendReadWriteContract, - type ExtendReadContractOptions, - type ExtendReadWriteContractOptions, -} from "src/contract/extend"; diff --git a/packages/council-js/src/exports/council.ts b/packages/council-js/src/exports/council.ts deleted file mode 100644 index 3992432e..00000000 --- a/packages/council-js/src/exports/council.ts +++ /dev/null @@ -1,8 +0,0 @@ -export { - ReadCouncil, - type ReadCouncilOptions, -} from "src/models/council/ReadCouncil"; -export { - ReadWriteCouncil, - type ReadWriteCouncilOptions, -} from "src/models/council/ReadWriteCouncil"; diff --git a/packages/council-js/src/exports/errors.ts b/packages/council-js/src/exports/errors.ts deleted file mode 100644 index 14500751..00000000 --- a/packages/council-js/src/exports/errors.ts +++ /dev/null @@ -1 +0,0 @@ -export { BlockNotFoundError } from "src/errors/BlockNotFound"; diff --git a/packages/council-js/src/exports/index.ts b/packages/council-js/src/exports/index.ts deleted file mode 100644 index 5c51e94d..00000000 --- a/packages/council-js/src/exports/index.ts +++ /dev/null @@ -1,12 +0,0 @@ -export * from "src/exports/airdrop"; -export * from "src/exports/council"; -export * from "src/exports/errors"; -export * from "src/exports/contract"; -export * from "src/exports/model"; -export * from "src/exports/proposal"; -export * from "src/exports/token"; -export * from "src/exports/utils"; -export * from "src/exports/vaults"; -export * from "src/exports/vote"; -export * from "src/exports/voter"; -export * from "src/exports/voting"; diff --git a/packages/council-js/src/exports/model.ts b/packages/council-js/src/exports/model.ts deleted file mode 100644 index 2be6b22e..00000000 --- a/packages/council-js/src/exports/model.ts +++ /dev/null @@ -1,7 +0,0 @@ -export { - Model, - type ReadContractModelOptions, - type ReadModelOptions, - type ReadWriteContractModelOptions, - type ReadWriteModelOptions, -} from "src/models/Model"; diff --git a/packages/council-js/src/exports/proposal.ts b/packages/council-js/src/exports/proposal.ts deleted file mode 100644 index 50e012b4..00000000 --- a/packages/council-js/src/exports/proposal.ts +++ /dev/null @@ -1,9 +0,0 @@ -export { - ReadProposal, - type BaseProposalOptions, - type ReadProposalOptions, -} from "src/models/proposal/ReadProposal"; -export { - ReadWriteProposal, - type ReadWriteProposalOptions, -} from "src/models/proposal/ReadWriteProposal"; diff --git a/packages/council-js/src/exports/token.ts b/packages/council-js/src/exports/token.ts deleted file mode 100644 index e5704d58..00000000 --- a/packages/council-js/src/exports/token.ts +++ /dev/null @@ -1,2 +0,0 @@ -export { ReadToken, type ReadTokenOptions } from "src/models/token/ReadToken"; -export { ReadWriteMockToken } from "src/models/token/ReadWriteMockToken"; diff --git a/packages/council-js/src/exports/utils.ts b/packages/council-js/src/exports/utils.ts deleted file mode 100644 index 811b210c..00000000 --- a/packages/council-js/src/exports/utils.ts +++ /dev/null @@ -1,5 +0,0 @@ -export { - blockToReadOptions, - type BlockLike, -} from "src/utils/blockToReadOptions"; -export { getVaultsWithPower } from "src/utils/getVaultsWithPower"; diff --git a/packages/council-js/src/exports/vaults.ts b/packages/council-js/src/exports/vaults.ts deleted file mode 100644 index ef3931fd..00000000 --- a/packages/council-js/src/exports/vaults.ts +++ /dev/null @@ -1,30 +0,0 @@ -export { - ReadVotingVault, - type ReadVotingVaultOptions, -} from "src/models/votingVault/ReadVotingVault"; -export { - ReadGscVault, - type ReadGscVaultOptions, -} from "src/models/votingVault/gscVault/ReadGscVault"; -export { - ReadWriteGscVault, - type ReadWriteGscVaultOptions, -} from "src/models/votingVault/gscVault/ReadWriteGscVault"; -export { - ReadLockingVault, - type ReadLockingVaultOptions, -} from "src/models/votingVault/lockingVault/ReadLockingVault"; -export { - ReadWriteLockingVault, - type ReadWriteLockingVaultOptions, -} from "src/models/votingVault/lockingVault/ReadWriteLockingVault"; -export type { - VoterPowerBreakdown, - VoterWithPower, - VotingVaultAbi, -} from "src/models/votingVault/types"; -export { - ReadVestingVault, - type ReadVestingVaultOptions, -} from "src/models/votingVault/vestingVault/ReadVestingVault"; -export { ReadWriteVestingVault } from "src/models/votingVault/vestingVault/ReadWriteVestingVault"; diff --git a/packages/council-js/src/exports/vote.ts b/packages/council-js/src/exports/vote.ts deleted file mode 100644 index a9768dc1..00000000 --- a/packages/council-js/src/exports/vote.ts +++ /dev/null @@ -1 +0,0 @@ -export { ReadVote, type ReadVoteOptions } from "src/models/ReadVote"; diff --git a/packages/council-js/src/exports/voter.ts b/packages/council-js/src/exports/voter.ts deleted file mode 100644 index e6a497e5..00000000 --- a/packages/council-js/src/exports/voter.ts +++ /dev/null @@ -1 +0,0 @@ -export { ReadVoter, type ReadVoterOptions } from "src/models/ReadVoter"; diff --git a/packages/council-js/src/exports/voting.ts b/packages/council-js/src/exports/voting.ts deleted file mode 100644 index f167a6e1..00000000 --- a/packages/council-js/src/exports/voting.ts +++ /dev/null @@ -1,15 +0,0 @@ -export { - ReadCoreVoting, - type ReadCoreVotingOptions, -} from "src/models/coreVoting/ReadCoreVoting"; -export { - ReadWriteCoreVoting, - type ReadWriteCoreVotingOptions, -} from "src/models/coreVoting/ReadWriteCoreVoting"; -export { EXECUTED_PROPOSAL_HASH } from "src/models/coreVoting/constants"; -export type { - Actions, - Ballot, - CoreVotingAbi, - VoteResults, -} from "src/models/coreVoting/types"; diff --git a/packages/council-js/src/models/Model.ts b/packages/council-js/src/models/Model.ts deleted file mode 100644 index 80e248b8..00000000 --- a/packages/council-js/src/models/Model.ts +++ /dev/null @@ -1,68 +0,0 @@ -import { - CreateCachedReadContractOptions, - CreateCachedReadWriteContractOptions, - Network, -} from "@delvtech/evm-client"; -import { - ReadContractFactory, - ReadWriteContractFactory, -} from "src/contract/factory"; - -interface ModelOptions { - network: Network; - /** - * An arbitrary name for the instance. This is for convenience only (e.g., - * display name, debugging) and has no affect on the model's behavior. - */ - name?: string; -} - -/** - * @category Models - */ -export interface ReadModelOptions extends ModelOptions { - contractFactory: ReadContractFactory; -} - -/** - * A base class for read-only models. - * @category Models - */ -export class Model { - name: string; - network: Network; - contractFactory: ReadContractFactory; - - constructor({ name, network, contractFactory }: ReadModelOptions) { - this.name = name ?? this.constructor.name; - this.network = network; - this.contractFactory = contractFactory; - } -} - -/** - * @category Models - */ -export interface ReadWriteModelOptions extends ModelOptions { - contractFactory: ReadWriteContractFactory; -} - -// Contract models - -/** - * @category Models - */ -export interface ReadContractModelOptions - extends ReadModelOptions, - Omit { - address: `0x${string}`; -} - -/** - * @category Models - */ -export interface ReadWriteContractModelOptions - extends ReadWriteModelOptions, - Omit { - address: `0x${string}`; -} diff --git a/packages/council-js/src/test/stubContractFactory.ts b/packages/council-js/src/test/stubContractFactory.ts deleted file mode 100644 index 444596c7..00000000 --- a/packages/council-js/src/test/stubContractFactory.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { - CachedReadContract, - createCachedReadContract, -} from "@delvtech/evm-client"; -import { ReadContractStub } from "@delvtech/evm-client/stubs"; -import { Abi } from "abitype"; -import { ContractFactoryOptions } from "src/exports"; -import { Prettify } from "src/types"; - -/** - * A cached read contract combined with a read contract stub. - */ -export type CachedReadContractStub = Prettify< - CachedReadContract & ReadContractStub ->; - -/** - * A factory for creating cached read contract stubs. - */ -export function stubContractFactory({ - abi, -}: ContractFactoryOptions): CachedReadContractStub { - return createCachedReadContract({ - contract: new ReadContractStub(abi), - }) as CachedReadContractStub; -} diff --git a/packages/council-js/src/types.ts b/packages/council-js/src/types.ts deleted file mode 100644 index 0719b023..00000000 --- a/packages/council-js/src/types.ts +++ /dev/null @@ -1,3 +0,0 @@ -export type Prettify = { - [K in keyof T]: T[K]; -} & unknown; diff --git a/packages/council-js/src/utils/blockToReadOptions.ts b/packages/council-js/src/utils/blockToReadOptions.ts deleted file mode 100644 index eb4de138..00000000 --- a/packages/council-js/src/utils/blockToReadOptions.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { BlockTag, ContractReadOptions } from "@delvtech/evm-client"; - -export type BlockLike = BlockTag | bigint; - -export function blockToReadOptions( - block?: BlockLike, -): ContractReadOptions | undefined { - switch (typeof block) { - case "bigint": - return { - blockNumber: block, - }; - - case "string": - return { - blockTag: block, - }; - - default: - return undefined; - } -} diff --git a/packages/council-js/src/utils/formatUnits.ts b/packages/council-js/src/utils/formatUnits.ts deleted file mode 100644 index 08a7b2f6..00000000 --- a/packages/council-js/src/utils/formatUnits.ts +++ /dev/null @@ -1,5 +0,0 @@ -import Big from "big.js"; - -export function formatUnits(value: number | bigint, decimals: number): string { - return Big(String(value)).div(Big(10).pow(decimals)).toFixed(decimals); -} diff --git a/packages/council-js/src/utils/getBlockOrThrow.ts b/packages/council-js/src/utils/getBlockOrThrow.ts deleted file mode 100644 index b8704264..00000000 --- a/packages/council-js/src/utils/getBlockOrThrow.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { Block, Network } from "@delvtech/evm-client"; -import { BlockNotFoundError } from "src/errors/BlockNotFound"; -import { BlockLike, blockToReadOptions } from "src/utils/blockToReadOptions"; - -/** - * A utility that tries to fetch a block from a given network and throws an - * error if no block is found. - * @throws `BlockNotFoundError` - */ -export async function getBlockOrThrow( - network: Network, - block?: BlockLike, -): Promise { - const fetched = await network.getBlock(blockToReadOptions(block)); - if (!fetched) { - throw new BlockNotFoundError(block); - } - return fetched; -} From 14a049bbc6124551e352ca8a870e76cc211fbf70 Mon Sep 17 00:00:00 2001 From: Ryan Goree Date: Sat, 8 Feb 2025 18:55:56 -0600 Subject: [PATCH 009/146] Add drift utils --- packages/council-js/src/drift/SdkClient.ts | 98 +++++++++++++++++++ .../council-js/src/drift/getBlockOrThrow.ts | 48 +++++++++ packages/council-js/src/error.ts | 11 +++ packages/council-js/src/index.ts | 0 4 files changed, 157 insertions(+) create mode 100644 packages/council-js/src/drift/SdkClient.ts create mode 100644 packages/council-js/src/drift/getBlockOrThrow.ts create mode 100644 packages/council-js/src/error.ts create mode 100644 packages/council-js/src/index.ts diff --git a/packages/council-js/src/drift/SdkClient.ts b/packages/council-js/src/drift/SdkClient.ts new file mode 100644 index 00000000..e08a3e4c --- /dev/null +++ b/packages/council-js/src/drift/SdkClient.ts @@ -0,0 +1,98 @@ +import { + Adapter, + Address, + ClientConfig, + ContractWriteOptions, + createDrift, + Drift, + OneOf, + OnMinedParam, +} from "@delvtech/drift"; + +// Base // + +/** + * Configuration options for an {@link SdkClient}. + */ +export type SdkClientConfig = OneOf< + | { + drift?: Drift; + } + | ClientConfig +> & { + /** + * An arbitrary name for the instance. This is for convenience only (e.g., for + * use as a display name or in logging) and has no affect on the client's + * behavior. + */ + debugName?: string; + + /** + * The earliest block to fetch events from. + */ + earliestBlock?: bigint; +}; + +/** + * A base class for SDK clients. + */ +export class SdkClient { + drift: Drift; + debugName: string; + + constructor({ + debugName, + drift, + earliestBlock, + ...driftConfig + }: SdkClientConfig = {}) { + this.debugName = debugName ?? this.constructor.name; + this.drift = drift || createDrift(driftConfig); + + // Overwrite `fromBlock` if earlier than the `earliestBlock` option. + if (earliestBlock) { + this.drift.hooks.on("before:getEvents", ({ args, setArgs }) => { + const { fromBlock, ...params } = args[0]; + if ( + !fromBlock || + fromBlock === "earliest" || + (typeof fromBlock === "bigint" && fromBlock < earliestBlock) + ) { + setArgs({ + ...params, + fromBlock: earliestBlock, + }); + } + }); + } + } +} + +/** + * Params for write operations on an {@linkcode SdkClient}. + * + * @template Args Additional parameters for the write operation. + */ +export type SdkWriteParams = { + args: Args; + options?: ContractWriteOptions & OnMinedParam; +}; + +// Contract // + +/** + * Additional options required for clients that represent a specific contract. + */ +export interface SdkContractOptions { + /** + * The address of the contract. + */ + address: Address; +} + +/** + * Configuration options for an {@linkcode SdkClient} that represents a specific + * contract. + */ +export type SdkContractConfig = + SdkClientConfig & SdkContractOptions; diff --git a/packages/council-js/src/drift/getBlockOrThrow.ts b/packages/council-js/src/drift/getBlockOrThrow.ts new file mode 100644 index 00000000..bfe0905b --- /dev/null +++ b/packages/council-js/src/drift/getBlockOrThrow.ts @@ -0,0 +1,48 @@ +import { + Block, + ContractReadOptions, + Drift, + GetBlockParams, +} from "@delvtech/drift"; +import { CouncilSdkError } from "src/error"; + +export type GetBlockOrThrowParams = GetBlockParams | ContractReadOptions; + +/** + * A utility that tries to fetch a block from a given drift instance and throws + * an error if no block is found. Useful for unified error handling when + * fetching blocks that may not exist. + * + * @throws {CouncilSdkError} + */ +export async function getBlockOrThrow( + drift: Drift, + params?: GetBlockOrThrowParams, +): Promise { + let _options: GetBlockParams = {}; + + // If given contract read options, extract the block options + if (params && "block" in params) { + // The `block` option can either be a block number or a block tag + if (typeof params.block === "bigint") { + _options.blockNumber = params.block; + } else { + _options.blockTag = params.block; + } + } else { + // Otherwise, use the params as the block options + _options = params as GetBlockParams; + } + + const block = await drift.getBlock(_options); + + if (!block) { + const blockLabel = + _options?.blockHash ?? _options?.blockNumber ?? _options?.blockTag; + throw new CouncilSdkError( + `Block${blockLabel !== undefined ? ` ${blockLabel}` : ""} not found`, + ); + } + + return block; +} diff --git a/packages/council-js/src/error.ts b/packages/council-js/src/error.ts new file mode 100644 index 00000000..94020889 --- /dev/null +++ b/packages/council-js/src/error.ts @@ -0,0 +1,11 @@ +import { DriftError } from "@delvtech/drift"; + +export class CouncilSdkError extends DriftError { + constructor(error: string, options?: ErrorOptions) { + super(error, { + prefix: "🅲 ", + name: "Council SDK Error", + ...options, + }); + } +} diff --git a/packages/council-js/src/index.ts b/packages/council-js/src/index.ts new file mode 100644 index 00000000..e69de29b From 7c582ea6eedae2e45b116e3c614e35991563910b Mon Sep 17 00:00:00 2001 From: Ryan Goree Date: Sat, 8 Feb 2025 18:58:02 -0600 Subject: [PATCH 010/146] Rename models dir to entities --- .../src/{models => entities}/ReadVote.ts | 8 ++++---- .../src/{models => entities}/ReadVoter.ts | 8 ++++---- .../airdrop/ReadAirdrop.ts | 8 ++++---- .../airdrop/ReadWriteAirdrop.ts | 10 +++++----- .../src/{models => entities}/airdrop/types.ts | 0 .../coreVoting/ReadCoreVoting.ts | 14 +++++++------- .../coreVoting/ReadWriteCoreVoting.ts | 12 ++++++------ .../coreVoting/constants.ts | 0 .../{models => entities}/coreVoting/types.ts | 2 +- .../council/ReadCouncil.ts | 18 +++++++++--------- .../council/ReadWriteCouncil.ts | 18 +++++++++--------- .../proposal/ReadProposal.ts | 10 +++++----- .../proposal/ReadWriteProposal.ts | 12 ++++++------ .../{models => entities}/token/ReadToken.ts | 4 ++-- .../token/ReadWriteMockToken.ts | 2 +- .../token/ReadWriteToken.ts | 6 +++--- .../src/{models => entities}/token/types.ts | 0 .../votingVault/ReadVotingVault.ts | 6 +++--- .../votingVault/gscVault/ReadGscVault.ts | 8 ++++---- .../votingVault/gscVault/ReadWriteGscVault.ts | 10 +++++----- .../votingVault/gscVault/types.ts | 0 .../lockingVault/ReadLockingVault.test.ts | 4 ++-- .../lockingVault/ReadLockingVault.ts | 12 ++++++------ .../lockingVault/ReadWriteLockingVault.ts | 8 ++++---- .../votingVault/lockingVault/types.ts | 0 .../{models => entities}/votingVault/types.ts | 2 +- .../vestingVault/ReadVestingVault.ts | 12 ++++++------ .../vestingVault/ReadWriteVestingVault.ts | 8 ++++---- .../votingVault/vestingVault/types.ts | 0 .../council-js/src/utils/getVaultsWithPower.ts | 2 +- 30 files changed, 102 insertions(+), 102 deletions(-) rename packages/council-js/src/{models => entities}/ReadVote.ts (76%) rename packages/council-js/src/{models => entities}/ReadVoter.ts (91%) rename packages/council-js/src/{models => entities}/airdrop/ReadAirdrop.ts (89%) rename packages/council-js/src/{models => entities}/airdrop/ReadWriteAirdrop.ts (91%) rename packages/council-js/src/{models => entities}/airdrop/types.ts (100%) rename packages/council-js/src/{models => entities}/coreVoting/ReadCoreVoting.ts (94%) rename packages/council-js/src/{models => entities}/coreVoting/ReadWriteCoreVoting.ts (92%) rename packages/council-js/src/{models => entities}/coreVoting/constants.ts (100%) rename packages/council-js/src/{models => entities}/coreVoting/types.ts (90%) rename packages/council-js/src/{models => entities}/council/ReadCouncil.ts (76%) rename packages/council-js/src/{models => entities}/council/ReadWriteCouncil.ts (69%) rename packages/council-js/src/{models => entities}/proposal/ReadProposal.ts (97%) rename packages/council-js/src/{models => entities}/proposal/ReadWriteProposal.ts (87%) rename packages/council-js/src/{models => entities}/token/ReadToken.ts (94%) rename packages/council-js/src/{models => entities}/token/ReadWriteMockToken.ts (98%) rename packages/council-js/src/{models => entities}/token/ReadWriteToken.ts (87%) rename packages/council-js/src/{models => entities}/token/types.ts (100%) rename packages/council-js/src/{models => entities}/votingVault/ReadVotingVault.ts (91%) rename packages/council-js/src/{models => entities}/votingVault/gscVault/ReadGscVault.ts (95%) rename packages/council-js/src/{models => entities}/votingVault/gscVault/ReadWriteGscVault.ts (89%) rename packages/council-js/src/{models => entities}/votingVault/gscVault/types.ts (100%) rename packages/council-js/src/{models => entities}/votingVault/lockingVault/ReadLockingVault.test.ts (95%) rename packages/council-js/src/{models => entities}/votingVault/lockingVault/ReadLockingVault.ts (96%) rename packages/council-js/src/{models => entities}/votingVault/lockingVault/ReadWriteLockingVault.ts (90%) rename packages/council-js/src/{models => entities}/votingVault/lockingVault/types.ts (100%) rename packages/council-js/src/{models => entities}/votingVault/types.ts (92%) rename packages/council-js/src/{models => entities}/votingVault/vestingVault/ReadVestingVault.ts (96%) rename packages/council-js/src/{models => entities}/votingVault/vestingVault/ReadWriteVestingVault.ts (84%) rename packages/council-js/src/{models => entities}/votingVault/vestingVault/types.ts (100%) diff --git a/packages/council-js/src/models/ReadVote.ts b/packages/council-js/src/entities/ReadVote.ts similarity index 76% rename from packages/council-js/src/models/ReadVote.ts rename to packages/council-js/src/entities/ReadVote.ts index daa645f3..61a5c634 100644 --- a/packages/council-js/src/models/ReadVote.ts +++ b/packages/council-js/src/entities/ReadVote.ts @@ -1,7 +1,7 @@ -import { Ballot } from "src/models/coreVoting/types"; -import { Model, ReadModelOptions } from "src/models/Model"; -import { ReadProposal } from "src/models/proposal/ReadProposal"; -import { ReadVoter } from "src/models/ReadVoter"; +import { Ballot } from "src/entities/coreVoting/types"; +import { Model, ReadModelOptions } from "src/entities/Model"; +import { ReadProposal } from "src/entities/proposal/ReadProposal"; +import { ReadVoter } from "src/entities/ReadVoter"; export interface ReadVoteOptions extends ReadModelOptions { ballot: Ballot; diff --git a/packages/council-js/src/models/ReadVoter.ts b/packages/council-js/src/entities/ReadVoter.ts similarity index 91% rename from packages/council-js/src/models/ReadVoter.ts rename to packages/council-js/src/entities/ReadVoter.ts index 664df88c..c364dbb2 100644 --- a/packages/council-js/src/models/ReadVoter.ts +++ b/packages/council-js/src/entities/ReadVoter.ts @@ -1,7 +1,7 @@ -import { ReadCoreVoting } from "src/models/coreVoting/ReadCoreVoting"; -import { Model, ReadModelOptions } from "src/models/Model"; -import { ReadVote } from "src/models/ReadVote"; -import { ReadVotingVault } from "src/models/votingVault/ReadVotingVault"; +import { ReadCoreVoting } from "src/entities/coreVoting/ReadCoreVoting"; +import { Model, ReadModelOptions } from "src/entities/Model"; +import { ReadVote } from "src/entities/ReadVote"; +import { ReadVotingVault } from "src/entities/votingVault/ReadVotingVault"; import { BlockLike } from "src/utils/blockToReadOptions"; export interface ReadVoterOptions extends ReadModelOptions { diff --git a/packages/council-js/src/models/airdrop/ReadAirdrop.ts b/packages/council-js/src/entities/airdrop/ReadAirdrop.ts similarity index 89% rename from packages/council-js/src/models/airdrop/ReadAirdrop.ts rename to packages/council-js/src/entities/airdrop/ReadAirdrop.ts index 97d896eb..2863faf4 100644 --- a/packages/council-js/src/models/airdrop/ReadAirdrop.ts +++ b/packages/council-js/src/entities/airdrop/ReadAirdrop.ts @@ -1,9 +1,9 @@ import { Airdrop as AirdropArtifact } from "@delvtech/council-artifacts/Airdrop"; import { CachedReadContract } from "@delvtech/evm-client"; -import { AirdropAbi } from "src/models/airdrop/types"; -import { Model, ReadContractModelOptions } from "src/models/Model"; -import { ReadToken } from "src/models/token/ReadToken"; -import { ReadLockingVault } from "src/models/votingVault/lockingVault/ReadLockingVault"; +import { AirdropAbi } from "src/entities/airdrop/types"; +import { Model, ReadContractModelOptions } from "src/entities/Model"; +import { ReadToken } from "src/entities/token/ReadToken"; +import { ReadLockingVault } from "src/entities/votingVault/lockingVault/ReadLockingVault"; import { BlockLike, blockToReadOptions } from "src/utils/blockToReadOptions"; /** diff --git a/packages/council-js/src/models/airdrop/ReadWriteAirdrop.ts b/packages/council-js/src/entities/airdrop/ReadWriteAirdrop.ts similarity index 91% rename from packages/council-js/src/models/airdrop/ReadWriteAirdrop.ts rename to packages/council-js/src/entities/airdrop/ReadWriteAirdrop.ts index a5c9b633..8e8d13be 100644 --- a/packages/council-js/src/models/airdrop/ReadWriteAirdrop.ts +++ b/packages/council-js/src/entities/airdrop/ReadWriteAirdrop.ts @@ -3,11 +3,11 @@ import { ContractWriteOptions, } from "@delvtech/evm-client"; import { ReadWriteContractFactory } from "src/contract/factory"; -import { ReadAirdrop } from "src/models/airdrop/ReadAirdrop"; -import { AirdropAbi } from "src/models/airdrop/types"; -import { ReadWriteContractModelOptions } from "src/models/Model"; -import { ReadWriteToken } from "src/models/token/ReadWriteToken"; -import { ReadWriteLockingVault } from "src/models/votingVault/lockingVault/ReadWriteLockingVault"; +import { ReadAirdrop } from "src/entities/airdrop/ReadAirdrop"; +import { AirdropAbi } from "src/entities/airdrop/types"; +import { ReadWriteContractModelOptions } from "src/entities/Model"; +import { ReadWriteToken } from "src/entities/token/ReadWriteToken"; +import { ReadWriteLockingVault } from "src/entities/votingVault/lockingVault/ReadWriteLockingVault"; /** * @category Models diff --git a/packages/council-js/src/models/airdrop/types.ts b/packages/council-js/src/entities/airdrop/types.ts similarity index 100% rename from packages/council-js/src/models/airdrop/types.ts rename to packages/council-js/src/entities/airdrop/types.ts diff --git a/packages/council-js/src/models/coreVoting/ReadCoreVoting.ts b/packages/council-js/src/entities/coreVoting/ReadCoreVoting.ts similarity index 94% rename from packages/council-js/src/models/coreVoting/ReadCoreVoting.ts rename to packages/council-js/src/entities/coreVoting/ReadCoreVoting.ts index b01dd093..af639bc1 100644 --- a/packages/council-js/src/models/coreVoting/ReadCoreVoting.ts +++ b/packages/council-js/src/entities/coreVoting/ReadCoreVoting.ts @@ -1,15 +1,15 @@ import { CoreVoting } from "@delvtech/council-artifacts/CoreVoting"; import { CachedReadContract } from "@delvtech/evm-client"; -import { Model, ReadContractModelOptions } from "src/models/Model"; -import { ReadVote } from "src/models/ReadVote"; -import { ReadVoter } from "src/models/ReadVoter"; +import { Model, ReadContractModelOptions } from "src/entities/Model"; +import { ReadVote } from "src/entities/ReadVote"; +import { ReadVoter } from "src/entities/ReadVoter"; import { BALLOTS, EXECUTED_PROPOSAL_HASH, -} from "src/models/coreVoting/constants"; -import { CoreVotingAbi } from "src/models/coreVoting/types"; -import { ReadProposal } from "src/models/proposal/ReadProposal"; -import { ReadVotingVault } from "src/models/votingVault/ReadVotingVault"; +} from "src/entities/coreVoting/constants"; +import { CoreVotingAbi } from "src/entities/coreVoting/types"; +import { ReadProposal } from "src/entities/proposal/ReadProposal"; +import { ReadVotingVault } from "src/entities/votingVault/ReadVotingVault"; import { BlockLike } from "src/utils/blockToReadOptions"; /** diff --git a/packages/council-js/src/models/coreVoting/ReadWriteCoreVoting.ts b/packages/council-js/src/entities/coreVoting/ReadWriteCoreVoting.ts similarity index 92% rename from packages/council-js/src/models/coreVoting/ReadWriteCoreVoting.ts rename to packages/council-js/src/entities/coreVoting/ReadWriteCoreVoting.ts index fbb15c01..cb7290bb 100644 --- a/packages/council-js/src/models/coreVoting/ReadWriteCoreVoting.ts +++ b/packages/council-js/src/entities/coreVoting/ReadWriteCoreVoting.ts @@ -3,12 +3,12 @@ import { ContractWriteOptions, } from "@delvtech/evm-client"; import { ReadWriteContractFactory } from "src/contract/factory"; -import { BALLOTS } from "src/models/coreVoting/constants"; -import { ReadCoreVoting } from "src/models/coreVoting/ReadCoreVoting"; -import { Ballot, CoreVotingAbi } from "src/models/coreVoting/types"; -import { ReadWriteContractModelOptions } from "src/models/Model"; -import { ReadWriteProposal } from "src/models/proposal/ReadWriteProposal"; -import { ReadVotingVault } from "src/models/votingVault/ReadVotingVault"; +import { BALLOTS } from "src/entities/coreVoting/constants"; +import { ReadCoreVoting } from "src/entities/coreVoting/ReadCoreVoting"; +import { Ballot, CoreVotingAbi } from "src/entities/coreVoting/types"; +import { ReadWriteContractModelOptions } from "src/entities/Model"; +import { ReadWriteProposal } from "src/entities/proposal/ReadWriteProposal"; +import { ReadVotingVault } from "src/entities/votingVault/ReadVotingVault"; import { BlockLike } from "src/utils/blockToReadOptions"; export interface ReadWriteCoreVotingOptions diff --git a/packages/council-js/src/models/coreVoting/constants.ts b/packages/council-js/src/entities/coreVoting/constants.ts similarity index 100% rename from packages/council-js/src/models/coreVoting/constants.ts rename to packages/council-js/src/entities/coreVoting/constants.ts diff --git a/packages/council-js/src/models/coreVoting/types.ts b/packages/council-js/src/entities/coreVoting/types.ts similarity index 90% rename from packages/council-js/src/models/coreVoting/types.ts rename to packages/council-js/src/entities/coreVoting/types.ts index 6c14c94a..724f6b1f 100644 --- a/packages/council-js/src/models/coreVoting/types.ts +++ b/packages/council-js/src/entities/coreVoting/types.ts @@ -1,5 +1,5 @@ import { CoreVoting } from "@delvtech/council-artifacts/CoreVoting"; -import { BALLOTS } from "src/models/coreVoting/constants"; +import { BALLOTS } from "src/entities/coreVoting/constants"; export type CoreVotingAbi = typeof CoreVoting.abi; diff --git a/packages/council-js/src/models/council/ReadCouncil.ts b/packages/council-js/src/entities/council/ReadCouncil.ts similarity index 76% rename from packages/council-js/src/models/council/ReadCouncil.ts rename to packages/council-js/src/entities/council/ReadCouncil.ts index e9dfddb9..0b6c1f04 100644 --- a/packages/council-js/src/models/council/ReadCouncil.ts +++ b/packages/council-js/src/entities/council/ReadCouncil.ts @@ -1,14 +1,14 @@ import { Network } from "@delvtech/evm-client"; import { ReadContractFactory } from "src/contract/factory"; -import { ReadAirdrop } from "src/models/airdrop/ReadAirdrop"; -import { ReadCoreVoting } from "src/models/coreVoting/ReadCoreVoting"; -import { Model, ReadModelOptions } from "src/models/Model"; -import { ReadVoter } from "src/models/ReadVoter"; -import { ReadToken } from "src/models/token/ReadToken"; -import { ReadGscVault } from "src/models/votingVault/gscVault/ReadGscVault"; -import { ReadLockingVault } from "src/models/votingVault/lockingVault/ReadLockingVault"; -import { ReadVotingVault } from "src/models/votingVault/ReadVotingVault"; -import { ReadVestingVault } from "src/models/votingVault/vestingVault/ReadVestingVault"; +import { ReadAirdrop } from "src/entities/airdrop/ReadAirdrop"; +import { ReadCoreVoting } from "src/entities/coreVoting/ReadCoreVoting"; +import { Model, ReadModelOptions } from "src/entities/Model"; +import { ReadVoter } from "src/entities/ReadVoter"; +import { ReadToken } from "src/entities/token/ReadToken"; +import { ReadGscVault } from "src/entities/votingVault/gscVault/ReadGscVault"; +import { ReadLockingVault } from "src/entities/votingVault/lockingVault/ReadLockingVault"; +import { ReadVotingVault } from "src/entities/votingVault/ReadVotingVault"; +import { ReadVestingVault } from "src/entities/votingVault/vestingVault/ReadVestingVault"; export interface ReadCouncilOptions extends ReadModelOptions {} diff --git a/packages/council-js/src/models/council/ReadWriteCouncil.ts b/packages/council-js/src/entities/council/ReadWriteCouncil.ts similarity index 69% rename from packages/council-js/src/models/council/ReadWriteCouncil.ts rename to packages/council-js/src/entities/council/ReadWriteCouncil.ts index 23e9cb31..27ad2dae 100644 --- a/packages/council-js/src/models/council/ReadWriteCouncil.ts +++ b/packages/council-js/src/entities/council/ReadWriteCouncil.ts @@ -1,13 +1,13 @@ import { ReadWriteContractFactory } from "src/contract/factory"; -import { ReadWriteModelOptions } from "src/models/Model"; -import { ReadWriteAirdrop } from "src/models/airdrop/ReadWriteAirdrop"; -import { ReadWriteCoreVoting } from "src/models/coreVoting/ReadWriteCoreVoting"; -import { ReadCouncil } from "src/models/council/ReadCouncil"; -import { ReadWriteToken } from "src/models/token/ReadWriteToken"; -import { ReadVotingVault } from "src/models/votingVault/ReadVotingVault"; -import { ReadWriteGscVault } from "src/models/votingVault/gscVault/ReadWriteGscVault"; -import { ReadWriteLockingVault } from "src/models/votingVault/lockingVault/ReadWriteLockingVault"; -import { ReadWriteVestingVault } from "src/models/votingVault/vestingVault/ReadWriteVestingVault"; +import { ReadWriteModelOptions } from "src/entities/Model"; +import { ReadWriteAirdrop } from "src/entities/airdrop/ReadWriteAirdrop"; +import { ReadWriteCoreVoting } from "src/entities/coreVoting/ReadWriteCoreVoting"; +import { ReadCouncil } from "src/entities/council/ReadCouncil"; +import { ReadWriteToken } from "src/entities/token/ReadWriteToken"; +import { ReadVotingVault } from "src/entities/votingVault/ReadVotingVault"; +import { ReadWriteGscVault } from "src/entities/votingVault/gscVault/ReadWriteGscVault"; +import { ReadWriteLockingVault } from "src/entities/votingVault/lockingVault/ReadWriteLockingVault"; +import { ReadWriteVestingVault } from "src/entities/votingVault/vestingVault/ReadWriteVestingVault"; export interface ReadWriteCouncilOptions extends ReadWriteModelOptions {} diff --git a/packages/council-js/src/models/proposal/ReadProposal.ts b/packages/council-js/src/entities/proposal/ReadProposal.ts similarity index 97% rename from packages/council-js/src/models/proposal/ReadProposal.ts rename to packages/council-js/src/entities/proposal/ReadProposal.ts index d453b601..bc219acf 100644 --- a/packages/council-js/src/models/proposal/ReadProposal.ts +++ b/packages/council-js/src/entities/proposal/ReadProposal.ts @@ -1,10 +1,10 @@ import { CoreVoting } from "@delvtech/council-artifacts/CoreVoting"; import { ContractReadOptions, Event, Transaction } from "@delvtech/evm-client"; -import { Model, ReadModelOptions } from "src/models/Model"; -import { ReadVote } from "src/models/ReadVote"; -import { ReadVoter } from "src/models/ReadVoter"; -import { ReadCoreVoting } from "src/models/coreVoting/ReadCoreVoting"; -import { Actions, Ballot, VoteResults } from "src/models/coreVoting/types"; +import { Model, ReadModelOptions } from "src/entities/Model"; +import { ReadVote } from "src/entities/ReadVote"; +import { ReadVoter } from "src/entities/ReadVoter"; +import { ReadCoreVoting } from "src/entities/coreVoting/ReadCoreVoting"; +import { Actions, Ballot, VoteResults } from "src/entities/coreVoting/types"; import { BlockLike } from "src/utils/blockToReadOptions"; export interface BaseProposalOptions { diff --git a/packages/council-js/src/models/proposal/ReadWriteProposal.ts b/packages/council-js/src/entities/proposal/ReadWriteProposal.ts similarity index 87% rename from packages/council-js/src/models/proposal/ReadWriteProposal.ts rename to packages/council-js/src/entities/proposal/ReadWriteProposal.ts index a3179ebf..11643203 100644 --- a/packages/council-js/src/models/proposal/ReadWriteProposal.ts +++ b/packages/council-js/src/entities/proposal/ReadWriteProposal.ts @@ -1,14 +1,14 @@ import { ContractWriteOptions } from "@delvtech/evm-client"; -import { BALLOTS } from "src/models/coreVoting/constants"; -import { ReadWriteCoreVoting } from "src/models/coreVoting/ReadWriteCoreVoting"; -import { Ballot } from "src/models/coreVoting/types"; -import { ReadWriteModelOptions } from "src/models/Model"; +import { BALLOTS } from "src/entities/coreVoting/constants"; +import { ReadWriteCoreVoting } from "src/entities/coreVoting/ReadWriteCoreVoting"; +import { Ballot } from "src/entities/coreVoting/types"; +import { ReadWriteModelOptions } from "src/entities/Model"; import { BaseProposalOptions, ReadProposal, -} from "src/models/proposal/ReadProposal"; -import { ReadVotingVault } from "src/models/votingVault/ReadVotingVault"; +} from "src/entities/proposal/ReadProposal"; +import { ReadVotingVault } from "src/entities/votingVault/ReadVotingVault"; import { getVaultsWithPower } from "src/utils/getVaultsWithPower"; export interface ReadWriteProposalOptions diff --git a/packages/council-js/src/models/token/ReadToken.ts b/packages/council-js/src/entities/token/ReadToken.ts similarity index 94% rename from packages/council-js/src/models/token/ReadToken.ts rename to packages/council-js/src/entities/token/ReadToken.ts index 6a291ae5..fef522da 100644 --- a/packages/council-js/src/models/token/ReadToken.ts +++ b/packages/council-js/src/entities/token/ReadToken.ts @@ -1,7 +1,7 @@ import { MockERC20 } from "@delvtech/council-artifacts/MockERC20"; import { CachedReadContract } from "@delvtech/evm-client"; -import { Model, ReadContractModelOptions } from "src/models/Model"; -import { ERC20Abi } from "src/models/token/types"; +import { Model, ReadContractModelOptions } from "src/entities/Model"; +import { ERC20Abi } from "src/entities/token/types"; import { BlockLike, blockToReadOptions } from "src/utils/blockToReadOptions"; /** diff --git a/packages/council-js/src/models/token/ReadWriteMockToken.ts b/packages/council-js/src/entities/token/ReadWriteMockToken.ts similarity index 98% rename from packages/council-js/src/models/token/ReadWriteMockToken.ts rename to packages/council-js/src/entities/token/ReadWriteMockToken.ts index d8bd2739..944286d8 100644 --- a/packages/council-js/src/models/token/ReadWriteMockToken.ts +++ b/packages/council-js/src/entities/token/ReadWriteMockToken.ts @@ -2,7 +2,7 @@ import { ContractWriteOptions } from "@delvtech/evm-client"; import { ReadWriteToken, ReadWriteTokenOptions, -} from "src/models/token/ReadWriteToken"; +} from "src/entities/token/ReadWriteToken"; export class ReadWriteMockToken extends ReadWriteToken { constructor({ name = "Mock Token", ...rest }: ReadWriteTokenOptions) { diff --git a/packages/council-js/src/models/token/ReadWriteToken.ts b/packages/council-js/src/entities/token/ReadWriteToken.ts similarity index 87% rename from packages/council-js/src/models/token/ReadWriteToken.ts rename to packages/council-js/src/entities/token/ReadWriteToken.ts index 1241d6aa..4430b909 100644 --- a/packages/council-js/src/models/token/ReadWriteToken.ts +++ b/packages/council-js/src/entities/token/ReadWriteToken.ts @@ -3,9 +3,9 @@ import { ContractWriteOptions, } from "@delvtech/evm-client"; import { ReadWriteContractFactory } from "src/contract/factory"; -import { ReadWriteContractModelOptions } from "src/models/Model"; -import { ReadToken } from "src/models/token/ReadToken"; -import { ERC20Abi } from "src/models/token/types"; +import { ReadWriteContractModelOptions } from "src/entities/Model"; +import { ReadToken } from "src/entities/token/ReadToken"; +import { ERC20Abi } from "src/entities/token/types"; /** * @category Models diff --git a/packages/council-js/src/models/token/types.ts b/packages/council-js/src/entities/token/types.ts similarity index 100% rename from packages/council-js/src/models/token/types.ts rename to packages/council-js/src/entities/token/types.ts diff --git a/packages/council-js/src/models/votingVault/ReadVotingVault.ts b/packages/council-js/src/entities/votingVault/ReadVotingVault.ts similarity index 91% rename from packages/council-js/src/models/votingVault/ReadVotingVault.ts rename to packages/council-js/src/entities/votingVault/ReadVotingVault.ts index cd715443..b80a67e7 100644 --- a/packages/council-js/src/models/votingVault/ReadVotingVault.ts +++ b/packages/council-js/src/entities/votingVault/ReadVotingVault.ts @@ -1,8 +1,8 @@ import { IVotingVault } from "@delvtech/council-artifacts/IVotingVault"; import { CachedReadContract } from "@delvtech/evm-client"; -import { Model, ReadContractModelOptions } from "src/models/Model"; -import { ReadVoter } from "src/models/ReadVoter"; -import { VotingVaultAbi } from "src/models/votingVault/types"; +import { Model, ReadContractModelOptions } from "src/entities/Model"; +import { ReadVoter } from "src/entities/ReadVoter"; +import { VotingVaultAbi } from "src/entities/votingVault/types"; import { BlockLike } from "src/utils/blockToReadOptions"; import { getBlockOrThrow } from "src/utils/getBlockOrThrow"; diff --git a/packages/council-js/src/models/votingVault/gscVault/ReadGscVault.ts b/packages/council-js/src/entities/votingVault/gscVault/ReadGscVault.ts similarity index 95% rename from packages/council-js/src/models/votingVault/gscVault/ReadGscVault.ts rename to packages/council-js/src/entities/votingVault/gscVault/ReadGscVault.ts index 1370d65b..403bdf94 100644 --- a/packages/council-js/src/models/votingVault/gscVault/ReadGscVault.ts +++ b/packages/council-js/src/entities/votingVault/gscVault/ReadGscVault.ts @@ -1,9 +1,9 @@ import { GSCVault } from "@delvtech/council-artifacts/GSCVault"; import { CachedReadContract } from "@delvtech/evm-client"; -import { ReadContractModelOptions } from "src/models/Model"; -import { ReadVoter } from "src/models/ReadVoter"; -import { ReadVotingVault } from "src/models/votingVault/ReadVotingVault"; -import { GscVaultAbi } from "src/models/votingVault/gscVault/types"; +import { ReadContractModelOptions } from "src/entities/Model"; +import { ReadVoter } from "src/entities/ReadVoter"; +import { ReadVotingVault } from "src/entities/votingVault/ReadVotingVault"; +import { GscVaultAbi } from "src/entities/votingVault/gscVault/types"; import { BlockLike, blockToReadOptions } from "src/utils/blockToReadOptions"; import { getBlockOrThrow } from "src/utils/getBlockOrThrow"; diff --git a/packages/council-js/src/models/votingVault/gscVault/ReadWriteGscVault.ts b/packages/council-js/src/entities/votingVault/gscVault/ReadWriteGscVault.ts similarity index 89% rename from packages/council-js/src/models/votingVault/gscVault/ReadWriteGscVault.ts rename to packages/council-js/src/entities/votingVault/gscVault/ReadWriteGscVault.ts index cb4b72e8..dc2f4e26 100644 --- a/packages/council-js/src/models/votingVault/gscVault/ReadWriteGscVault.ts +++ b/packages/council-js/src/entities/votingVault/gscVault/ReadWriteGscVault.ts @@ -3,11 +3,11 @@ import { ContractWriteOptions, } from "@delvtech/evm-client"; import { ReadWriteContractFactory } from "src/contract/factory"; -import { ReadWriteContractModelOptions } from "src/models/Model"; -import { ReadVoter } from "src/models/ReadVoter"; -import { ReadGscVault } from "src/models/votingVault/gscVault/ReadGscVault"; -import { GscVaultAbi } from "src/models/votingVault/gscVault/types"; -import { ReadVotingVault } from "src/models/votingVault/ReadVotingVault"; +import { ReadWriteContractModelOptions } from "src/entities/Model"; +import { ReadVoter } from "src/entities/ReadVoter"; +import { ReadGscVault } from "src/entities/votingVault/gscVault/ReadGscVault"; +import { GscVaultAbi } from "src/entities/votingVault/gscVault/types"; +import { ReadVotingVault } from "src/entities/votingVault/ReadVotingVault"; export interface ReadWriteGscVaultOptions extends ReadWriteContractModelOptions {} diff --git a/packages/council-js/src/models/votingVault/gscVault/types.ts b/packages/council-js/src/entities/votingVault/gscVault/types.ts similarity index 100% rename from packages/council-js/src/models/votingVault/gscVault/types.ts rename to packages/council-js/src/entities/votingVault/gscVault/types.ts diff --git a/packages/council-js/src/models/votingVault/lockingVault/ReadLockingVault.test.ts b/packages/council-js/src/entities/votingVault/lockingVault/ReadLockingVault.test.ts similarity index 95% rename from packages/council-js/src/models/votingVault/lockingVault/ReadLockingVault.test.ts rename to packages/council-js/src/entities/votingVault/lockingVault/ReadLockingVault.test.ts index a19324d0..d7ed2385 100644 --- a/packages/council-js/src/models/votingVault/lockingVault/ReadLockingVault.test.ts +++ b/packages/council-js/src/entities/votingVault/lockingVault/ReadLockingVault.test.ts @@ -1,6 +1,6 @@ import { NetworkStub } from "@delvtech/evm-client/stubs"; -import { ReadCouncil } from "src/models/council/ReadCouncil"; -import { LockingVaultAbi } from "src/models/votingVault/lockingVault/types"; +import { ReadCouncil } from "src/entities/council/ReadCouncil"; +import { LockingVaultAbi } from "src/entities/votingVault/lockingVault/types"; import { CachedReadContractStub, stubContractFactory, diff --git a/packages/council-js/src/models/votingVault/lockingVault/ReadLockingVault.ts b/packages/council-js/src/entities/votingVault/lockingVault/ReadLockingVault.ts similarity index 96% rename from packages/council-js/src/models/votingVault/lockingVault/ReadLockingVault.ts rename to packages/council-js/src/entities/votingVault/lockingVault/ReadLockingVault.ts index 2fa43aa7..d0515556 100644 --- a/packages/council-js/src/models/votingVault/lockingVault/ReadLockingVault.ts +++ b/packages/council-js/src/entities/votingVault/lockingVault/ReadLockingVault.ts @@ -1,11 +1,11 @@ import { LockingVault } from "@delvtech/council-artifacts/LockingVault"; import { CachedReadContract } from "@delvtech/evm-client"; -import { ReadContractModelOptions } from "src/models/Model"; -import { ReadVoter } from "src/models/ReadVoter"; -import { ReadToken } from "src/models/token/ReadToken"; -import { LockingVaultAbi } from "src/models/votingVault/lockingVault/types"; -import { ReadVotingVault } from "src/models/votingVault/ReadVotingVault"; -import { VoterPowerBreakdown } from "src/models/votingVault/types"; +import { ReadContractModelOptions } from "src/entities/Model"; +import { ReadVoter } from "src/entities/ReadVoter"; +import { ReadToken } from "src/entities/token/ReadToken"; +import { LockingVaultAbi } from "src/entities/votingVault/lockingVault/types"; +import { ReadVotingVault } from "src/entities/votingVault/ReadVotingVault"; +import { VoterPowerBreakdown } from "src/entities/votingVault/types"; import { BlockLike, blockToReadOptions } from "src/utils/blockToReadOptions"; import { getBlockOrThrow } from "src/utils/getBlockOrThrow"; import { getOrSet } from "src/utils/getOrSet"; diff --git a/packages/council-js/src/models/votingVault/lockingVault/ReadWriteLockingVault.ts b/packages/council-js/src/entities/votingVault/lockingVault/ReadWriteLockingVault.ts similarity index 90% rename from packages/council-js/src/models/votingVault/lockingVault/ReadWriteLockingVault.ts rename to packages/council-js/src/entities/votingVault/lockingVault/ReadWriteLockingVault.ts index 21e4db07..ad7c9479 100644 --- a/packages/council-js/src/models/votingVault/lockingVault/ReadWriteLockingVault.ts +++ b/packages/council-js/src/entities/votingVault/lockingVault/ReadWriteLockingVault.ts @@ -3,10 +3,10 @@ import { ContractWriteOptions, } from "@delvtech/evm-client"; import { ReadWriteContractFactory } from "src/contract/factory"; -import { ReadWriteContractModelOptions } from "src/models/Model"; -import { ReadWriteToken } from "src/models/token/ReadWriteToken"; -import { ReadLockingVault } from "src/models/votingVault/lockingVault/ReadLockingVault"; -import { LockingVaultAbi } from "src/models/votingVault/lockingVault/types"; +import { ReadWriteContractModelOptions } from "src/entities/Model"; +import { ReadWriteToken } from "src/entities/token/ReadWriteToken"; +import { ReadLockingVault } from "src/entities/votingVault/lockingVault/ReadLockingVault"; +import { LockingVaultAbi } from "src/entities/votingVault/lockingVault/types"; export interface ReadWriteLockingVaultOptions extends ReadWriteContractModelOptions {} diff --git a/packages/council-js/src/models/votingVault/lockingVault/types.ts b/packages/council-js/src/entities/votingVault/lockingVault/types.ts similarity index 100% rename from packages/council-js/src/models/votingVault/lockingVault/types.ts rename to packages/council-js/src/entities/votingVault/lockingVault/types.ts diff --git a/packages/council-js/src/models/votingVault/types.ts b/packages/council-js/src/entities/votingVault/types.ts similarity index 92% rename from packages/council-js/src/models/votingVault/types.ts rename to packages/council-js/src/entities/votingVault/types.ts index d06c9fd5..d9192e8e 100644 --- a/packages/council-js/src/models/votingVault/types.ts +++ b/packages/council-js/src/entities/votingVault/types.ts @@ -1,5 +1,5 @@ import { IVotingVault } from "@delvtech/council-artifacts/IVotingVault"; -import { ReadVoter } from "src/models/ReadVoter"; +import { ReadVoter } from "src/entities/ReadVoter"; export type VotingVaultAbi = typeof IVotingVault.abi; diff --git a/packages/council-js/src/models/votingVault/vestingVault/ReadVestingVault.ts b/packages/council-js/src/entities/votingVault/vestingVault/ReadVestingVault.ts similarity index 96% rename from packages/council-js/src/models/votingVault/vestingVault/ReadVestingVault.ts rename to packages/council-js/src/entities/votingVault/vestingVault/ReadVestingVault.ts index 7779067f..3e489948 100644 --- a/packages/council-js/src/models/votingVault/vestingVault/ReadVestingVault.ts +++ b/packages/council-js/src/entities/votingVault/vestingVault/ReadVestingVault.ts @@ -1,15 +1,15 @@ import { VestingVault } from "@delvtech/council-artifacts/VestingVault"; import { CachedReadContract } from "@delvtech/evm-client"; import Big from "big.js"; -import { ReadContractModelOptions } from "src/models/Model"; -import { ReadVoter } from "src/models/ReadVoter"; -import { ReadToken } from "src/models/token/ReadToken"; -import { ReadVotingVault } from "src/models/votingVault/ReadVotingVault"; -import { VoterPowerBreakdown } from "src/models/votingVault/types"; +import { ReadContractModelOptions } from "src/entities/Model"; +import { ReadVoter } from "src/entities/ReadVoter"; +import { ReadToken } from "src/entities/token/ReadToken"; +import { ReadVotingVault } from "src/entities/votingVault/ReadVotingVault"; +import { VoterPowerBreakdown } from "src/entities/votingVault/types"; import { Grant, VestingVaultAbi, -} from "src/models/votingVault/vestingVault/types"; +} from "src/entities/votingVault/vestingVault/types"; import { BlockLike, blockToReadOptions } from "src/utils/blockToReadOptions"; import { getBlockOrThrow } from "src/utils/getBlockOrThrow"; import { getOrSet } from "src/utils/getOrSet"; diff --git a/packages/council-js/src/models/votingVault/vestingVault/ReadWriteVestingVault.ts b/packages/council-js/src/entities/votingVault/vestingVault/ReadWriteVestingVault.ts similarity index 84% rename from packages/council-js/src/models/votingVault/vestingVault/ReadWriteVestingVault.ts rename to packages/council-js/src/entities/votingVault/vestingVault/ReadWriteVestingVault.ts index 60d2208c..808fc2c8 100644 --- a/packages/council-js/src/models/votingVault/vestingVault/ReadWriteVestingVault.ts +++ b/packages/council-js/src/entities/votingVault/vestingVault/ReadWriteVestingVault.ts @@ -3,10 +3,10 @@ import { ContractWriteOptions, } from "@delvtech/evm-client"; import { ReadWriteContractFactory } from "src/contract/factory"; -import { ReadWriteContractModelOptions } from "src/models/Model"; -import { ReadWriteToken } from "src/models/token/ReadWriteToken"; -import { ReadVestingVault } from "src/models/votingVault/vestingVault/ReadVestingVault"; -import { VestingVaultAbi } from "src/models/votingVault/vestingVault/types"; +import { ReadWriteContractModelOptions } from "src/entities/Model"; +import { ReadWriteToken } from "src/entities/token/ReadWriteToken"; +import { ReadVestingVault } from "src/entities/votingVault/vestingVault/ReadVestingVault"; +import { VestingVaultAbi } from "src/entities/votingVault/vestingVault/types"; interface ReadWriteVestingVaultOptions extends ReadWriteContractModelOptions {} diff --git a/packages/council-js/src/models/votingVault/vestingVault/types.ts b/packages/council-js/src/entities/votingVault/vestingVault/types.ts similarity index 100% rename from packages/council-js/src/models/votingVault/vestingVault/types.ts rename to packages/council-js/src/entities/votingVault/vestingVault/types.ts diff --git a/packages/council-js/src/utils/getVaultsWithPower.ts b/packages/council-js/src/utils/getVaultsWithPower.ts index 8c355390..28db34aa 100644 --- a/packages/council-js/src/utils/getVaultsWithPower.ts +++ b/packages/council-js/src/utils/getVaultsWithPower.ts @@ -1,4 +1,4 @@ -import { ReadVotingVault } from "src/models/votingVault/ReadVotingVault"; +import { ReadVotingVault } from "src/entities/votingVault/ReadVotingVault"; export async function getVaultsWithPower( From 83847383b5c238c5581b3f335f394d99aad12ec2 Mon Sep 17 00:00:00 2001 From: Ryan Goree Date: Sat, 8 Feb 2025 19:25:20 -0600 Subject: [PATCH 011/146] Add token clients --- .../src/entities/token/ReadToken.ts | 88 +++------------ .../src/entities/token/ReadWriteMockToken.ts | 102 ------------------ .../src/entities/token/ReadWriteToken.ts | 75 +++++-------- .../src/entities/token/erc20/ReadErc20.ts | 69 ++++++++++++ .../entities/token/erc20/ReadWriteErc20.ts | 26 +++++ .../src/entities/token/erc20/abi.ts | 4 + .../src/entities/token/eth/ReadEth.ts | 51 +++++++++ .../src/entities/token/eth/ReadWriteEth.ts | 19 ++++ .../council-js/src/entities/token/types.ts | 5 - 9 files changed, 210 insertions(+), 229 deletions(-) delete mode 100644 packages/council-js/src/entities/token/ReadWriteMockToken.ts create mode 100644 packages/council-js/src/entities/token/erc20/ReadErc20.ts create mode 100644 packages/council-js/src/entities/token/erc20/ReadWriteErc20.ts create mode 100644 packages/council-js/src/entities/token/erc20/abi.ts create mode 100644 packages/council-js/src/entities/token/eth/ReadEth.ts create mode 100644 packages/council-js/src/entities/token/eth/ReadWriteEth.ts delete mode 100644 packages/council-js/src/entities/token/types.ts diff --git a/packages/council-js/src/entities/token/ReadToken.ts b/packages/council-js/src/entities/token/ReadToken.ts index fef522da..cab1ef5c 100644 --- a/packages/council-js/src/entities/token/ReadToken.ts +++ b/packages/council-js/src/entities/token/ReadToken.ts @@ -1,64 +1,23 @@ -import { MockERC20 } from "@delvtech/council-artifacts/MockERC20"; -import { CachedReadContract } from "@delvtech/evm-client"; -import { Model, ReadContractModelOptions } from "src/entities/Model"; -import { ERC20Abi } from "src/entities/token/types"; -import { BlockLike, blockToReadOptions } from "src/utils/blockToReadOptions"; +import { Adapter, ContractReadOptions } from "@delvtech/drift"; +import { SdkClient } from "src/drift/SdkClient"; -/** - * @category Models - */ -export interface ReadTokenOptions extends ReadContractModelOptions {} - -/** - * @category Models - */ -export class ReadToken extends Model { - contract: CachedReadContract; - - constructor({ - name = "Token", - address, - contractFactory, - network, - cache, - namespace, - }: ReadTokenOptions) { - super({ name, network, contractFactory }); - this.contract = contractFactory({ - abi: MockERC20.abi, - address, - cache, - namespace, - }); - } - - get address(): `0x${string}` { - return this.contract.address; - } - get namespace(): string | undefined { - return this.contract.namespace; - } +export interface ReadToken extends SdkClient { + address: `0x${string}`; /** - * Get the symbol for this token. + * Get the name of this token */ - getSymbol(): Promise { - return this.contract.read("symbol"); - } + getName(): Promise; /** - * Get the number of decimal places this token uses. + * Get the symbol for this token. */ - getDecimals(): Promise { - return this.contract.read("decimals"); - } + getSymbol(): Promise; /** - * Get the name of this token + * Get the number of decimal places this token uses. */ - getName(): Promise { - return this.contract.read("name"); - } + getDecimals(): Promise; /** * Get the spending allowance of a given spender for a given owner of this @@ -67,36 +26,21 @@ export class ReadToken extends Model { getAllowance({ owner, spender, - atBlock, + options, }: { owner: `0x${string}`; spender: `0x${string}`; - atBlock?: BlockLike; - }): Promise { - return this.contract.read( - "allowance", - { - 0: owner, - 1: spender, - }, - blockToReadOptions(atBlock), - ); - } + options?: ContractReadOptions; + }): Promise; /** * Get the token balance of a given address */ getBalanceOf({ account, - atBlock, + options, }: { account: `0x${string}`; - atBlock?: BlockLike; - }): Promise { - return this.contract.read( - "balanceOf", - { 0: account }, - blockToReadOptions(atBlock), - ); - } + options?: ContractReadOptions; + }): Promise; } diff --git a/packages/council-js/src/entities/token/ReadWriteMockToken.ts b/packages/council-js/src/entities/token/ReadWriteMockToken.ts deleted file mode 100644 index 944286d8..00000000 --- a/packages/council-js/src/entities/token/ReadWriteMockToken.ts +++ /dev/null @@ -1,102 +0,0 @@ -import { ContractWriteOptions } from "@delvtech/evm-client"; -import { - ReadWriteToken, - ReadWriteTokenOptions, -} from "src/entities/token/ReadWriteToken"; - -export class ReadWriteMockToken extends ReadWriteToken { - constructor({ name = "Mock Token", ...rest }: ReadWriteTokenOptions) { - super({ - name, - ...rest, - }); - } - - /** - * Mint new tokens - * @param account - The account to add tokens to. - * @param amount - The amount of tokens (as a decimal string) to add. - * @return - The transaction hash. - */ - async mint({ - account, - amount, - options, - }: { - account: `0x${string}`; - amount: bigint; - options?: ContractWriteOptions; - }): Promise<`0x${string}`> { - const hash = await this.contract.write( - "mint", - { - account, - amount, - }, - options, - ); - this.contract.deleteRead("balanceOf", { 0: account }); - return hash; - } - - /** - * Modify an account's balance. - * @param account - The account to set balance for. - * @param balance - The new balance (as a decimal string) for the account. - * @return - The transaction hash. - */ - async setBalance({ - account, - balance, - options, - }: { - account: `0x${string}`; - balance: bigint; - options?: ContractWriteOptions; - }): Promise<`0x${string}`> { - const hash = await this.contract.write( - "setBalance", - { - who: account, - amount: balance, - }, - options, - ); - this.contract.deleteRead("balanceOf", { 0: account }); - return hash; - } - - /** - * Modify an account's allowance. - * @param account - The address of the owner to set allowance for. - * @param spender - The address of the spender to set allowance for. - * @param balance - The new balance (as a decimal string) for the account. - * @return - The transaction hash. - */ - async setAllowance({ - owner, - spender, - allowance, - options, - }: { - owner: `0x${string}`; - spender: `0x${string}`; - allowance: bigint; - options?: ContractWriteOptions; - }): Promise<`0x${string}`> { - const hash = await this.contract.write( - "setAllowance", - { - amount: allowance, - source: owner, - spender, - }, - options, - ); - this.contract.deleteRead("allowance", { - 0: owner, - 1: spender, - }); - return hash; - } -} diff --git a/packages/council-js/src/entities/token/ReadWriteToken.ts b/packages/council-js/src/entities/token/ReadWriteToken.ts index 4430b909..3ca36e09 100644 --- a/packages/council-js/src/entities/token/ReadWriteToken.ts +++ b/packages/council-js/src/entities/token/ReadWriteToken.ts @@ -1,56 +1,31 @@ -import { - CachedReadWriteContract, - ContractWriteOptions, -} from "@delvtech/evm-client"; -import { ReadWriteContractFactory } from "src/contract/factory"; -import { ReadWriteContractModelOptions } from "src/entities/Model"; -import { ReadToken } from "src/entities/token/ReadToken"; -import { ERC20Abi } from "src/entities/token/types"; - -/** - * @category Models - */ -export interface ReadWriteTokenOptions extends ReadWriteContractModelOptions {} - -/** - * @category Models - */ -export class ReadWriteToken extends ReadToken { - declare contract: CachedReadWriteContract; - declare contractFactory: ReadWriteContractFactory; - - constructor(options: ReadWriteTokenOptions) { - super(options); - } +import { ReadWriteAdapter, ReplaceProps } from "@delvtech/drift"; +import { SdkClient, SdkWriteParams } from "src/drift/SdkClient"; +import { ReadToken } from "src/token/ReadToken"; +export interface ReadWriteToken + extends ReplaceProps, SdkClient> { /** * Give a spending allowance to a given spender. - * @param spender - The address of the spender. - * @param amount - The amount of tokens the spender can spend. * @returns The transaction hash. */ - async approve({ - spender, - amount, - options, - }: { - owner?: `0x${string}`; - spender: `0x${string}`; - amount: bigint; - options?: ContractWriteOptions; - }): Promise<`0x${string}`> { - const hash = await this.contract.write( - "approve", - { - account: spender, - amount, - }, - options, - ); - this.contract.deleteRead("allowance", { - 0: await this.contract.getSignerAddress(), - 1: spender, - }); - return hash; - } + approve(params: ApproveParams): Promise<`0x${string}`>; } + +/** + * Params for approving a spending allowance on a {@linkcode ReadWriteToken}. + */ +export type ApproveParams = SdkWriteParams<{ + /** + * The address of the owner of the tokens. If not provided, the current + * account is used. + */ + owner?: `0x${string}`; + /** + * The address of the spender. + */ + spender: `0x${string}`; + /** + * The amount of tokens the spender can spend. + */ + amount: bigint; +}>; diff --git a/packages/council-js/src/entities/token/erc20/ReadErc20.ts b/packages/council-js/src/entities/token/erc20/ReadErc20.ts new file mode 100644 index 00000000..41f637ed --- /dev/null +++ b/packages/council-js/src/entities/token/erc20/ReadErc20.ts @@ -0,0 +1,69 @@ +import { Adapter, Contract, ContractReadOptions } from "@delvtech/drift"; +import { Address } from "abitype"; +import { SdkClient, SdkContractConfig } from "src/drift/SdkClient"; +import { erc20Abi, Erc20Abi } from "src/token/erc20/abi"; +import { ReadToken } from "src/token/ReadToken"; + +export class ReadErc20 + extends SdkClient + implements ReadToken +{ + contract: Contract; + + constructor({ + debugName = "ERC-20 Token", + address, + ...rest + }: SdkContractConfig) { + super({ debugName, ...rest }); + this.contract = this.drift.contract({ + abi: erc20Abi, + address, + }); + } + + get address(): Address { + return this.contract.address; + } + + getName(): Promise { + return this.contract.read("name"); + } + + getSymbol(): Promise { + return this.contract.read("symbol"); + } + + getDecimals(): Promise { + return this.contract.read("decimals"); + } + + getAllowance({ + owner, + spender, + options, + }: { + owner: `0x${string}`; + spender: `0x${string}`; + options?: ContractReadOptions; + }): Promise { + return this.contract.read("allowance", { owner, spender }, options); + } + + getBalanceOf({ + account, + options, + }: { + account: `0x${string}`; + options?: ContractReadOptions; + }): Promise { + return this.contract.read("balanceOf", { account }, options); + } + + /** + * Get the total supply of the token. + */ + getTotalSupply(options?: ContractReadOptions): Promise { + return this.contract.read("totalSupply", {}, options); + } +} diff --git a/packages/council-js/src/entities/token/erc20/ReadWriteErc20.ts b/packages/council-js/src/entities/token/erc20/ReadWriteErc20.ts new file mode 100644 index 00000000..4c4aeb6a --- /dev/null +++ b/packages/council-js/src/entities/token/erc20/ReadWriteErc20.ts @@ -0,0 +1,26 @@ +import { ReadWriteAdapter } from "@delvtech/drift"; +import { ApproveParams, ReadWriteToken } from "src/token/ReadWriteToken"; +import { ReadErc20 } from "src/token/erc20/ReadErc20"; + +export class ReadWriteErc20 + extends ReadErc20 + implements ReadWriteToken +{ + async approve({ + args: { spender, amount }, + options, + }: ApproveParams): Promise<`0x${string}`> { + const hash = await this.contract.write( + "approve", + { spender, amount }, + { + ...options, + onMined: (receipt) => { + this.contract.invalidateReadsMatching("allowance"); + options?.onMined?.(receipt); + }, + }, + ); + return hash; + } +} diff --git a/packages/council-js/src/entities/token/erc20/abi.ts b/packages/council-js/src/entities/token/erc20/abi.ts new file mode 100644 index 00000000..1d5e35c1 --- /dev/null +++ b/packages/council-js/src/entities/token/erc20/abi.ts @@ -0,0 +1,4 @@ +import { IERC20 } from "@delvtech/hyperdrive-artifacts/IERC20"; + +export const erc20Abi = IERC20.abi; +export type Erc20Abi = typeof erc20Abi; diff --git a/packages/council-js/src/entities/token/eth/ReadEth.ts b/packages/council-js/src/entities/token/eth/ReadEth.ts new file mode 100644 index 00000000..312469c5 --- /dev/null +++ b/packages/council-js/src/entities/token/eth/ReadEth.ts @@ -0,0 +1,51 @@ +import { Adapter, ContractReadOptions } from "@delvtech/drift"; +import { SdkClient, SdkClientConfig } from "src/drift/SdkClient"; +import { ReadToken } from "src/token/ReadToken"; + +export class ReadEth + extends SdkClient + implements ReadToken +{ + static address = "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE" as const; + address = ReadEth.address; + + constructor({ debugName = "ETH", ...restOptions }: SdkClientConfig) { + super({ debugName, ...restOptions }); + } + + async getName(): Promise { + return "Ethereum"; + } + + async getSymbol(): Promise { + return "ETH"; + } + + async getDecimals(): Promise { + return 18; + } + + /** + * @remarks + * Native ETH does not require allowances as it is sent directly as the + * message value when used in Hyperdrive. This method returns a maximum + * value to indicate the absence of an allowance mechanism for ETH. + */ + async getAllowance(): Promise { + // Max value for uint256 + return 2n ** 256n - 1n; + } + + async getBalanceOf({ + account, + options, + }: { + account: `0x${string}`; + options?: ContractReadOptions; + }): Promise { + return this.drift.getBalance({ + address: account, + ...options, + }); + } +} diff --git a/packages/council-js/src/entities/token/eth/ReadWriteEth.ts b/packages/council-js/src/entities/token/eth/ReadWriteEth.ts new file mode 100644 index 00000000..52ecbde7 --- /dev/null +++ b/packages/council-js/src/entities/token/eth/ReadWriteEth.ts @@ -0,0 +1,19 @@ +import { ReadWriteAdapter } from "@delvtech/drift"; +import { HyperdriveSdkError } from "src/HyperdriveSdkError"; +import { ReadEth } from "src/token/eth/ReadEth"; +import { ReadWriteToken } from "src/token/ReadWriteToken"; + +export class ReadWriteEth + extends ReadEth + implements ReadWriteToken +{ + /** + * This method is not available for the native ETH token. + * @throws {HyperdriveSdkError} + */ + async approve(): Promise<`0x${string}`> { + throw new HyperdriveSdkError( + "This method is not available for the native ETH token.", + ); + } +} diff --git a/packages/council-js/src/entities/token/types.ts b/packages/council-js/src/entities/token/types.ts deleted file mode 100644 index 6da3995d..00000000 --- a/packages/council-js/src/entities/token/types.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { MockERC20 } from "@delvtech/council-artifacts/MockERC20"; - -// Using MockERC20 abi for convenience to make extending to the MockToken model -// more straightforward without having to keep track of two different abis. -export type ERC20Abi = typeof MockERC20.abi; From a06a02da4d12040007f7952a0bbf17ea199157a5 Mon Sep 17 00:00:00 2001 From: Ryan Goree Date: Sat, 8 Feb 2025 19:46:50 -0600 Subject: [PATCH 012/146] Rename SdkClient, simplify, update tokens --- .../SdkClient.ts => entities/Entity.ts} | 50 +++++++------------ .../src/entities/token/ReadToken.ts | 4 +- .../src/entities/token/ReadWriteToken.ts | 13 ++--- .../src/entities/token/erc20/ReadErc20.ts | 16 +++--- .../entities/token/erc20/ReadWriteErc20.ts | 15 ++++-- .../src/entities/token/erc20/abi.ts | 6 +-- .../src/entities/token/eth/ReadEth.ts | 10 ++-- .../src/{drift => utils}/getBlockOrThrow.ts | 0 8 files changed, 47 insertions(+), 67 deletions(-) rename packages/council-js/src/{drift/SdkClient.ts => entities/Entity.ts} (51%) rename packages/council-js/src/{drift => utils}/getBlockOrThrow.ts (100%) diff --git a/packages/council-js/src/drift/SdkClient.ts b/packages/council-js/src/entities/Entity.ts similarity index 51% rename from packages/council-js/src/drift/SdkClient.ts rename to packages/council-js/src/entities/Entity.ts index e08a3e4c..72e94932 100644 --- a/packages/council-js/src/drift/SdkClient.ts +++ b/packages/council-js/src/entities/Entity.ts @@ -1,32 +1,29 @@ import { Adapter, Address, - ClientConfig, ContractWriteOptions, createDrift, Drift, OneOf, OnMinedParam, + SimpleCache, } from "@delvtech/drift"; // Base // /** - * Configuration options for an {@link SdkClient}. + * Configuration options for an {@link Entity}. */ -export type SdkClientConfig = OneOf< +export type EntityConfig = OneOf< | { drift?: Drift; } - | ClientConfig + | { + cache?: SimpleCache; + chainId?: number; + rpcUrl?: string; + } > & { - /** - * An arbitrary name for the instance. This is for convenience only (e.g., for - * use as a display name or in logging) and has no affect on the client's - * behavior. - */ - debugName?: string; - /** * The earliest block to fetch events from. */ @@ -34,19 +31,12 @@ export type SdkClientConfig = OneOf< }; /** - * A base class for SDK clients. + * A base class for SDK entities. */ -export class SdkClient { +export class Entity { drift: Drift; - debugName: string; - constructor({ - debugName, - drift, - earliestBlock, - ...driftConfig - }: SdkClientConfig = {}) { - this.debugName = debugName ?? this.constructor.name; + constructor({ drift, earliestBlock, ...driftConfig }: EntityConfig = {}) { this.drift = drift || createDrift(driftConfig); // Overwrite `fromBlock` if earlier than the `earliestBlock` option. @@ -69,11 +59,11 @@ export class SdkClient { } /** - * Params for write operations on an {@linkcode SdkClient}. + * Params for write operations on an {@linkcode Entity}. * * @template Args Additional parameters for the write operation. */ -export type SdkWriteParams = { +export type EntityWriteParams = { args: Args; options?: ContractWriteOptions & OnMinedParam; }; @@ -81,18 +71,12 @@ export type SdkWriteParams = { // Contract // /** - * Additional options required for clients that represent a specific contract. + * Configuration options for an {@linkcode Entity} that represents a specific + * contract. */ -export interface SdkContractOptions { +export type ContractEntityConfig = { /** * The address of the contract. */ address: Address; -} - -/** - * Configuration options for an {@linkcode SdkClient} that represents a specific - * contract. - */ -export type SdkContractConfig = - SdkClientConfig & SdkContractOptions; +} & EntityConfig; diff --git a/packages/council-js/src/entities/token/ReadToken.ts b/packages/council-js/src/entities/token/ReadToken.ts index cab1ef5c..8265e891 100644 --- a/packages/council-js/src/entities/token/ReadToken.ts +++ b/packages/council-js/src/entities/token/ReadToken.ts @@ -1,7 +1,7 @@ import { Adapter, ContractReadOptions } from "@delvtech/drift"; -import { SdkClient } from "src/drift/SdkClient"; +import { Entity } from "src/entities/Entity"; -export interface ReadToken extends SdkClient { +export interface ReadToken extends Entity { address: `0x${string}`; /** diff --git a/packages/council-js/src/entities/token/ReadWriteToken.ts b/packages/council-js/src/entities/token/ReadWriteToken.ts index 3ca36e09..7650ed4d 100644 --- a/packages/council-js/src/entities/token/ReadWriteToken.ts +++ b/packages/council-js/src/entities/token/ReadWriteToken.ts @@ -1,9 +1,9 @@ import { ReadWriteAdapter, ReplaceProps } from "@delvtech/drift"; -import { SdkClient, SdkWriteParams } from "src/drift/SdkClient"; -import { ReadToken } from "src/token/ReadToken"; +import { Entity, EntityWriteParams } from "src/entities/Entity"; +import { ReadToken } from "src/entities/token/ReadToken"; export interface ReadWriteToken - extends ReplaceProps, SdkClient> { + extends ReplaceProps, Entity> { /** * Give a spending allowance to a given spender. * @returns The transaction hash. @@ -14,12 +14,7 @@ export interface ReadWriteToken /** * Params for approving a spending allowance on a {@linkcode ReadWriteToken}. */ -export type ApproveParams = SdkWriteParams<{ - /** - * The address of the owner of the tokens. If not provided, the current - * account is used. - */ - owner?: `0x${string}`; +export type ApproveParams = EntityWriteParams<{ /** * The address of the spender. */ diff --git a/packages/council-js/src/entities/token/erc20/ReadErc20.ts b/packages/council-js/src/entities/token/erc20/ReadErc20.ts index 41f637ed..fd62003d 100644 --- a/packages/council-js/src/entities/token/erc20/ReadErc20.ts +++ b/packages/council-js/src/entities/token/erc20/ReadErc20.ts @@ -1,21 +1,17 @@ import { Adapter, Contract, ContractReadOptions } from "@delvtech/drift"; import { Address } from "abitype"; -import { SdkClient, SdkContractConfig } from "src/drift/SdkClient"; -import { erc20Abi, Erc20Abi } from "src/token/erc20/abi"; -import { ReadToken } from "src/token/ReadToken"; +import { ContractEntityConfig, Entity } from "src/entities/Entity"; +import { erc20Abi, Erc20Abi } from "src/entities/token/erc20/abi"; +import { ReadToken } from "src/entities/token/ReadToken"; export class ReadErc20 - extends SdkClient + extends Entity implements ReadToken { contract: Contract; - constructor({ - debugName = "ERC-20 Token", - address, - ...rest - }: SdkContractConfig) { - super({ debugName, ...rest }); + constructor({ address, ...config }: ContractEntityConfig) { + super(config); this.contract = this.drift.contract({ abi: erc20Abi, address, diff --git a/packages/council-js/src/entities/token/erc20/ReadWriteErc20.ts b/packages/council-js/src/entities/token/erc20/ReadWriteErc20.ts index 4c4aeb6a..45fc15ae 100644 --- a/packages/council-js/src/entities/token/erc20/ReadWriteErc20.ts +++ b/packages/council-js/src/entities/token/erc20/ReadWriteErc20.ts @@ -1,6 +1,9 @@ import { ReadWriteAdapter } from "@delvtech/drift"; -import { ApproveParams, ReadWriteToken } from "src/token/ReadWriteToken"; -import { ReadErc20 } from "src/token/erc20/ReadErc20"; +import { + ApproveParams, + ReadWriteToken, +} from "src/entities/token/ReadWriteToken"; +import { ReadErc20 } from "src/entities/token/erc20/ReadErc20"; export class ReadWriteErc20 extends ReadErc20 @@ -10,13 +13,19 @@ export class ReadWriteErc20 args: { spender, amount }, options, }: ApproveParams): Promise<`0x${string}`> { + const owner = await this.contract.getSignerAddress(); const hash = await this.contract.write( "approve", { spender, amount }, { ...options, onMined: (receipt) => { - this.contract.invalidateReadsMatching("allowance"); + if (receipt?.status === "success") { + this.contract.invalidateRead("allowance", { + owner: receipt.from, + spender, + }); + } options?.onMined?.(receipt); }, }, diff --git a/packages/council-js/src/entities/token/erc20/abi.ts b/packages/council-js/src/entities/token/erc20/abi.ts index 1d5e35c1..c2b5f10c 100644 --- a/packages/council-js/src/entities/token/erc20/abi.ts +++ b/packages/council-js/src/entities/token/erc20/abi.ts @@ -1,4 +1,4 @@ -import { IERC20 } from "@delvtech/hyperdrive-artifacts/IERC20"; +import { erc20 } from "@delvtech/drift/testing"; -export const erc20Abi = IERC20.abi; -export type Erc20Abi = typeof erc20Abi; +export type Erc20Abi = typeof erc20.abi; +export const erc20Abi = erc20.abi; diff --git a/packages/council-js/src/entities/token/eth/ReadEth.ts b/packages/council-js/src/entities/token/eth/ReadEth.ts index 312469c5..04f7534c 100644 --- a/packages/council-js/src/entities/token/eth/ReadEth.ts +++ b/packages/council-js/src/entities/token/eth/ReadEth.ts @@ -1,18 +1,14 @@ import { Adapter, ContractReadOptions } from "@delvtech/drift"; -import { SdkClient, SdkClientConfig } from "src/drift/SdkClient"; -import { ReadToken } from "src/token/ReadToken"; +import { Entity } from "src/entities/Entity"; +import { ReadToken } from "src/entities/token/ReadToken"; export class ReadEth - extends SdkClient + extends Entity implements ReadToken { static address = "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE" as const; address = ReadEth.address; - constructor({ debugName = "ETH", ...restOptions }: SdkClientConfig) { - super({ debugName, ...restOptions }); - } - async getName(): Promise { return "Ethereum"; } diff --git a/packages/council-js/src/drift/getBlockOrThrow.ts b/packages/council-js/src/utils/getBlockOrThrow.ts similarity index 100% rename from packages/council-js/src/drift/getBlockOrThrow.ts rename to packages/council-js/src/utils/getBlockOrThrow.ts From acd48f20de7f9d5fe09b4d8756e11fe284d76413 Mon Sep 17 00:00:00 2001 From: Ryan Goree Date: Sat, 8 Feb 2025 20:07:12 -0600 Subject: [PATCH 013/146] Simplify tokens --- .../src/entities/token/ReadToken.ts | 71 +++++++++++-------- .../src/entities/token/ReadWriteToken.ts | 60 ++++++++++------ packages/council-js/src/entities/token/abi.ts | 4 ++ .../src/entities/token/erc20/ReadErc20.ts | 65 ----------------- .../entities/token/erc20/ReadWriteErc20.ts | 35 --------- .../src/entities/token/erc20/abi.ts | 4 -- .../src/entities/token/eth/ReadEth.ts | 47 ------------ .../src/entities/token/eth/ReadWriteEth.ts | 19 ----- 8 files changed, 84 insertions(+), 221 deletions(-) create mode 100644 packages/council-js/src/entities/token/abi.ts delete mode 100644 packages/council-js/src/entities/token/erc20/ReadErc20.ts delete mode 100644 packages/council-js/src/entities/token/erc20/ReadWriteErc20.ts delete mode 100644 packages/council-js/src/entities/token/erc20/abi.ts delete mode 100644 packages/council-js/src/entities/token/eth/ReadEth.ts delete mode 100644 packages/council-js/src/entities/token/eth/ReadWriteEth.ts diff --git a/packages/council-js/src/entities/token/ReadToken.ts b/packages/council-js/src/entities/token/ReadToken.ts index 8265e891..181ff503 100644 --- a/packages/council-js/src/entities/token/ReadToken.ts +++ b/packages/council-js/src/entities/token/ReadToken.ts @@ -1,46 +1,61 @@ -import { Adapter, ContractReadOptions } from "@delvtech/drift"; -import { Entity } from "src/entities/Entity"; +import { Adapter, Contract, ContractReadOptions } from "@delvtech/drift"; +import { Address } from "abitype"; +import { ContractEntityConfig, Entity } from "src/entities/Entity"; +import { TokenAbi, tokenAbi } from "src/entities/token/abi"; -export interface ReadToken extends Entity { - address: `0x${string}`; +export class ReadToken extends Entity { + contract: Contract; - /** - * Get the name of this token - */ - getName(): Promise; + constructor({ address, ...config }: ContractEntityConfig) { + super(config); + this.contract = this.drift.contract({ + abi: tokenAbi, + address, + }); + } - /** - * Get the symbol for this token. - */ - getSymbol(): Promise; + get address(): Address { + return this.contract.address; + } - /** - * Get the number of decimal places this token uses. - */ - getDecimals(): Promise; + getName(): Promise { + return this.contract.read("name"); + } + + getSymbol(): Promise { + return this.contract.read("symbol"); + } + + getDecimals(): Promise { + return this.contract.read("decimals"); + } - /** - * Get the spending allowance of a given spender for a given owner of this - * token. - */ getAllowance({ owner, spender, options, }: { - owner: `0x${string}`; - spender: `0x${string}`; + owner: Address; + spender: Address; options?: ContractReadOptions; - }): Promise; + }): Promise { + return this.contract.read("allowance", { owner, spender }, options); + } - /** - * Get the token balance of a given address - */ getBalanceOf({ account, options, }: { - account: `0x${string}`; + account: Address; options?: ContractReadOptions; - }): Promise; + }): Promise { + return this.contract.read("balanceOf", { account }, options); + } + + /** + * Get the total supply of the token. + */ + getTotalSupply(options?: ContractReadOptions): Promise { + return this.contract.read("totalSupply", {}, options); + } } diff --git a/packages/council-js/src/entities/token/ReadWriteToken.ts b/packages/council-js/src/entities/token/ReadWriteToken.ts index 7650ed4d..ec1a5d6d 100644 --- a/packages/council-js/src/entities/token/ReadWriteToken.ts +++ b/packages/council-js/src/entities/token/ReadWriteToken.ts @@ -1,26 +1,40 @@ -import { ReadWriteAdapter, ReplaceProps } from "@delvtech/drift"; -import { Entity, EntityWriteParams } from "src/entities/Entity"; +import { Address, Hash, ReadWriteAdapter } from "@delvtech/drift"; +import { EntityWriteParams } from "src/entities/Entity"; import { ReadToken } from "src/entities/token/ReadToken"; -export interface ReadWriteToken - extends ReplaceProps, Entity> { - /** - * Give a spending allowance to a given spender. - * @returns The transaction hash. - */ - approve(params: ApproveParams): Promise<`0x${string}`>; +export class ReadWriteToken< + A extends ReadWriteAdapter = ReadWriteAdapter, +> extends ReadToken { + async approve({ + args: { spender, amount }, + options, + }: EntityWriteParams<{ + /** + * The address of the spender. + */ + spender: Address; + /** + * The amount of tokens the spender can spend. + */ + amount: bigint; + }>): Promise { + const owner = await this.contract.getSignerAddress(); + const hash = await this.contract.write( + "approve", + { spender, amount }, + { + ...options, + onMined: (receipt) => { + if (receipt?.status === "success") { + this.contract.invalidateRead("allowance", { + owner: receipt.from, + spender, + }); + } + options?.onMined?.(receipt); + }, + }, + ); + return hash; + } } - -/** - * Params for approving a spending allowance on a {@linkcode ReadWriteToken}. - */ -export type ApproveParams = EntityWriteParams<{ - /** - * The address of the spender. - */ - spender: `0x${string}`; - /** - * The amount of tokens the spender can spend. - */ - amount: bigint; -}>; diff --git a/packages/council-js/src/entities/token/abi.ts b/packages/council-js/src/entities/token/abi.ts new file mode 100644 index 00000000..49816678 --- /dev/null +++ b/packages/council-js/src/entities/token/abi.ts @@ -0,0 +1,4 @@ +import { erc20 } from "@delvtech/drift/testing"; + +export type TokenAbi = typeof erc20.abi; +export const tokenAbi = erc20.abi; diff --git a/packages/council-js/src/entities/token/erc20/ReadErc20.ts b/packages/council-js/src/entities/token/erc20/ReadErc20.ts deleted file mode 100644 index fd62003d..00000000 --- a/packages/council-js/src/entities/token/erc20/ReadErc20.ts +++ /dev/null @@ -1,65 +0,0 @@ -import { Adapter, Contract, ContractReadOptions } from "@delvtech/drift"; -import { Address } from "abitype"; -import { ContractEntityConfig, Entity } from "src/entities/Entity"; -import { erc20Abi, Erc20Abi } from "src/entities/token/erc20/abi"; -import { ReadToken } from "src/entities/token/ReadToken"; - -export class ReadErc20 - extends Entity - implements ReadToken -{ - contract: Contract; - - constructor({ address, ...config }: ContractEntityConfig) { - super(config); - this.contract = this.drift.contract({ - abi: erc20Abi, - address, - }); - } - - get address(): Address { - return this.contract.address; - } - - getName(): Promise { - return this.contract.read("name"); - } - - getSymbol(): Promise { - return this.contract.read("symbol"); - } - - getDecimals(): Promise { - return this.contract.read("decimals"); - } - - getAllowance({ - owner, - spender, - options, - }: { - owner: `0x${string}`; - spender: `0x${string}`; - options?: ContractReadOptions; - }): Promise { - return this.contract.read("allowance", { owner, spender }, options); - } - - getBalanceOf({ - account, - options, - }: { - account: `0x${string}`; - options?: ContractReadOptions; - }): Promise { - return this.contract.read("balanceOf", { account }, options); - } - - /** - * Get the total supply of the token. - */ - getTotalSupply(options?: ContractReadOptions): Promise { - return this.contract.read("totalSupply", {}, options); - } -} diff --git a/packages/council-js/src/entities/token/erc20/ReadWriteErc20.ts b/packages/council-js/src/entities/token/erc20/ReadWriteErc20.ts deleted file mode 100644 index 45fc15ae..00000000 --- a/packages/council-js/src/entities/token/erc20/ReadWriteErc20.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { ReadWriteAdapter } from "@delvtech/drift"; -import { - ApproveParams, - ReadWriteToken, -} from "src/entities/token/ReadWriteToken"; -import { ReadErc20 } from "src/entities/token/erc20/ReadErc20"; - -export class ReadWriteErc20 - extends ReadErc20 - implements ReadWriteToken -{ - async approve({ - args: { spender, amount }, - options, - }: ApproveParams): Promise<`0x${string}`> { - const owner = await this.contract.getSignerAddress(); - const hash = await this.contract.write( - "approve", - { spender, amount }, - { - ...options, - onMined: (receipt) => { - if (receipt?.status === "success") { - this.contract.invalidateRead("allowance", { - owner: receipt.from, - spender, - }); - } - options?.onMined?.(receipt); - }, - }, - ); - return hash; - } -} diff --git a/packages/council-js/src/entities/token/erc20/abi.ts b/packages/council-js/src/entities/token/erc20/abi.ts deleted file mode 100644 index c2b5f10c..00000000 --- a/packages/council-js/src/entities/token/erc20/abi.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { erc20 } from "@delvtech/drift/testing"; - -export type Erc20Abi = typeof erc20.abi; -export const erc20Abi = erc20.abi; diff --git a/packages/council-js/src/entities/token/eth/ReadEth.ts b/packages/council-js/src/entities/token/eth/ReadEth.ts deleted file mode 100644 index 04f7534c..00000000 --- a/packages/council-js/src/entities/token/eth/ReadEth.ts +++ /dev/null @@ -1,47 +0,0 @@ -import { Adapter, ContractReadOptions } from "@delvtech/drift"; -import { Entity } from "src/entities/Entity"; -import { ReadToken } from "src/entities/token/ReadToken"; - -export class ReadEth - extends Entity - implements ReadToken -{ - static address = "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE" as const; - address = ReadEth.address; - - async getName(): Promise { - return "Ethereum"; - } - - async getSymbol(): Promise { - return "ETH"; - } - - async getDecimals(): Promise { - return 18; - } - - /** - * @remarks - * Native ETH does not require allowances as it is sent directly as the - * message value when used in Hyperdrive. This method returns a maximum - * value to indicate the absence of an allowance mechanism for ETH. - */ - async getAllowance(): Promise { - // Max value for uint256 - return 2n ** 256n - 1n; - } - - async getBalanceOf({ - account, - options, - }: { - account: `0x${string}`; - options?: ContractReadOptions; - }): Promise { - return this.drift.getBalance({ - address: account, - ...options, - }); - } -} diff --git a/packages/council-js/src/entities/token/eth/ReadWriteEth.ts b/packages/council-js/src/entities/token/eth/ReadWriteEth.ts deleted file mode 100644 index 52ecbde7..00000000 --- a/packages/council-js/src/entities/token/eth/ReadWriteEth.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { ReadWriteAdapter } from "@delvtech/drift"; -import { HyperdriveSdkError } from "src/HyperdriveSdkError"; -import { ReadEth } from "src/token/eth/ReadEth"; -import { ReadWriteToken } from "src/token/ReadWriteToken"; - -export class ReadWriteEth - extends ReadEth - implements ReadWriteToken -{ - /** - * This method is not available for the native ETH token. - * @throws {HyperdriveSdkError} - */ - async approve(): Promise<`0x${string}`> { - throw new HyperdriveSdkError( - "This method is not available for the native ETH token.", - ); - } -} From 146198abff1ab8e461bf2bab650d2dcd5496c12e Mon Sep 17 00:00:00 2001 From: Ryan Goree Date: Sat, 8 Feb 2025 20:32:58 -0600 Subject: [PATCH 014/146] Update airdrop entities --- .../src/entities/airdrop/ReadAirdrop.ts | 65 +++----- .../src/entities/airdrop/ReadWriteAirdrop.ts | 143 ++++++++---------- .../src/entities/token/ReadWriteToken.ts | 6 +- 3 files changed, 88 insertions(+), 126 deletions(-) diff --git a/packages/council-js/src/entities/airdrop/ReadAirdrop.ts b/packages/council-js/src/entities/airdrop/ReadAirdrop.ts index 2863faf4..d0fe0ff4 100644 --- a/packages/council-js/src/entities/airdrop/ReadAirdrop.ts +++ b/packages/council-js/src/entities/airdrop/ReadAirdrop.ts @@ -1,49 +1,32 @@ import { Airdrop as AirdropArtifact } from "@delvtech/council-artifacts/Airdrop"; -import { CachedReadContract } from "@delvtech/evm-client"; +import { + Adapter, + Address, + Contract, + ContractReadOptions, +} from "@delvtech/drift"; import { AirdropAbi } from "src/entities/airdrop/types"; -import { Model, ReadContractModelOptions } from "src/entities/Model"; +import { ContractEntityConfig, Entity } from "src/entities/Entity"; import { ReadToken } from "src/entities/token/ReadToken"; import { ReadLockingVault } from "src/entities/votingVault/lockingVault/ReadLockingVault"; -import { BlockLike, blockToReadOptions } from "src/utils/blockToReadOptions"; -/** - * @category Models - */ -export interface ReadAirdropOptions extends ReadContractModelOptions {} +export class ReadAirdrop extends Entity { + contract: Contract; -/** - * @category Models - */ -export class ReadAirdrop extends Model { - contract: CachedReadContract; - - constructor({ - name = "Airdrop", - address, - contractFactory, - network, - cache, - namespace, - }: ReadAirdropOptions) { - super({ contractFactory, name, network }); - this.contract = contractFactory({ + constructor({ address, ...config }: ContractEntityConfig) { + super(config); + this.contract = this.drift.contract({ abi: AirdropArtifact.abi, address, - cache, - namespace, }); } - get address(): `0x${string}` { + get address(): Address { return this.contract.address; } - get namespace(): string | undefined { - return this.contract.namespace; - } /** - * Get a timestamp (in MS) of when the tokens can be reclaimed (removed by the - * owner). + * Get the date of when the tokens can be reclaimed (removed by the owner). */ async getExpiration(): Promise { const secondsTimestamp = await this.contract.read("expiration"); @@ -53,7 +36,7 @@ export class ReadAirdrop extends Model { /** * Get The merkle root with deposits encoded into it as hash [address, amount] */ - getMerkleRoot(): Promise<`0x${string}`> { + getMerkleRoot(): Promise
{ return this.contract.read("rewardsRoot"); } @@ -63,8 +46,7 @@ export class ReadAirdrop extends Model { async getToken(): Promise { return new ReadToken({ address: await this.contract.read("token"), - contractFactory: this.contractFactory, - network: this.network, + drift: this.drift, }); } @@ -73,16 +55,12 @@ export class ReadAirdrop extends Model { */ async getClaimedAmount({ account, - atBlock, + options, }: { - account: `0x${string}`; - atBlock?: BlockLike; + account: Address; + options?: ContractReadOptions; }): Promise { - return await this.contract.read( - "claimed", - { 0: account }, - blockToReadOptions(atBlock), - ); + return await this.contract.read("claimed", [account], options); } /** @@ -93,8 +71,7 @@ export class ReadAirdrop extends Model { const address = await this.contract.read("lockingVault"); return new ReadLockingVault({ address, - contractFactory: this.contractFactory, - network: this.network, + drift: this.drift, }); } } diff --git a/packages/council-js/src/entities/airdrop/ReadWriteAirdrop.ts b/packages/council-js/src/entities/airdrop/ReadWriteAirdrop.ts index 8e8d13be..a3b8679d 100644 --- a/packages/council-js/src/entities/airdrop/ReadWriteAirdrop.ts +++ b/packages/council-js/src/entities/airdrop/ReadWriteAirdrop.ts @@ -1,43 +1,23 @@ -import { - CachedReadWriteContract, - ContractWriteOptions, -} from "@delvtech/evm-client"; -import { ReadWriteContractFactory } from "src/contract/factory"; +import { Address, Hash, ReadWriteAdapter } from "@delvtech/drift"; import { ReadAirdrop } from "src/entities/airdrop/ReadAirdrop"; -import { AirdropAbi } from "src/entities/airdrop/types"; -import { ReadWriteContractModelOptions } from "src/entities/Model"; +import { EntityWriteParams } from "src/entities/Entity"; import { ReadWriteToken } from "src/entities/token/ReadWriteToken"; import { ReadWriteLockingVault } from "src/entities/votingVault/lockingVault/ReadWriteLockingVault"; -/** - * @category Models - */ -interface ReadWriteAirdropOptions extends ReadWriteContractModelOptions {} - -/** - * @category Models - */ -export class ReadWriteAirdrop extends ReadAirdrop { - declare contract: CachedReadWriteContract; - declare contractFactory: ReadWriteContractFactory; - - constructor(options: ReadWriteAirdropOptions) { - super(options); - } - - override async getToken(): Promise { +export class ReadWriteAirdrop< + A extends ReadWriteAdapter = ReadWriteAdapter, +> extends ReadAirdrop { + async getToken(): Promise { return new ReadWriteToken({ address: await this.contract.read("token"), - contractFactory: this.contractFactory, - network: this.network, + drift: this.drift, }); } - override async getLockingVault(): Promise { + async getLockingVault(): Promise { return new ReadWriteLockingVault({ address: await this.contract.read("lockingVault"), - contractFactory: this.contractFactory, - network: this.network, + drift: this.drift, }); } @@ -48,36 +28,44 @@ export class ReadWriteAirdrop extends ReadAirdrop { * @param merkleProof - A set of hashes that can be used to reconstruct the * path from a user (leaf) node to the merkle root, verifying that the user is * part of the tree. - * @param recipient - The address which will be credited with funds. + * @param destination - The address which will be credited with funds. * @return - The transaction hash. */ - async claim({ - amount, - totalGrant, - merkleProof, - recipient, + claim({ + args: { amount, totalGrant, merkleProof, recipient: destination }, options, - }: { + }: EntityWriteParams<{ amount: bigint; totalGrant: bigint; - merkleProof: `0x${string}`[]; - recipient: `0x${string}`; - options?: ContractWriteOptions; - }): Promise<`0x${string}`> { - const hash = await this.contract.write( + merkleProof: Hash[]; + recipient: Address; + }>): Promise { + return this.contract.write( "claim", { amount, - destination: recipient, + destination, merkleProof, totalGrant, }, - options, + { + ...options, + onMined: async (receipt) => { + if (receipt?.status === "success") { + // Invalidate the claimed amount for the recipient + this.contract.invalidateRead("claimed", [destination]); + + // Invalidate the balance of the recipient. This requires reading + // the contract, but in most cases, the read will already be cached. + const token = await this.getToken(); + token.contract.invalidateRead("balanceOf", { + account: destination, + }); + } + options?.onMined?.(receipt); + }, + }, ); - const token = await this.getToken(); - token.contract.deleteRead("balanceOf", { 0: recipient }); - this.contract.deleteRead("claimed", { 0: recipient }); - return hash; } /** @@ -89,61 +77,60 @@ export class ReadWriteAirdrop extends ReadAirdrop { * @param merkleProof - A set of hashes that can be used to reconstruct the * path from a user (leaf) node to the merkle root, verifying that the user is * part of the tree. - * @param recipient - The address which will be credited with funds. + * @param destination - The address which will be credited with funds. * @return - The transaction hash. */ - async claimAndDelegate({ - amount, - delegate, - totalGrant, - merkleProof, - recipient, + claimAndDelegate({ + args: { amount, delegate, totalGrant, merkleProof, destination }, options, - }: { + }: EntityWriteParams<{ amount: bigint; - delegate: `0x${string}`; + delegate: Address; totalGrant: bigint; - merkleProof: `0x${string}`[]; - recipient: `0x${string}`; - options?: ContractWriteOptions; - }): Promise<`0x${string}`> { - const hash = await this.contract.write( + merkleProof: Hash[]; + destination: Address; + }>): Promise { + return this.contract.write( "claimAndDelegate", { amount, delegate, totalGrant, merkleProof, - destination: recipient, + destination, + }, + { + onMined: async (receipt) => { + if (receipt?.status === "success") this.contract.cache.clear(); + options?.onMined?.(receipt); + }, }, - options, ); - const lockingVault = await this.getLockingVault(); - lockingVault.contract.clearCache(); - this.contract.deleteRead("claimed", { 0: recipient }); - return hash; } /** * Remove funds from the airdrop after expiration - * @param recipient - The address which will be credited with funds. + * @param destination - The address which will be credited with funds. * @return - The transaction hash. */ async reclaim({ - recipient, + args: { destination }, options, - }: { - recipient: `0x${string}`; - options?: ContractWriteOptions; - }): Promise<`0x${string}`> { + }: EntityWriteParams<{ + destination: Address; + }>): Promise { const hash = await this.contract.write( "reclaim", - { destination: recipient }, - options, + { destination }, + { + onMined: async (receipt) => { + if (receipt?.status === "success") { + this.contract.cache.clear(); + } + options?.onMined?.(receipt); + }, + }, ); - const token = await this.getToken(); - token.contract.deleteRead("balanceOf", { 0: recipient }); - this.contract.clearCache(); return hash; } } diff --git a/packages/council-js/src/entities/token/ReadWriteToken.ts b/packages/council-js/src/entities/token/ReadWriteToken.ts index ec1a5d6d..516a2910 100644 --- a/packages/council-js/src/entities/token/ReadWriteToken.ts +++ b/packages/council-js/src/entities/token/ReadWriteToken.ts @@ -5,7 +5,7 @@ import { ReadToken } from "src/entities/token/ReadToken"; export class ReadWriteToken< A extends ReadWriteAdapter = ReadWriteAdapter, > extends ReadToken { - async approve({ + approve({ args: { spender, amount }, options, }: EntityWriteParams<{ @@ -18,8 +18,7 @@ export class ReadWriteToken< */ amount: bigint; }>): Promise { - const owner = await this.contract.getSignerAddress(); - const hash = await this.contract.write( + return this.contract.write( "approve", { spender, amount }, { @@ -35,6 +34,5 @@ export class ReadWriteToken< }, }, ); - return hash; } } From 92b61ac601788a4634c3edacfe55691c459b7ce0 Mon Sep 17 00:00:00 2001 From: Ryan Goree Date: Sun, 9 Feb 2025 11:38:27 -0600 Subject: [PATCH 015/146] Update drift --- packages/council-js/package.json | 2 +- yarn.lock | 39 ++++++++++++++++++++++++++------ 2 files changed, 33 insertions(+), 8 deletions(-) diff --git a/packages/council-js/package.json b/packages/council-js/package.json index 1f6d533e..6bf2b694 100644 --- a/packages/council-js/package.json +++ b/packages/council-js/package.json @@ -13,7 +13,7 @@ "typecheck": "tsc --noEmit" }, "dependencies": { - "@delvtech/drift": "^0.1.1", + "@delvtech/drift": "^0.1.2", "@delvtech/fixed-point-wasm": "^0.0.7", "@delvtech/council-artifacts": "^0.1.0" }, diff --git a/yarn.lock b/yarn.lock index 4c54e87a..88480218 100644 --- a/yarn.lock +++ b/yarn.lock @@ -492,10 +492,10 @@ "@delvtech/council-core" "0.1.0" "@delvtech/evm-client-viem" "^0.6.1" -"@delvtech/drift@^0.1.1": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@delvtech/drift/-/drift-0.1.1.tgz#c5549758b58890b843e9648c1295b8c675ab9dd2" - integrity sha512-/Rv50QsM3TKg4EfwzPmmAsEWnIJgFXNtqm+BYs1IQhoyqL9dxXf4EoFcQ623IqkTjTQJPrP69w8HzT7rc+S/gQ== +"@delvtech/drift@^0.1.2": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@delvtech/drift/-/drift-0.1.2.tgz#90bc89e3aa6c15b90bdb59797744fdef6fae38c7" + integrity sha512-GVVi9Sh2wSzOWxGmSExolVcg0nY/MUMY4aTYAnGde+qwmt2Mvjf4aw3GehhihFPLQrt1xVMslw/Mk6bVCIY4Gg== dependencies: lodash.ismatch "^4.4.0" lru-cache "^11.0.2" @@ -9483,7 +9483,16 @@ strict-uri-encode@^2.0.0: resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546" integrity sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ== -"string-width-cjs@npm:string-width@^4.2.0", string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2: +"string-width-cjs@npm:string-width@^4.2.0": + version "4.2.3" + 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-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -9573,7 +9582,7 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" -"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: +"strip-ansi-cjs@npm:strip-ansi@^6.0.1": version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== @@ -9587,6 +9596,13 @@ strip-ansi@^3.0.0: dependencies: ansi-regex "^2.0.0" +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + 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-ansi@^7.0.1, strip-ansi@^7.1.0: version "7.1.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" @@ -10653,7 +10669,7 @@ workerpool@6.2.1: resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.1.tgz#46fc150c17d826b86a008e5a4508656777e9c343" integrity sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw== -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== @@ -10671,6 +10687,15 @@ wrap-ansi@^6.2.0: string-width "^4.1.0" strip-ansi "^6.0.0" +wrap-ansi@^7.0.0: + version "7.0.0" + 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" + string-width "^4.1.0" + strip-ansi "^6.0.0" + wrap-ansi@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" From 891b556bdd58494482b8225012dad79d133c34f2 Mon Sep 17 00:00:00 2001 From: Ryan Goree Date: Tue, 11 Feb 2025 20:10:29 -0600 Subject: [PATCH 016/146] Bump drift, remove unused dependencies --- packages/council-js/package.json | 5 +-- yarn.lock | 76 +++----------------------------- 2 files changed, 8 insertions(+), 73 deletions(-) diff --git a/packages/council-js/package.json b/packages/council-js/package.json index 6bf2b694..7a6a962d 100644 --- a/packages/council-js/package.json +++ b/packages/council-js/package.json @@ -13,17 +13,14 @@ "typecheck": "tsc --noEmit" }, "dependencies": { - "@delvtech/drift": "^0.1.2", + "@delvtech/drift": "^0.1.3", "@delvtech/fixed-point-wasm": "^0.0.7", "@delvtech/council-artifacts": "^0.1.0" }, "devDependencies": { "@council/eslint-config": "*", "@council/tsconfig": "*", - "dotenv": "^16.4.7", - "nodemon": "^3.1.9", "sinon": "^17.0.1", - "ts-node": "^10.9.2", "tsconfig-paths": "^4.2.0", "tsup": "^8.3.6", "typedoc": "^0.27.6", diff --git a/yarn.lock b/yarn.lock index 88480218..187eea84 100644 --- a/yarn.lock +++ b/yarn.lock @@ -492,10 +492,10 @@ "@delvtech/council-core" "0.1.0" "@delvtech/evm-client-viem" "^0.6.1" -"@delvtech/drift@^0.1.2": - version "0.1.2" - resolved "https://registry.yarnpkg.com/@delvtech/drift/-/drift-0.1.2.tgz#90bc89e3aa6c15b90bdb59797744fdef6fae38c7" - integrity sha512-GVVi9Sh2wSzOWxGmSExolVcg0nY/MUMY4aTYAnGde+qwmt2Mvjf4aw3GehhihFPLQrt1xVMslw/Mk6bVCIY4Gg== +"@delvtech/drift@^0.1.3": + version "0.1.3" + resolved "https://registry.yarnpkg.com/@delvtech/drift/-/drift-0.1.3.tgz#1bb8273eff5e7796e76b027105cfd263e3a8827f" + integrity sha512-j0/VdunuyHqZepMMEEiKWWkQuaoUDvspYs9933W2KFfm+sc+DLYes3BzUWK0gIXR/SZSIrfSkyoKvdDYIpkyvQ== dependencies: lodash.ismatch "^4.4.0" lru-cache "^11.0.2" @@ -3633,11 +3633,6 @@ "@walletconnect/window-getters" "^1.0.1" tslib "1.14.1" -abbrev@1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" - integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== - abitype@0.9.8: version "0.9.8" resolved "https://registry.yarnpkg.com/abitype/-/abitype-0.9.8.tgz#1f120b6b717459deafd213dfbf3a3dd1bf10ae8c" @@ -4340,7 +4335,7 @@ check-error@^2.1.1: resolved "https://registry.yarnpkg.com/check-error/-/check-error-2.1.1.tgz#87eb876ae71ee388fa0471fe423f494be1d96ccc" integrity sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw== -chokidar@3.5.3, chokidar@^3.5.2, chokidar@^3.5.3: +chokidar@3.5.3, chokidar@^3.5.3: version "3.5.3" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== @@ -4778,7 +4773,7 @@ date-fns@^3.3.1: resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-3.3.1.tgz#7581daca0892d139736697717a168afbb908cfed" integrity sha512-y8e109LYGgoQDveiEBD3DYXKba1jWf5BA8YU1FL5Tvm0BTdEfy54WLCwnuYWZNnzzvALy/QQ4Hov+Q9RVRv+Zw== -debug@4, debug@4.3.4, debug@^4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4, debug@~4.3.1, debug@~4.3.2: +debug@4, debug@4.3.4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4, debug@~4.3.1, debug@~4.3.2: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== @@ -5006,11 +5001,6 @@ dotenv@^16.4.5: resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.4.5.tgz#cdd3b3b604cb327e286b4762e13502f717cb099f" integrity sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg== -dotenv@^16.4.7: - version "16.4.7" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.4.7.tgz#0e20c5b82950140aa99be360a8a5f52335f53c26" - integrity sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ== - dotignore@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/dotignore/-/dotignore-0.1.2.tgz#f942f2200d28c3a76fbdd6f0ee9f3257c8a2e905" @@ -6508,11 +6498,6 @@ ieee754@^1.2.1: resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== -ignore-by-default@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09" - integrity sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA== - ignore@^5.2.0, ignore@^5.2.4: version "5.3.1" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef" @@ -7874,29 +7859,6 @@ node-releases@^2.0.14: resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b" integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw== -nodemon@^3.1.9: - version "3.1.9" - resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-3.1.9.tgz#df502cdc3b120e1c3c0c6e4152349019efa7387b" - integrity sha512-hdr1oIb2p6ZSxu3PB2JWWYS7ZQ0qvaZsc3hK8DR8f02kRzc8rjYmxAIvdz+aYC+8F2IjNaB7HMcSDg8nQpJxyg== - dependencies: - chokidar "^3.5.2" - debug "^4" - ignore-by-default "^1.0.1" - minimatch "^3.1.2" - pstree.remy "^1.1.8" - semver "^7.5.3" - simple-update-notifier "^2.0.0" - supports-color "^5.5.0" - touch "^3.1.0" - undefsafe "^2.0.5" - -nopt@~1.0.10: - version "1.0.10" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee" - integrity sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg== - dependencies: - abbrev "1" - normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" @@ -8591,11 +8553,6 @@ proxy-compare@2.5.1: resolved "https://registry.yarnpkg.com/proxy-compare/-/proxy-compare-2.5.1.tgz#17818e33d1653fbac8c2ec31406bce8a2966f600" integrity sha512-oyfc0Tx87Cpwva5ZXezSp5V9vht1c7dZBhvuV/y3ctkgMVUmiAGDVeeB0dKhGSyT0v1ZTEQYpe/RXlBVBNuCLA== -pstree.remy@^1.1.8: - version "1.1.8" - resolved "https://registry.yarnpkg.com/pstree.remy/-/pstree.remy-1.1.8.tgz#c242224f4a67c21f686839bbdb4ac282b8373d3a" - integrity sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w== - pump@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" @@ -9250,13 +9207,6 @@ simple-peer@^9.11.1: randombytes "^2.1.0" readable-stream "^3.6.0" -simple-update-notifier@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz#d70b92bdab7d6d90dfd73931195a30b6e3d7cebb" - integrity sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w== - dependencies: - semver "^7.5.3" - sinon@^17.0.1: version "17.0.1" resolved "https://registry.yarnpkg.com/sinon/-/sinon-17.0.1.tgz#26b8ef719261bf8df43f925924cccc96748e407a" @@ -9669,7 +9619,7 @@ supports-color@^2.0.0: resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" integrity sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g== -supports-color@^5.3.0, supports-color@^5.5.0: +supports-color@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== @@ -9884,13 +9834,6 @@ toidentifier@1.0.1: resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== -touch@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/touch/-/touch-3.1.0.tgz#fe365f5f75ec9ed4e56825e0bb76d24ab74af83b" - integrity sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA== - dependencies: - nopt "~1.0.10" - tr46@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" @@ -10236,11 +10179,6 @@ uncrypto@^0.1.3: resolved "https://registry.yarnpkg.com/uncrypto/-/uncrypto-0.1.3.tgz#e1288d609226f2d02d8d69ee861fa20d8348ef2b" integrity sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q== -undefsafe@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-2.0.5.tgz#38733b9327bdcd226db889fb723a6efd162e6e2c" - integrity sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA== - undici-types@~5.26.4: version "5.26.5" resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" From 34b625495c8286b34455ad20fe766ab35b64745a Mon Sep 17 00:00:00 2001 From: Ryan Goree Date: Tue, 11 Feb 2025 20:11:59 -0600 Subject: [PATCH 017/146] Refactor and simplify SDK --- packages/council-js/src/entities/Entity.ts | 115 +++- packages/council-js/src/entities/ReadVote.ts | 44 -- packages/council-js/src/entities/ReadVoter.ts | 118 ---- .../src/entities/airdrop/ReadAirdrop.ts | 18 +- .../src/entities/airdrop/ReadWriteAirdrop.ts | 52 +- .../council-js/src/entities/airdrop/types.ts | 3 - .../src/entities/coreVoting/ReadCoreVoting.ts | 329 +++-------- .../coreVoting/ReadWriteCoreVoting.ts | 258 ++++----- .../src/entities/coreVoting/types.ts | 23 +- .../src/entities/council/ReadCouncil.ts | 73 +-- .../src/entities/council/ReadWriteCouncil.ts | 53 +- .../src/entities/proposal/ReadProposal.ts | 448 --------------- .../entities/proposal/ReadWriteProposal.ts | 109 ---- .../src/entities/token/ReadToken.ts | 17 +- packages/council-js/src/entities/token/abi.ts | 4 - .../entities/votingVault/ReadVotingVault.ts | 103 ++-- .../votingVault/gscVault/ReadGscVault.ts | 220 +++----- .../votingVault/gscVault/ReadWriteGscVault.ts | 139 ++--- .../entities/votingVault/gscVault/types.ts | 3 - .../lockingVault/ReadLockingVault.ts | 453 ++++++--------- .../lockingVault/ReadWriteLockingVault.ts | 136 ++--- .../votingVault/lockingVault/types.ts | 3 - .../src/entities/votingVault/types.ts | 17 +- .../vestingVault/ReadVestingVault.ts | 526 +++++++----------- .../vestingVault/ReadWriteVestingVault.ts | 83 ++- .../votingVault/vestingVault/types.ts | 15 +- packages/council-js/src/error.ts | 2 +- .../council-js/src/errors/BlockNotFound.ts | 8 - packages/council-js/src/index.ts | 51 ++ packages/council-js/src/utils/cachedFn.ts | 25 + .../src/utils/getEventsWithSplitAndRetry.ts | 104 ---- .../src/utils/getVaultsWithPower.ts | 21 - packages/council-js/src/utils/types.ts | 3 + 33 files changed, 1168 insertions(+), 2408 deletions(-) delete mode 100644 packages/council-js/src/entities/ReadVote.ts delete mode 100644 packages/council-js/src/entities/ReadVoter.ts delete mode 100644 packages/council-js/src/entities/airdrop/types.ts delete mode 100644 packages/council-js/src/entities/proposal/ReadProposal.ts delete mode 100644 packages/council-js/src/entities/proposal/ReadWriteProposal.ts delete mode 100644 packages/council-js/src/entities/token/abi.ts delete mode 100644 packages/council-js/src/entities/votingVault/gscVault/types.ts delete mode 100644 packages/council-js/src/entities/votingVault/lockingVault/types.ts delete mode 100644 packages/council-js/src/errors/BlockNotFound.ts create mode 100644 packages/council-js/src/utils/cachedFn.ts delete mode 100644 packages/council-js/src/utils/getEventsWithSplitAndRetry.ts delete mode 100644 packages/council-js/src/utils/getVaultsWithPower.ts create mode 100644 packages/council-js/src/utils/types.ts diff --git a/packages/council-js/src/entities/Entity.ts b/packages/council-js/src/entities/Entity.ts index 72e94932..c6c0bec1 100644 --- a/packages/council-js/src/entities/Entity.ts +++ b/packages/council-js/src/entities/Entity.ts @@ -2,14 +2,19 @@ import { Adapter, Address, ContractWriteOptions, - createDrift, Drift, - OneOf, OnMinedParam, + OneOf, SimpleCache, + createDrift, } from "@delvtech/drift"; +import { CouncilSdkError } from "src/error"; -// Base // +/** + * The maximum number of times to split a failed event request into smaller + * requests before giving up. + */ +const MAX_EVENT_SPLIT_RETRIES = 4; /** * Configuration options for an {@link Entity}. @@ -55,6 +60,110 @@ export class Entity { } }); } + + // Extend the drift instance to override the `getEvents` method with + // logic to split failed requests into multiple smaller requests. + this.drift.extend({ + async getEvents(params) { + let chunks = [params]; + let error = new CouncilSdkError( + `Unknown error fetching '${params.event}' events from ${params.address}`, + ); + let retries = 0; + + while (retries <= MAX_EVENT_SPLIT_RETRIES) { + let nextChunks: (typeof params)[] = []; + let nextError; + + const chunkedEvents = await Promise.all( + chunks.map(async (chunkParams) => { + let { fromBlock, toBlock } = chunkParams; + + // Check the cache for the chunk + const cacheKey = await this.cache.eventsKey(chunkParams); + if (await this.cache.has(cacheKey)) { + nextChunks.push(chunkParams); + // Casting as never causes this arm of the function to be + // ignored in the inferred return type. This is done to avoid + // having to rewrite the type signature of the `getEvents` + // method which has multiple type parameters. + return this.cache.get(cacheKey) as never; + } + + const chunk = await this.adapter + .getEvents(chunkParams) + // Split the request into 2 smaller requests if it throws an error + .catch(async (e) => { + nextError = new CouncilSdkError(e); + + // Check if the chunk is too small to split + if ( + toBlock === 0n || + toBlock === "earliest" || + fromBlock === toBlock || + // Implies the chunk starts at "finalized", "latest", "safe", or "pending" + (typeof fromBlock === "string" && fromBlock !== "earliest") + ) { + throw nextError; + } + + // Coerce fromBlock and toBlock to bigints to find the middle + if (typeof fromBlock !== "bigint") { + fromBlock = earliestBlock || 0n; + } + if (typeof toBlock !== "bigint") { + const block = await this.getBlock(); + if (!block?.number) { + throw nextError; + } + toBlock = block.number; + } + + // Check again if they're the same after coercion + if (fromBlock === toBlock) { + throw nextError; + } + + const middleBlock = fromBlock + (toBlock - fromBlock) / 2n; + nextChunks.push( + { + ...chunkParams, + fromBlock, + toBlock: middleBlock, + }, + { + ...chunkParams, + fromBlock: middleBlock + 1n, + toBlock, + }, + ); + }); + + if (chunk) { + this.cache.preloadEvents({ + ...chunkParams, + value: chunk, + }); + nextChunks.push(chunkParams); + return chunk; + } + + return []; + }), + ); + + if (!nextError) { + return chunkedEvents.flat(); + } + + chunks = nextChunks; + error = nextError; + retries++; + } + + throw error; + }, + }); } } diff --git a/packages/council-js/src/entities/ReadVote.ts b/packages/council-js/src/entities/ReadVote.ts deleted file mode 100644 index 61a5c634..00000000 --- a/packages/council-js/src/entities/ReadVote.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { Ballot } from "src/entities/coreVoting/types"; -import { Model, ReadModelOptions } from "src/entities/Model"; -import { ReadProposal } from "src/entities/proposal/ReadProposal"; -import { ReadVoter } from "src/entities/ReadVoter"; - -export interface ReadVoteOptions extends ReadModelOptions { - ballot: Ballot; - power: bigint; - proposal: ReadProposal; - voter: ReadVoter | `0x${string}`; -} - -/** - * @category Models - */ -export class ReadVote extends Model { - ballot: Ballot; - power: bigint; - proposal: ReadProposal; - voter: ReadVoter; - - constructor({ - name = "Vote", - ballot, - contractFactory, - network, - power, - proposal, - voter, - }: ReadVoteOptions) { - super({ contractFactory, network, name }); - this.ballot = ballot; - this.power = power; - this.proposal = proposal; - this.voter = - typeof voter === "string" - ? new ReadVoter({ - address: voter, - contractFactory, - network, - }) - : voter; - } -} diff --git a/packages/council-js/src/entities/ReadVoter.ts b/packages/council-js/src/entities/ReadVoter.ts deleted file mode 100644 index c364dbb2..00000000 --- a/packages/council-js/src/entities/ReadVoter.ts +++ /dev/null @@ -1,118 +0,0 @@ -import { ReadCoreVoting } from "src/entities/coreVoting/ReadCoreVoting"; -import { Model, ReadModelOptions } from "src/entities/Model"; -import { ReadVote } from "src/entities/ReadVote"; -import { ReadVotingVault } from "src/entities/votingVault/ReadVotingVault"; -import { BlockLike } from "src/utils/blockToReadOptions"; - -export interface ReadVoterOptions extends ReadModelOptions { - address: `0x${string}`; -} - -/** - * A participant in Council - * @category Models - */ -export class ReadVoter extends Model { - address: `0x${string}`; - - constructor({ address, name = `Voter`, ...rest }: ReadVoterOptions) { - super({ - name, - ...rest, - }); - this.address = address; - } - - /** - * Get the total voting power for this Voter from a given list of vaults. - * @param extraData - ABI encoded optional extra data used by some vaults, such - * as merkle proofs. - */ - async getVotingPower({ - vaults, - atBlock, - extraData, - }: { - vaults: (ReadVotingVault | `0x${string}`)[]; - atBlock?: BlockLike; - extraData?: `0x${string}`[]; - }): Promise { - const vaultPowers = vaults.map((vault, i) => { - if (typeof vault === "string") { - vault = new ReadVotingVault({ - address: vault, - contractFactory: this.contractFactory, - network: this.network, - }); - } - return vault.getVotingPower({ - account: this.address, - atBlock, - extraData: extraData?.[i], - }); - }); - return (await Promise.all(vaultPowers)).reduce((sum, val) => sum + val, 0n); - } - - /** - * Get the casted votes for this Voter in a given Voting Contract - */ - async getVotes({ - coreVoting, - proposalId, - fromBlock, - toBlock, - }: { - coreVoting: ReadCoreVoting | `0x${string}`; - proposalId?: bigint; - fromBlock?: BlockLike; - toBlock?: BlockLike; - }): Promise { - const _coreVoting = - typeof coreVoting === "string" - ? new ReadCoreVoting({ - address: coreVoting, - contractFactory: this.contractFactory, - network: this.network, - }) - : coreVoting; - return _coreVoting.getVotes({ - proposalId, - account: this, - fromBlock, - toBlock, - }); - } - - /** - * Get the number of proposals this Voter has voted on and the number of - * proposals that they were able to vote on. If the numbers are the same, then - * this Voter has voted on every proposal they were able to. - */ - async getParticipation({ - coreVoting, - vaults, - fromBlock, - toBlock, - }: { - coreVoting: ReadCoreVoting | `0x${string}`; - vaults: (ReadVotingVault | `0x${string}`)[]; - fromBlock?: BlockLike; - toBlock?: BlockLike; - }): Promise<[number, number]> { - const _coreVoting = - typeof coreVoting === "string" - ? new ReadCoreVoting({ - address: coreVoting, - contractFactory: this.contractFactory, - network: this.network, - vaults, - }) - : coreVoting; - return _coreVoting.getParticipation({ - account: this, - fromBlock, - toBlock, - }); - } -} diff --git a/packages/council-js/src/entities/airdrop/ReadAirdrop.ts b/packages/council-js/src/entities/airdrop/ReadAirdrop.ts index d0fe0ff4..821daa90 100644 --- a/packages/council-js/src/entities/airdrop/ReadAirdrop.ts +++ b/packages/council-js/src/entities/airdrop/ReadAirdrop.ts @@ -1,22 +1,21 @@ -import { Airdrop as AirdropArtifact } from "@delvtech/council-artifacts/Airdrop"; +import { Airdrop } from "@delvtech/council-artifacts/Airdrop"; import { Adapter, Address, Contract, ContractReadOptions, } from "@delvtech/drift"; -import { AirdropAbi } from "src/entities/airdrop/types"; import { ContractEntityConfig, Entity } from "src/entities/Entity"; import { ReadToken } from "src/entities/token/ReadToken"; import { ReadLockingVault } from "src/entities/votingVault/lockingVault/ReadLockingVault"; export class ReadAirdrop extends Entity { - contract: Contract; + contract: Contract; constructor({ address, ...config }: ContractEntityConfig) { super(config); this.contract = this.drift.contract({ - abi: AirdropArtifact.abi, + abi: Airdrop.abi, address, }); } @@ -53,13 +52,10 @@ export class ReadAirdrop extends Entity { /** * Get the amount that an address has already claimed. */ - async getClaimedAmount({ - account, - options, - }: { - account: Address; - options?: ContractReadOptions; - }): Promise { + async getClaimedAmount( + account: Address, + options?: ContractReadOptions, + ): Promise { return await this.contract.read("claimed", [account], options); } diff --git a/packages/council-js/src/entities/airdrop/ReadWriteAirdrop.ts b/packages/council-js/src/entities/airdrop/ReadWriteAirdrop.ts index a3b8679d..6fed5863 100644 --- a/packages/council-js/src/entities/airdrop/ReadWriteAirdrop.ts +++ b/packages/council-js/src/entities/airdrop/ReadWriteAirdrop.ts @@ -23,21 +23,29 @@ export class ReadWriteAirdrop< /** * Claims tokens from the airdrop and sends them to the user. - * @param amount - Amount of tokens to claim. - * @param totalGrant - The total amount of tokens the user was granted. - * @param merkleProof - A set of hashes that can be used to reconstruct the - * path from a user (leaf) node to the merkle root, verifying that the user is - * part of the tree. - * @param destination - The address which will be credited with funds. * @return - The transaction hash. */ claim({ args: { amount, totalGrant, merkleProof, recipient: destination }, options, }: EntityWriteParams<{ + /** + * Amount of tokens to claim. + */ amount: bigint; + /** + * The total amount of tokens the user was granted. + */ totalGrant: bigint; + /** + * A set of hashes that can be used to reconstruct the path from a user + * (leaf) node to the merkle root, verifying that the user is part of the + * tree. + */ merkleProof: Hash[]; + /** + * The address which will be credited with funds. + */ recipient: Address; }>): Promise { return this.contract.write( @@ -71,23 +79,33 @@ export class ReadWriteAirdrop< /** * Claims tokens from the airdrop, deposits it into the locking vault, and * delegates in a single transaction. - * @param amount - Amount of tokens to claim. - * @param delegate - The address the user will delegate to, WARNING - should not be zero. - * @param totalGrant - The total amount of tokens the user was granted. - * @param merkleProof - A set of hashes that can be used to reconstruct the - * path from a user (leaf) node to the merkle root, verifying that the user is - * part of the tree. - * @param destination - The address which will be credited with funds. * @return - The transaction hash. */ claimAndDelegate({ args: { amount, delegate, totalGrant, merkleProof, destination }, options, }: EntityWriteParams<{ + /** + * Amount of tokens to claim. + */ amount: bigint; + /** + * The address the user will delegate to, WARNING - should not be zero. + */ delegate: Address; + /** + * The total amount of tokens the user was granted. + */ totalGrant: bigint; + /** + * A set of hashes that can be used to reconstruct the path from a user + * (leaf) node to the merkle root, verifying that the user is part of the + * tree. + */ merkleProof: Hash[]; + /** + * The address which will be credited with funds. + */ destination: Address; }>): Promise { return this.contract.write( @@ -101,7 +119,9 @@ export class ReadWriteAirdrop< }, { onMined: async (receipt) => { - if (receipt?.status === "success") this.contract.cache.clear(); + if (receipt?.status === "success") { + this.contract.cache.clear(); + } options?.onMined?.(receipt); }, }, @@ -110,13 +130,15 @@ export class ReadWriteAirdrop< /** * Remove funds from the airdrop after expiration - * @param destination - The address which will be credited with funds. * @return - The transaction hash. */ async reclaim({ args: { destination }, options, }: EntityWriteParams<{ + /** + * The address which will be credited with funds. + */ destination: Address; }>): Promise { const hash = await this.contract.write( diff --git a/packages/council-js/src/entities/airdrop/types.ts b/packages/council-js/src/entities/airdrop/types.ts deleted file mode 100644 index 3b9ab527..00000000 --- a/packages/council-js/src/entities/airdrop/types.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { Airdrop } from "@delvtech/council-artifacts/Airdrop"; - -export type AirdropAbi = typeof Airdrop.abi; diff --git a/packages/council-js/src/entities/coreVoting/ReadCoreVoting.ts b/packages/council-js/src/entities/coreVoting/ReadCoreVoting.ts index af639bc1..b82514a5 100644 --- a/packages/council-js/src/entities/coreVoting/ReadCoreVoting.ts +++ b/packages/council-js/src/entities/coreVoting/ReadCoreVoting.ts @@ -1,309 +1,138 @@ import { CoreVoting } from "@delvtech/council-artifacts/CoreVoting"; -import { CachedReadContract } from "@delvtech/evm-client"; -import { Model, ReadContractModelOptions } from "src/entities/Model"; -import { ReadVote } from "src/entities/ReadVote"; -import { ReadVoter } from "src/entities/ReadVoter"; +import { + Adapter, + Address, + Contract, + ContractReadOptions, +} from "@delvtech/drift"; +import { ContractEntityConfig, Entity } from "src/entities/Entity"; import { BALLOTS, EXECUTED_PROPOSAL_HASH, } from "src/entities/coreVoting/constants"; -import { CoreVotingAbi } from "src/entities/coreVoting/types"; -import { ReadProposal } from "src/entities/proposal/ReadProposal"; -import { ReadVotingVault } from "src/entities/votingVault/ReadVotingVault"; -import { BlockLike } from "src/utils/blockToReadOptions"; - -/** - * @category Models - */ -export interface ReadCoreVotingOptions extends ReadContractModelOptions { - vaults?: (ReadVotingVault | `0x${string}`)[]; -} +import { Proposal, ProposalArgs, Vote } from "src/entities/coreVoting/types"; +import { Blockish } from "src/utils/types"; -/** - * @category Models - */ -export class ReadCoreVoting extends Model { - contract: CachedReadContract; - vaults: ReadVotingVault[]; +export class ReadCoreVoting extends Entity { + readonly address: Address; + readonly contract: Contract; - /** - * Create a new CoreVoting model instance. - * @param address - The address of the deployed contract. - * @param vaults - The VotingVault instances or addresses of the vaults that are - * approved for this voting contract. - */ - constructor({ - name = "Core Voting", - address, - contractFactory, - network, - cache, - namespace, - vaults = [], - }: ReadCoreVotingOptions) { - super({ contractFactory, network, name }); - - this.contract = contractFactory({ + constructor({ address, ...config }: ContractEntityConfig) { + super(config); + this.address = address; + this.contract = this.drift.contract({ abi: CoreVoting.abi, address, - cache, - namespace, }); - - this.vaults = vaults.map((vault) => - vault instanceof ReadVotingVault - ? vault - : new ReadVotingVault({ - address: vault, - contractFactory, - network, - }), - ); - } - - get address(): `0x${string}` { - return this.contract.address; - } - get namespace(): string | undefined { - return this.contract.namespace; } /** * Get a proposal by id. */ - async getProposal({ id }: { id: bigint }): Promise { - const proposalInfo = await this._getProposalInfo({ id }); - if (proposalInfo) { - return new ReadProposal({ - ...proposalInfo, - coreVoting: this, - contractFactory: this.contractFactory, - network: this.network, - }); + async getProposal( + proposalId: bigint, + options?: ContractReadOptions, + ): Promise { + const { created, expiration, lastCall, proposalHash, quorum, unlock } = + await this.contract.read("proposals", [proposalId], options); + if (proposalHash !== EXECUTED_PROPOSAL_HASH) { + return { + proposalId, + createdBlock: created, + expirationBlock: expiration, + lastCallBlock: lastCall, + proposalHash, + requiredQuorum: quorum, + unlockBlock: unlock, + }; } } /** - * Get all proposals ever created. - * @param fromBlock - Include all proposals created on or after this block number. - * @param toBlock - Include all proposals created on or before this block number. + * Get proposal creation events. */ - async getProposals({ - fromBlock, - toBlock, - }: { - fromBlock?: BlockLike; - toBlock?: BlockLike; - } = {}): Promise { - const createdEvents = await this.contract.getEvents("ProposalCreated", { - fromBlock, - toBlock, - }); - return createdEvents.map( - ({ args: { proposalId, created, execution, expiration } }) => - new ReadProposal({ - contractFactory: this.contractFactory, - coreVoting: this, - created, - expiration, - id: proposalId, - unlock: execution, - network: this.network, - }), + async getProposals( + options: { + fromBlock?: Blockish; + toBlock?: Blockish; + } = {}, + ): Promise { + const createdEvents = await this.contract.getEvents( + "ProposalCreated", + options, ); - } - - /** - * Get the voting power owned by a given address in all vaults. - * @param extraData - ABI encoded optional extra data used by some vaults, such - * as merkle proofs. - */ - async getVotingPower({ - account, - atBlock, - extraData, - }: { - account: ReadVoter | `0x${string}`; - atBlock?: BlockLike; - extraData?: `0x${string}`[]; - }): Promise { - const vaultPowers = await Promise.all( - this.vaults.map((vault, i) => - vault.getVotingPower({ - account: account, - atBlock, - extraData: extraData?.[i], - }), - ), + return createdEvents.map( + ({ args: { proposalId, created, execution, expiration } }) => { + return { + proposalId, + createdBlock: created, + expirationBlock: expiration, + unlockBlock: execution, + }; + }, ); - return vaultPowers.reduce((sum, power) => sum + power, 0n); } /** * Get a casted vote for a given address on a given proposal id. */ async getVote({ - account, + voter, proposalId, }: { - account: ReadVoter | `0x${string}`; + voter: Address; proposalId: bigint; - }): Promise { - const { castBallot, votingPower } = await this.contract.read("votes", { - "0": account instanceof ReadVoter ? account.address : account, - "1": proposalId, - }); + }): Promise { + const { castBallot, votingPower } = await this.contract.read("votes", [ + voter, + proposalId, + ]); if (votingPower === 0n) { return; } - return new ReadVote({ + return { + proposalId, ballot: BALLOTS[castBallot], - contractFactory: this.contractFactory, - network: this.network, - power: votingPower, - proposal: (await this.getProposal({ id: proposalId }))!, - voter: account, - }); + votingPower, + voter, + }; } /** * Get all casted votes on proposals in this voting contract. - * @param fromBlock - The starting block number for the range of blocks fetched. - * @param toBlock - The ending block number for the range of blocks fetched. */ async getVotes({ proposalId, - account, + voter, fromBlock, toBlock, }: { proposalId?: bigint; - account?: ReadVoter | `0x${string}`; - fromBlock?: BlockLike; - toBlock?: BlockLike; - } = {}): Promise { + voter?: Address; + fromBlock?: Blockish; + toBlock?: Blockish; + }): Promise { const voteEvents = await this.contract.getEvents("Voted", { - filter: { - voter: - typeof account === "string" || !account ? account : account.address, - proposalId, - }, + filter: { proposalId, voter }, fromBlock, toBlock, }); - - const votes: ReadVote[] = []; - - for (const { - args: { + return voteEvents.map(({ args: { proposalId, vote, voter } }) => { + return { proposalId, - vote: { castBallot, votingPower }, + ballot: BALLOTS[vote.castBallot], + votingPower: vote.votingPower, voter, - }, - } of voteEvents) { - const proposal = await this.getProposal({ id: proposalId }); - if (!proposal) { - throw new Error( - `Vote event for proposal ${proposalId} from voter ${voter} references a non-existent proposal.`, - ); - } - votes.push( - new ReadVote({ - ballot: BALLOTS[castBallot], - contractFactory: this.contractFactory, - network: this.network, - power: votingPower, - proposal, - voter, - }), - ); - } - - return votes; - } - - /** - * Get the number of proposals an address has voted on and the number of - * proposals that they were able to vote on. If the numbers are the same, then - * the address has voted on every proposal they were able to. - */ - async getParticipation({ - account, - fromBlock, - toBlock, - }: { - account: ReadVoter | `0x${string}`; - fromBlock?: BlockLike; - toBlock?: BlockLike; - }): Promise<[number, number]> { - const votes = await this.getVotes({ - account: account, - fromBlock, - toBlock, + }; }); - const votedProposalIds = votes.map(({ proposal: { id } }) => id); - const proposals = await this.getProposals(); - const proposalsNotVoted = await Promise.all( - proposals - .filter(({ id }) => !votedProposalIds.includes(id)) - .map( - async (proposal) => - // could be null if the proposal has been deleted and the created - // block can't be fetched. - ((await proposal.getVotingPower({ account: account })) || 0n) > 0n, - ), - ); - const missedVotesCount = proposalsNotVoted.filter(Boolean).length; - return [proposals.length - missedVotesCount, proposals.length]; } - /** - * Get a proposal by id. - */ - protected async _getProposalInfo({ id }: { id: bigint }): Promise< - | { - id: bigint; - created: bigint; - expiration: bigint; - lastCall?: bigint; - proposalHash?: `0x${string}`; - requiredQuorum?: bigint; - unlock?: bigint; - } - | undefined - > { - const { created, expiration, lastCall, proposalHash, quorum, unlock } = - await this.contract.read("proposals", { 0: id }); - - if (proposalHash !== EXECUTED_PROPOSAL_HASH) { - return { - id, - created, - expiration, - lastCall, - proposalHash, - requiredQuorum: quorum, - unlock, - }; - } - - const createdEvents = await this.contract.getEvents("ProposalCreated"); - const createdEvent = createdEvents.find( - ({ args: { proposalId } }) => proposalId === id, - ); - - if (createdEvent) { - const { - args: { created, execution, expiration }, - } = createdEvent; - return { - id, - created, - expiration, - unlock: execution, - }; - } + getIsVaultApproved( + vault: Address, + options?: ContractReadOptions, + ): Promise { + return this.contract.read("approvedVaults", [vault], options); } } diff --git a/packages/council-js/src/entities/coreVoting/ReadWriteCoreVoting.ts b/packages/council-js/src/entities/coreVoting/ReadWriteCoreVoting.ts index cb7290bb..38360348 100644 --- a/packages/council-js/src/entities/coreVoting/ReadWriteCoreVoting.ts +++ b/packages/council-js/src/entities/coreVoting/ReadWriteCoreVoting.ts @@ -1,207 +1,161 @@ -import { - CachedReadWriteContract, - ContractWriteOptions, -} from "@delvtech/evm-client"; -import { ReadWriteContractFactory } from "src/contract/factory"; +import { Address, Bytes, Hash, ReadWriteAdapter } from "@delvtech/drift"; import { BALLOTS } from "src/entities/coreVoting/constants"; import { ReadCoreVoting } from "src/entities/coreVoting/ReadCoreVoting"; -import { Ballot, CoreVotingAbi } from "src/entities/coreVoting/types"; -import { ReadWriteContractModelOptions } from "src/entities/Model"; -import { ReadWriteProposal } from "src/entities/proposal/ReadWriteProposal"; -import { ReadVotingVault } from "src/entities/votingVault/ReadVotingVault"; -import { BlockLike } from "src/utils/blockToReadOptions"; - -export interface ReadWriteCoreVotingOptions - extends ReadWriteContractModelOptions { - vaults?: (ReadVotingVault | `0x${string}`)[]; -} +import { Ballot } from "src/entities/coreVoting/types"; +import { EntityWriteParams } from "src/entities/Entity"; export class ReadWriteCoreVoting< - TVaults extends ReadVotingVault[] = ReadVotingVault[], -> extends ReadCoreVoting { - declare contract: CachedReadWriteContract; - declare contractFactory: ReadWriteContractFactory; - - constructor(options: ReadWriteCoreVotingOptions) { - super(options); - } - - override async getProposal({ - id, - }: { - id: bigint; - }): Promise { - const proposalInfo = await this._getProposalInfo({ id }); - if (proposalInfo) { - return new ReadWriteProposal({ - ...proposalInfo, - coreVoting: this, - contractFactory: this.contractFactory, - network: this.network, - }); - } - } - - override async getProposals({ - fromBlock, - toBlock, - }: { - fromBlock?: BlockLike; - toBlock?: BlockLike; - } = {}): Promise { - const createdEvents = await this.contract.getEvents("ProposalCreated", { - fromBlock, - toBlock, - }); - return createdEvents.map( - ({ args: { proposalId, created, execution, expiration } }) => - new ReadWriteProposal({ - contractFactory: this.contractFactory, - coreVoting: this, - created, - expiration, - id: proposalId, - unlock: execution, - network: this.network, - }), - ); - } - + A extends ReadWriteAdapter = ReadWriteAdapter, +> extends ReadCoreVoting { /** * Create a new proposal. - * @param vaults - The addresses of the approved vaults to draw voting power - * from. - * @param targets - The targets (contract addresses) to call. - * @param calldatas - The execution calldata for each target. - * @param lastCall - The block number after which the proposal can't be executed. - * @param ballot: The initial vote from the signer's account. * @returns The transaction hash. */ - async createProposal({ - ballot, - calldatas, - lastCall, - targets, - vaults, - extraVaultData = [], + createProposal({ + args: { + targets, + calldatas, + lastCallBlock, + ballot, + votingVaults, + extraVaultData = [], + }, options, - }: { - vaults: (ReadVotingVault | `0x${string}`)[]; - targets: `0x${string}`[]; - calldatas: `0x${string}`[]; - lastCall: bigint; + }: EntityWriteParams<{ + /** + * The addresses of the approved vaults to draw voting power from. + */ + votingVaults: Address[]; + /** + * The targets (contract addresses) to call. + */ + targets: Address[]; + /** + * The execution calldata for each target. + */ + calldatas: Bytes[]; + /** + * The block number after which the proposal can't be executed. + */ + lastCallBlock: bigint; + /** + * The initial vote from the signer's account. + */ ballot: Ballot; /** * Extra data given to the vaults to help calculation */ - extraVaultData?: `0x${string}`[]; - options?: ContractWriteOptions; - }): Promise<`0x${string}`> { - const vaultAddresses = vaults.map((vault) => - typeof vault === "string" ? vault : vault.address, - ); - const hash = await this.contract.write( + extraVaultData?: Bytes[]; + }>): Promise { + return this.contract.write( "proposal", { ballot: BALLOTS.indexOf(ballot), calldatas, extraVaultData, - lastCall, + lastCall: lastCallBlock, targets, - votingVaults: vaultAddresses, + votingVaults: votingVaults, + }, + { + ...options, + onMined: async (receipt) => { + if (receipt?.status === "success") { + await this.contract.cache.clear(); + } + options?.onMined?.(receipt); + }, }, - options, ); - this.contract.clearCache(); - return hash; } /** * Change the number of blocks that must be waited before a proposal can be executed. - * @param blocks - The number of blocks that must be waited. * @returns The transaction hash. */ - async setLockDuration({ - blocks, + setLockDuration({ + args: { + /** + * The number of blocks that must be waited. + */ + blocks, + }, options, - }: { + }: EntityWriteParams<{ blocks: bigint; - options?: ContractWriteOptions; - }): Promise<`0x${string}`> { - const hash = await this.contract.write( + }>): Promise { + return this.contract.write( "setLockDuration", { _lockDuration: blocks }, - options, + { + ...options, + onMined: async (receipt) => { + if (receipt?.status === "success") { + await this.contract.cache.clear(); + } + options?.onMined?.(receipt); + }, + }, ); - this.contract.deleteRead("lockDuration"); - return hash; } /** * Change whether a vault is approved or not. - * @param address -The address of the vault. - * @param isValid - Whether or not the approved. * @returns The transaction hash. */ - async changeVaultStatus({ - vault: _vault, - isValid, + changeVaultStatus({ + args, options, - }: { - vault: ReadVotingVault | `0x${string}`; + }: EntityWriteParams<{ + /** + * The address of the vault. + */ + vault: Address; + /** + * Whether or not the approved. + */ isValid: boolean; - options?: ContractWriteOptions; - }): Promise<`0x${string}`> { - const vault = - _vault instanceof ReadVotingVault - ? _vault - : new ReadVotingVault({ - address: _vault, - contractFactory: this.contractFactory, - network: this.network, - }); - - const hash = await this.contract.write( - "changeVaultStatus", - { - isValid, - vault: vault.address, + }>): Promise { + return this.contract.write("changeVaultStatus", args, { + ...options, + onMined: async (receipt) => { + if (receipt?.status === "success") { + await this.contract.invalidateRead("approvedVaults", [args.vault]); + } + options?.onMined?.(receipt); }, - options, - ); - - if (isValid) { - this.vaults.push(vault); - } else { - this.vaults = this.vaults.filter( - ({ address }) => address !== vault.address, - ) as TVaults; - } - - this.contract.deleteRead("approvedVaults", { 0: vault.address }); - return hash; + }); } /** * Change the amount of time (in blocks) that a proposal can still be voted on * after it's been unlocked. - * @param extraVoteBlocks - The number of blocks after the proposal is - * unlocked during which voting can continue. * @returns The transaction hash. */ - async changeExtraVotingTime({ - extraVoteBlocks, + changeExtraVotingTime({ + args: { + /** + * The number of blocks after the proposal is unlocked during which voting + * can continue. + */ + extraVoteBlocks, + }, options, - }: { + }: EntityWriteParams<{ extraVoteBlocks: bigint; - options?: ContractWriteOptions; - }): Promise<`0x${string}`> { - const hash = await this.contract.write( + }>): Promise { + return this.contract.write( "changeExtraVotingTime", { _extraVoteTime: extraVoteBlocks }, - options, + { + ...options, + onMined: async (receipt) => { + if (receipt?.status === "success") { + await this.contract.invalidateRead("extraVoteTime"); + } + options?.onMined?.(receipt); + }, + }, ); - this.contract.deleteRead("extraVoteTime"); - return hash; } } diff --git a/packages/council-js/src/entities/coreVoting/types.ts b/packages/council-js/src/entities/coreVoting/types.ts index 724f6b1f..d8d0d315 100644 --- a/packages/council-js/src/entities/coreVoting/types.ts +++ b/packages/council-js/src/entities/coreVoting/types.ts @@ -1,8 +1,5 @@ -import { CoreVoting } from "@delvtech/council-artifacts/CoreVoting"; import { BALLOTS } from "src/entities/coreVoting/constants"; -export type CoreVotingAbi = typeof CoreVoting.abi; - /** * A valid ballot option. * @category Data Sources @@ -22,3 +19,23 @@ export interface Actions { targets: `0x${string}`[] | readonly `0x${string}`[]; calldatas: `0x${string}`[] | readonly `0x${string}`[]; } + +export interface ProposalArgs { + proposalId: bigint; + createdBlock: bigint; + unlockBlock: bigint; + expirationBlock: bigint; +} + +export interface Proposal extends ProposalArgs { + proposalHash: `0x${string}`; + requiredQuorum: bigint; + lastCallBlock: bigint; +} + +export interface Vote { + proposalId: bigint; + ballot: Ballot; + votingPower: bigint; + voter: `0x${string}`; +} diff --git a/packages/council-js/src/entities/council/ReadCouncil.ts b/packages/council-js/src/entities/council/ReadCouncil.ts index 0b6c1f04..e3503f1f 100644 --- a/packages/council-js/src/entities/council/ReadCouncil.ts +++ b/packages/council-js/src/entities/council/ReadCouncil.ts @@ -1,99 +1,60 @@ -import { Network } from "@delvtech/evm-client"; -import { ReadContractFactory } from "src/contract/factory"; +import { Adapter, Address } from "@delvtech/drift"; import { ReadAirdrop } from "src/entities/airdrop/ReadAirdrop"; import { ReadCoreVoting } from "src/entities/coreVoting/ReadCoreVoting"; -import { Model, ReadModelOptions } from "src/entities/Model"; -import { ReadVoter } from "src/entities/ReadVoter"; +import { Entity } from "src/entities/Entity"; import { ReadToken } from "src/entities/token/ReadToken"; import { ReadGscVault } from "src/entities/votingVault/gscVault/ReadGscVault"; import { ReadLockingVault } from "src/entities/votingVault/lockingVault/ReadLockingVault"; import { ReadVotingVault } from "src/entities/votingVault/ReadVotingVault"; import { ReadVestingVault } from "src/entities/votingVault/vestingVault/ReadVestingVault"; -export interface ReadCouncilOptions extends ReadModelOptions {} - -export class ReadCouncil extends Model { - protected _contractFactory: ReadContractFactory; - protected _network: Network; - - constructor({ - name = "Council", - contractFactory, - network, - }: ReadCouncilOptions) { - super({ contractFactory, network, name }); - this._contractFactory = contractFactory; - this._network = network; - } - - coreVoting({ - address, - vaults, - }: { - address: `0x${string}`; - vaults?: (ReadVotingVault | `0x${string}`)[]; - }): ReadCoreVoting { +export class ReadCouncil extends Entity { + coreVoting(address: Address) { return new ReadCoreVoting({ address, - contractFactory: this._contractFactory, - network: this._network, - vaults, - }); - } - - voter(address: `0x${string}`): ReadVoter { - return new ReadVoter({ - address, - contractFactory: this._contractFactory, - network: this._network, + drift: this.drift, }); } - votingVault(address: `0x${string}`): ReadVotingVault { + votingVault(address: Address) { return new ReadVotingVault({ address, - contractFactory: this._contractFactory, - network: this._network, + drift: this.drift, }); } - lockingVault(address: `0x${string}`): ReadLockingVault { + lockingVault(address: Address) { return new ReadLockingVault({ address, - contractFactory: this._contractFactory, - network: this._network, + drift: this.drift, }); } - vestingVault(address: `0x${string}`): ReadVestingVault { + vestingVault(address: Address) { return new ReadVestingVault({ address, - contractFactory: this._contractFactory, - network: this._network, + drift: this.drift, }); } - gscVault(address: `0x${string}`): ReadGscVault { + gscVault(address: Address) { return new ReadGscVault({ address, - contractFactory: this._contractFactory, - network: this._network, + drift: this.drift, }); } - airdrop(address: `0x${string}`): ReadAirdrop { + airdrop(address: Address) { return new ReadAirdrop({ address, - contractFactory: this._contractFactory, - network: this._network, + drift: this.drift, }); } - token(address: `0x${string}`): ReadToken { + token(address: Address) { return new ReadToken({ address, - contractFactory: this._contractFactory, - network: this._network, + drift: this.drift, }); } } diff --git a/packages/council-js/src/entities/council/ReadWriteCouncil.ts b/packages/council-js/src/entities/council/ReadWriteCouncil.ts index 27ad2dae..9f86cb47 100644 --- a/packages/council-js/src/entities/council/ReadWriteCouncil.ts +++ b/packages/council-js/src/entities/council/ReadWriteCouncil.ts @@ -1,75 +1,54 @@ -import { ReadWriteContractFactory } from "src/contract/factory"; -import { ReadWriteModelOptions } from "src/entities/Model"; +import { Address, ReadWriteAdapter } from "@delvtech/drift"; import { ReadWriteAirdrop } from "src/entities/airdrop/ReadWriteAirdrop"; import { ReadWriteCoreVoting } from "src/entities/coreVoting/ReadWriteCoreVoting"; import { ReadCouncil } from "src/entities/council/ReadCouncil"; import { ReadWriteToken } from "src/entities/token/ReadWriteToken"; -import { ReadVotingVault } from "src/entities/votingVault/ReadVotingVault"; import { ReadWriteGscVault } from "src/entities/votingVault/gscVault/ReadWriteGscVault"; import { ReadWriteLockingVault } from "src/entities/votingVault/lockingVault/ReadWriteLockingVault"; import { ReadWriteVestingVault } from "src/entities/votingVault/vestingVault/ReadWriteVestingVault"; -export interface ReadWriteCouncilOptions extends ReadWriteModelOptions {} - -export class ReadWriteCouncil extends ReadCouncil { - protected declare _contractFactory: ReadWriteContractFactory; - - constructor(options: ReadWriteCouncilOptions) { - super(options); - } - - coreVoting({ - address, - vaults, - }: { - address: `0x${string}`; - vaults?: (ReadVotingVault | `0x${string}`)[]; - }): ReadWriteCoreVoting { +export class ReadWriteCouncil< + A extends ReadWriteAdapter = ReadWriteAdapter, +> extends ReadCouncil { + coreVoting(address: Address) { return new ReadWriteCoreVoting({ address, - contractFactory: this._contractFactory, - network: this._network, - vaults, + drift: this.drift, }); } - lockingVault(address: `0x${string}`): ReadWriteLockingVault { + lockingVault(address: Address) { return new ReadWriteLockingVault({ address, - contractFactory: this._contractFactory, - network: this._network, + drift: this.drift, }); } - vestingVault(address: `0x${string}`): ReadWriteVestingVault { + vestingVault(address: Address) { return new ReadWriteVestingVault({ address, - contractFactory: this._contractFactory, - network: this._network, + drift: this.drift, }); } - gscVault(address: `0x${string}`): ReadWriteGscVault { + gscVault(address: Address) { return new ReadWriteGscVault({ address, - contractFactory: this._contractFactory, - network: this._network, + drift: this.drift, }); } - airdrop(address: `0x${string}`): ReadWriteAirdrop { + airdrop(address: Address) { return new ReadWriteAirdrop({ address, - contractFactory: this._contractFactory, - network: this._network, + drift: this.drift, }); } - token(address: `0x${string}`): ReadWriteToken { + token(address: Address) { return new ReadWriteToken({ address, - contractFactory: this._contractFactory, - network: this._network, + drift: this.drift, }); } } diff --git a/packages/council-js/src/entities/proposal/ReadProposal.ts b/packages/council-js/src/entities/proposal/ReadProposal.ts deleted file mode 100644 index bc219acf..00000000 --- a/packages/council-js/src/entities/proposal/ReadProposal.ts +++ /dev/null @@ -1,448 +0,0 @@ -import { CoreVoting } from "@delvtech/council-artifacts/CoreVoting"; -import { ContractReadOptions, Event, Transaction } from "@delvtech/evm-client"; -import { Model, ReadModelOptions } from "src/entities/Model"; -import { ReadVote } from "src/entities/ReadVote"; -import { ReadVoter } from "src/entities/ReadVoter"; -import { ReadCoreVoting } from "src/entities/coreVoting/ReadCoreVoting"; -import { Actions, Ballot, VoteResults } from "src/entities/coreVoting/types"; -import { BlockLike } from "src/utils/blockToReadOptions"; - -export interface BaseProposalOptions { - id: bigint; - coreVoting: ReadCoreVoting | `0x${string}`; - /** - * The block number of when this proposal was created. - */ - created: bigint; - expiration: bigint; - lastCall?: bigint; - proposalHash?: `0x${string}`; - requiredQuorum?: bigint; - unlock?: bigint; -} - -export interface ReadProposalOptions - extends BaseProposalOptions, - ReadModelOptions {} - -/** - * A model of a Proposal in Council - * @category Models - */ -export class ReadProposal extends Model { - id: bigint; - coreVoting: ReadCoreVoting; - created: bigint; - expiration: bigint; - - private _lastCall?: bigint; - private _proposalHash?: `0x${string}`; - private _requiredQuorum?: bigint; - private _unlock?: bigint; - private _allDataFetched = false; - - /** - * Create a new Proposal model instance. - * @param id - The id of the proposal in the voting contract. - * @param votingContract - the voting contract in which this proposal was - * created. - */ - constructor({ - name = "Proposal", - id, - coreVoting, - contractFactory, - network, - created, - expiration, - lastCall, - proposalHash, - requiredQuorum, - unlock, - }: ReadProposalOptions) { - super({ contractFactory, network, name }); - this.id = id; - this.coreVoting = - coreVoting instanceof ReadCoreVoting - ? coreVoting - : new ReadCoreVoting({ - address: coreVoting, - contractFactory, - network, - }); - this.created = created; - this.expiration = expiration; - this._lastCall = lastCall; - this._proposalHash = proposalHash; - this._requiredQuorum = requiredQuorum; - this._unlock = unlock; - } - - /** - * Get the array of addresses that will be called (targets) and the data - * they'll be called with (calldatas) by a proposal. - */ - async getTargetsAndCalldatas(): Promise { - const createdTransaction = await this.getCreatedTransaction(); - if (createdTransaction) { - const { - args: { targets, calldatas }, - } = this.coreVoting.contract.decodeFunctionData<"proposal">( - createdTransaction.input, - ); - return { - targets, - calldatas, - }; - } - } - - /** - * Get the hash of this proposal, used by its voting contract to verify the - * proposal data on execution. Not available on executed proposals. - */ - async getHash(): Promise<`0x${string}` | undefined> { - const data = await this._getData(); - return data?._proposalHash; - } - - /** - * Get the required quorum for this proposal to be executed. If the sum of - * voting power from all casted votes does not meet or exceed this number, - * then the proposal is not passing quorum. Not available on executed - * proposals. - */ - async getRequiredQuorum(): Promise { - const data = await this._getData(); - return data?._requiredQuorum; - } - - /** - * Get the block number of when this proposal can be executed. Will only be - * null if this proposal instance was initiated with an invalid id. - */ - async getUnlockBlock(): Promise { - const data = await this._getData(); - return data?._unlock; - } - - async getCreatedBy(): Promise { - const createdTransaction = await this.getCreatedTransaction(); - return ( - createdTransaction?.from && - new ReadVoter({ - address: createdTransaction.from, - contractFactory: this.contractFactory, - network: this.network, - }) - ); - } - - /** - * Get the hash of the transaction that created the proposal, or null if - * the Proposal doesn't exist. - * @returns The transaction hash - */ - async getCreatedTransaction(): Promise { - const createdEvent = await this._getCreatedEvent(); - const transaction = - createdEvent?.transactionHash && - (await this.network.getTransaction(createdEvent?.transactionHash)); - return transaction; - } - - /** - * Get the block number after which this proposal can no longer be executed. - * Not available on executed proposals. - */ - async getLastCallBlock(): Promise { - const data = await this._getData(); - return data?._lastCall; - } - - /** - * Get a boolean indicating whether this proposal is still active. Proposals - * are active during their voting period, i.e., from creation block up to - * expiration block or execution. Returns false if the current block is later - * than this proposal's expiration or this proposal has been executed. - */ - async getIsActive(): Promise { - const isExecuted = await this.getIsExecuted(); - if (isExecuted) { - return false; - } - const block = await this.network.getBlock(); - - return this.expiration > (block?.blockNumber ?? Infinity); - } - - /** - * Get a boolean indicating whether this proposal has been executed. - * @param atBlock - The block number to check. If this proposal was executed - * on or before this block, this will return true. - */ - async getIsExecuted(): Promise { - const executedEvent = await this._getExecutedEvent(); - return !!executedEvent; - } - - /** - * Get the hash of the transaction that executed the proposal, or null if - * the Proposal wasn't executed. - * @returns The transaction hash - */ - async getExecutedTransaction(): Promise { - const executedEvent = await this._getExecutedEvent(); - const hash = executedEvent?.transactionHash; - const transaction = hash && (await this.network.getTransaction(hash)); - return transaction; - } - - /** - * Get the casted vote for a given address on this proposal. - * @param address - The address that casted the vote. - */ - async getVote({ - account, - }: { - account: ReadVoter | `0x${string}`; - }): Promise { - return this.coreVoting.getVote({ - proposalId: this.id, - account, - }); - } - - /** - * Get all casted votes on this proposal - * @param fromBlock - Include all votes casted on or after this block. - * @param toBlock - Include all votes casted on or before this block. - */ - async getVotes({ - account, - fromBlock, - toBlock, - }: { - account?: ReadVoter | `0x${string}`; - fromBlock?: BlockLike; - toBlock?: BlockLike; - } = {}): Promise { - return this.coreVoting.getVotes({ - proposalId: this.id, - account, - fromBlock, - toBlock, - }); - } - - /** - * Get the usable voting power of a given address for this proposal determined - * by its creation block. Any changes to voting power after the creation block - * of this proposal does not apply to this proposal and therefore will not be - * reflected. - * @param extraData - ABI encoded optional extra data used by some vaults, such - * as merkle proofs. - */ - async getVotingPower({ - account, - extraData, - }: { - account: ReadVoter | `0x${string}`; - extraData?: `0x${string}`[]; - }): Promise { - return this.coreVoting.getVotingPower({ - account, - atBlock: this.created, - extraData, - }); - } - - /** - * Get the total voting power of all votes on this proposal by their ballot. - */ - async getResults({ - options, - }: { - options?: ContractReadOptions; - } = {}): Promise { - const powerByBallot: Record = { - yes: 0n, - no: 0n, - maybe: 0n, - }; - - // The proposal voting power is deleted when the proposal is executed, so we - // have to get the results from vote events. - const isExecuted = await this.getIsExecuted(); - if (isExecuted) { - const votes = await this.getVotes({ - toBlock: options?.blockNumber ?? options?.blockTag, - }); - for (const { ballot, power } of votes) { - powerByBallot[ballot] += power; - } - } else { - const proposalVotingPower = await this.coreVoting.contract.read( - "getProposalVotingPower", - { proposalId: this.id }, - options, - ); - if (Array.isArray(proposalVotingPower)) { - powerByBallot.yes = proposalVotingPower[0]; - powerByBallot.no = proposalVotingPower[1]; - powerByBallot.maybe = proposalVotingPower[2]; - } else { - return { - yes: proposalVotingPower as unknown as bigint, - no: 0n, - maybe: 0n, - }; - } - } - - return powerByBallot; - } - - /** - * Get the current quorum of this proposal measured by summing the voting - * power of all casted votes. - */ - async getCurrentQuorum(): Promise { - const results = await this.getResults(); - return Object.values(results).reduce((sum, val) => sum + val, 0n); - } - - /** - * Get a boolean indicating whether this proposal can be executed. Proposals - * can only be executed if the quorum requirement has been met, there are more - * yes votes than no votes, and the current block is between the unlock and - * last call blocks. - */ - async getIsExecutable(): Promise { - const unlockBlock = await this.getUnlockBlock(); - const lastCallBlock = await this.getLastCallBlock(); - const requiredQuorum = await this.getRequiredQuorum(); - if (!unlockBlock || !requiredQuorum || !lastCallBlock) { - return false; - } - - const block = await this.network.getBlock(); - - if (!block) { - return false; - } - - const blockNumber = block.blockNumber; - - if ( - blockNumber === null || - blockNumber < unlockBlock || - blockNumber > lastCallBlock - ) { - return false; - } - - const currentQuorum = await this.getCurrentQuorum(); - const { yes, no } = await this.getResults(); - return currentQuorum >= requiredQuorum && yes > no; - } - - /** - * Idempotent function to ensure all possible data is fetched for the - * proposal. (From both events and the CoreVoting contract) - **/ - protected async _getData(): Promise< - | { - _lastCall?: bigint; - _proposalHash?: `0x${string}`; - _requiredQuorum?: bigint; - _unlock?: bigint; - } - | undefined - > { - if (this._allDataFetched) { - return { - _lastCall: this._lastCall, - _proposalHash: this._proposalHash, - _requiredQuorum: this._requiredQuorum, - _unlock: this._unlock, - }; - } - - const { _lastCall, _proposalHash, _requiredQuorum, _unlock } = - (await this.coreVoting.getProposal({ id: this.id }))!; - - const data = { _lastCall, _proposalHash, _requiredQuorum, _unlock }; - Object.assign(this, data, { _allDataFetched: true }); - return data; - } - - /** - * Get the event that was emitted when this proposal was created. - */ - protected async _getCreatedEvent(): Promise< - Event | undefined - > { - const createdEvents = await this._getCreatedEvents(); - return createdEvents.find( - ({ args: { proposalId } }) => proposalId === this.id, - ); - } - - /** - * Get the ProposalCreated events for the proposal's creation block. - */ - protected async _getCreatedEvents(): Promise< - Event[] - > { - return await this.coreVoting.contract.getEvents("ProposalCreated", { - fromBlock: this.created, - toBlock: this.created, - }); - } - - /** - * Get the event that was emitted when this proposal was executed, or - * undefined if it hasn't been executed. - */ - protected async _getExecutedEvent(): Promise< - Event | undefined - > { - const executedEvents = await this._getExecutedEvents(); - const found = executedEvents.find( - ({ args }) => args.proposalId === this.id, - ); - - return found; - } - - /** - * Get the ProposalExecuted events within range of this proposal's lifecycle. - */ - protected async _getExecutedEvents(): Promise< - Event[] - > { - let toBlock = await this.getLastCallBlock(); - const latestBlock = await this.network.getBlock(); - - // Ensure we don't try to fetch a block range including blocks that don't - // exist yet. - if ( - typeof toBlock === "bigint" && - typeof latestBlock?.blockNumber === "bigint" && - latestBlock.blockNumber < toBlock - ) { - toBlock = latestBlock.blockNumber; - } - - const events = await this.coreVoting.contract.getEvents( - "ProposalExecuted", - { - fromBlock: this.created, - toBlock, - }, - ); - - return events; - } -} diff --git a/packages/council-js/src/entities/proposal/ReadWriteProposal.ts b/packages/council-js/src/entities/proposal/ReadWriteProposal.ts deleted file mode 100644 index 11643203..00000000 --- a/packages/council-js/src/entities/proposal/ReadWriteProposal.ts +++ /dev/null @@ -1,109 +0,0 @@ -import { ContractWriteOptions } from "@delvtech/evm-client"; - -import { BALLOTS } from "src/entities/coreVoting/constants"; -import { ReadWriteCoreVoting } from "src/entities/coreVoting/ReadWriteCoreVoting"; -import { Ballot } from "src/entities/coreVoting/types"; -import { ReadWriteModelOptions } from "src/entities/Model"; -import { - BaseProposalOptions, - ReadProposal, -} from "src/entities/proposal/ReadProposal"; -import { ReadVotingVault } from "src/entities/votingVault/ReadVotingVault"; -import { getVaultsWithPower } from "src/utils/getVaultsWithPower"; - -export interface ReadWriteProposalOptions - extends ReadWriteModelOptions, - BaseProposalOptions { - coreVoting: ReadWriteCoreVoting | `0x${string}`; -} - -export class ReadWriteProposal extends ReadProposal { - declare coreVoting: ReadWriteCoreVoting; - - constructor(options: ReadWriteProposalOptions) { - super(options); - } - - /** - * Execute a proposal. - * @param signer - An ethers Signer instance. - * @returns The transaction hash. - */ - async execute({ - options, - }: { options?: ContractWriteOptions } = {}): Promise<`0x${string}`> { - const actions = await this.getTargetsAndCalldatas(); - if (!actions) { - throw new Error("Proposal not found"); - } - const hash = await this.coreVoting.contract.write( - "execute", - { - calldatas: actions.calldatas, - targets: actions.targets, - proposalId: this.id, - }, - options, - ); - this.coreVoting.contract.clearCache(); - return hash; - } - - /** - * Vote on this proposal. - * @param signer - An ethers Signer instance for the voter. - * @param ballot - The ballot to cast. - * @returns The transaction hash. - */ - async vote({ - ballot, - vaults: _vaults = this.coreVoting.vaults, - extraVaultData: _extraVaultData, - options, - }: { - ballot: Ballot; - /** - * The vaults to draw voting power from. Defaults to the `CoreVoting`'s - * configured vaults. - */ - vaults?: (`0x${string}` | ReadVotingVault)[]; - /** - * Extra data given to the vaults to help calculation. - */ - extraVaultData?: `0x${string}`[]; - options?: ContractWriteOptions; - }): Promise<`0x${string}`> { - const vaults = _vaults.map((vault) => - vault instanceof ReadVotingVault - ? vault - : new ReadVotingVault({ - address: vault, - contractFactory: this.contractFactory, - network: this.network, - }), - ); - - const signerAddress = await this.coreVoting.contract.getSignerAddress(); - const vaultsWithPower = await getVaultsWithPower(signerAddress, vaults); - - const extraVaultData = vaultsWithPower.map(({ address }) => { - const index = _vaults.indexOf(address); - return _extraVaultData?.[index] || "0x"; - }); - - const hash = this.coreVoting.contract.write( - "vote", - { - ballot: BALLOTS.indexOf(ballot), - extraVaultData, - proposalId: this.id, - votingVaults: vaultsWithPower.map(({ address }) => address), - }, - options, - ); - - this.coreVoting.contract.clearCache(); - - return hash; - } -} diff --git a/packages/council-js/src/entities/token/ReadToken.ts b/packages/council-js/src/entities/token/ReadToken.ts index 181ff503..e7b1adcc 100644 --- a/packages/council-js/src/entities/token/ReadToken.ts +++ b/packages/council-js/src/entities/token/ReadToken.ts @@ -1,15 +1,15 @@ import { Adapter, Contract, ContractReadOptions } from "@delvtech/drift"; +import { erc20 } from "@delvtech/drift/testing"; import { Address } from "abitype"; import { ContractEntityConfig, Entity } from "src/entities/Entity"; -import { TokenAbi, tokenAbi } from "src/entities/token/abi"; export class ReadToken extends Entity { - contract: Contract; + contract: Contract; constructor({ address, ...config }: ContractEntityConfig) { super(config); this.contract = this.drift.contract({ - abi: tokenAbi, + abi: erc20.abi, address, }); } @@ -42,13 +42,10 @@ export class ReadToken extends Entity { return this.contract.read("allowance", { owner, spender }, options); } - getBalanceOf({ - account, - options, - }: { - account: Address; - options?: ContractReadOptions; - }): Promise { + getBalanceOf( + account: Address, + options?: ContractReadOptions, + ): Promise { return this.contract.read("balanceOf", { account }, options); } diff --git a/packages/council-js/src/entities/token/abi.ts b/packages/council-js/src/entities/token/abi.ts deleted file mode 100644 index 49816678..00000000 --- a/packages/council-js/src/entities/token/abi.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { erc20 } from "@delvtech/drift/testing"; - -export type TokenAbi = typeof erc20.abi; -export const tokenAbi = erc20.abi; diff --git a/packages/council-js/src/entities/votingVault/ReadVotingVault.ts b/packages/council-js/src/entities/votingVault/ReadVotingVault.ts index b80a67e7..58e375e7 100644 --- a/packages/council-js/src/entities/votingVault/ReadVotingVault.ts +++ b/packages/council-js/src/entities/votingVault/ReadVotingVault.ts @@ -1,85 +1,78 @@ import { IVotingVault } from "@delvtech/council-artifacts/IVotingVault"; -import { CachedReadContract } from "@delvtech/evm-client"; -import { Model, ReadContractModelOptions } from "src/entities/Model"; -import { ReadVoter } from "src/entities/ReadVoter"; +import { + Adapter, + Address, + Bytes, + Contract, + ContractReadOptions, +} from "@delvtech/drift"; +import { ContractEntityConfig, Entity } from "src/entities/Entity"; import { VotingVaultAbi } from "src/entities/votingVault/types"; -import { BlockLike } from "src/utils/blockToReadOptions"; import { getBlockOrThrow } from "src/utils/getBlockOrThrow"; - -/** - * @category Models - */ -export interface ReadVotingVaultOptions extends ReadContractModelOptions {} +import { Blockish } from "src/utils/types"; /** * A vault which stores voting power by address - * @category Models */ -export class ReadVotingVault extends Model { - contract: CachedReadContract; +export class ReadVotingVault extends Entity { + readonly address: Address; + readonly contract: Contract; - constructor({ - name = "Voting Vault", - address, - contractFactory, - network, - cache, - namespace, - }: ReadVotingVaultOptions) { - super({ name, network, contractFactory }); - this.contract = contractFactory({ + constructor({ address, ...config }: ContractEntityConfig) { + super(config); + this.address = address; + this.contract = this.drift.contract({ abi: IVotingVault.abi, address, - cache, - namespace, }); } - get address(): `0x${string}` { - return this.contract.address; - } - get namespace(): string | undefined { - return this.contract.namespace; - } - /** * Get the usable voting power owned by a given address in this vault. * @param extraData - ABI encoded optional extra data used by some vaults, * such as merkle proofs. */ async getVotingPower({ - account, - atBlock = "latest", - extraData = "0x00", + voter, + /** + * The block to get voting power at. Usually the creation block of a + * proposal. + */ + block, + // extraData = "0x00", + extraData = "0x", + options, }: { - account: ReadVoter | `0x${string}`; - atBlock?: BlockLike; - extraData?: `0x${string}`; + voter: Address; + block: Blockish; + extraData?: Bytes; + options?: ContractReadOptions; }): Promise { - let blockNumber = atBlock; + if (typeof block !== "bigint") { + const { number } = await getBlockOrThrow(this.drift, options); - if (typeof blockNumber !== "bigint") { - const block = await getBlockOrThrow(this.network, blockNumber); - if (block.blockNumber === null) { + // No block number available for the requested number, hash, or tag. + if (number === undefined) { return 0n; } - blockNumber = block.blockNumber; + + block = number; } - try { - return await this.contract.simulateWrite("queryVotePower", { - blockNumber, + return this.contract + .simulateWrite("queryVotePower", { + blockNumber: block, extraData, - user: typeof account === "string" ? account : account.address, - }); - } catch (error) { - // queryVotePower throws an uninitialized an error if the account is not - // found/hasn't ever had voting power. - if (error instanceof Error && error.message.includes("uninitialized")) { - return 0n; - } + user: voter, + }) + .catch((error) => { + // queryVotePower throws an uninitialized an error if the account is not + // found/hasn't ever had voting power. + if (error instanceof Error && error.message.includes("uninitialized")) { + return 0n; + } - throw error; - } + throw error; + }); } } diff --git a/packages/council-js/src/entities/votingVault/gscVault/ReadGscVault.ts b/packages/council-js/src/entities/votingVault/gscVault/ReadGscVault.ts index 403bdf94..75a66e40 100644 --- a/packages/council-js/src/entities/votingVault/gscVault/ReadGscVault.ts +++ b/packages/council-js/src/entities/votingVault/gscVault/ReadGscVault.ts @@ -1,13 +1,14 @@ import { GSCVault } from "@delvtech/council-artifacts/GSCVault"; -import { CachedReadContract } from "@delvtech/evm-client"; -import { ReadContractModelOptions } from "src/entities/Model"; -import { ReadVoter } from "src/entities/ReadVoter"; +import { + Adapter, + Address, + Contract, + ContractReadOptions, +} from "@delvtech/drift"; +import { ContractEntityConfig } from "src/entities/Entity"; import { ReadVotingVault } from "src/entities/votingVault/ReadVotingVault"; -import { GscVaultAbi } from "src/entities/votingVault/gscVault/types"; -import { BlockLike, blockToReadOptions } from "src/utils/blockToReadOptions"; import { getBlockOrThrow } from "src/utils/getBlockOrThrow"; - -export interface ReadGscVaultOptions extends ReadContractModelOptions {} +import { Blockish } from "src/utils/types"; /** * A VotingVault for the Governance Steering Council in which each member has a @@ -15,93 +16,60 @@ export interface ReadGscVaultOptions extends ReadContractModelOptions {} * voting vaults to remain eligible. * @category Models */ -export class ReadGscVault extends ReadVotingVault { - gscVaultContract: CachedReadContract; - - constructor({ - name = "GSC Vault", - address, - contractFactory, - network, - cache, - namespace, - }: ReadGscVaultOptions) { - super({ - address, - contractFactory, - network, - cache, - namespace, - name, - }); - this.gscVaultContract = contractFactory({ +export class ReadGscVault< + A extends Adapter = Adapter, +> extends ReadVotingVault { + readonly gscVaultContract: Contract; + + constructor(config: ContractEntityConfig) { + super(config); + this.gscVaultContract = this.drift.contract({ abi: GSCVault.abi, - address, - cache, - namespace, + address: this.address, }); } - get address(): `0x${string}` { - return this.contract.address; - } - get namespace(): string | undefined { - return this.contract.namespace; - } - /** * Get the amount of voting power required to join this vault. */ - getRequiredVotingPower({ - atBlock, - }: { - atBlock?: BlockLike; - } = {}): Promise { - return this.gscVaultContract.read( - "votingPowerBound", - undefined, - blockToReadOptions(atBlock), - ); + getRequiredVotingPower(options?: ContractReadOptions): Promise { + return this.gscVaultContract.read("votingPowerBound", {}, options); } /** * Get all current members of this vault. - * @param fromBlock - The block number to start searching for members from. - * @param toBlock - The block number to stop searching for members at. */ - async getMembers({ - fromBlock, - toBlock, - }: { - fromBlock?: BlockLike; - toBlock?: BlockLike; - } = {}): Promise { - const latestJoinTimestampByMember: Record<`0x${string}`, bigint> = {}; + async getMembers( + options: { + /** + * The block number to start searching for members from. + */ + fromBlock?: Blockish; + /** + * The block number to stop searching for members at. + */ + toBlock?: Blockish; + } = {}, + ): Promise { + const latestJoinTimestampByMember: { + [member: Address]: bigint; + } = {}; const joinEvents = await this.gscVaultContract.getEvents( "MembershipProved", - { - fromBlock, - toBlock, - }, + options, ); // Capture the latest join date of each address. for (const { args: { who, when }, } of joinEvents) { - if ( - !latestJoinTimestampByMember[who] || - when > latestJoinTimestampByMember[who] - ) { + if (when > (latestJoinTimestampByMember[who] || -1n)) { latestJoinTimestampByMember[who] = when; } } - const kickEvents = await this.gscVaultContract.getEvents("Kicked", { - fromBlock, - toBlock, - }); + const kickEvents = await this.gscVaultContract.getEvents("Kicked", options); // Ignore addresses that were kicked after their latest join date. for (const { @@ -110,10 +78,9 @@ export class ReadGscVault extends ReadVotingVault { // NOTE: the kickEvents store `when` as a block number whereas the // joinEvents store `when` as a timestamp, so we must convert the block // number to a timestamp so we can compare them. - const { timestamp: kickedTimestamp } = await getBlockOrThrow( - this.network, - when, - ); + const { timestamp: kickedTimestamp } = await getBlockOrThrow(this.drift, { + blockNumber: when, + }); if ( latestJoinTimestampByMember[who] && @@ -123,99 +90,62 @@ export class ReadGscVault extends ReadVotingVault { } } - return Object.entries(latestJoinTimestampByMember).map( - ([address]) => - new ReadVoter({ - address: address as `0x${string}`, - contractFactory: this.contractFactory, - network: this.network, - }), - ); - } - - /** - * Get all voters with voting power in this vault (alias for `getMembers`). - * @param fromBlock - The block number to start searching for voters from. - * @param toBlock - The block number to stop searching for voters at. - */ - getVoters( - ...args: Parameters - ): Promise { - return this.getMembers(...args); + return Object.keys(latestJoinTimestampByMember) as Address[]; } /** * Get the join date of a given address. */ - async getJoinDate({ - account, - atBlock, - }: { - account: ReadVoter | `0x${string}`; - atBlock?: BlockLike; - }): Promise { + async getJoinDate( + member: Address, + options?: ContractReadOptions, + ): Promise { const secondsTimestamp = await this.gscVaultContract.read( "members", - { - 0: typeof account === "string" ? account : account.address, - }, - blockToReadOptions(atBlock), + [member], + options, ); - return secondsTimestamp ? new Date(Number(secondsTimestamp * 1000n)) : null; + return secondsTimestamp + ? new Date(Number(secondsTimestamp * 1000n)) + : undefined; } /** * Get a boolean indicating whether a given voter is a current member. */ - async getIsMember({ - account, - atBlock, - }: { - account: ReadVoter | `0x${string}`; - atBlock?: BlockLike; - }): Promise { - return !!(await this.getJoinDate({ - account, - atBlock, - })); + async getIsMember( + voter: Address, + options?: ContractReadOptions, + ): Promise { + return !!(await this.getJoinDate(voter, options)); } /** * Get the time (in MS) that a new GSC member must wait after joining before * they can vote. */ - getIdleDuration({ atBlock }: { atBlock?: BlockLike } = {}): Promise { - return this.gscVaultContract.read( + async getIdleDuration(options?: ContractReadOptions): Promise { + const seconds = await this.gscVaultContract.read( "idleDuration", {}, - blockToReadOptions(atBlock), + options, ); + return seconds * 1000n; } /** * Get a boolean indicating whether a member is still in the idle duration. * Idle members cannot vote. */ - async getIsIdle({ - account, - atBlock, - }: { - account: ReadVoter | `0x${string}`; - atBlock?: BlockLike; - }): Promise { - const joinDate = await this.getJoinDate({ - account, - atBlock, - }); + async getIsIdle( + member: Address, + options?: ContractReadOptions, + ): Promise { + const joinDate = await this.getJoinDate(member, options); const isMember = !!joinDate; return ( isMember && - joinDate.getTime() + - Number( - await this.getIdleDuration({ - atBlock, - }), - ) > + joinDate.getTime() + Number(await this.getIdleDuration(options)) > Date.now() ); } @@ -224,26 +154,20 @@ export class ReadGscVault extends ReadVotingVault { * Get the voting vaults a member joined with. Used to prove the member meets * the minimum voting power requirement. */ - async getMemberVaults({ - account, - atBlock, - }: { - account: ReadVoter | `0x${string}`; - atBlock?: BlockLike; - }): Promise { + async getMemberVaults( + member: Address, + options?: ContractReadOptions, + ): Promise { const vaultAddresses = await this.gscVaultContract.read( "getUserVaults", - { - who: typeof account === "string" ? account : account.address, - }, - blockToReadOptions(atBlock), + { who: member }, + options, ); return vaultAddresses.map( (address) => new ReadVotingVault({ address, - contractFactory: this.contractFactory, - network: this.network, + drift: this.drift, }), ); } diff --git a/packages/council-js/src/entities/votingVault/gscVault/ReadWriteGscVault.ts b/packages/council-js/src/entities/votingVault/gscVault/ReadWriteGscVault.ts index dc2f4e26..178e4210 100644 --- a/packages/council-js/src/entities/votingVault/gscVault/ReadWriteGscVault.ts +++ b/packages/council-js/src/entities/votingVault/gscVault/ReadWriteGscVault.ts @@ -1,111 +1,116 @@ -import { - CachedReadWriteContract, - ContractWriteOptions, -} from "@delvtech/evm-client"; -import { ReadWriteContractFactory } from "src/contract/factory"; -import { ReadWriteContractModelOptions } from "src/entities/Model"; -import { ReadVoter } from "src/entities/ReadVoter"; +import { Address, Bytes, Hash, ReadWriteAdapter } from "@delvtech/drift"; +import { EntityWriteParams } from "src/entities/Entity"; import { ReadGscVault } from "src/entities/votingVault/gscVault/ReadGscVault"; -import { GscVaultAbi } from "src/entities/votingVault/gscVault/types"; -import { ReadVotingVault } from "src/entities/votingVault/ReadVotingVault"; - -export interface ReadWriteGscVaultOptions - extends ReadWriteContractModelOptions {} - -export class ReadWriteGscVault extends ReadGscVault { - declare gscVaultContract: CachedReadWriteContract; - declare contractFactory: ReadWriteContractFactory; - - constructor(options: ReadWriteGscVaultOptions) { - super(options); - } +export class ReadWriteGscVault< + A extends ReadWriteAdapter = ReadWriteAdapter, +> extends ReadGscVault { /** * Set the idle duration for a member in this GSC vault. The idle duration is * the amount of time a member must be a member before they can vote. - * @param duration - The new idle duration in seconds. */ - async setIdleDuration({ - duration, + setIdleDuration({ + args: { duration }, options, - }: { + }: EntityWriteParams<{ + /** + * The new idle duration in seconds. + */ duration: bigint; - options?: ContractWriteOptions; - }): Promise<`0x${string}`> { - const hash = await this.gscVaultContract.write( + }>): Promise { + return this.gscVaultContract.write( "setIdleDuration", { _idleDuration: duration }, - options, + { + ...options, + onMined: (receipt) => { + if (receipt?.status === "success") { + this.contract.cache.clear(); + } + options?.onMined?.(receipt); + }, + }, ); - this.contract.clearCache(); - return hash; } /** * Become a member of this GSC vault. - * @param vaults - The addresses of the approved vaults the joining member has - * voting power in. This is used to prove the joining member meets the - * minimum voting power requirement. If voting power is moved to a different - * vault, the member will become ineligible until they join again with the - * new vault or risk being kicked. * @returns The transaction hash. */ - async join({ - vaults, - extraVaultData = [], + join({ + args: { votingVaults, extraVaultData = [] }, options, - }: { - vaults: (ReadVotingVault | `0x${string}`)[]; + }: EntityWriteParams<{ + /** + * The addresses of the approved vaults the joining member has + * voting power in. This is used to prove the joining member meets the + * minimum voting power requirement. If voting power is moved to a different + * vault, the member will become ineligible until they join again with the + * new vault or risk being kicked. + */ + votingVaults: Address[]; /** * Extra data given to the vaults to help calculation */ - extraVaultData?: `0x${string}`[]; - options?: ContractWriteOptions; - }): Promise<`0x${string}`> { - const vaultAddresses = vaults.map((vault) => - typeof vault === "string" ? vault : vault.address, - ); - const extraData = vaultAddresses.map((_, i) => extraVaultData[i] || "0x"); - const hash = await this.gscVaultContract.write( + extraVaultData?: (Bytes | undefined)[]; + }>): Promise { + const extraData = votingVaults.map((_, i) => extraVaultData[i] || "0x"); + return this.gscVaultContract.write( "proveMembership", + { votingVaults, extraData }, { - extraData, - votingVaults: vaultAddresses, + ...options, + onMined: (receipt) => { + if (receipt?.status === "success") { + this.contract.cache.clear(); + } + options?.onMined?.(receipt); + }, }, - options, ); - this.contract.clearCache(); - return hash; } /** * Remove a member that's become ineligible from this GSC vault. A member * becomes ineligible when the voting power in the vaults they joined with * drops below the required minimum. - * @param account - The address of the ineligible member to kick. + * @param account - * @returns The transaction hash. */ async kick({ - account, - extraVaultData = [], + args: { member, extraVaultData = [] }, options, - }: { - account: ReadVoter | `0x${string}`; + }: EntityWriteParams<{ + /** + * The address of the ineligible member to kick. + */ + member: Address; /** * The extra data the vaults need to load the member's voting power */ - extraVaultData?: `0x${string}`[]; - options?: ContractWriteOptions; - }): Promise<`0x${string}`> { - const hash = await this.gscVaultContract.write( + extraVaultData?: (Bytes | undefined)[]; + }>): Promise<`0x${string}`> { + let extraData: Bytes[]; + if (!extraVaultData) { + // Get the member vaults to create the right amount of default extra data. + const memberVaults = await this.getMemberVaults(member); + extraData = memberVaults.map(() => "0x"); + } else { + extraData = extraVaultData.map((_, i) => extraVaultData[i] || "0x"); + } + + return this.gscVaultContract.write( "kick", + { extraData, who: member }, { - extraData: extraVaultData, - who: typeof account === "string" ? account : account.address, + ...options, + onMined: (receipt) => { + if (receipt?.status === "success") { + this.contract.cache.clear(); + } + options?.onMined?.(receipt); + }, }, - options, ); - this.contract.clearCache(); - return hash; } } diff --git a/packages/council-js/src/entities/votingVault/gscVault/types.ts b/packages/council-js/src/entities/votingVault/gscVault/types.ts deleted file mode 100644 index 5c56b482..00000000 --- a/packages/council-js/src/entities/votingVault/gscVault/types.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { GSCVault } from "@delvtech/council-artifacts/GSCVault"; - -export type GscVaultAbi = typeof GSCVault.abi; diff --git a/packages/council-js/src/entities/votingVault/lockingVault/ReadLockingVault.ts b/packages/council-js/src/entities/votingVault/lockingVault/ReadLockingVault.ts index d0515556..2b96bf65 100644 --- a/packages/council-js/src/entities/votingVault/lockingVault/ReadLockingVault.ts +++ b/packages/council-js/src/entities/votingVault/lockingVault/ReadLockingVault.ts @@ -1,231 +1,106 @@ import { LockingVault } from "@delvtech/council-artifacts/LockingVault"; -import { CachedReadContract } from "@delvtech/evm-client"; -import { ReadContractModelOptions } from "src/entities/Model"; -import { ReadVoter } from "src/entities/ReadVoter"; +import { + Adapter, + Address, + Bytes, + Contract, + ContractReadOptions, +} from "@delvtech/drift"; +import { ContractEntityConfig } from "src/entities/Entity"; import { ReadToken } from "src/entities/token/ReadToken"; -import { LockingVaultAbi } from "src/entities/votingVault/lockingVault/types"; import { ReadVotingVault } from "src/entities/votingVault/ReadVotingVault"; -import { VoterPowerBreakdown } from "src/entities/votingVault/types"; -import { BlockLike, blockToReadOptions } from "src/utils/blockToReadOptions"; +import { + VoterPowerBreakdown, + VoterWithPower, +} from "src/entities/votingVault/types"; import { getBlockOrThrow } from "src/utils/getBlockOrThrow"; -import { getOrSet } from "src/utils/getOrSet"; - -export interface ReadLockingVaultOptions extends ReadContractModelOptions {} +import { Blockish } from "src/utils/types"; /** * A VotingVault that gives voting power for depositing tokens. * @category Models */ -export class ReadLockingVault extends ReadVotingVault { - lockingVaultContract: CachedReadContract; - - constructor({ - name = "Locking Vault", - address, - contractFactory, - network, - cache, - namespace, - }: ReadLockingVaultOptions) { - super({ - address, - contractFactory, - network, - cache, - namespace, - name, - }); - this.lockingVaultContract = contractFactory({ +export class ReadLockingVault< + A extends Adapter = Adapter, +> extends ReadVotingVault { + readonly lockingVaultContract: Contract; + + constructor(config: ContractEntityConfig) { + super(config); + this.lockingVaultContract = this.drift.contract({ abi: LockingVault.abi, - address, - cache, - namespace, + address: this.address, }); } + /** + * Get the number of blocks before the delegation history is forgotten. Voting + * power from this vault can't be used on proposals that are older than the + * stale block lag. + */ + getStaleBlockLag(): Promise { + return this.lockingVaultContract.read("staleBlockLag"); + } + /** * Get the associated token for this LockingVault. */ async getToken(): Promise { return new ReadToken({ address: await this.lockingVaultContract.read("token"), - contractFactory: this.contractFactory, - network: this.network, + drift: this.drift, }); } /** - * Get the amount of tokens that a given `address` has deposited into this - * vault. + * Get the deposit balance of a given account. */ - async getDepositedBalance({ - account, - atBlock, - }: { - account: ReadVoter | `0x${string}`; - atBlock?: BlockLike; - }): Promise { + async getBalanceOf( + account: Address, + options?: ContractReadOptions, + ): Promise { const deposits = await this.lockingVaultContract.read( "deposits", - { - who: typeof account === "string" ? account : account.address, - }, - blockToReadOptions(atBlock), + { who: account }, + options, ); return deposits[1]; } - get address(): `0x${string}` { - return this.contract.address; - } - get namespace(): string | undefined { - return this.contract.namespace; - } - /** - * Get all participants with voting power in this vault. - * @param fromBlock - Include all voters that had power on or after this block number. - * @param toBlock - Include all voters that had power on or before this block number. + * Get the current delegate of a given account. */ - async getVoters({ - fromBlock, - toBlock, - }: { - fromBlock?: BlockLike; - toBlock?: BlockLike; - } = {}): Promise { - const powerByVoter = await this._getPowerByVoter({ - fromBlock, - toBlock, - }); - return Object.keys(powerByVoter).map( - ([address]) => - new ReadVoter({ - address: address as `0x${string}`, - contractFactory: this.contractFactory, - network: this.network, - }), + async getDelegate( + account: Address, + options?: ContractReadOptions, + ): Promise
{ + const { 0: delegate } = await this.lockingVaultContract.read( + "deposits", + { who: account }, + options, ); + return delegate; } /** - * Get all participants that have voting power in this vault along with their - * voting power, the amount of voting power being delegated to them, and the - * amount of power delegated to them by each delegator. This is a convenience - * method to fetch voting power and delegation data for a large number of - * voters in a single call. - * @param account - Get a breakdown for a specific account. - * @param fromBlock - Include all voters that had power on or after this block - * number. - * @param toBlock - Include all voters that had power on or before this block - * number. - */ - async getVotingPowerBreakdown({ - account, - fromBlock, - toBlock, - }: { - account?: `0x${string}`; - fromBlock?: BlockLike; - toBlock?: BlockLike; - } = {}): Promise { - const voteChangeEvents = await this.lockingVaultContract.getEvents( - "VoteChange", - { - filter: { - to: account, - }, - fromBlock, - toBlock, - }, - ); - - const breakdownByVoter: Record< - `0x${string}`, - { - power: bigint; - powerFromAllDelegators: bigint; - powerByDelegator: Record<`0x${string}`, bigint>; - } - > = {}; - - for (const { - args: { from, to, amount }, - } of voteChangeEvents) { - if (!breakdownByVoter[to]) { - breakdownByVoter[to] = { - power: 0n, - powerFromAllDelegators: 0n, - powerByDelegator: {}, - }; - } - - breakdownByVoter[to].power += amount; - - // ignore self-delegation - if (from !== to) { - breakdownByVoter[to].powerFromAllDelegators += amount; - breakdownByVoter[to].powerByDelegator[from] = - (breakdownByVoter[to].powerByDelegator[from] ?? 0n) + amount; - } - } - - const voterMap = new Map<`0x${string}`, ReadVoter>(); - - return Object.entries(breakdownByVoter) - .filter(([, { power }]) => power > 0) - .map( - ([_address, { power, powerByDelegator, powerFromAllDelegators }]) => { - const address = _address as `0x${string}`; - - const voter = getOrSet({ - key: address, - cache: voterMap, - callback: () => - new ReadVoter({ - address, - contractFactory: this.contractFactory, - network: this.network, - }), - }); - - const votingPowerByDelegator = Object.entries(powerByDelegator) - .filter(([, votingPower]) => votingPower > 0n) - .map(([_address, votingPower]) => { - const address = _address as `0x${string}`; - const voter = getOrSet({ - key: address, - cache: voterMap, - callback: () => - new ReadVoter({ - address, - contractFactory: this.contractFactory, - network: this.network, - }), - }); - return { - voter, - votingPower, - }; - }); - - return { - voter, - votingPower: power, - votingPowerFromAllDelegators: powerFromAllDelegators, - votingPowerByDelegator, - }; - }, - ); - } - - /** - * Get the number of blocks before the delegation history is forgotten. Voting - * power from this vault can't be used on proposals that are older than the - * stale block lag. + * Get all voters delegated to a given account in this vault. */ - getStaleBlockLag(): Promise { - return this.lockingVaultContract.read("staleBlockLag"); + async getDelegatorsTo( + voter: Address, + { + fromBlock, + toBlock, + }: { + fromBlock?: Blockish; + toBlock?: Blockish; + }, + ): Promise { + const breakdown = await this.getVotingPowerBreakdown({ + voter, + fromBlock, + toBlock, + }); + return breakdown[0].delegators; } /** @@ -233,146 +108,138 @@ export class ReadLockingVault extends ReadVotingVault { * accounting for the stale block lag. */ async getHistoricalVotingPower({ - account, - atBlock, + voter, + /** + * The block to get voting power at. Usually the creation block of a + * proposal. + */ + block, + options, }: { - account: `0x${string}`; - atBlock?: BlockLike; + voter: Address; + block: Blockish; + extraData?: Bytes; + options?: ContractReadOptions; }): Promise { - let blockNumber = atBlock; + if (typeof block !== "bigint") { + const { number } = await getBlockOrThrow(this.drift, options); - if (typeof blockNumber !== "bigint") { - const block = await getBlockOrThrow(this.network, atBlock); - blockNumber = block.blockNumber ?? undefined; - } + // No block number available for the requested hash or tag. + if (number === undefined) { + return 0n; + } - if (blockNumber === undefined) { - return 0n; + block = number; } return this.lockingVaultContract.read("queryVotePowerView", { - user: account, - blockNumber, + user: voter, + blockNumber: block, }); } /** * Get the sum of voting power held by all voters in this vault. - * @param atBlock - Get the total held at this block number. */ async getTotalVotingPower({ - atBlock, + fromBlock, + toBlock, }: { - atBlock?: BlockLike; + fromBlock?: Blockish; + toBlock?: Blockish; } = {}): Promise { - const powerByVoter = await this._getPowerByVoter({ - toBlock: atBlock, + const breakdown = await this.getVotingPowerBreakdown({ + fromBlock, + toBlock, }); - return Object.values(powerByVoter).reduce((sum, power) => sum + power, 0n); - } - - /** - * Get the current delegate of a given account. - */ - async getDelegate({ - account, - atBlock, - }: { - account: `0x${string}`; - atBlock?: BlockLike; - }): Promise { - const { 0: address } = await this.lockingVaultContract.read( - "deposits", - { - who: account, - }, - blockToReadOptions(atBlock), + return Object.values(breakdown).reduce( + (sum, { votingPower }) => sum + votingPower, + 0n, ); - return new ReadVoter({ - address, - contractFactory: this.contractFactory, - network: this.network, - }); } /** - * Get all voters delegated to a given account in this vault. + * Get all participants that have voting power in this vault along with their + * voting power, the amount of voting power being delegated to them, and the + * amount of power delegated to them by each delegator. This is a convenience + * method to fetch voting power and delegation data for a large number of + * voters in a single call. */ - async getDelegatorsTo({ - account, - atBlock, + async getVotingPowerBreakdown({ + voter, + fromBlock, + toBlock, }: { - account: `0x${string}`; - atBlock?: BlockLike; - }): Promise { - let toBlock = atBlock; - - if (typeof toBlock !== "bigint") { - const { blockNumber } = await getBlockOrThrow(this.network, toBlock); - toBlock = blockNumber ?? undefined; - } - + /** + * Get a breakdown for a specific account. + */ + voter?: Address; + fromBlock?: Blockish; + toBlock?: Blockish; + } = {}): Promise { const voteChangeEvents = await this.lockingVaultContract.getEvents( "VoteChange", { - filter: { - to: account, - }, + filter: { to: voter }, + fromBlock, toBlock, }, ); - const powerByDelegators: Record<`0x${string}`, bigint> = {}; + const breakdownByVoter: { + [voter: Address]: { + votingPower: bigint; + votingPowerFromDelegators: bigint; + powerByDelegator: { + [delegator: Address]: bigint; + }; + }; + } = {}; + + // Calculate the delegated voting power for each voter. for (const { - args: { from, amount }, + args: { from, to, amount }, } of voteChangeEvents) { + const breakdown = (breakdownByVoter[to] ||= { + votingPower: 0n, + votingPowerFromDelegators: 0n, + powerByDelegator: {}, + }); + + breakdown.votingPower += amount; + // ignore self-delegation - if (from !== account) { - powerByDelegators[from] = (powerByDelegators[from] ?? 0n) + amount; + if (from !== to) { + breakdown.votingPowerFromDelegators += amount; + breakdown.powerByDelegator[from] ??= 0n; + breakdown.powerByDelegator[from] += amount; } } - return Object.entries(powerByDelegators) - .filter(([, power]) => power > 0) - .map( - ([address]) => - new ReadVoter({ - address: address as `0x${string}`, - contractFactory: this.contractFactory, - network: this.network, - }), - ); - } - - private async _getPowerByVoter({ - account, - fromBlock, - toBlock, - }: { - account?: `0x${string}`; - fromBlock?: BlockLike; - toBlock?: BlockLike; - } = {}): Promise> { - const voteChangeEvents = await this.lockingVaultContract.getEvents( - "VoteChange", - { - filter: { - to: account, - }, - fromBlock, - toBlock, - }, - ); + // Convert objects to arrays and filter out voters with no voting power. + let breakdowns: VoterPowerBreakdown[] = []; + for (const [ + voter, + { votingPower, votingPowerFromDelegators, powerByDelegator }, + ] of Object.entries(breakdownByVoter)) { + if (votingPower <= 0n) continue; + let delegators: VoterWithPower[] = []; + for (const [delegator, power] of Object.entries(powerByDelegator)) { + if (votingPower <= 0n) continue; + delegators.push({ + voter: delegator as Address, + votingPower: power, + }); + } - const powerByVoter: Record<`0x${string}`, bigint> = {}; - for (const { - args: { to, amount }, - } of voteChangeEvents) { - powerByVoter[to] = (powerByVoter[to] ?? 0n) + amount; + breakdowns.push({ + voter: voter as Address, + votingPower, + votingPowerFromDelegators, + delegators, + }); } - return Object.fromEntries( - Object.entries(powerByVoter).filter(([, power]) => power > 0n), - ); + return breakdowns; } } diff --git a/packages/council-js/src/entities/votingVault/lockingVault/ReadWriteLockingVault.ts b/packages/council-js/src/entities/votingVault/lockingVault/ReadWriteLockingVault.ts index ad7c9479..3343f609 100644 --- a/packages/council-js/src/entities/votingVault/lockingVault/ReadWriteLockingVault.ts +++ b/packages/council-js/src/entities/votingVault/lockingVault/ReadWriteLockingVault.ts @@ -1,111 +1,117 @@ import { - CachedReadWriteContract, + Address, ContractWriteOptions, -} from "@delvtech/evm-client"; -import { ReadWriteContractFactory } from "src/contract/factory"; -import { ReadWriteContractModelOptions } from "src/entities/Model"; + Hash, + ReadWriteAdapter, +} from "@delvtech/drift"; +import { EntityWriteParams } from "src/entities/Entity"; import { ReadWriteToken } from "src/entities/token/ReadWriteToken"; import { ReadLockingVault } from "src/entities/votingVault/lockingVault/ReadLockingVault"; -import { LockingVaultAbi } from "src/entities/votingVault/lockingVault/types"; -export interface ReadWriteLockingVaultOptions - extends ReadWriteContractModelOptions {} - -export class ReadWriteLockingVault extends ReadLockingVault { - declare lockingVaultContract: CachedReadWriteContract; - declare contractFactory: ReadWriteContractFactory; - - constructor(options: ReadWriteLockingVaultOptions) { - super(options); - } - - override async getToken(): Promise { +export class ReadWriteLockingVault< + A extends ReadWriteAdapter = ReadWriteAdapter, +> extends ReadLockingVault { + async getToken(): Promise { return new ReadWriteToken({ address: await this.lockingVaultContract.read("token"), - contractFactory: this.contractFactory, - network: this.network, + drift: this.drift, }); } /** * Change current delegate. - * @param delegate - The address to delegate to. * @returns The transaction hash. */ - async changeDelegate({ - delegate, + changeDelegate({ + args, options, - }: { - delegate: `0x${string}`; - options?: ContractWriteOptions; - }): Promise<`0x${string}`> { - const hash = await this.lockingVaultContract.write( - "changeDelegation", - { newDelegate: delegate }, - options, - ); - this.contract.clearCache(); - return hash; + }: EntityWriteParams<{ + /** + * The address to delegate to. + */ + newDelegate: Address; + }>): Promise { + return this.lockingVaultContract.write("changeDelegation", args, { + ...options, + onMined: async (receipt) => { + if (receipt?.status === "success") { + this.contract.cache.clear(); + } + options?.onMined?.(receipt); + }, + }); } /** * Deposit tokens into this vault. - * @param account - The address to credit this deposit to. Defaults to the - * signer's address. - * @param amount - The amount of tokens to deposit. (formatted decimal string) - * @param firstDelegate - The address to delegate the resulting voting power - * to if the account doesn't already have a delegate. Defaults to funded - * account being credited. * @returns The transaction hash. */ async deposit({ - account, - amount, - firstDelegate, + args: { account, amount, firstDelegate }, options, - }: { - account?: `0x${string}`; + }: EntityWriteParams<{ + /** + * The amount of tokens to deposit. (formatted decimal string) + */ amount: bigint; - firstDelegate?: `0x${string}`; + /** + * The address to credit this deposit to. Defaults to the signer's address. + */ + account?: Address; + /** + * The address to delegate the resulting voting power to if the account + * doesn't already have a delegate. Defaults to funded account being + * credited. + */ + firstDelegate?: Address; options?: ContractWriteOptions; - }): Promise<`0x${string}`> { + }>): Promise { const fundedAccount = account ?? (await this.lockingVaultContract.getSignerAddress()); - const hash = await this.lockingVaultContract.write( + return this.lockingVaultContract.write( "deposit", { amount, fundedAccount, firstDelegation: firstDelegate ?? fundedAccount, }, - options, + { + ...options, + onMined: async (receipt) => { + if (receipt?.status === "success") { + this.contract.cache.clear(); + } + options?.onMined?.(receipt); + }, + }, ); - this.contract.clearCache(); - const token = await this.getToken(); - token.contract.clearCache(); - return hash; } /** * Withdraw tokens from this vault. - * @param amount - The amount of tokens to withdraw. (formatted decimal string) * @returns The transaction hash. */ - async withdraw({ - amount, + withdraw({ + args, options, - }: { + }: EntityWriteParams<{ + /** + * The amount of tokens to withdraw. + */ amount: bigint; - options?: ContractWriteOptions; - }): Promise<`0x${string}`> { - const hash = await this.lockingVaultContract.write( + }>): Promise { +return this.lockingVaultContract.write( "withdraw", - { amount }, - options, + args, + { + ...options, + onMined: async (receipt) => { + if (receipt?.status === "success") { + this.contract.cache.clear(); + } + options?.onMined?.(receipt); + }, + }, ); - this.contract.clearCache(); - const token = await this.getToken(); - token.contract.clearCache(); - return hash; } } diff --git a/packages/council-js/src/entities/votingVault/lockingVault/types.ts b/packages/council-js/src/entities/votingVault/lockingVault/types.ts deleted file mode 100644 index 8e2b1800..00000000 --- a/packages/council-js/src/entities/votingVault/lockingVault/types.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { LockingVault } from "@delvtech/council-artifacts/LockingVault"; - -export type LockingVaultAbi = typeof LockingVault.abi; diff --git a/packages/council-js/src/entities/votingVault/types.ts b/packages/council-js/src/entities/votingVault/types.ts index d9192e8e..b85247cb 100644 --- a/packages/council-js/src/entities/votingVault/types.ts +++ b/packages/council-js/src/entities/votingVault/types.ts @@ -1,10 +1,14 @@ import { IVotingVault } from "@delvtech/council-artifacts/IVotingVault"; -import { ReadVoter } from "src/entities/ReadVoter"; +import { Address } from "@delvtech/drift"; export type VotingVaultAbi = typeof IVotingVault.abi; +export type VotingPowerByVoter = { + [voter: Address]: bigint; +}; + export interface VoterWithPower { - voter: ReadVoter; + voter: Address; votingPower: bigint; } @@ -13,10 +17,11 @@ export interface VoterPowerBreakdown extends VoterWithPower { * The total voting power from all wallets delegated to this voter. Does not * include self-delegation. */ - votingPowerFromAllDelegators: bigint; + votingPowerFromDelegators: bigint; /** - * All wallets delegated to this voter with the power they're delegating. Does - * not include self-delegation. + * All wallets delegated to this voter with the power they're delegating. + * + * **Note:** Does not include self-delegation. */ - votingPowerByDelegator: VoterWithPower[]; + delegators: VoterWithPower[]; } diff --git a/packages/council-js/src/entities/votingVault/vestingVault/ReadVestingVault.ts b/packages/council-js/src/entities/votingVault/vestingVault/ReadVestingVault.ts index 3e489948..e30e0882 100644 --- a/packages/council-js/src/entities/votingVault/vestingVault/ReadVestingVault.ts +++ b/packages/council-js/src/entities/votingVault/vestingVault/ReadVestingVault.ts @@ -1,58 +1,48 @@ import { VestingVault } from "@delvtech/council-artifacts/VestingVault"; -import { CachedReadContract } from "@delvtech/evm-client"; -import Big from "big.js"; -import { ReadContractModelOptions } from "src/entities/Model"; -import { ReadVoter } from "src/entities/ReadVoter"; +import { + Adapter, + Address, + Bytes, + Contract, + ContractReadOptions, +} from "@delvtech/drift"; +import { fixed } from "@delvtech/fixed-point-wasm"; +import { ContractEntityConfig } from "src/entities/Entity"; import { ReadToken } from "src/entities/token/ReadToken"; import { ReadVotingVault } from "src/entities/votingVault/ReadVotingVault"; -import { VoterPowerBreakdown } from "src/entities/votingVault/types"; import { - Grant, - VestingVaultAbi, -} from "src/entities/votingVault/vestingVault/types"; -import { BlockLike, blockToReadOptions } from "src/utils/blockToReadOptions"; + VoterPowerBreakdown, + VoterWithPower, +} from "src/entities/votingVault/types"; +import { Grant } from "src/entities/votingVault/vestingVault/types"; import { getBlockOrThrow } from "src/utils/getBlockOrThrow"; -import { getOrSet } from "src/utils/getOrSet"; - -export interface ReadVestingVaultOptions extends ReadContractModelOptions {} +import { Blockish } from "src/utils/types"; /** * A VotingVault that gives voting power for receiving grants and applies a * multiplier on unvested tokens to reduce their voting power. * @category Models */ -export class ReadVestingVault extends ReadVotingVault { - vestingVaultContract: CachedReadContract; - - constructor({ - name = "Vesting Vault", - address, - contractFactory, - network, - cache, - namespace, - }: ReadVestingVaultOptions) { - super({ - address, - contractFactory, - network, - cache, - namespace, - name, - }); - this.vestingVaultContract = contractFactory({ +export class ReadVestingVault< + A extends Adapter = Adapter, +> extends ReadVotingVault { + readonly vestingVaultContract: Contract; + + constructor(config: ContractEntityConfig) { + super(config); + this.vestingVaultContract = this.drift.contract({ abi: VestingVault.abi, - address, - cache, - namespace, + address: this.address, }); } - get address(): `0x${string}` { - return this.contract.address; - } - get namespace(): string | undefined { - return this.contract.namespace; + /** + * Get the number of blocks before the delegation history is forgotten. Voting + * power from this vault can't be used on proposals that are older than the + * stale block lag. + */ + getStaleBlockLag(): Promise { + return this.vestingVaultContract.read("staleBlockLag"); } /** @@ -61,8 +51,7 @@ export class ReadVestingVault extends ReadVotingVault { async getToken(): Promise { return new ReadToken({ address: await this.vestingVaultContract.read("token"), - contractFactory: this.contractFactory, - network: this.network, + drift: this.drift, }); } @@ -72,367 +61,256 @@ export class ReadVestingVault extends ReadVotingVault { * if unvested tokens have 50% voting power compared to vested ones, this * value would be 50. */ - getUnvestedMultiplier({ - atBlock, - }: { atBlock?: BlockLike } = {}): Promise { - return this.vestingVaultContract.read( - "unvestedMultiplier", - undefined, - blockToReadOptions(atBlock), - ); + getUnvestedMultiplier(options?: ContractReadOptions): Promise { + return this.vestingVaultContract.read("unvestedMultiplier", {}, options); } /** * Get the grant data for a given address. */ - getGrant({ - account, - atBlock, - }: { - account: ReadVoter | `0x${string}`; - atBlock?: BlockLike; - }): Promise { - return this.vestingVaultContract.read( + async getGrant( + account: Address, + options?: ContractReadOptions, + ): Promise { + const { + allocation, + cliff, + created, + delegatee, + expiration, + latestVotingPower, + range, + withdrawn, + } = await this.vestingVaultContract.read( "getGrant", - { - _who: typeof account === "string" ? account : account.address, - }, - blockToReadOptions(atBlock), + { _who: account }, + options, ); + return { + allocation, + cliffBlock: cliff, + createdBlock: created, + delegatee, + expirationBlock: expiration, + latestVotingPower, + range, + withdrawn, + }; } /** * Gets the amount of tokens currently claimable from the grant. - * Mimics internal function https://github.com/delvtech/council/blob/main/contracts/vaults/VestingVault.sol#L434 + * + * Mimics internal function + * {@linkcode https://github.com/delvtech/council/blob/5f7be330b05f1c3bebd0176882cc5c3429f0764f/contracts/vaults/VestingVault.sol#L434 _getWithdrawableAmount}. + * * @param account - The grantee account address. * @returns The amount of claimable tokens. */ - async getWithdrawableAmount({ - account, - atBlock, - }: { - account: ReadVoter | `0x${string}`; - atBlock?: BlockLike; - }): Promise { - let blockNumber = atBlock; - - if (typeof blockNumber !== "bigint") { - const block = await getBlockOrThrow(this.network, blockNumber); - if (block.blockNumber === null) { + async getWithdrawableAmount( + account: Address, + options?: ContractReadOptions, + ): Promise { + const { allocation, createdBlock, cliffBlock, expirationBlock, withdrawn } = + await this.getGrant(account, options); + + let currentBlock = 0n; + if (typeof options?.block === "bigint") { + currentBlock = options.block; + } else { + const { number } = await getBlockOrThrow(this.drift, options); + if (number === undefined) { return 0n; } - blockNumber = block.blockNumber; + currentBlock = number; } - const { allocation, created, cliff, expiration, withdrawn } = - await this.getGrant({ - account: account, - atBlock, - }); - // funds are not unlocked - if (blockNumber < cliff) { + if (currentBlock < cliffBlock) { return 0n; } // all funds are claimable - if (blockNumber >= expiration) { + if (currentBlock >= expirationBlock) { return allocation - withdrawn; } - const blocksSinceCreated = blockNumber - created; - const grantDuration = expiration - created; - const amount = Big(String(allocation)) - .mul(String(blocksSinceCreated)) - .div(String(grantDuration)); + const vestedBlocks = currentBlock - createdBlock; + const grantDurationBlocks = expirationBlock - createdBlock; + const amount = fixed(allocation).mul(vestedBlocks).div(grantDurationBlocks); - return BigInt(amount.toFixed()) - withdrawn; + return amount.bigint - withdrawn; } /** - * Get all participants that have voting power in this vault. - * @param fromBlock - Include all voters that had power on or after this block number. - * @param toBlock - Include all voters that had power on or before this block number. + * Get the current delegate of a given account. */ - async getVoters({ - fromBlock, - toBlock, - }: { - fromBlock?: BlockLike; - toBlock?: BlockLike; - } = {}): Promise { - const powerByVoter = await this._getPowerByVoter({ - fromBlock, - toBlock, - }); - return Object.keys(powerByVoter).map( - (address) => - new ReadVoter({ - address: address as `0x${string}`, - contractFactory: this.contractFactory, - network: this.network, - }), - ); + async getDelegate( + account: Address, + options?: ContractReadOptions, + ): Promise
{ + const { delegatee } = await this.getGrant(account, options); + return delegatee; } /** - * Get all participants that have voting power in this vault along with their - * voting power, the amount of voting power being delegated to them, and the - * amount of power delegated to them by each delegator. This is a convenience - * method to fetch voting power and delegation data for a large number of - * voters in a single call. - * @param account - Get a breakdown for a specific account. - * @param fromBlock - Include all voters that had power on or after this block - * number. - * @param toBlock - Include all voters that had power on or before this block - * number. + * Get all voters delegated to a given account in this vault. */ - async getVotingPowerBreakdown({ - account, - fromBlock, - toBlock, - }: { - account?: `0x${string}`; - fromBlock?: BlockLike; - toBlock?: BlockLike; - } = {}): Promise { - // const breakdownByVoter = await this._getPowerBreakdownByVoter(options); - const voteChangeEvents = await this.vestingVaultContract.getEvents( - "VoteChange", - { - filter: { - to: account, - }, - fromBlock, - toBlock, - }, - ); - - const breakdownByVoter: Record< - `0x${string}`, - { - power: bigint; - powerFromAllDelegators: bigint; - powerByDelegator: Record<`0x${string}`, bigint>; - } - > = {}; - - for (const { - args: { from, to, amount }, - } of voteChangeEvents) { - if (!breakdownByVoter[to]) { - breakdownByVoter[to] = { - power: 0n, - powerFromAllDelegators: 0n, - powerByDelegator: {}, - }; - } - - breakdownByVoter[to].power += amount; - - // ignore self-delegation - if (from !== to) { - breakdownByVoter[to].powerFromAllDelegators += amount; - breakdownByVoter[to].powerByDelegator[from] = - (breakdownByVoter[to].powerByDelegator[from] ?? 0n) + amount; - } - } - - const voterMap = new Map<`0x${string}`, ReadVoter>(); - - return Object.entries(breakdownByVoter) - .filter(([, { power }]) => power > 0) - .map( - ([_address, { power, powerByDelegator, powerFromAllDelegators }]) => { - const address = _address as `0x${string}`; - - const voter = getOrSet({ - key: address, - cache: voterMap, - callback: () => - new ReadVoter({ - address, - contractFactory: this.contractFactory, - network: this.network, - }), - }); - - const votingPowerByDelegator = Object.entries(powerByDelegator) - .filter(([, votingPower]) => votingPower > 0n) - .map(([_address, votingPower]) => { - const address = _address as `0x${string}`; - const voter = getOrSet({ - key: address, - cache: voterMap, - callback: () => - new ReadVoter({ - address, - contractFactory: this.contractFactory, - network: this.network, - }), - }); - return { - voter, - votingPower, - }; - }); - - return { - voter, - votingPower: power, - votingPowerFromAllDelegators: powerFromAllDelegators, - votingPowerByDelegator, - }; - }, - ); - } - - /** - * Get the number of blocks before the delegation history is forgotten. Voting - * power from this vault can't be used on proposals that are older than the - * stale block lag. - */ - getStaleBlockLag(): Promise { - return this.vestingVaultContract.read("staleBlockLag"); + async getDelegatorsTo( + voter: Address, + { + fromBlock, + toBlock, + }: { + fromBlock?: Blockish; + toBlock?: Blockish; + }, + ): Promise { + const breakdown = await this.getVotingPowerBreakdown({ + voter, + fromBlock, + toBlock, + }); + return breakdown[0].delegators; } /** * Get the voting power for a given address at a given block without * accounting for the stale block lag. - * @param account - * @param atBlock - * @returns The historical voting power of the given address. */ async getHistoricalVotingPower({ - account, - atBlock, + voter, + /** + * The block to get voting power at. Usually the creation block of a + * proposal. + */ + block, + options, }: { - account: ReadVoter | `0x${string}`; - atBlock?: BlockLike; + voter: Address; + block: Blockish; + extraData?: Bytes; + options?: ContractReadOptions; }): Promise { - let blockNumber = atBlock; + if (typeof block !== "bigint") { + const { number } = await getBlockOrThrow(this.drift, options); - if (typeof blockNumber !== "bigint") { - const block = await getBlockOrThrow(this.network, blockNumber); - if (block.blockNumber === null) { + // No block number available for the requested hash or tag. + if (number === undefined) { return 0n; } - blockNumber = block.blockNumber; + + block = number; } return this.vestingVaultContract.read("queryVotePowerView", { - user: typeof account === "string" ? account : account.address, - blockNumber, + user: voter, + blockNumber: block, }); } /** * Get the sum of voting power held by all voters in this vault. - * @param atBlock - Get the total held at this block number. */ async getTotalVotingPower({ - atBlock, + fromBlock, + toBlock, }: { - atBlock?: BlockLike; + fromBlock?: Blockish; + toBlock?: Blockish; } = {}): Promise { - const powerByVoter = await this._getPowerByVoter({ - toBlock: atBlock, - }); - return Object.values(powerByVoter).reduce((sum, power) => sum + power, 0n); - } - - /** - * Get the current delegate of a given account. - */ - async getDelegate({ - account, - atBlock, - }: { - account: ReadVoter | `0x${string}`; - atBlock?: BlockLike; - }): Promise { - const { delegatee } = await this.getGrant({ - account, - atBlock, - }); - return new ReadVoter({ - address: delegatee, - contractFactory: this.contractFactory, - network: this.network, + const breakdown = await this.getVotingPowerBreakdown({ + fromBlock, + toBlock, }); + return Object.values(breakdown).reduce( + (sum, { votingPower }) => sum + votingPower, + 0n, + ); } /** - * Get all voters delegated to a given address in this vault. + * Get all participants that have voting power in this vault along with their + * voting power, the amount of voting power being delegated to them, and the + * amount of power delegated to them by each delegator. This is a convenience + * method to fetch voting power and delegation data for a large number of + * voters in a single call. */ - async getDelegatorsTo({ - account, - atBlock, + async getVotingPowerBreakdown({ + voter, + fromBlock, + toBlock, }: { - account: `0x${string}`; - atBlock?: BlockLike; - }): Promise { + /** + * Get a breakdown for a specific account. + */ + voter?: Address; + fromBlock?: Blockish; + toBlock?: Blockish; + } = {}): Promise { const voteChangeEvents = await this.vestingVaultContract.getEvents( "VoteChange", { - filter: { - to: account, - }, - toBlock: atBlock, + filter: { to: voter }, + fromBlock, + toBlock, }, ); - const powerByDelegators: Record<`0x${string}`, bigint> = {}; + const breakdownByVoter: { + [voter: Address]: { + votingPower: bigint; + votingPowerFromDelegators: bigint; + powerByDelegator: { + [delegator: Address]: bigint; + }; + }; + } = {}; + + // Calculate the delegated voting power for each voter. for (const { - args: { from, amount }, + args: { from, to, amount }, } of voteChangeEvents) { + const breakdown = (breakdownByVoter[to] ||= { + votingPower: 0n, + votingPowerFromDelegators: 0n, + powerByDelegator: {}, + }); + + breakdown.votingPower += amount; + // ignore self-delegation - if (from !== account) { - powerByDelegators[from] = (powerByDelegators[from] ?? 0n) + amount; + if (from !== to) { + breakdown.votingPowerFromDelegators += amount; + breakdown.powerByDelegator[from] ??= 0n; + breakdown.powerByDelegator[from] += amount; } } - return Object.entries(powerByDelegators) - .filter(([, power]) => power > 0) - .map( - ([address]) => - new ReadVoter({ - address: address as `0x${string}`, - contractFactory: this.contractFactory, - network: this.network, - }), - ); - } - - private async _getPowerByVoter({ - address, - fromBlock, - toBlock, - }: { - address?: `0x${string}`; - fromBlock?: BlockLike; - toBlock?: BlockLike; - } = {}): Promise> { - const voteChangeEvents = await this.vestingVaultContract.getEvents( - "VoteChange", - { - filter: { - to: address, - }, - fromBlock, - toBlock, - }, - ); + // Convert objects to arrays and filter out voters with no voting power. + let breakdowns: VoterPowerBreakdown[] = []; + for (const [ + voter, + { votingPower, votingPowerFromDelegators, powerByDelegator }, + ] of Object.entries(breakdownByVoter)) { + if (votingPower <= 0n) continue; + let delegators: VoterWithPower[] = []; + for (const [delegator, power] of Object.entries(powerByDelegator)) { + if (votingPower <= 0n) continue; + delegators.push({ + voter: delegator as Address, + votingPower: power, + }); + } - const powerByVoter: Record<`0x${string}`, bigint> = {}; - for (const { - args: { to, amount }, - } of voteChangeEvents) { - powerByVoter[to] = (powerByVoter[to] ?? 0n) + amount; + breakdowns.push({ + voter: voter as Address, + votingPower, + votingPowerFromDelegators, + delegators, + }); } - return Object.fromEntries( - Object.entries(powerByVoter).filter(([, power]) => power > 0n), - ); + return breakdowns; } } diff --git a/packages/council-js/src/entities/votingVault/vestingVault/ReadWriteVestingVault.ts b/packages/council-js/src/entities/votingVault/vestingVault/ReadWriteVestingVault.ts index 808fc2c8..505aeb9a 100644 --- a/packages/council-js/src/entities/votingVault/vestingVault/ReadWriteVestingVault.ts +++ b/packages/council-js/src/entities/votingVault/vestingVault/ReadWriteVestingVault.ts @@ -1,72 +1,69 @@ -import { - CachedReadWriteContract, - ContractWriteOptions, -} from "@delvtech/evm-client"; -import { ReadWriteContractFactory } from "src/contract/factory"; -import { ReadWriteContractModelOptions } from "src/entities/Model"; +import { Address, Hash, OnMinedParam, ReadWriteAdapter } from "@delvtech/drift"; +import { ContractWriteOptions } from "@delvtech/evm-client"; +import { EntityWriteParams } from "src/entities/Entity"; import { ReadWriteToken } from "src/entities/token/ReadWriteToken"; import { ReadVestingVault } from "src/entities/votingVault/vestingVault/ReadVestingVault"; -import { VestingVaultAbi } from "src/entities/votingVault/vestingVault/types"; -interface ReadWriteVestingVaultOptions extends ReadWriteContractModelOptions {} - -export class ReadWriteVestingVault extends ReadVestingVault { - declare vestingVaultContract: CachedReadWriteContract; - declare contractFactory: ReadWriteContractFactory; - - constructor(options: ReadWriteVestingVaultOptions) { - super(options); - } - - override async getToken(): Promise { +export class ReadWriteVestingVault< + A extends ReadWriteAdapter = ReadWriteAdapter, +> extends ReadVestingVault { + async getToken(): Promise { return new ReadWriteToken({ address: await this.vestingVaultContract.read("token"), - contractFactory: this.contractFactory, - network: this.network, + drift: this.drift, }); } /** * Change current delegate. - * @param delegate - The address to delegate to. Defaults to the signer's - * address. * @returns The transaction hash. */ - async changeDelegate({ - delegate, + changeDelegate({ + /** + * The address to delegate to. Defaults to the signer's + * address. + */ + args: { delegate }, options, - }: { - delegate: `0x${string}`; - options?: ContractWriteOptions; - }): Promise<`0x${string}`> { - const hash = await this.vestingVaultContract.write( + }: EntityWriteParams<{ + delegate: Address; + }>): Promise { + return this.vestingVaultContract.write( "delegate", + { _to: delegate }, { - _to: delegate, + ...options, + onMined: (receipt) => { + if (receipt?.status === "success") { + this.contract.cache.clear(); + } + options?.onMined?.(receipt); + }, }, - options, ); - this.contract.clearCache(); - return hash; } /** * Claim a grant and withdraw the tokens. * @returns The transaction hash. */ - async claim({ + claim({ options, }: { - options?: ContractWriteOptions; - } = {}): Promise<`0x${string}`> { - const hash = await this.vestingVaultContract.write( + options?: ContractWriteOptions & OnMinedParam; + } = {}): Promise { + return this.vestingVaultContract.write( "claim", - undefined, - options, + {}, + { + ...options, + onMined: (receipt) => { + if (receipt?.status === "success") { + this.contract.cache.clear(); + } + options?.onMined?.(receipt); + }, + }, ); - const token = await this.getToken(); - token.contract.clearCache(); - this.contract.clearCache(); - return hash; } } diff --git a/packages/council-js/src/entities/votingVault/vestingVault/types.ts b/packages/council-js/src/entities/votingVault/vestingVault/types.ts index 373ebd0d..ecca189a 100644 --- a/packages/council-js/src/entities/votingVault/vestingVault/types.ts +++ b/packages/council-js/src/entities/votingVault/vestingVault/types.ts @@ -1,5 +1,12 @@ -import { VestingVault } from "@delvtech/council-artifacts/VestingVault"; -import { FunctionReturn } from "@delvtech/evm-client"; +import { Address } from "@delvtech/drift"; -export type VestingVaultAbi = typeof VestingVault.abi; -export type Grant = FunctionReturn; +export type Grant = { + allocation: bigint; + withdrawn: bigint; + createdBlock: bigint; + expirationBlock: bigint; + cliffBlock: bigint; + latestVotingPower: bigint; + delegatee: Address; + range: readonly [bigint, bigint]; +}; diff --git a/packages/council-js/src/error.ts b/packages/council-js/src/error.ts index 94020889..1dd5e1d0 100644 --- a/packages/council-js/src/error.ts +++ b/packages/council-js/src/error.ts @@ -1,7 +1,7 @@ import { DriftError } from "@delvtech/drift"; export class CouncilSdkError extends DriftError { - constructor(error: string, options?: ErrorOptions) { + constructor(error: any, options?: ErrorOptions) { super(error, { prefix: "🅲 ", name: "Council SDK Error", diff --git a/packages/council-js/src/errors/BlockNotFound.ts b/packages/council-js/src/errors/BlockNotFound.ts deleted file mode 100644 index 21636747..00000000 --- a/packages/council-js/src/errors/BlockNotFound.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { BlockLike } from "src/utils/blockToReadOptions"; - -export class BlockNotFoundError extends Error { - constructor(block?: BlockLike) { - super(`Block${block !== undefined ? ` ${block}` : ""} not found`); - this.name = "BlockNotFound"; - } -} diff --git a/packages/council-js/src/index.ts b/packages/council-js/src/index.ts index e69de29b..a6ac212c 100644 --- a/packages/council-js/src/index.ts +++ b/packages/council-js/src/index.ts @@ -0,0 +1,51 @@ +// Core voting +export { ReadCoreVoting } from "src/entities/coreVoting/ReadCoreVoting"; +export { ReadWriteCoreVoting } from "src/entities/coreVoting/ReadWriteCoreVoting"; +export { + BALLOTS, + EXECUTED_PROPOSAL_HASH, +} from "src/entities/coreVoting/constants"; +export type { + Actions, + Ballot, + Proposal, + ProposalArgs, + Vote, + VoteResults, +} from "src/entities/coreVoting/types"; + +// Council +export { ReadCouncil } from "src/entities/council/ReadCouncil"; +export { ReadWriteCouncil } from "src/entities/council/ReadWriteCouncil"; + +// Voting vaults +export { ReadVotingVault } from "src/entities/votingVault/ReadVotingVault"; +export type { + VoterPowerBreakdown, + VoterWithPower, + VotingPowerByVoter, + VotingVaultAbi, +} from "src/entities/votingVault/types"; + +export { ReadGscVault } from "src/entities/votingVault/gscVault/ReadGscVault"; +export { ReadWriteGscVault } from "src/entities/votingVault/gscVault/ReadWriteGscVault"; + +export { ReadLockingVault } from "src/entities/votingVault/lockingVault/ReadLockingVault"; +export { ReadWriteLockingVault } from "src/entities/votingVault/lockingVault/ReadWriteLockingVault"; + +export { ReadVestingVault } from "src/entities/votingVault/vestingVault/ReadVestingVault"; +export { ReadWriteVestingVault } from "src/entities/votingVault/vestingVault/ReadWriteVestingVault"; + +// Airdrop +export { ReadAirdrop } from "src/entities/airdrop/ReadAirdrop"; +export { ReadWriteAirdrop } from "src/entities/airdrop/ReadWriteAirdrop"; + +// Token +export { ReadToken } from "src/entities/token/ReadToken"; +export { ReadWriteToken } from "src/entities/token/ReadWriteToken"; + +// Utils +export type { Blockish } from "src/utils/types"; + +// Error +export { CouncilSdkError } from "src/error"; diff --git a/packages/council-js/src/utils/cachedFn.ts b/packages/council-js/src/utils/cachedFn.ts new file mode 100644 index 00000000..59b6a721 --- /dev/null +++ b/packages/council-js/src/utils/cachedFn.ts @@ -0,0 +1,25 @@ +import { ClientCache, MaybePromise, SerializableKey } from "@delvtech/drift"; + +/** + * Checks the cache for the key and returns the value if found, otherwise + * executes the function and stores the result in the cache before returning it. + */ +export async function cachedFn< + T extends (...args: any[]) => MaybePromise, +>({ + cache, + key, + fn, +}: { + cache: ClientCache; + key: MaybePromise; + fn: T; +}): Promise { + key = await key; + if (await cache.has(key)) { + return cache.get(key) as any; + } + return fn().then((value: unknown) => + value === undefined ? value : cache.set(key, value).then(() => value), + ); +} diff --git a/packages/council-js/src/utils/getEventsWithSplitAndRetry.ts b/packages/council-js/src/utils/getEventsWithSplitAndRetry.ts deleted file mode 100644 index d45eae8d..00000000 --- a/packages/council-js/src/utils/getEventsWithSplitAndRetry.ts +++ /dev/null @@ -1,104 +0,0 @@ -import { - ContractGetEventsOptions, - Event, - EventName, - Network, - ReadContract, -} from "@delvtech/evm-client"; -import { Abi } from "abitype"; - -/** - * Fetch events from a contract, splitting the range of blocks in half and - * sending 2 smaller requests if the original request fails. This repeats - * until the attempts are exhausted. - */ -export async function getEventsWithSplitAndRetry< - TAbi extends Abi, - TEventName extends EventName, ->({ - eventName, - contract, - network, - attemptsLeft, - options, -}: { - eventName: TEventName; - contract: ReadContract; - network: Network; - attemptsLeft: number; - options?: ContractGetEventsOptions; -}): Promise[]> { - if (attemptsLeft <= 0) { - throw new Error(`Max attempts reached for fetching events: ${eventName}`); - } - - return contract.getEvents(eventName, options).catch(async (error) => { - let fromBlock = options?.fromBlock; - let toBlock = options?.toBlock; - - // Unable to make ranges with these blocks - if (typeof fromBlock === "string" && fromBlock !== "earliest") { - throw new Error( - `Unable to split block range with fromBlock: ${fromBlock}, for event: ${eventName}\n\n${error.message}`, - ); - } - if (typeof toBlock === "string" && toBlock === "earliest") { - throw new Error( - `Unable to split block range with toBlock: ${toBlock}, for event: ${eventName}\n\n${error.message}`, - ); - } - - // Set default values for fromBlock and toBlock - if (typeof fromBlock !== "bigint") { - fromBlock = 0n; - } - if (typeof toBlock !== "bigint") { - const block = await network.getBlock(); - if (!block?.blockNumber) { - throw new Error( - `Unable to get latest block for event: ${eventName}\n\n${error.message}`, - ); - } - toBlock = block.blockNumber; - } - - // No range to split - if (fromBlock === toBlock) { - throw error; - } - - const middleBlock = (fromBlock + toBlock) / 2n; - - console.warn("Failed to fetch events:", { - address: contract.address, - eventName, - options, - attemptsLeft, - }); - - const firstHalf = await getEventsWithSplitAndRetry({ - eventName, - contract, - network, - options: { - ...options, - fromBlock, - toBlock: middleBlock, - }, - attemptsLeft: attemptsLeft - 1, - }); - const secondHalf = await getEventsWithSplitAndRetry({ - eventName, - contract, - network, - options: { - ...options, - fromBlock: middleBlock + 1n, - toBlock, - }, - attemptsLeft: attemptsLeft - 1, - }); - - return firstHalf.concat(secondHalf); - }); -} diff --git a/packages/council-js/src/utils/getVaultsWithPower.ts b/packages/council-js/src/utils/getVaultsWithPower.ts deleted file mode 100644 index 28db34aa..00000000 --- a/packages/council-js/src/utils/getVaultsWithPower.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { ReadVotingVault } from "src/entities/votingVault/ReadVotingVault"; - - -export async function getVaultsWithPower( - account: `0x${string}`, - vaults: ReadVotingVault[], -): Promise { - const vaultsWithPower: ReadVotingVault[] = []; - - for (const vault of vaults) { - // Some vaults may throw an error when voting power is zero or cannot find - // found. The catch block ensures this does not interrupt any voting flows. - const votingPower = await vault.getVotingPower({ account: account }).catch(() => 0n); - - if (votingPower > 0n) { - vaultsWithPower.push(vault); - } - } - - return vaultsWithPower; -} diff --git a/packages/council-js/src/utils/types.ts b/packages/council-js/src/utils/types.ts new file mode 100644 index 00000000..66a5e662 --- /dev/null +++ b/packages/council-js/src/utils/types.ts @@ -0,0 +1,3 @@ +import { ContractCallOptions } from "@delvtech/drift"; + +export type Blockish = ContractCallOptions["block"]; From b5988fa29c68416c92d428b0533f607d226b2bce Mon Sep 17 00:00:00 2001 From: Ryan Goree Date: Tue, 11 Feb 2025 20:20:46 -0600 Subject: [PATCH 018/146] Update tsup and package.json --- packages/council-js/package.json | 31 +++++++++++++++++++++++++----- packages/council-js/tsup.config.ts | 23 ++-------------------- 2 files changed, 28 insertions(+), 26 deletions(-) diff --git a/packages/council-js/package.json b/packages/council-js/package.json index 7a6a962d..577cd3fa 100644 --- a/packages/council-js/package.json +++ b/packages/council-js/package.json @@ -2,7 +2,13 @@ "name": "@delvtech/council-js", "version": "0.0.0", "license": "AGPL-3.0", - "type": "module", + "author": { + "name": "DELV", + "email": "contact@delv.tech", + "url": "https://github.com/delvtech" + }, + "repository": "https://github.com/delvtech/council-kit/tree/main/packages/council-js", + "bugs": "https://github.com/delvtech/council-kit/issues", "scripts": { "build": "tsup", "watch": "tsup --watch", @@ -28,14 +34,29 @@ "typescript": "^5.7.3", "vitest": "^3.0.5" }, + "type": "module", + "main": "dist/index.cjs", + "types": "dist/index.d.cts", "exports": { ".": { - "types": "./dist/index.d.ts", - "default": "./dist/index.js" + "types": { + "import": "./dist/index.d.ts", + "require": "./dist/index.d.cts" + }, + "default": { + "import": "./dist/index.js", + "require": "./dist/index.cjs" + } + }, + "./package.json": "./package.json" + }, + "typesVersions": { + "*": { + ".": [ + "./dist/index.d.ts" + ] } }, - "main": "dist/index.js", - "types": "dist/index.d.ts", "files": [ "dist" ], diff --git a/packages/council-js/tsup.config.ts b/packages/council-js/tsup.config.ts index b8aa555c..f021811a 100644 --- a/packages/council-js/tsup.config.ts +++ b/packages/council-js/tsup.config.ts @@ -1,27 +1,8 @@ import { defineConfig } from "tsup"; export default defineConfig({ - // Splitting the entry points in foundational packages like this makes it - // easier for wrapper packages to re-export `*` from some entry points and - // specific exports from others that it needs to augment or modify. - // Otherwise, if the wrapper package overwrites any of the exports, it would - // have to re-export all of the foundational package's exports individually. - entry: [ - "src/exports/index.ts", - "src/exports/airdrop.ts", - "src/exports/council.ts", - "src/exports/errors.ts", - "src/exports/contract.ts", - "src/exports/model.ts", - "src/exports/proposal.ts", - "src/exports/token.ts", - "src/exports/utils.ts", - "src/exports/vaults.ts", - "src/exports/vote.ts", - "src/exports/voter.ts", - "src/exports/voting.ts", - ], - format: ["esm"], + entry: ["src/index.ts"], + format: ["esm", "cjs"], sourcemap: true, dts: true, clean: true, From 9d2c672ce50768a7c76eba82df95f73ef562d1e4 Mon Sep 17 00:00:00 2001 From: Ryan Goree Date: Tue, 11 Feb 2025 20:21:05 -0600 Subject: [PATCH 019/146] Remove old typedoc tags --- packages/council-js/src/entities/coreVoting/types.ts | 2 -- .../src/entities/votingVault/gscVault/ReadGscVault.ts | 1 - .../src/entities/votingVault/lockingVault/ReadLockingVault.ts | 1 - .../src/entities/votingVault/vestingVault/ReadVestingVault.ts | 1 - 4 files changed, 5 deletions(-) diff --git a/packages/council-js/src/entities/coreVoting/types.ts b/packages/council-js/src/entities/coreVoting/types.ts index d8d0d315..c0b62dfd 100644 --- a/packages/council-js/src/entities/coreVoting/types.ts +++ b/packages/council-js/src/entities/coreVoting/types.ts @@ -2,13 +2,11 @@ import { BALLOTS } from "src/entities/coreVoting/constants"; /** * A valid ballot option. - * @category Data Sources */ export type Ballot = (typeof BALLOTS)[number]; /** * The amount of voting power casted by ballot. - * @category Data Sources */ export type VoteResults = Record; diff --git a/packages/council-js/src/entities/votingVault/gscVault/ReadGscVault.ts b/packages/council-js/src/entities/votingVault/gscVault/ReadGscVault.ts index 75a66e40..b16cb96d 100644 --- a/packages/council-js/src/entities/votingVault/gscVault/ReadGscVault.ts +++ b/packages/council-js/src/entities/votingVault/gscVault/ReadGscVault.ts @@ -14,7 +14,6 @@ import { Blockish } from "src/utils/types"; * A VotingVault for the Governance Steering Council in which each member has a * single vote and must maintain a minimum required voting power in the core * voting vaults to remain eligible. - * @category Models */ export class ReadGscVault< A extends Adapter = Adapter, diff --git a/packages/council-js/src/entities/votingVault/lockingVault/ReadLockingVault.ts b/packages/council-js/src/entities/votingVault/lockingVault/ReadLockingVault.ts index 2b96bf65..f8b20168 100644 --- a/packages/council-js/src/entities/votingVault/lockingVault/ReadLockingVault.ts +++ b/packages/council-js/src/entities/votingVault/lockingVault/ReadLockingVault.ts @@ -18,7 +18,6 @@ import { Blockish } from "src/utils/types"; /** * A VotingVault that gives voting power for depositing tokens. - * @category Models */ export class ReadLockingVault< A extends Adapter = Adapter, diff --git a/packages/council-js/src/entities/votingVault/vestingVault/ReadVestingVault.ts b/packages/council-js/src/entities/votingVault/vestingVault/ReadVestingVault.ts index e30e0882..7b5a502c 100644 --- a/packages/council-js/src/entities/votingVault/vestingVault/ReadVestingVault.ts +++ b/packages/council-js/src/entities/votingVault/vestingVault/ReadVestingVault.ts @@ -21,7 +21,6 @@ import { Blockish } from "src/utils/types"; /** * A VotingVault that gives voting power for receiving grants and applies a * multiplier on unvested tokens to reduce their voting power. - * @category Models */ export class ReadVestingVault< A extends Adapter = Adapter, From 8ee2e87db892afc74f7c982388d5f82ba5259ed2 Mon Sep 17 00:00:00 2001 From: Ryan Goree Date: Tue, 11 Feb 2025 20:24:13 -0600 Subject: [PATCH 020/146] Remove unnecessary config --- packages/.eslintrc | 5 ----- 1 file changed, 5 deletions(-) delete mode 100644 packages/.eslintrc diff --git a/packages/.eslintrc b/packages/.eslintrc deleted file mode 100644 index bfe638b3..00000000 --- a/packages/.eslintrc +++ /dev/null @@ -1,5 +0,0 @@ -{ - // fallback eslint config to prevent lint-staged from failing when packages - // don't contain an eslint config. Instead, we'll just ignore them. - "ignorePatterns": ["**/*"] -} From c621ae559d468858f2376374ef8f6c37d37c4a0e Mon Sep 17 00:00:00 2001 From: Ryan Goree Date: Tue, 11 Feb 2025 20:49:40 -0600 Subject: [PATCH 021/146] Fix test and types --- packages/council-js/package.json | 1 + .../lockingVault/ReadLockingVault.test.ts | 171 +++++++++--------- .../lockingVault/ReadLockingVault.ts | 16 +- yarn.lock | 12 ++ 4 files changed, 104 insertions(+), 96 deletions(-) diff --git a/packages/council-js/package.json b/packages/council-js/package.json index 577cd3fa..e22f640b 100644 --- a/packages/council-js/package.json +++ b/packages/council-js/package.json @@ -26,6 +26,7 @@ "devDependencies": { "@council/eslint-config": "*", "@council/tsconfig": "*", + "@types/sinon": "^17.0.3", "sinon": "^17.0.1", "tsconfig-paths": "^4.2.0", "tsup": "^8.3.6", diff --git a/packages/council-js/src/entities/votingVault/lockingVault/ReadLockingVault.test.ts b/packages/council-js/src/entities/votingVault/lockingVault/ReadLockingVault.test.ts index d7ed2385..d02d4713 100644 --- a/packages/council-js/src/entities/votingVault/lockingVault/ReadLockingVault.test.ts +++ b/packages/council-js/src/entities/votingVault/lockingVault/ReadLockingVault.test.ts @@ -1,10 +1,7 @@ -import { NetworkStub } from "@delvtech/evm-client/stubs"; -import { ReadCouncil } from "src/entities/council/ReadCouncil"; -import { LockingVaultAbi } from "src/entities/votingVault/lockingVault/types"; -import { - CachedReadContractStub, - stubContractFactory, -} from "src/test/stubContractFactory"; +import { LockingVault } from "@delvtech/council-artifacts/LockingVault"; +import { createMockDrift } from "@delvtech/drift/testing"; +import { ReadLockingVault } from "src/entities/votingVault/lockingVault/ReadLockingVault"; +import { VoterPowerBreakdown } from "src/entities/votingVault/types"; import { describe, expect, it } from "vitest"; const ALICE = "0x123"; @@ -14,121 +11,117 @@ const DAVE = "0xabc"; const EVE = "0xdef"; describe("ReadLockingVault", () => { - function setupStub() { - const council = new ReadCouncil({ - contractFactory: stubContractFactory, - network: new NetworkStub(), + const drift = createMockDrift(); + function setupVault() { + const lockingVault = new ReadLockingVault({ + address: "0x", + drift, + }); + const contract = drift.contract({ + address: lockingVault.address, + abi: LockingVault.abi, }); - const lockingVault = council.lockingVault("0x"); - // The model doesn't know that the factory creates stubbed contracts. - const contractStub = - lockingVault.lockingVaultContract as CachedReadContractStub; - - return { council, lockingVault, contractStub }; + return { lockingVault, contract }; } it("Accurately breaks down voting power", async () => { - const { contractStub, lockingVault } = setupStub(); + const { contract, lockingVault } = setupVault(); - contractStub.stubEvents( - "VoteChange", - { filter: { to: undefined }, fromBlock: undefined, toBlock: undefined }, - [ - // Alice receives 100 - { - args: { - amount: 100n, - from: ALICE, - to: ALICE, - }, - eventName: "VoteChange", + const foo = contract.onGetEvents("VoteChange").resolves([ + // Alice receives 100 + { + args: { + amount: 100n, + from: ALICE, + to: ALICE, }, - // Bob delegates 100 to Alice - { - args: { - amount: 100n, - from: BOB, - to: ALICE, - }, - eventName: "VoteChange", + eventName: "VoteChange", + }, + // Bob delegates 100 to Alice + { + args: { + amount: 100n, + from: BOB, + to: ALICE, }, - // Charlie delegates 100 to Alice - { - args: { - amount: 100n, - from: CHARLIE, - to: ALICE, - }, - eventName: "VoteChange", + eventName: "VoteChange", + }, + // Charlie delegates 100 to Alice + { + args: { + amount: 100n, + from: CHARLIE, + to: ALICE, }, - // Dave delegates 100 to Alice - { - args: { - amount: 100n, - from: DAVE, - to: ALICE, - }, - eventName: "VoteChange", + eventName: "VoteChange", + }, + // Dave delegates 100 to Alice + { + args: { + amount: 100n, + from: DAVE, + to: ALICE, }, - // Eve receives 100 - { - args: { - amount: 100n, - from: EVE, - to: EVE, - }, - eventName: "VoteChange", + eventName: "VoteChange", + }, + // Eve receives 100 + { + args: { + amount: 100n, + from: EVE, + to: EVE, }, - // Bob changes his delegation of 100 from Alice to Eve - { - args: { - amount: -100n, - from: BOB, - to: ALICE, - }, - eventName: "VoteChange", + eventName: "VoteChange", + }, + // Bob changes his delegation of 100 from Alice to Eve + { + args: { + amount: -100n, + from: BOB, + to: ALICE, }, - { - args: { - amount: 100n, - from: BOB, - to: EVE, - }, - eventName: "VoteChange", + eventName: "VoteChange", + }, + { + args: { + amount: 100n, + from: BOB, + to: EVE, }, - ], - ); + eventName: "VoteChange", + }, + ]); const powerBreakdown = await lockingVault.getVotingPowerBreakdown(); expect(powerBreakdown).toEqual([ { - voter: expect.objectContaining({ address: ALICE }), + voter: ALICE, votingPower: 300n, - votingPowerFromAllDelegators: 200n, - votingPowerByDelegator: [ + votingPowerFromDelegators: 200n, + delegators: [ { - voter: expect.objectContaining({ address: CHARLIE }), + voter: CHARLIE, votingPower: 100n, }, { - voter: expect.objectContaining({ address: DAVE }), + voter: DAVE, votingPower: 100n, }, ], }, { - voter: expect.objectContaining({ address: EVE }), + voter: EVE, votingPower: 200n, - votingPowerFromAllDelegators: 100n, - votingPowerByDelegator: [ + votingPowerFromDelegators: 100n, + delegators: [ { - voter: expect.objectContaining({ address: BOB }), + voter: BOB, votingPower: 100n, }, ], }, - ]); + ] satisfies VoterPowerBreakdown[]); }); }); diff --git a/packages/council-js/src/entities/votingVault/lockingVault/ReadLockingVault.ts b/packages/council-js/src/entities/votingVault/lockingVault/ReadLockingVault.ts index f8b20168..30f3671c 100644 --- a/packages/council-js/src/entities/votingVault/lockingVault/ReadLockingVault.ts +++ b/packages/council-js/src/entities/votingVault/lockingVault/ReadLockingVault.ts @@ -215,19 +215,21 @@ export class ReadLockingVault< } } - // Convert objects to arrays and filter out voters with no voting power. let breakdowns: VoterPowerBreakdown[] = []; - for (const [ - voter, - { votingPower, votingPowerFromDelegators, powerByDelegator }, - ] of Object.entries(breakdownByVoter)) { + + // Convert objects to arrays and filter out voters with no voting power. + for (const [voter, breakdown] of Object.entries(breakdownByVoter)) { + const { votingPower, votingPowerFromDelegators, powerByDelegator } = + breakdown; if (votingPower <= 0n) continue; + let delegators: VoterWithPower[] = []; - for (const [delegator, power] of Object.entries(powerByDelegator)) { + + for (const [delegator, votingPower] of Object.entries(powerByDelegator)) { if (votingPower <= 0n) continue; delegators.push({ voter: delegator as Address, - votingPower: power, + votingPower, }); } diff --git a/yarn.lock b/yarn.lock index 187eea84..f0ec6919 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3043,6 +3043,18 @@ dependencies: "@types/node" "*" +"@types/sinon@^17.0.3": + version "17.0.3" + resolved "https://registry.yarnpkg.com/@types/sinon/-/sinon-17.0.3.tgz#9aa7e62f0a323b9ead177ed23a36ea757141a5fa" + integrity sha512-j3uovdn8ewky9kRBG19bOwaZbexJu/XjtkHyjvUgt4xfPFz18dcORIMqnYh66Fx3Powhcr85NT5+er3+oViapw== + dependencies: + "@types/sinonjs__fake-timers" "*" + +"@types/sinonjs__fake-timers@*": + version "8.1.5" + resolved "https://registry.yarnpkg.com/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.5.tgz#5fd3592ff10c1e9695d377020c033116cc2889f2" + integrity sha512-mQkU2jY8jJEF7YHjHvsQO8+3ughTL1mcnn96igfhONmR+fUPSKIkefQYpSe8bsly2Ep7oQbn/6VG5/9/0qcArQ== + "@types/trusted-types@^2.0.2": version "2.0.7" resolved "https://registry.yarnpkg.com/@types/trusted-types/-/trusted-types-2.0.7.tgz#baccb07a970b91707df3a3e8ba6896c57ead2d11" From b9ee3655b0370111690072e0327d45b174a575a8 Mon Sep 17 00:00:00 2001 From: Ryan Goree Date: Tue, 11 Feb 2025 20:53:36 -0600 Subject: [PATCH 022/146] Remove postinstall hook --- package.json | 1 - 1 file changed, 1 deletion(-) diff --git a/package.json b/package.json index f43287d2..7682bf87 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,6 @@ "format": "turbo run format", "format:check": "turbo run format:check", "typecheck": "turbo run typecheck", - "postinstall": "husky install", "test": "turbo test", "release": "turbo build && changeset publish" }, From e8ac0dcb2a6c1fefd0513a47f59982b8711d4818 Mon Sep 17 00:00:00 2001 From: Ryan Goree Date: Tue, 11 Feb 2025 21:30:48 -0600 Subject: [PATCH 023/146] Add client config to entity constructor params --- packages/council-js/src/entities/Entity.ts | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/packages/council-js/src/entities/Entity.ts b/packages/council-js/src/entities/Entity.ts index c6c0bec1..29d6131b 100644 --- a/packages/council-js/src/entities/Entity.ts +++ b/packages/council-js/src/entities/Entity.ts @@ -1,11 +1,11 @@ import { Adapter, Address, + ClientConfig, ContractWriteOptions, Drift, OnMinedParam, OneOf, - SimpleCache, createDrift, } from "@delvtech/drift"; import { CouncilSdkError } from "src/error"; @@ -23,11 +23,7 @@ export type EntityConfig = OneOf< | { drift?: Drift; } - | { - cache?: SimpleCache; - chainId?: number; - rpcUrl?: string; - } + | ClientConfig > & { /** * The earliest block to fetch events from. From e2edf685ff1cfa6e2f9077ca578d2cbb2cf8e11c Mon Sep 17 00:00:00 2001 From: Ryan Goree Date: Tue, 11 Feb 2025 21:31:00 -0600 Subject: [PATCH 024/146] Bump UI dependencies --- apps/council-ui/package.json | 57 +- yarn.lock | 2315 ++++++++++++++++++++++------------ 2 files changed, 1514 insertions(+), 858 deletions(-) diff --git a/apps/council-ui/package.json b/apps/council-ui/package.json index 1764c65b..735ac71f 100644 --- a/apps/council-ui/package.json +++ b/apps/council-ui/package.json @@ -12,51 +12,52 @@ "typecheck": "tsc --noEmit" }, "dependencies": { + "@delvtech/drift-viem": "^0.1.3", "@delvtech/council-artifacts": "^0.1.0", - "@delvtech/council-viem": "^0.1.0", - "@ensdomains/ensjs": "^3.4.4", - "@heroicons/react": "^2.1.1", + "@delvtech/council-js": "^0.0.0", + "@ensdomains/ensjs": "^4.0.2", + "@heroicons/react": "^2.2.0", "@metamask/jazzicon": "^2.0.0", - "@pushprotocol/restapi": "^1.6.7", - "@rainbow-me/rainbowkit": "^2.0.2", + "@pushprotocol/restapi": "^1.7.30", + "@rainbow-me/rainbowkit": "^2.2.3", "@tailwindcss/line-clamp": "^0.4.4", - "@tanstack/react-query": "^5.22.2", - "assert-never": "^1.2.1", + "@tanstack/react-query": "^5.66.0", + "assert-never": "^1.4.0", "classnames": "^2.5.1", "d3-format": "^3.1.0", - "daisyui": "^4.7.2", - "date-fns": "^3.3.1", - "ethers": "^6.11.1", - "fuse.js": "^7.0.0", - "listr2": "^8.0.2", + "daisyui": "^4.12.23", + "date-fns": "^4.1.0", + "ethers": "^6.13.5", + "fuse.js": "^7.1.0", + "listr2": "^8.2.5", "lodash.chunk": "^4.2.0", "next": "13.0.0", "react": "18.2.0", "react-dom": "18.2.0", - "react-hot-toast": "^2.4.1", - "react-loading-skeleton": "^3.4.0", - "react-tooltip": "^5.26.0", - "viem": "^2.16.2", - "wagmi": "^2.5.11" + "react-hot-toast": "^2.5.1", + "react-loading-skeleton": "^3.5.0", + "react-tooltip": "^5.28.0", + "viem": "^2.23.1", + "wagmi": "^2.14.11" }, "devDependencies": { - "@babel/core": "^7.23.9", + "@babel/core": "^7.26.8", "@council/eslint-config": "*", "@council/tsconfig": "*", - "@tailwindcss/typography": "^0.5.10", - "@tanstack/eslint-plugin-query": "^5.20.1", + "@tailwindcss/typography": "^0.5.16", + "@tanstack/eslint-plugin-query": "^5.66.1", "@types/d3-format": "^3.0.4", "@types/lodash.chunk": "^4.2.9", - "@types/node": "^20.11.19", - "@types/react": "18.2.57", - "autoprefixer": "^10.4.17", + "@types/node": "^22.13.1", + "@types/react": "^18.2.57", + "autoprefixer": "^10.4.20", "eslint": "8.56.0", "eslint-config-next": "^14.1.0", - "eslint-plugin-react": "^7.33.2", - "eslint-plugin-tailwindcss": "^3.14.3", + "eslint-plugin-react": "^7.37.4", + "eslint-plugin-tailwindcss": "^3.18.0", "next-transpile-modules": "10.0.1", - "postcss": "^8.4.35", - "tailwindcss": "^3.4.1", - "typescript": "^5.3.3" + "postcss": "^8.5.2", + "tailwindcss": "^4.0.6", + "typescript": "^5.7.3" } } diff --git a/yarn.lock b/yarn.lock index f0ec6919..b5781262 100644 --- a/yarn.lock +++ b/yarn.lock @@ -17,11 +17,6 @@ resolved "https://registry.yarnpkg.com/@adraffy/ens-normalize/-/ens-normalize-1.10.1.tgz#63430d04bd8c5e74f8d7d049338f1cd9d4f02069" integrity sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw== -"@adraffy/ens-normalize@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@adraffy/ens-normalize/-/ens-normalize-1.9.0.tgz#223572538f6bea336750039bb43a4016dcc8182d" - integrity sha512-iowxq3U30sghZotgl4s/oJRci6WPBfNO5YYgk2cIOMCHr3LeGPcsZjCEr+33Q4N+oV3OABDAtA+pyvWjbvBifQ== - "@adraffy/ens-normalize@^1.10.1": version "1.11.0" resolved "https://registry.yarnpkg.com/@adraffy/ens-normalize/-/ens-normalize-1.11.0.tgz#42cc67c5baa407ac25059fcd7d405cc5ecdb0c33" @@ -32,15 +27,6 @@ resolved "https://registry.yarnpkg.com/@alloc/quick-lru/-/quick-lru-5.2.0.tgz#7bf68b20c0a350f936915fcae06f58e32007ce30" integrity sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw== -"@ambire/signature-validator@^1.3.1": - version "1.3.1" - resolved "https://registry.yarnpkg.com/@ambire/signature-validator/-/signature-validator-1.3.1.tgz#d899aae3b26f65a3557b4d43b6fe4b50c6f9074b" - integrity sha512-kR6Se3nhAGf1VMeun7V2Lml9KRXB5oz64vO2zGSg+dNaGq4BPDEjsNdr0PIKXZ8651sDlRCN7V9SzL5E2ddBYQ== - dependencies: - ethers "^5.6.5" - tap-spec "^5.0.0" - tape "^5.5.3" - "@ampproject/remapping@^2.2.0": version "2.2.1" resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630" @@ -57,12 +43,26 @@ "@babel/highlight" "^7.23.4" chalk "^2.4.2" +"@babel/code-frame@^7.26.2": + version "7.26.2" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.26.2.tgz#4b5fab97d33338eff916235055f0ebc21e573a85" + integrity sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ== + dependencies: + "@babel/helper-validator-identifier" "^7.25.9" + js-tokens "^4.0.0" + picocolors "^1.0.0" + "@babel/compat-data@^7.23.5": version "7.23.5" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.23.5.tgz#ffb878728bb6bdcb6f4510aa51b1be9afb8cfd98" integrity sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw== -"@babel/core@^7.23.5", "@babel/core@^7.23.9": +"@babel/compat-data@^7.26.5": + version "7.26.8" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.26.8.tgz#821c1d35641c355284d4a870b8a4a7b0c141e367" + integrity sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ== + +"@babel/core@^7.23.5": version "7.23.9" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.9.tgz#b028820718000f267870822fec434820e9b1e4d1" integrity sha512-5q0175NOjddqpvvzU+kDiSOAk4PfdO6FvwCWoQ6RO7rTzEe8vlo+4HVfcnAREhD4npMs0e9uZypjTwzZPCf/cw== @@ -83,6 +83,28 @@ json5 "^2.2.3" semver "^6.3.1" +"@babel/core@^7.26.8": + version "7.26.8" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.26.8.tgz#7742f11c75acea6b08a8e24c5c0c8c89e89bf53e" + integrity sha512-l+lkXCHS6tQEc5oUpK28xBOZ6+HwaH7YwoYQbLFiYb4nS2/l1tKnZEtEWkD0GuiYdvArf9qBS0XlQGXzPMsNqQ== + dependencies: + "@ampproject/remapping" "^2.2.0" + "@babel/code-frame" "^7.26.2" + "@babel/generator" "^7.26.8" + "@babel/helper-compilation-targets" "^7.26.5" + "@babel/helper-module-transforms" "^7.26.0" + "@babel/helpers" "^7.26.7" + "@babel/parser" "^7.26.8" + "@babel/template" "^7.26.8" + "@babel/traverse" "^7.26.8" + "@babel/types" "^7.26.8" + "@types/gensync" "^1.0.0" + convert-source-map "^2.0.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.3" + semver "^6.3.1" + "@babel/generator@^7.23.6": version "7.23.6" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.6.tgz#9e1fca4811c77a10580d17d26b57b036133f3c2e" @@ -93,6 +115,17 @@ "@jridgewell/trace-mapping" "^0.3.17" jsesc "^2.5.1" +"@babel/generator@^7.26.8": + version "7.26.8" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.26.8.tgz#f9c5e770309e12e3099ad8271e52f6caa15442ab" + integrity sha512-ef383X5++iZHWAXX0SXQR6ZyQhw/0KtTkrTz61WXRhFM6dhpHulO/RJz79L8S6ugZHJkOOkUrUdxgdF2YiPFnA== + dependencies: + "@babel/parser" "^7.26.8" + "@babel/types" "^7.26.8" + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.25" + jsesc "^3.0.2" + "@babel/helper-compilation-targets@^7.23.6": version "7.23.6" resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz#4d79069b16cbcf1461289eccfbbd81501ae39991" @@ -104,6 +137,17 @@ lru-cache "^5.1.1" semver "^6.3.1" +"@babel/helper-compilation-targets@^7.26.5": + version "7.26.5" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.26.5.tgz#75d92bb8d8d51301c0d49e52a65c9a7fe94514d8" + integrity sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA== + dependencies: + "@babel/compat-data" "^7.26.5" + "@babel/helper-validator-option" "^7.25.9" + browserslist "^4.24.0" + lru-cache "^5.1.1" + semver "^6.3.1" + "@babel/helper-environment-visitor@^7.22.20": version "7.22.20" resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167" @@ -131,6 +175,14 @@ dependencies: "@babel/types" "^7.22.15" +"@babel/helper-module-imports@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz#e7f8d20602ebdbf9ebbea0a0751fb0f2a4141715" + integrity sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw== + dependencies: + "@babel/traverse" "^7.25.9" + "@babel/types" "^7.25.9" + "@babel/helper-module-transforms@^7.23.3": version "7.23.3" resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz#d7d12c3c5d30af5b3c0fcab2a6d5217773e2d0f1" @@ -142,6 +194,15 @@ "@babel/helper-split-export-declaration" "^7.22.6" "@babel/helper-validator-identifier" "^7.22.20" +"@babel/helper-module-transforms@^7.26.0": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz#8ce54ec9d592695e58d84cd884b7b5c6a2fdeeae" + integrity sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw== + dependencies: + "@babel/helper-module-imports" "^7.25.9" + "@babel/helper-validator-identifier" "^7.25.9" + "@babel/traverse" "^7.25.9" + "@babel/helper-plugin-utils@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295" @@ -166,16 +227,31 @@ resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz#9478c707febcbbe1ddb38a3d91a2e054ae622d83" integrity sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ== +"@babel/helper-string-parser@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz#1aabb72ee72ed35789b4bbcad3ca2862ce614e8c" + integrity sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA== + "@babel/helper-validator-identifier@^7.22.20": version "7.22.20" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== +"@babel/helper-validator-identifier@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz#24b64e2c3ec7cd3b3c547729b8d16871f22cbdc7" + integrity sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ== + "@babel/helper-validator-option@^7.23.5": version "7.23.5" resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz#907a3fbd4523426285365d1206c423c4c5520307" integrity sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw== +"@babel/helper-validator-option@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz#86e45bd8a49ab7e03f276577f96179653d41da72" + integrity sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw== + "@babel/helpers@^7.23.9": version "7.23.9" resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.9.tgz#c3e20bbe7f7a7e10cb9b178384b4affdf5995c7d" @@ -185,6 +261,14 @@ "@babel/traverse" "^7.23.9" "@babel/types" "^7.23.9" +"@babel/helpers@^7.26.7": + version "7.26.7" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.26.7.tgz#fd1d2a7c431b6e39290277aacfd8367857c576a4" + integrity sha512-8NHiL98vsi0mbPQmYAGWwfcFaOy4j2HY49fXJCfuDcdE7fMIsH9a7GdaeXpIBsbT7307WU8KCMp5pUVDNL4f9A== + dependencies: + "@babel/template" "^7.25.9" + "@babel/types" "^7.26.7" + "@babel/highlight@^7.23.4": version "7.23.4" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.23.4.tgz#edaadf4d8232e1a961432db785091207ead0621b" @@ -199,6 +283,13 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.9.tgz#7b903b6149b0f8fa7ad564af646c4c38a77fc44b" integrity sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA== +"@babel/parser@^7.26.8": + version "7.26.8" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.26.8.tgz#deca2b4d99e5e1b1553843b99823f118da6107c2" + integrity sha512-TZIQ25pkSoaKEYYaHbbxkfL36GNsQ6iFiBbeuzAkLnXayKR1yP1zFe+NxuZWWsUyvt8icPU9CCq0sgWGXR1GEw== + dependencies: + "@babel/types" "^7.26.8" + "@babel/plugin-transform-react-jsx-self@^7.23.3": version "7.23.3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.23.3.tgz#ed3e7dadde046cce761a8e3cf003a13d1a7972d9" @@ -236,6 +327,15 @@ "@babel/parser" "^7.23.9" "@babel/types" "^7.23.9" +"@babel/template@^7.25.9", "@babel/template@^7.26.8": + version "7.26.8" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.26.8.tgz#db3898f47a17bab2f4c78ec1d0de38527c2ffe19" + integrity sha512-iNKaX3ZebKIsCvJ+0jd6embf+Aulaa3vNBqZ41kM7iTWjx5qzWKXGHiJUW3+nTpQ18SG11hdF8OAzKrpXkb96Q== + dependencies: + "@babel/code-frame" "^7.26.2" + "@babel/parser" "^7.26.8" + "@babel/types" "^7.26.8" + "@babel/traverse@^7.23.9": version "7.23.9" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.9.tgz#2f9d6aead6b564669394c5ce0f9302bb65b9d950" @@ -252,6 +352,19 @@ debug "^4.3.1" globals "^11.1.0" +"@babel/traverse@^7.25.9", "@babel/traverse@^7.26.8": + version "7.26.8" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.26.8.tgz#0a8a9c2b7cc9519eed14275f4fd2278ad46e8cc9" + integrity sha512-nic9tRkjYH0oB2dzr/JoGIm+4Q6SuYeLEiIiZDwBscRMYFJ+tMAz98fuel9ZnbXViA2I0HVSSRRK8DW5fjXStA== + dependencies: + "@babel/code-frame" "^7.26.2" + "@babel/generator" "^7.26.8" + "@babel/parser" "^7.26.8" + "@babel/template" "^7.26.8" + "@babel/types" "^7.26.8" + debug "^4.3.1" + globals "^11.1.0" + "@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.6", "@babel/types@^7.23.9": version "7.23.9" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.9.tgz#1dd7b59a9a2b5c87f8b41e52770b5ecbf492e002" @@ -261,6 +374,14 @@ "@babel/helper-validator-identifier" "^7.22.20" to-fast-properties "^2.0.0" +"@babel/types@^7.25.9", "@babel/types@^7.26.7", "@babel/types@^7.26.8": + version "7.26.8" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.26.8.tgz#97dcdc190fab45be7f3dc073e3c11160d677c127" + integrity sha512-eUuWapzEGWFEpHFxgEaBG8e3n6S8L3MSu0oda755rOfabWPnh0Our1AozNFVUxGFIhbKgd1ksprsoDGMinTOTA== + dependencies: + "@babel/helper-string-parser" "^7.25.9" + "@babel/helper-validator-identifier" "^7.25.9" + "@changesets/apply-release-plan@^7.0.8": version "7.0.8" resolved "https://registry.yarnpkg.com/@changesets/apply-release-plan/-/apply-release-plan-7.0.8.tgz#9cfd46036789ad433fd855f34d41cd9ca1658aa0" @@ -492,6 +613,11 @@ "@delvtech/council-core" "0.1.0" "@delvtech/evm-client-viem" "^0.6.1" +"@delvtech/drift-viem@^0.1.3": + version "0.1.3" + resolved "https://registry.yarnpkg.com/@delvtech/drift-viem/-/drift-viem-0.1.3.tgz#e1a79325e04da0bdd4a006ca7baa0dfa6686457a" + integrity sha512-XBKWOwRx0MzMJYwWGfM5v1ddu6Z+ci7DZ+AiwhhLVpB178SpDZRuaC6qmS3vNMUDHb10Ip/k2BkoNiG+SehM6A== + "@delvtech/drift@^0.1.3": version "0.1.3" resolved "https://registry.yarnpkg.com/@delvtech/drift/-/drift-0.1.3.tgz#1bb8273eff5e7796e76b027105cfd263e3a8827f" @@ -543,10 +669,10 @@ "@noble/hashes" "^1.3.2" "@scure/base" "^1.1.5" -"@ensdomains/address-encoder@1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@ensdomains/address-encoder/-/address-encoder-1.1.0.tgz#0765ea1fdb1fd91cc3f4d3d2dd579c83a9b4f016" - integrity sha512-kc+VFq4ml6UB/s1TRjwx/QOeGmvbUWkMDps/nLDco40CpU3//Iw8vscQ12wQzmCzn760kkyOt6nNBP2L3nhtAA== +"@ensdomains/address-encoder@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@ensdomains/address-encoder/-/address-encoder-1.1.1.tgz#5cbec1fc6e2435b109c058426d7c222cb5a5d8de" + integrity sha512-yg7s+suCuKRhaGsgLu57W/jxIs/Lnqs/SU7jT7UwS4ATSnW94jbUCbmyyZ82CQwKsmwaUE8uYvvVb4N6lfz29A== dependencies: "@noble/curves" "^1.2.0" "@noble/hashes" "^1.3.2" @@ -570,21 +696,21 @@ dns-packet "^5.6.1" typescript-logging "^1.0.1" -"@ensdomains/ensjs@^3.4.4": - version "3.4.4" - resolved "https://registry.yarnpkg.com/@ensdomains/ensjs/-/ensjs-3.4.4.tgz#2b0ea3363a659a25f103fb4b28af367e66f77ec7" - integrity sha512-x81JQA91Pgs4o4rGbGsE4vt0GUOd+5DK4R0LDXXLAt+q5oQQKThnH41wmwl0DB1KSlknHYPWHCrLtzbRAboAFw== +"@ensdomains/ensjs@^4.0.2": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@ensdomains/ensjs/-/ensjs-4.0.2.tgz#c617f1363ba4e02f1bb884f1f6cce8bcd3899500" + integrity sha512-4vDIZEFAa1doNA3H9MppUHxflSDYYPVNyaDbdHLksTa4taq3y4dGpletX67Xea8nxI+cMfjEi4nOzLJmPzRE/g== dependencies: - "@adraffy/ens-normalize" "1.9.0" - "@ensdomains/address-encoder" "1.1.0" + "@adraffy/ens-normalize" "1.10.1" + "@ensdomains/address-encoder" "1.1.1" "@ensdomains/content-hash" "3.1.0-rc.1" "@ensdomains/dnsprovejs" "^0.5.1" - abitype "^0.8.0" + abitype "^1.0.0" dns-packet "^5.3.1" graphql "^16.3.0" graphql-request "6.1.0" pako "^2.1.0" - traverse "^0.6.6" + ts-pattern "^5.4.0" "@esbuild/aix-ppc64@0.19.12": version "0.19.12" @@ -890,7 +1016,7 @@ ethereum-cryptography "^2.0.0" micro-ftch "^0.3.1" -"@ethersproject/abi@5.7.0", "@ethersproject/abi@^5.1.2", "@ethersproject/abi@^5.7.0": +"@ethersproject/abi@^5.1.2": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.7.0.tgz#b3f3e045bbbeed1af3947335c247ad625a44e449" integrity sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA== @@ -905,7 +1031,7 @@ "@ethersproject/properties" "^5.7.0" "@ethersproject/strings" "^5.7.0" -"@ethersproject/abstract-provider@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== @@ -918,7 +1044,7 @@ "@ethersproject/transactions" "^5.7.0" "@ethersproject/web" "^5.7.0" -"@ethersproject/abstract-signer@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== @@ -929,7 +1055,7 @@ "@ethersproject/logger" "^5.7.0" "@ethersproject/properties" "^5.7.0" -"@ethersproject/address@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== @@ -940,22 +1066,14 @@ "@ethersproject/logger" "^5.7.0" "@ethersproject/rlp" "^5.7.0" -"@ethersproject/base64@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": +"@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== @@ -964,37 +1082,21 @@ "@ethersproject/logger" "^5.7.0" bn.js "^5.2.1" -"@ethersproject/bytes@5.7.0", "@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": +"@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": +"@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== @@ -1009,44 +1111,7 @@ "@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": +"@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== @@ -1054,68 +1119,26 @@ "@ethersproject/bytes" "^5.7.0" js-sha3 "0.8.0" -"@ethersproject/logger@5.7.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": +"@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": +"@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": +"@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== @@ -1123,16 +1146,7 @@ "@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": +"@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== @@ -1144,19 +1158,7 @@ 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": +"@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== @@ -1165,7 +1167,7 @@ "@ethersproject/constants" "^5.7.0" "@ethersproject/logger" "^5.7.0" -"@ethersproject/transactions@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== @@ -1180,37 +1182,7 @@ "@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": +"@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== @@ -1221,17 +1193,6 @@ "@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" - "@fastify/busboy@^2.0.0": version "2.1.0" resolved "https://registry.yarnpkg.com/@fastify/busboy/-/busboy-2.1.0.tgz#0709e9f4cb252351c609c6e6d8d6779a8d25edff" @@ -1244,19 +1205,24 @@ dependencies: "@floating-ui/utils" "^0.2.1" -"@floating-ui/dom@^1.0.0": - version "1.6.1" - resolved "https://registry.yarnpkg.com/@floating-ui/dom/-/dom-1.6.1.tgz#d552e8444f77f2d88534372369b3771dc3a2fa5d" - integrity sha512-iA8qE43/H5iGozC3W0YSnVSW42Vh522yyM1gj+BqRwVsTNOyr231PsXDaV04yT39PsO0QL2QpbI/M0ZaLUQgRQ== +"@floating-ui/dom@^1.6.1": + version "1.6.13" + resolved "https://registry.yarnpkg.com/@floating-ui/dom/-/dom-1.6.13.tgz#a8a938532aea27a95121ec16e667a7cbe8c59e34" + integrity sha512-umqzocjDgNRGTuO7Q8CU32dkHkECqI8ZdMZ5Swb6QAM0t5rnlrN3lGo1hdpscRd3WS8T6DKYK4ephgIH9iRh3w== dependencies: "@floating-ui/core" "^1.6.0" - "@floating-ui/utils" "^0.2.1" + "@floating-ui/utils" "^0.2.9" "@floating-ui/utils@^0.2.1": version "0.2.1" resolved "https://registry.yarnpkg.com/@floating-ui/utils/-/utils-0.2.1.tgz#16308cea045f0fc777b6ff20a9f25474dd8293d2" integrity sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q== +"@floating-ui/utils@^0.2.9": + version "0.2.9" + resolved "https://registry.yarnpkg.com/@floating-ui/utils/-/utils-0.2.9.tgz#50dea3616bc8191fb8e112283b49eaff03e78429" + integrity sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg== + "@gerrit0/mini-shiki@^1.24.0": version "1.27.2" resolved "https://registry.yarnpkg.com/@gerrit0/mini-shiki/-/mini-shiki-1.27.2.tgz#cf2a9fcb08a6581c78fc94821f0c854ec4b9f899" @@ -1283,11 +1249,16 @@ dependencies: "@hapi/hoek" "^9.0.0" -"@heroicons/react@^2.0.16", "@heroicons/react@^2.1.1": +"@heroicons/react@^2.0.16": version "2.1.1" resolved "https://registry.yarnpkg.com/@heroicons/react/-/react-2.1.1.tgz#422deb80c4d6caf3371aec6f4bee8361a354dc13" integrity sha512-JyyN9Lo66kirbCMuMMRPtJxtKJoIsXKS569ebHGGRKbl8s4CtUfLnyKJxteA+vIKySocO4s1SkTkGS4xtG/yEA== +"@heroicons/react@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@heroicons/react/-/react-2.2.0.tgz#0c05124af50434a800773abec8d3af6a297d904b" + integrity sha512-LMcepvRaS9LYHJGsF0zzmgKCUim/X3N/DQKc4jepAXJ7l8QxJ1PmxJzqplF2Z3FE4PqBAIGyJAQ/w4B5dsqbtQ== + "@humanwhocodes/config-array@^0.11.13": version "0.11.14" resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.14.tgz#d78e481a039f7566ecc9660b4ea7fe6b1fec442b" @@ -1333,6 +1304,15 @@ "@jridgewell/sourcemap-codec" "^1.4.10" "@jridgewell/trace-mapping" "^0.3.9" +"@jridgewell/gen-mapping@^0.3.5": + version "0.3.8" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz#4f0e06362e01362f823d348f1872b08f666d8142" + integrity sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA== + dependencies: + "@jridgewell/set-array" "^1.2.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.24" + "@jridgewell/resolve-uri@^3.0.3", "@jridgewell/resolve-uri@^3.1.0": version "3.1.1" resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" @@ -1343,6 +1323,11 @@ resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== +"@jridgewell/set-array@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280" + integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== + "@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": version "1.4.15" resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" @@ -1369,6 +1354,14 @@ "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" +"@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": + version "0.3.25" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" + integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== + dependencies: + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" + "@leichtgewicht/ip-codec@^2.0.1": version "2.0.4" resolved "https://registry.yarnpkg.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz#b2ac626d6cb9c8718ab459166d4bb405b8ffa78b" @@ -1397,20 +1390,6 @@ tus-js-client "^3.1.0" zustand "^4.3.9" -"@ljharb/resumer@^0.0.1": - version "0.0.1" - resolved "https://registry.yarnpkg.com/@ljharb/resumer/-/resumer-0.0.1.tgz#8a940a9192dd31f6a1df17564bbd26dc6ad3e68d" - integrity sha512-skQiAOrCfO7vRTq53cxznMpks7wS1va95UCidALlOVWqvBAzwPVErwizDwoMqNVMEn1mDq0utxZd02eIrvF1lw== - dependencies: - "@ljharb/through" "^2.3.9" - -"@ljharb/through@^2.3.11", "@ljharb/through@^2.3.9": - version "2.3.12" - resolved "https://registry.yarnpkg.com/@ljharb/through/-/through-2.3.12.tgz#c418c43060eee193adce48b15c2206096a28e9ea" - integrity sha512-ajo/heTlG3QgC8EGP6APIejksVAYt4ayz4tqoP3MolFELzcH1x1fzwEYRJTPO0IELutZ5HQ0c26/GqAYy79u3g== - dependencies: - call-bind "^1.0.5" - "@manypkg/find-root@^1.1.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@manypkg/find-root/-/find-root-1.1.0.tgz#a62d8ed1cd7e7d4c11d9d52a8397460b5d4ad29f" @@ -2175,12 +2154,11 @@ resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== -"@pushprotocol/restapi@^1.6.7": - version "1.6.8" - resolved "https://registry.yarnpkg.com/@pushprotocol/restapi/-/restapi-1.6.8.tgz#707cf8abcceaeb98c45551e87ac14bbdb741ba32" - integrity sha512-ZImz4qvXkqqcQowJBBFCKO8FsI/mjFDyC4dEhw5q1jlxWYuMKOD3NwaF+yvfIwgrFYWpCyYHvOCeLR+830Zn6g== +"@pushprotocol/restapi@^1.7.30": + version "1.7.30" + resolved "https://registry.yarnpkg.com/@pushprotocol/restapi/-/restapi-1.7.30.tgz#d0d981797f3ce64ba619be9a3fe80cf7076d479d" + integrity sha512-rd4ec34f8pN5bFXF5C7eWynenJw5f9ZYfFPtWCrM6wWFNW2BXhQqM1bTxOY+oUGzCLshWlqpGk2MA3pIQsvWvw== dependencies: - "@ambire/signature-validator" "^1.3.1" "@metamask/eth-sig-util" "^5.0.2" axios "^0.27.2" buffer "^6.0.3" @@ -2198,17 +2176,17 @@ video-stream-merger "^4.0.1" viem "^1.20.3" -"@rainbow-me/rainbowkit@^2.0.2": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@rainbow-me/rainbowkit/-/rainbowkit-2.0.2.tgz#6122e349b7b87e4bb57ece374747c21915816ae7" - integrity sha512-xm/3iWxwL/ATVVWjtYVGviTJ4ldXwcvaic+bQnGg/pqzf8zKONkuzd5gNWLw0ft1iNG2IPHL1ABP9UoR2Trlaw== - dependencies: - "@vanilla-extract/css" "1.14.0" - "@vanilla-extract/dynamic" "2.1.0" - "@vanilla-extract/sprinkles" "1.6.1" - clsx "2.1.0" - qrcode "1.5.3" - react-remove-scroll "2.5.7" +"@rainbow-me/rainbowkit@^2.2.3": + version "2.2.3" + resolved "https://registry.yarnpkg.com/@rainbow-me/rainbowkit/-/rainbowkit-2.2.3.tgz#f1b5c146e6a4f30f1d0792eb3c755b167be1bfda" + integrity sha512-kXZ+zmKSPZhZdNHey+4TwOIW4p2vIRv5B9+5FoTJv1xktru1RykfAAQY5z+nLUdvc0l6M5hiYH4X88Jl1foXGQ== + dependencies: + "@vanilla-extract/css" "1.15.5" + "@vanilla-extract/dynamic" "2.1.2" + "@vanilla-extract/sprinkles" "1.6.3" + clsx "2.1.1" + qrcode "1.5.4" + react-remove-scroll "2.6.2" ua-parser-js "^1.0.37" "@rollup/rollup-android-arm-eabi@4.34.6": @@ -2772,34 +2750,34 @@ resolved "https://registry.yarnpkg.com/@tailwindcss/line-clamp/-/line-clamp-0.4.4.tgz#767cf8e5d528a5d90c9740ca66eb079f5e87d423" integrity sha512-5U6SY5z8N42VtrCrKlsTAA35gy2VSyYtHWCsg1H87NU1SXnEfekTVlrga9fzUDrrHcGi2Lb5KenUWb4lRQT5/g== -"@tailwindcss/typography@^0.5.10": - version "0.5.10" - resolved "https://registry.yarnpkg.com/@tailwindcss/typography/-/typography-0.5.10.tgz#2abde4c6d5c797ab49cf47610830a301de4c1e0a" - integrity sha512-Pe8BuPJQJd3FfRnm6H0ulKIGoMEQS+Vq01R6M5aCrFB/ccR/shT+0kXLjouGC1gFLm9hopTFN+DMP0pfwRWzPw== +"@tailwindcss/typography@^0.5.16": + version "0.5.16" + resolved "https://registry.yarnpkg.com/@tailwindcss/typography/-/typography-0.5.16.tgz#a926c8f44d5c439b2915e231cad80058850047c6" + integrity sha512-0wDLwCVF5V3x3b1SGXPCDcdsbDHMBe+lkFzBRaHeLvNi+nrrnZ1lA18u+OTWO8iSWU2GxUOCvlXtDuqftc1oiA== dependencies: lodash.castarray "^4.4.0" lodash.isplainobject "^4.0.6" lodash.merge "^4.6.2" postcss-selector-parser "6.0.10" -"@tanstack/eslint-plugin-query@^5.20.1": - version "5.20.1" - resolved "https://registry.yarnpkg.com/@tanstack/eslint-plugin-query/-/eslint-plugin-query-5.20.1.tgz#861afedd7cde6b98c88cf86a5923bb659122e7af" - integrity sha512-oIp7Wh90KHOm1FKCvcv87fiD2H96xo/crFrlhbvqBzR2f0tMEGOK/ANKMGNFQprd6BT6lyZhQPlOEkFdezsjIg== +"@tanstack/eslint-plugin-query@^5.66.1": + version "5.66.1" + resolved "https://registry.yarnpkg.com/@tanstack/eslint-plugin-query/-/eslint-plugin-query-5.66.1.tgz#9951e4d3633ca6248196742cad437b4d7c760cd7" + integrity sha512-pYMVTGgJ7yPk9Rm6UWEmbY6TX0EmMmxJqYkthgeDCwEznToy2m+W928nUODFirtZBZlhBsqHy33LO0kyTlgf0w== dependencies: - "@typescript-eslint/utils" "^6.20.0" + "@typescript-eslint/utils" "^8.18.1" -"@tanstack/query-core@5.22.2": - version "5.22.2" - resolved "https://registry.yarnpkg.com/@tanstack/query-core/-/query-core-5.22.2.tgz#af67d41b0b4a3e846c2325f32540f39ca0d4788d" - integrity sha512-z3PwKFUFACMUqe1eyesCIKg3Jv1mysSrYfrEW5ww5DCDUD4zlpTKBvUDaEjsfZzL3ULrFLDM9yVUxI/fega1Qg== +"@tanstack/query-core@5.66.0": + version "5.66.0" + resolved "https://registry.yarnpkg.com/@tanstack/query-core/-/query-core-5.66.0.tgz#163f670b3b4e3b3cdbff6698ad44b2edfcaed185" + integrity sha512-J+JeBtthiKxrpzUu7rfIPDzhscXF2p5zE/hVdrqkACBP8Yu0M96mwJ5m/8cPPYQE9aRNvXztXHlNwIh4FEeMZw== -"@tanstack/react-query@^5.22.2": - version "5.22.2" - resolved "https://registry.yarnpkg.com/@tanstack/react-query/-/react-query-5.22.2.tgz#e5fce278fbdd026fc1d561a4505142b9f93549d7" - integrity sha512-TaxJDRzJ8/NWRT4lY2jguKCrNI6MRN+67dELzPjNUlvqzTxGANlMp68l7aC7hG8Bd1uHNxHl7ihv7MT50i/43A== +"@tanstack/react-query@^5.66.0": + version "5.66.0" + resolved "https://registry.yarnpkg.com/@tanstack/react-query/-/react-query-5.66.0.tgz#9f7aa1b3e844ea6a0ad2ee61fccaed76e614b865" + integrity sha512-z3sYixFQJe8hndFnXgWu7C79ctL+pI0KAelYyW+khaNJ1m22lWrhJU2QrsTcRKMuVPtoZvfBYrTStIdKo+x0Xw== dependencies: - "@tanstack/query-core" "5.22.2" + "@tanstack/query-core" "5.66.0" "@tsconfig/node-lts@^20.1.1": version "20.1.1" @@ -2905,6 +2883,11 @@ resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.6.tgz#628effeeae2064a1b4e79f78e81d87b7e5fc7b50" integrity sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw== +"@types/gensync@^1.0.0": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@types/gensync/-/gensync-1.0.4.tgz#7122d8f0cd3bf437f9725cc95b180197190cf50b" + integrity sha512-C3YYeRQWp2fmq9OryX+FoDy8nXS6scQ7dPptD8LnFDAUNcKWJjXQKDNJD3HVm+kOUsXhTOkpi69vI4EuAr95bA== + "@types/hast@^3.0.4": version "3.0.4" resolved "https://registry.yarnpkg.com/@types/hast/-/hast-3.0.4.tgz#1d6b39993b82cea6ad783945b0508c25903e15aa" @@ -2958,10 +2941,12 @@ dependencies: undici-types "~5.26.4" -"@types/node@18.15.13": - version "18.15.13" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.15.13.tgz#f64277c341150c979e42b00e4ac289290c9df469" - integrity sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q== +"@types/node@22.7.5": + version "22.7.5" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.7.5.tgz#cfde981727a7ab3611a481510b473ae54442b92b" + integrity sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ== + dependencies: + undici-types "~6.19.2" "@types/node@^12.7.1": version "12.20.55" @@ -2975,6 +2960,13 @@ dependencies: undici-types "~5.26.4" +"@types/node@^22.13.1": + version "22.13.1" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.13.1.tgz#a2a3fefbdeb7ba6b89f40371842162fac0934f33" + integrity sha512-jK8uzQlrvXqEU91UxiK5J7pKHyzgnI1Qnl0QDHIgVGuolJhRb9EEl28Cj9b3rGR8B2lhFCtvIm5os8lFnO/1Ew== + dependencies: + undici-types "~6.20.0" + "@types/pbkdf2@^3.0.0": version "3.1.2" resolved "https://registry.yarnpkg.com/@types/pbkdf2/-/pbkdf2-3.1.2.tgz#2dc43808e9985a2c69ff02e2d2027bd4fe33e8dc" @@ -3002,7 +2994,7 @@ dependencies: "@types/react" "*" -"@types/react@*", "@types/react@18.2.57", "@types/react@^18.2.57": +"@types/react@*", "@types/react@^18.2.57": version "18.2.57" resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.57.tgz#147b516d8bdb2900219acbfc6f939bdeecca7691" integrity sha512-ZvQsktJgSYrQiMirAN60y4O/LRevIV8hUzSOSNB6gfR3/o3wCBFQx3sPwIYtuDMeiVgsSS3UzCV26tEzgnfvQw== @@ -3112,14 +3104,6 @@ "@typescript-eslint/types" "6.20.0" "@typescript-eslint/visitor-keys" "6.20.0" -"@typescript-eslint/scope-manager@6.21.0": - version "6.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz#ea8a9bfc8f1504a6ac5d59a6df308d3a0630a2b1" - integrity sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg== - dependencies: - "@typescript-eslint/types" "6.21.0" - "@typescript-eslint/visitor-keys" "6.21.0" - "@typescript-eslint/scope-manager@7.0.2": version "7.0.2" resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-7.0.2.tgz#6ec4cc03752758ddd1fdaae6fbd0ed9a2ca4fe63" @@ -3128,6 +3112,14 @@ "@typescript-eslint/types" "7.0.2" "@typescript-eslint/visitor-keys" "7.0.2" +"@typescript-eslint/scope-manager@8.24.0": + version "8.24.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.24.0.tgz#2e34b3eb2ce768f2ffb109474174ced5417002b1" + integrity sha512-HZIX0UByphEtdVBKaQBgTDdn9z16l4aTUz8e8zPQnyxwHBtf5vtl1L+OhH+m1FGV9DrRmoDuYKqzVrvWDcDozw== + dependencies: + "@typescript-eslint/types" "8.24.0" + "@typescript-eslint/visitor-keys" "8.24.0" + "@typescript-eslint/type-utils@7.0.2": version "7.0.2" resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-7.0.2.tgz#a7fc0adff0c202562721357e7478207d380a757b" @@ -3143,16 +3135,16 @@ resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.20.0.tgz#5ccd74c29011ae7714ae6973e4ec0c634708b448" integrity sha512-MM9mfZMAhiN4cOEcUOEx+0HmuaW3WBfukBZPCfwSqFnQy0grXYtngKCqpQN339X3RrwtzspWJrpbrupKYUSBXQ== -"@typescript-eslint/types@6.21.0": - version "6.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.21.0.tgz#205724c5123a8fef7ecd195075fa6e85bac3436d" - integrity sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg== - "@typescript-eslint/types@7.0.2": version "7.0.2" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-7.0.2.tgz#b6edd108648028194eb213887d8d43ab5750351c" integrity sha512-ZzcCQHj4JaXFjdOql6adYV4B/oFOFjPOC9XYwCaZFRvqN8Llfvv4gSxrkQkd2u4Ci62i2c6W6gkDwQJDaRc4nA== +"@typescript-eslint/types@8.24.0": + version "8.24.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.24.0.tgz#694e7fb18d70506c317b816de9521300b0f72c8e" + integrity sha512-VacJCBTyje7HGAw7xp11q439A+zeGG0p0/p2zsZwpnMzjPB5WteaWqt4g2iysgGFafrqvyLWqq6ZPZAOCoefCw== + "@typescript-eslint/typescript-estree@6.20.0": version "6.20.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.20.0.tgz#5b2d0975949e6bdd8d45ee1471461ef5fadc5542" @@ -3167,20 +3159,6 @@ semver "^7.5.4" ts-api-utils "^1.0.1" -"@typescript-eslint/typescript-estree@6.21.0": - version "6.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz#c47ae7901db3b8bddc3ecd73daff2d0895688c46" - integrity sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ== - dependencies: - "@typescript-eslint/types" "6.21.0" - "@typescript-eslint/visitor-keys" "6.21.0" - debug "^4.3.4" - globby "^11.1.0" - is-glob "^4.0.3" - minimatch "9.0.3" - semver "^7.5.4" - ts-api-utils "^1.0.1" - "@typescript-eslint/typescript-estree@7.0.2": version "7.0.2" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-7.0.2.tgz#3c6dc8a3b9799f4ef7eca0d224ded01974e4cb39" @@ -3195,6 +3173,20 @@ semver "^7.5.4" ts-api-utils "^1.0.1" +"@typescript-eslint/typescript-estree@8.24.0": + version "8.24.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.24.0.tgz#0487349be174097bb329a58273100a9629e03c6c" + integrity sha512-ITjYcP0+8kbsvT9bysygfIfb+hBj6koDsu37JZG7xrCiy3fPJyNmfVtaGsgTUSEuTzcvME5YI5uyL5LD1EV5ZQ== + dependencies: + "@typescript-eslint/types" "8.24.0" + "@typescript-eslint/visitor-keys" "8.24.0" + debug "^4.3.4" + fast-glob "^3.3.2" + is-glob "^4.0.3" + minimatch "^9.0.4" + semver "^7.6.0" + ts-api-utils "^2.0.1" + "@typescript-eslint/utils@7.0.2": version "7.0.2" resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-7.0.2.tgz#8756123054cd934c8ba7db6a6cffbc654b10b5c4" @@ -3208,18 +3200,15 @@ "@typescript-eslint/typescript-estree" "7.0.2" semver "^7.5.4" -"@typescript-eslint/utils@^6.20.0": - version "6.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-6.21.0.tgz#4714e7a6b39e773c1c8e97ec587f520840cd8134" - integrity sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ== +"@typescript-eslint/utils@^8.18.1": + version "8.24.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.24.0.tgz#21cb1195ae79230af825bfeed59574f5cb70a749" + integrity sha512-07rLuUBElvvEb1ICnafYWr4hk8/U7X9RDCOqd9JcAMtjh/9oRmcfN4yGzbPVirgMR0+HLVHehmu19CWeh7fsmQ== dependencies: "@eslint-community/eslint-utils" "^4.4.0" - "@types/json-schema" "^7.0.12" - "@types/semver" "^7.5.0" - "@typescript-eslint/scope-manager" "6.21.0" - "@typescript-eslint/types" "6.21.0" - "@typescript-eslint/typescript-estree" "6.21.0" - semver "^7.5.4" + "@typescript-eslint/scope-manager" "8.24.0" + "@typescript-eslint/types" "8.24.0" + "@typescript-eslint/typescript-estree" "8.24.0" "@typescript-eslint/visitor-keys@6.20.0": version "6.20.0" @@ -3229,14 +3218,6 @@ "@typescript-eslint/types" "6.20.0" eslint-visitor-keys "^3.4.1" -"@typescript-eslint/visitor-keys@6.21.0": - version "6.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz#87a99d077aa507e20e238b11d56cc26ade45fe47" - integrity sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A== - dependencies: - "@typescript-eslint/types" "6.21.0" - eslint-visitor-keys "^3.4.1" - "@typescript-eslint/visitor-keys@7.0.2": version "7.0.2" resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-7.0.2.tgz#2899b716053ad7094962beb895d11396fc12afc7" @@ -3245,44 +3226,53 @@ "@typescript-eslint/types" "7.0.2" eslint-visitor-keys "^3.4.1" +"@typescript-eslint/visitor-keys@8.24.0": + version "8.24.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.24.0.tgz#36ecf0b9b1d819ad88a3bd4157ab7d594cb797c9" + integrity sha512-kArLq83QxGLbuHrTMoOEWO+l2MwsNS2TGISEdx8xgqpkbytB07XmlQyQdNDrCc1ecSqx0cnmhGvpX+VBwqqSkg== + dependencies: + "@typescript-eslint/types" "8.24.0" + eslint-visitor-keys "^4.2.0" + "@ungap/structured-clone@^1.2.0": version "1.2.0" resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406" integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== -"@vanilla-extract/css@1.14.0": - version "1.14.0" - resolved "https://registry.yarnpkg.com/@vanilla-extract/css/-/css-1.14.0.tgz#45fab9c04d893e3e363cf2cde7559d21233b7f63" - integrity sha512-rYfm7JciWZ8PFzBM/HDiE2GLnKI3xJ6/vdmVJ5BSgcCZ5CxRlM9Cjqclni9lGzF3eMOijnUhCd/KV8TOzyzbMA== +"@vanilla-extract/css@1.15.5": + version "1.15.5" + resolved "https://registry.yarnpkg.com/@vanilla-extract/css/-/css-1.15.5.tgz#06782b98b4d1478baec578fb06c223bde589d4b3" + integrity sha512-N1nQebRWnXvlcmu9fXKVUs145EVwmWtMD95bpiEKtvehHDpUhmO1l2bauS7FGYKbi3dU1IurJbGpQhBclTr1ng== dependencies: "@emotion/hash" "^0.9.0" - "@vanilla-extract/private" "^1.0.3" - chalk "^4.1.1" + "@vanilla-extract/private" "^1.0.6" css-what "^6.1.0" cssesc "^3.0.0" csstype "^3.0.7" + dedent "^1.5.3" deep-object-diff "^1.1.9" deepmerge "^4.2.2" + lru-cache "^10.4.3" media-query-parser "^2.0.2" modern-ahocorasick "^1.0.0" - outdent "^0.8.0" + picocolors "^1.0.0" -"@vanilla-extract/dynamic@2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@vanilla-extract/dynamic/-/dynamic-2.1.0.tgz#316d3bd4adfd5f5c9fb080445c41d55abe3b463c" - integrity sha512-8zl0IgBYRtgD1h+56Zu13wHTiMTJSVEa4F7RWX9vTB/5Xe2KtjoiqApy/szHPVFA56c+ex6A4GpCQjT1bKXbYw== +"@vanilla-extract/dynamic@2.1.2": + version "2.1.2" + resolved "https://registry.yarnpkg.com/@vanilla-extract/dynamic/-/dynamic-2.1.2.tgz#b1d1c1e0e392934c5a3bbb53f99069a7721311ac" + integrity sha512-9BGMciD8rO1hdSPIAh1ntsG4LPD3IYKhywR7VOmmz9OO4Lx1hlwkSg3E6X07ujFx7YuBfx0GDQnApG9ESHvB2A== dependencies: - "@vanilla-extract/private" "^1.0.3" + "@vanilla-extract/private" "^1.0.6" -"@vanilla-extract/private@^1.0.3": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@vanilla-extract/private/-/private-1.0.3.tgz#7ec72bc2ff6fe51f9d650f962e8d1989b073690f" - integrity sha512-17kVyLq3ePTKOkveHxXuIJZtGYs+cSoev7BlP+Lf4916qfDhk/HBjvlYDe8egrea7LNPHKwSZJK/bzZC+Q6AwQ== +"@vanilla-extract/private@^1.0.6": + version "1.0.6" + resolved "https://registry.yarnpkg.com/@vanilla-extract/private/-/private-1.0.6.tgz#f10bbf3189f7b827d0bd7f804a6219dd03ddbdd4" + integrity sha512-ytsG/JLweEjw7DBuZ/0JCN4WAQgM9erfSTdS1NQY778hFQSZ6cfCDEZZ0sgVm4k54uNz6ImKB33AYvSR//fjxw== -"@vanilla-extract/sprinkles@1.6.1": - version "1.6.1" - resolved "https://registry.yarnpkg.com/@vanilla-extract/sprinkles/-/sprinkles-1.6.1.tgz#2c8a832757a0d8104dc6bd5d961db2c70d1dbdcb" - integrity sha512-N/RGKwGAAidBupZ436RpuweRQHEFGU+mvAqBo8PRMAjJEmHoPDttV8RObaMLrJHWLqvX+XUMinHUnD0hFRQISw== +"@vanilla-extract/sprinkles@1.6.3": + version "1.6.3" + resolved "https://registry.yarnpkg.com/@vanilla-extract/sprinkles/-/sprinkles-1.6.3.tgz#733968d653cc2395538b5c29f04dcdb0a2ca15c5" + integrity sha512-oCHlQeYOBIJIA2yWy2GnY5wE2A7hGHDyJplJo4lb+KEIBcJWRnDJDg8ywDwQS5VfWJrBBO3drzYZPFpWQjAMiQ== "@vitejs/plugin-react@^4.2.1": version "4.2.1" @@ -3655,16 +3645,11 @@ abitype@1.0.4: resolved "https://registry.yarnpkg.com/abitype/-/abitype-1.0.4.tgz#a817ff44860e8a84e9a37ed22aa9b738dbb51dba" integrity sha512-UivtYZOGJGE8rsrM/N5vdRkUpqEZVmuTumfTuolm7m/6O09wprd958rx8kUBwVAAAhQDveGAgD0GJdBuR8s6tw== -abitype@1.0.8, abitype@^1.0.6: +abitype@1.0.8, abitype@^1.0.0, abitype@^1.0.6: version "1.0.8" resolved "https://registry.yarnpkg.com/abitype/-/abitype-1.0.8.tgz#3554f28b2e9d6e9f35eb59878193eabd1b9f46ba" integrity sha512-ZeiI6h3GnW06uYDLx0etQtX/p8E24UaHHBj57RSjK7YBFe7iuVn07EDpOeP451D06sF27VOz9JJPlIKJmXgkEg== -abitype@^0.8.0: - version "0.8.11" - resolved "https://registry.yarnpkg.com/abitype/-/abitype-0.8.11.tgz#66e1cf2cbf46f48d0e57132d7c1c392447536cc1" - integrity sha512-bM4v2dKvX08sZ9IU38IN5BKmN+ZkOSd2oI4a9f0ejHYZQYV6cDr7j+d95ga0z2XHG36Y4jzoG5Z7qDqxp7fi/A== - abort-controller@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" @@ -3692,11 +3677,6 @@ adm-zip@^0.4.16: resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.16.tgz#cf4c508fdffab02c269cbc7f471a875f05570365" integrity sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg== -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== - aes-js@4.0.0-beta.5: version "4.0.0-beta.5" resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-4.0.0-beta.5.tgz#8d2452c52adedebc3a3e28465d858c11ca315873" @@ -3761,17 +3741,12 @@ ansi-escapes@^4.3.0: dependencies: type-fest "^0.21.3" -ansi-escapes@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-6.2.0.tgz#8a13ce75286f417f1963487d86ba9f90dccf9947" - integrity sha512-kzRaCqXnpzWs+3z5ABPQiVke+iq0KXkHo8xiWV4RPTi5Yli0l97BEQuhXV1s7+aSU/fu1kUuxgS4MsQ0fRuygw== +ansi-escapes@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-7.0.0.tgz#00fc19f491bbb18e1d481b97868204f92109bfe7" + integrity sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw== dependencies: - type-fest "^3.0.0" - -ansi-regex@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" - integrity sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA== + environment "^1.0.0" ansi-regex@^5.0.1: version "5.0.1" @@ -3783,11 +3758,6 @@ ansi-regex@^6.0.1: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== -ansi-styles@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" - integrity sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA== - ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" @@ -3857,6 +3827,14 @@ array-buffer-byte-length@^1.0.0: call-bind "^1.0.5" is-array-buffer "^3.0.4" +array-buffer-byte-length@^1.0.1, array-buffer-byte-length@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz#384d12a37295aec3769ab022ad323a18a51ccf8b" + integrity sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw== + dependencies: + call-bound "^1.0.3" + is-array-buffer "^3.0.5" + array-includes@^3.1.6, array-includes@^3.1.7: version "3.1.7" resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.7.tgz#8cd2e01b26f7a3086cbc87271593fe921c62abda" @@ -3868,20 +3846,34 @@ array-includes@^3.1.6, array-includes@^3.1.7: get-intrinsic "^1.2.1" is-string "^1.0.7" +array-includes@^3.1.8: + version "3.1.8" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.8.tgz#5e370cbe172fdd5dd6530c1d4aadda25281ba97d" + integrity sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-object-atoms "^1.0.0" + get-intrinsic "^1.2.4" + is-string "^1.0.7" + array-union@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== -array.prototype.every@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/array.prototype.every/-/array.prototype.every-1.1.5.tgz#f8ca86a1a82a91eb5173187ef68935dc47215922" - integrity sha512-FfMQJ+/joFGXpRCltbzV3znaP5QxIhLFySo0fEPn3GuoYlud9LhknMCIxdYKC2qsM/6VHoSp6YGwe3EZXrEcwQ== +array.prototype.findlast@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz#3e4fbcb30a15a7f5bf64cf2faae22d139c2e4904" + integrity sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - is-string "^1.0.7" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + es-shim-unscopables "^1.0.2" array.prototype.findlastindex@^1.2.3: version "1.2.3" @@ -3914,6 +3906,16 @@ array.prototype.flatmap@^1.3.1, array.prototype.flatmap@^1.3.2: es-abstract "^1.22.1" es-shim-unscopables "^1.0.0" +array.prototype.flatmap@^1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz#712cc792ae70370ae40586264629e33aab5dd38b" + integrity sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg== + dependencies: + call-bind "^1.0.8" + define-properties "^1.2.1" + es-abstract "^1.23.5" + es-shim-unscopables "^1.0.2" + array.prototype.tosorted@^1.1.1: version "1.1.2" resolved "https://registry.yarnpkg.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.2.tgz#620eff7442503d66c799d95503f82b475745cefd" @@ -3925,6 +3927,17 @@ array.prototype.tosorted@^1.1.1: es-shim-unscopables "^1.0.0" get-intrinsic "^1.2.1" +array.prototype.tosorted@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz#fe954678ff53034e717ea3352a03f0b0b86f7ffc" + integrity sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.3" + es-errors "^1.3.0" + es-shim-unscopables "^1.0.2" + arraybuffer.prototype.slice@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz#98bd561953e3e74bb34938e77647179dfe6e9f12" @@ -3938,9 +3951,22 @@ arraybuffer.prototype.slice@^1.0.2: is-array-buffer "^3.0.2" is-shared-array-buffer "^1.0.2" -asn1.js@^5.0.0: - version "5.4.1" - resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07" +arraybuffer.prototype.slice@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz#9d760d84dbdd06d0cbf92c8849615a1a7ab3183c" + integrity sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ== + dependencies: + array-buffer-byte-length "^1.0.1" + call-bind "^1.0.8" + define-properties "^1.2.1" + es-abstract "^1.23.5" + es-errors "^1.3.0" + get-intrinsic "^1.2.6" + is-array-buffer "^3.0.4" + +asn1.js@^5.0.0: + version "5.4.1" + resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07" integrity sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA== dependencies: bn.js "^4.0.0" @@ -3948,10 +3974,10 @@ asn1.js@^5.0.0: minimalistic-assert "^1.0.0" safer-buffer "^2.1.0" -assert-never@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/assert-never/-/assert-never-1.2.1.tgz#11f0e363bf146205fb08193b5c7b90f4d1cf44fe" - integrity sha512-TaTivMB6pYI1kXwrFlEhLeGfOqoDNdTxjCdwRfFFkEA30Eu+k48W34nlok2EYWJfFFzqaEmichdNM7th6M5HNw== +assert-never@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/assert-never/-/assert-never-1.4.0.tgz#b0d4988628c87f35eb94716cc54422a63927e175" + integrity sha512-5oJg84os6NMQNl27T9LnZkvvqzvAnHu03ShCnoj6bsJwS7L8AO4lf+C/XjK/nvzEqQB744moC6V128RucQd1jA== assertion-error@^2.0.1: version "2.0.1" @@ -3999,11 +4025,30 @@ autoprefixer@^10.4.17: picocolors "^1.0.0" postcss-value-parser "^4.2.0" +autoprefixer@^10.4.20: + version "10.4.20" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.20.tgz#5caec14d43976ef42e32dcb4bd62878e96be5b3b" + integrity sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g== + dependencies: + browserslist "^4.23.3" + caniuse-lite "^1.0.30001646" + fraction.js "^4.3.7" + normalize-range "^0.1.2" + picocolors "^1.0.1" + postcss-value-parser "^4.2.0" + available-typed-arrays@^1.0.5, available-typed-arrays@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.6.tgz#ac812d8ce5a6b976d738e1c45f08d0b00bc7d725" integrity sha512-j1QzY8iPNPG4o4xmO3ptzpRxTciqD3MgEHtifP/YnJpIo58Xu+ne4BejlbkuaLfXn/nz6HFiw29bLpj2PNMdGg== +available-typed-arrays@^1.0.7: + 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" + axe-core@=4.7.0: version "4.7.0" resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.7.0.tgz#34ba5a48a8b564f67e103f0aa5768d76e15bbbbf" @@ -4041,11 +4086,6 @@ base64-js@^1.3.1: resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== -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== - better-path-resolve@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/better-path-resolve/-/better-path-resolve-1.0.0.tgz#13a35a1104cdd48a7b74bf8758f96a1ee613f99d" @@ -4173,6 +4213,16 @@ browserslist@^4.22.2: node-releases "^2.0.14" update-browserslist-db "^1.0.13" +browserslist@^4.23.3, browserslist@^4.24.0: + version "4.24.4" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.24.4.tgz#c6b2865a3f08bcb860a0e827389003b9fe686e4b" + integrity sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A== + dependencies: + caniuse-lite "^1.0.30001688" + electron-to-chromium "^1.5.73" + node-releases "^2.0.19" + update-browserslist-db "^1.1.1" + bs58@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a" @@ -4199,11 +4249,6 @@ buffer-reverse@^1.0.1: resolved "https://registry.yarnpkg.com/buffer-reverse/-/buffer-reverse-1.0.1.tgz#49283c8efa6f901bc01fa3304d06027971ae2f60" integrity sha512-M87YIUBsZ6N924W57vDwT/aOu8hw7ZgdByz6ijksLjmHJELBASmYTTlNHRgjE+pTsT9oJXGaDSgqqwfdHotDUg== -buffer-shims@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51" - integrity sha512-Zy8ZXMyxIT6RMTeY7OP/bDndfj6bwCan7SS98CEndS6deHwWPpseeHlwarNcBim+etXnF9HBc1non5JgDaJU1g== - buffer-xor@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" @@ -4241,6 +4286,14 @@ cac@^6.7.14: resolved "https://registry.yarnpkg.com/cac/-/cac-6.7.14.tgz#804e1e6f506ee363cb0e3ccbb09cad5dd9870959" integrity sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ== +call-bind-apply-helpers@^1.0.0, call-bind-apply-helpers@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz#32e5892e6361b29b0b545ba6f7763378daca2840" + integrity sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g== + dependencies: + es-errors "^1.3.0" + function-bind "^1.1.2" + call-bind@^1.0.0, call-bind@^1.0.2, call-bind@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.5.tgz#6fa2b7845ce0ea49bf4d8b9ef64727a2c2e2e513" @@ -4250,6 +4303,24 @@ call-bind@^1.0.0, call-bind@^1.0.2, call-bind@^1.0.5: get-intrinsic "^1.2.1" set-function-length "^1.1.1" +call-bind@^1.0.7, call-bind@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.8.tgz#0736a9660f537e3388826f440d5ec45f744eaa4c" + integrity sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww== + dependencies: + call-bind-apply-helpers "^1.0.0" + es-define-property "^1.0.0" + get-intrinsic "^1.2.4" + set-function-length "^1.2.2" + +call-bound@^1.0.2, call-bound@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/call-bound/-/call-bound-1.0.3.tgz#41cfd032b593e39176a71533ab4f384aa04fd681" + integrity sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA== + dependencies: + call-bind-apply-helpers "^1.0.1" + get-intrinsic "^1.2.6" + callsites@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" @@ -4275,6 +4346,11 @@ caniuse-lite@^1.0.30001406, caniuse-lite@^1.0.30001578, caniuse-lite@^1.0.300015 resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001583.tgz#abb2970cc370801dc7e27bf290509dc132cfa390" integrity sha512-acWTYaha8xfhA/Du/z4sNZjHUWjkiuoAi2LM+T/aL+kemKQgPT1xBb/YKjlQ0Qo8gvbHsGNplrEJ+9G3gL7i4Q== +caniuse-lite@^1.0.30001646, caniuse-lite@^1.0.30001688: + version "1.0.30001699" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001699.tgz#a102cf330d153bf8c92bfb5be3cd44c0a89c8c12" + integrity sha512-b+uH5BakXZ9Do9iK+CkDmctUSEqZl+SP056vc5usa0PL+ev5OHw003rZXcnjNDv3L8P5j6rwT6C0BPKSikW08w== + "cbw-sdk@npm:@coinbase/wallet-sdk@3.9.3": version "3.9.3" resolved "https://registry.yarnpkg.com/@coinbase/wallet-sdk/-/wallet-sdk-3.9.3.tgz#daf10cb0c85d0363315b7270cb3f02bedc408aab" @@ -4309,17 +4385,6 @@ chai@^5.1.2: loupe "^3.1.0" pathval "^2.0.0" -chalk@^1.0.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" - integrity sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A== - dependencies: - ansi-styles "^2.2.1" - escape-string-regexp "^1.0.2" - has-ansi "^2.0.0" - strip-ansi "^3.0.0" - supports-color "^2.0.0" - chalk@^2.3.2, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" @@ -4329,7 +4394,7 @@ chalk@^2.3.2, chalk@^2.4.2: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1: +chalk@^4.0.0, chalk@^4.1.0: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -4424,12 +4489,12 @@ cli-boxes@^2.2.1: resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f" integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw== -cli-cursor@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-4.0.0.tgz#3cecfe3734bf4fe02a8361cbdc0f6fe28c6a57ea" - integrity sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg== +cli-cursor@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-5.0.0.tgz#24a4831ecf5a6b01ddeb32fb71a4b2088b0dce38" + integrity sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw== dependencies: - restore-cursor "^4.0.0" + restore-cursor "^5.0.0" cli-table@^0.3.11: version "0.3.11" @@ -4510,10 +4575,10 @@ clone@^1.0.2: resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== -clsx@2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/clsx/-/clsx-2.1.0.tgz#e851283bcb5c80ee7608db18487433f7b23f77cb" - integrity sha512-m3iNNWpd9rl3jvvcBnu70ylMdrXt8Vlq4HYadnU5fwcOtvkSQWPmj7amUcDT2qYI7risszBjI5AUIUox9D16pg== +clsx@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/clsx/-/clsx-2.1.1.tgz#eed397c9fd8bd882bfb18deab7102049a2f32999" + integrity sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA== clsx@^1.2.1: version "1.2.1" @@ -4738,7 +4803,7 @@ cssesc@^3.0.0: resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== -csstype@^3.0.2, csstype@^3.0.7: +csstype@^3.0.2, csstype@^3.0.7, csstype@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81" integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== @@ -4758,10 +4823,10 @@ d3-format@^3.1.0: resolved "https://registry.yarnpkg.com/d3-format/-/d3-format-3.1.0.tgz#9260e23a28ea5cb109e93b21a06e24e2ebd55641" integrity sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA== -daisyui@^4.7.2: - version "4.7.2" - resolved "https://registry.yarnpkg.com/daisyui/-/daisyui-4.7.2.tgz#d2359d9eb1cac2082302ca55b6b35eca437a011f" - integrity sha512-9UCss12Zmyk/22u+JbkVrHHxOzFOyY17HuqP5LeswI4hclbj6qbjJTovdj2zRy8cCH6/n6Wh0lTLjriGnyGh0g== +daisyui@^4.12.23: + version "4.12.23" + resolved "https://registry.yarnpkg.com/daisyui/-/daisyui-4.12.23.tgz#3fc370ed4c226c9c811d223da1ba6a56ac16d777" + integrity sha512-EM38duvxutJ5PD65lO/AFMpcw+9qEy6XAZrTpzp7WyaPeO/l+F/Qiq0ECHHmFNcFXh5aVoALY4MGrrxtCiaQCQ== dependencies: css-selector-tokenizer "^0.8" culori "^3" @@ -4773,6 +4838,33 @@ damerau-levenshtein@^1.0.8: resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz#b43d286ccbd36bc5b2f7ed41caf2d0aba1f8a6e7" integrity sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA== +data-view-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/data-view-buffer/-/data-view-buffer-1.0.2.tgz#211a03ba95ecaf7798a8c7198d79536211f88570" + integrity sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ== + dependencies: + call-bound "^1.0.3" + es-errors "^1.3.0" + is-data-view "^1.0.2" + +data-view-byte-length@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz#9e80f7ca52453ce3e93d25a35318767ea7704735" + integrity sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ== + dependencies: + call-bound "^1.0.3" + es-errors "^1.3.0" + is-data-view "^1.0.2" + +data-view-byte-offset@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz#068307f9b71ab76dbbe10291389e020856606191" + integrity sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + is-data-view "^1.0.1" + date-fns@^2.29.3: version "2.30.0" resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.30.0.tgz#f367e644839ff57894ec6ac480de40cae4b0f4d0" @@ -4780,10 +4872,10 @@ date-fns@^2.29.3: dependencies: "@babel/runtime" "^7.21.0" -date-fns@^3.3.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-3.3.1.tgz#7581daca0892d139736697717a168afbb908cfed" - integrity sha512-y8e109LYGgoQDveiEBD3DYXKba1jWf5BA8YU1FL5Tvm0BTdEfy54WLCwnuYWZNnzzvALy/QQ4Hov+Q9RVRv+Zw== +date-fns@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-4.1.0.tgz#64b3d83fff5aa80438f5b1a633c2e83b8a1c2d14" + integrity sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg== debug@4, debug@4.3.4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4, debug@~4.3.1, debug@~4.3.2: version "4.3.4" @@ -4821,35 +4913,16 @@ decode-uri-component@^0.2.2: resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9" integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ== +dedent@^1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/dedent/-/dedent-1.5.3.tgz#99aee19eb9bae55a67327717b6e848d0bf777e5a" + integrity sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ== + deep-eql@^5.0.1: version "5.0.2" resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-5.0.2.tgz#4b756d8d770a9257300825d52a2c2cff99c3a341" integrity sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q== -deep-equal@^2.2.3: - version "2.2.3" - resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-2.2.3.tgz#af89dafb23a396c7da3e862abc0be27cf51d56e1" - integrity sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA== - dependencies: - array-buffer-byte-length "^1.0.0" - call-bind "^1.0.5" - es-get-iterator "^1.1.3" - get-intrinsic "^1.2.2" - is-arguments "^1.1.1" - is-array-buffer "^3.0.2" - is-date-object "^1.0.5" - is-regex "^1.1.4" - is-shared-array-buffer "^1.0.2" - isarray "^2.0.5" - object-is "^1.1.5" - object-keys "^1.1.1" - object.assign "^4.1.4" - regexp.prototype.flags "^1.5.1" - side-channel "^1.0.4" - which-boxed-primitive "^1.0.2" - which-collection "^1.0.1" - which-typed-array "^1.1.13" - deep-is@^0.1.3: version "0.1.4" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" @@ -4874,6 +4947,15 @@ define-data-property@^1.0.1, define-data-property@^1.1.1: gopd "^1.0.1" has-property-descriptors "^1.0.0" +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.0, define-properties@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" @@ -4890,11 +4972,6 @@ define-property@^1.0.0: dependencies: is-descriptor "^1.0.0" -defined@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.1.tgz#c0b9db27bfaffd95d6f61399419b893df0f91ebf" - integrity sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q== - defu@^6.1.3, defu@^6.1.4: version "6.1.4" resolved "https://registry.yarnpkg.com/defu/-/defu-6.1.4.tgz#4e0c9cf9ff68fe5f3d7f2765cc1a012dfdcb0479" @@ -5013,17 +5090,14 @@ dotenv@^16.4.5: resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.4.5.tgz#cdd3b3b604cb327e286b4762e13502f717cb099f" integrity sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg== -dotignore@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/dotignore/-/dotignore-0.1.2.tgz#f942f2200d28c3a76fbdd6f0ee9f3257c8a2e905" - integrity sha512-UGGGWfSauusaVJC+8fgV+NVvBXkCTmVv7sk6nojDZZvuOUNGUy0Zk4UpHQD6EDjS0jpBwcACvH4eofvyzBcRDw== +dunder-proto@^1.0.0, dunder-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a" + integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A== dependencies: - minimatch "^3.0.4" - -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== + call-bind-apply-helpers "^1.0.1" + es-errors "^1.3.0" + gopd "^1.2.0" duplexify@^4.1.2: version "4.1.2" @@ -5055,6 +5129,11 @@ electron-to-chromium@^1.4.648: resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.656.tgz#b374fb7cab9b782a5bc967c0ce0e19826186b9c9" integrity sha512-9AQB5eFTHyR3Gvt2t/NwR0le2jBSUNwCnMbUCejFWHD+so4tH40/dRLgoE+jxlPeWS43XJewyvCv+I8LPMl49Q== +electron-to-chromium@^1.5.73: + version "1.5.97" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.97.tgz#5c4a4744c79e7c85b187adf5160264ac130c776f" + integrity sha512-HKLtaH02augM7ZOdYRuO19rWDeY+QSJ1VxnXFa/XDFLf07HvM90pALIJFgrO+UVaajI3+aJMMpojoUTLZyQ7JQ== + elliptic@6.5.4, elliptic@^6.5.2, elliptic@^6.5.4: version "6.5.4" resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" @@ -5150,6 +5229,11 @@ env-paths@^2.2.0: resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== +environment@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/environment/-/environment-1.1.0.tgz#8e86c66b180f363c7ab311787e0259665f45a9f1" + integrity sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q== + err-code@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/err-code/-/err-code-3.0.1.tgz#a444c7b992705f2b120ee320b09972eef331c920" @@ -5169,6 +5253,63 @@ error-stack-parser@^1.3.6: dependencies: stackframe "^0.3.1" +es-abstract@^1.17.5, es-abstract@^1.23.2, es-abstract@^1.23.3, es-abstract@^1.23.5, es-abstract@^1.23.6, es-abstract@^1.23.9: + version "1.23.9" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.23.9.tgz#5b45994b7de78dada5c1bebf1379646b32b9d606" + integrity sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA== + dependencies: + array-buffer-byte-length "^1.0.2" + arraybuffer.prototype.slice "^1.0.4" + available-typed-arrays "^1.0.7" + call-bind "^1.0.8" + call-bound "^1.0.3" + data-view-buffer "^1.0.2" + data-view-byte-length "^1.0.2" + data-view-byte-offset "^1.0.1" + es-define-property "^1.0.1" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + es-set-tostringtag "^2.1.0" + es-to-primitive "^1.3.0" + function.prototype.name "^1.1.8" + get-intrinsic "^1.2.7" + get-proto "^1.0.0" + get-symbol-description "^1.1.0" + globalthis "^1.0.4" + gopd "^1.2.0" + has-property-descriptors "^1.0.2" + has-proto "^1.2.0" + has-symbols "^1.1.0" + hasown "^2.0.2" + internal-slot "^1.1.0" + is-array-buffer "^3.0.5" + is-callable "^1.2.7" + is-data-view "^1.0.2" + is-regex "^1.2.1" + is-shared-array-buffer "^1.0.4" + is-string "^1.1.1" + is-typed-array "^1.1.15" + is-weakref "^1.1.0" + math-intrinsics "^1.1.0" + object-inspect "^1.13.3" + object-keys "^1.1.1" + object.assign "^4.1.7" + own-keys "^1.0.1" + regexp.prototype.flags "^1.5.3" + safe-array-concat "^1.1.3" + safe-push-apply "^1.0.0" + safe-regex-test "^1.1.0" + set-proto "^1.0.0" + string.prototype.trim "^1.2.10" + string.prototype.trimend "^1.0.9" + string.prototype.trimstart "^1.0.8" + typed-array-buffer "^1.0.3" + typed-array-byte-length "^1.0.3" + typed-array-byte-offset "^1.0.4" + typed-array-length "^1.0.7" + unbox-primitive "^1.1.0" + which-typed-array "^1.1.18" + es-abstract@^1.22.1: version "1.22.3" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.3.tgz#48e79f5573198de6dee3589195727f4f74bc4f32" @@ -5214,25 +5355,20 @@ es-abstract@^1.22.1: unbox-primitive "^1.0.2" which-typed-array "^1.1.13" +es-define-property@^1.0.0, es-define-property@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa" + integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g== + es-errors@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.0.0.tgz#1936450fb8cff7bffb969335d0e55dfca7279aab" integrity sha512-yHV74THqMJUyFKkHyN7hyENcEZM3Dj2a2IrdClY+IT4BFQHkIVwlh8s6uZfjsFydMdNHv0F5mWgAA3ajFbsvVQ== -es-get-iterator@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/es-get-iterator/-/es-get-iterator-1.1.3.tgz#3ef87523c5d464d41084b2c3c9c214f1199763d6" - integrity sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.3" - has-symbols "^1.0.3" - is-arguments "^1.1.1" - is-map "^2.0.2" - is-set "^2.0.2" - is-string "^1.0.7" - isarray "^2.0.5" - stop-iteration-iterator "^1.0.0" +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== es-iterator-helpers@^1.0.12, es-iterator-helpers@^1.0.15: version "1.0.15" @@ -5254,11 +5390,40 @@ es-iterator-helpers@^1.0.12, es-iterator-helpers@^1.0.15: iterator.prototype "^1.1.2" safe-array-concat "^1.0.1" +es-iterator-helpers@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-iterator-helpers/-/es-iterator-helpers-1.2.1.tgz#d1dd0f58129054c0ad922e6a9a1e65eef435fe75" + integrity sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.3" + define-properties "^1.2.1" + es-abstract "^1.23.6" + es-errors "^1.3.0" + es-set-tostringtag "^2.0.3" + function-bind "^1.1.2" + get-intrinsic "^1.2.6" + globalthis "^1.0.4" + gopd "^1.2.0" + has-property-descriptors "^1.0.2" + has-proto "^1.2.0" + has-symbols "^1.1.0" + internal-slot "^1.1.0" + iterator.prototype "^1.1.4" + safe-array-concat "^1.1.3" + es-module-lexer@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.6.0.tgz#da49f587fd9e68ee2404fe4e256c0c7d3a81be21" integrity sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ== +es-object-atoms@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz#1c4f2c4837327597ce69d2ca190a7fdd172338c1" + integrity sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA== + dependencies: + es-errors "^1.3.0" + es-set-tostringtag@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz#11f7cc9f63376930a5f20be4915834f4bc74f9c9" @@ -5268,7 +5433,17 @@ es-set-tostringtag@^2.0.1: has-tostringtag "^1.0.0" hasown "^2.0.0" -es-shim-unscopables@^1.0.0: +es-set-tostringtag@^2.0.3, es-set-tostringtag@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz#f31dbbe0c183b00a6d26eb6325c810c0fd18bd4d" + integrity sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA== + dependencies: + es-errors "^1.3.0" + get-intrinsic "^1.2.6" + has-tostringtag "^1.0.2" + hasown "^2.0.2" + +es-shim-unscopables@^1.0.0, es-shim-unscopables@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz#1f6942e71ecc7835ed1c8a83006d8771a63a3763" integrity sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw== @@ -5284,6 +5459,15 @@ es-to-primitive@^1.2.1: is-date-object "^1.0.1" is-symbol "^1.0.2" +es-to-primitive@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.3.0.tgz#96c89c82cc49fd8794a24835ba3e1ff87f214e18" + integrity sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g== + dependencies: + is-callable "^1.2.7" + is-date-object "^1.0.5" + is-symbol "^1.0.4" + esbuild@^0.19.3: version "0.19.12" resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.19.12.tgz#dc82ee5dc79e82f5a5c3b4323a2a641827db3e04" @@ -5349,12 +5533,17 @@ escalade@^3.1.1: resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== +escalade@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" + integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== + escape-string-regexp@4.0.0, escape-string-regexp@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== -escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: +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== @@ -5487,6 +5676,30 @@ eslint-plugin-react@^7.33.2: semver "^6.3.1" string.prototype.matchall "^4.0.8" +eslint-plugin-react@^7.37.4: + version "7.37.4" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.37.4.tgz#1b6c80b6175b6ae4b26055ae4d55d04c414c7181" + integrity sha512-BGP0jRmfYyvOyvMoRX/uoUeW+GqNj9y16bPQzqAHf3AYII/tDs+jMN0dBVkl88/OZwNGwrVFxE7riHsXVfy/LQ== + dependencies: + array-includes "^3.1.8" + array.prototype.findlast "^1.2.5" + array.prototype.flatmap "^1.3.3" + array.prototype.tosorted "^1.1.4" + doctrine "^2.1.0" + es-iterator-helpers "^1.2.1" + estraverse "^5.3.0" + hasown "^2.0.2" + jsx-ast-utils "^2.4.1 || ^3.0.0" + minimatch "^3.1.2" + object.entries "^1.1.8" + object.fromentries "^2.0.8" + object.values "^1.2.1" + prop-types "^15.8.1" + resolve "^2.0.0-next.5" + semver "^6.3.1" + string.prototype.matchall "^4.0.12" + string.prototype.repeat "^1.0.0" + eslint-plugin-tailwindcss@^3.14.3: version "3.14.3" resolved "https://registry.yarnpkg.com/eslint-plugin-tailwindcss/-/eslint-plugin-tailwindcss-3.14.3.tgz#7d845869da1485e7f74226ccbc2c05e278f2a48e" @@ -5495,6 +5708,14 @@ eslint-plugin-tailwindcss@^3.14.3: fast-glob "^3.2.5" postcss "^8.4.4" +eslint-plugin-tailwindcss@^3.18.0: + version "3.18.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-tailwindcss/-/eslint-plugin-tailwindcss-3.18.0.tgz#00b020f6360e616d592c477a9abdc7d18970715d" + integrity sha512-PQDU4ZMzFH0eb2DrfHPpbgo87Zgg2EXSMOj1NSfzdZm+aJzpuwGerfowMIaVehSREEa0idbf/eoNYAOHSJoDAQ== + dependencies: + fast-glob "^3.2.5" + postcss "^8.4.4" + eslint-plugin-turbo@1.12.2: version "1.12.2" resolved "https://registry.yarnpkg.com/eslint-plugin-turbo/-/eslint-plugin-turbo-1.12.2.tgz#610327a35933a9f29cc6ce546e21ff3f3867b36a" @@ -5515,6 +5736,11 @@ eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4 resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== +eslint-visitor-keys@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz#687bacb2af884fcdda8a6e7d65c606f46a14cd45" + integrity sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw== + eslint@8.56.0, eslint@^8.56.0: version "8.56.0" resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.56.0.tgz#4957ce8da409dc0809f99ab07a1b94832ab74b15" @@ -5710,54 +5936,18 @@ ethereumjs-util@^6.0.0, ethereumjs-util@^6.2.1: ethjs-util "0.1.6" rlp "^2.2.3" -ethers@^5.6.5: - 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" - -ethers@^6.11.1: - version "6.11.1" - resolved "https://registry.yarnpkg.com/ethers/-/ethers-6.11.1.tgz#96aae00b627c2e35f9b0a4d65c7ab658259ee6af" - integrity sha512-mxTAE6wqJQAbp5QAe/+o+rXOID7Nw91OZXvgpjDa1r4fAbq2Nu314oEZSbjoRLacuCzs7kUC3clEvkCQowffGg== +ethers@^6.13.5: + version "6.13.5" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-6.13.5.tgz#8c1d6ac988ac08abc3c1d8fabbd4b8b602851ac4" + integrity sha512-+knKNieu5EKRThQJWwqaJ10a6HE9sSehGeqWN65//wE7j47ZpFhKAnHB/JJFibwwg61I/koxaPsXbXpD/skNOQ== dependencies: "@adraffy/ens-normalize" "1.10.1" "@noble/curves" "1.2.0" "@noble/hashes" "1.3.2" - "@types/node" "18.15.13" + "@types/node" "22.7.5" aes-js "4.0.0-beta.5" - tslib "2.4.0" - ws "8.5.0" + tslib "2.7.0" + ws "8.17.1" ethjs-unit@0.1.6: version "0.1.6" @@ -5861,6 +6051,17 @@ fast-glob@^3.2.5, fast-glob@^3.2.9, fast-glob@^3.3.0, fast-glob@^3.3.1: merge2 "^1.3.0" micromatch "^4.0.4" +fast-glob@^3.3.2: + version "3.3.3" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.3.tgz#d06d585ce8dba90a16b0505c543c3ccfb3aeb818" + integrity sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.8" + fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" @@ -5898,14 +6099,6 @@ fdir@^6.4.2: resolved "https://registry.yarnpkg.com/fdir/-/fdir-6.4.3.tgz#011cdacf837eca9b811c89dbb902df714273db72" integrity sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw== -figures@^1.4.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" - integrity sha512-UxKlfCRuCBxSXU4C6t9scbDyWZ4VlaFFdojKtzJuSkuOBQ5CNFum+zZXFwHjo+CxBC1t6zlYPgHIgFjL8ggoEQ== - dependencies: - escape-string-regexp "^1.0.5" - object-assign "^4.1.0" - figures@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" @@ -6079,15 +6272,27 @@ function.prototype.name@^1.1.5, function.prototype.name@^1.1.6: es-abstract "^1.22.1" functions-have-names "^1.2.3" +function.prototype.name@^1.1.8: + version "1.1.8" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.8.tgz#e68e1df7b259a5c949eeef95cdbde53edffabb78" + integrity sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.3" + define-properties "^1.2.1" + functions-have-names "^1.2.3" + hasown "^2.0.2" + is-callable "^1.2.7" + functions-have-names@^1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== -fuse.js@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/fuse.js/-/fuse.js-7.0.0.tgz#6573c9fcd4c8268e403b4fc7d7131ffcf99a9eb2" - integrity sha512-14F4hBIxqKvD4Zz/XjDc3y94mNZN6pRv3U13Udo0lNLCWRBUsrMv2xwcF/y/Z5sV6+FQW+/ow68cHpm4sunt8Q== +fuse.js@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/fuse.js/-/fuse.js-7.1.0.tgz#306228b4befeee11e05b027087c2744158527d09" + integrity sha512-trLf4SzuuUxfusZADLINj+dE8clK1frKdmqiJNb1Es75fmI5oY6X2mxLVUciLLjxqw/xr72Dhy+lER6dGd02FQ== gensync@^1.0.0-beta.2: version "1.0.0-beta.2" @@ -6120,21 +6325,40 @@ get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@ has-symbols "^1.0.3" hasown "^2.0.0" +get-intrinsic@^1.2.4, get-intrinsic@^1.2.5, get-intrinsic@^1.2.6, get-intrinsic@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.7.tgz#dcfcb33d3272e15f445d15124bc0a216189b9044" + integrity sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA== + dependencies: + call-bind-apply-helpers "^1.0.1" + es-define-property "^1.0.1" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + function-bind "^1.1.2" + get-proto "^1.0.0" + gopd "^1.2.0" + has-symbols "^1.1.0" + hasown "^2.0.2" + math-intrinsics "^1.1.0" + get-nonce@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/get-nonce/-/get-nonce-1.0.1.tgz#fdf3f0278073820d2ce9426c18f07481b1e0cdf3" integrity sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q== -get-package-type@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" - integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== - get-port-please@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/get-port-please/-/get-port-please-3.1.2.tgz#502795e56217128e4183025c89a48c71652f4e49" integrity sha512-Gxc29eLs1fbn6LQ4jSU4vXjlwyZhF5HsGuMAa7gqBP4Rw4yxxltyDUuF5MBclFzDTXO+ACchGQoeela4DSfzdQ== +get-proto@^1.0.0, get-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/get-proto/-/get-proto-1.0.1.tgz#150b3f2743869ef3e851ec0c49d15b1d14d00ee1" + integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g== + dependencies: + dunder-proto "^1.0.1" + es-object-atoms "^1.0.0" + get-stream@^8.0.1: version "8.0.1" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-8.0.1.tgz#def9dfd71742cd7754a7761ed43749a27d02eca2" @@ -6148,6 +6372,15 @@ get-symbol-description@^1.0.0: call-bind "^1.0.2" get-intrinsic "^1.1.1" +get-symbol-description@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.1.0.tgz#7bdd54e0befe8ffc9f3b4e203220d9f1e881b6ee" + integrity sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg== + dependencies: + call-bound "^1.0.3" + es-errors "^1.3.0" + get-intrinsic "^1.2.6" + get-tsconfig@^4.5.0: version "4.7.2" resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.7.2.tgz#0dcd6fb330391d46332f4c6c1bf89a6514c2ddce" @@ -6203,7 +6436,7 @@ glob@8.1.0: minimatch "^5.0.1" once "^1.3.0" -glob@^7.1.3, glob@^7.2.3: +glob@^7.1.3: version "7.2.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== @@ -6234,6 +6467,14 @@ globalthis@^1.0.3: dependencies: define-properties "^1.1.3" +globalthis@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.4.tgz#7430ed3a975d97bfb59bcce41f5cabbafa651236" + integrity sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ== + dependencies: + define-properties "^1.2.1" + gopd "^1.0.1" + globby@^11.0.0, globby@^11.1.0: version "11.1.0" resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" @@ -6251,10 +6492,10 @@ globrex@^0.1.2: resolved "https://registry.yarnpkg.com/globrex/-/globrex-0.1.2.tgz#dd5d9ec826232730cd6793a5e33a9302985e6098" integrity sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg== -goober@^2.1.10: - version "2.1.14" - resolved "https://registry.yarnpkg.com/goober/-/goober-2.1.14.tgz#4a5c94fc34dc086a8e6035360ae1800005135acd" - integrity sha512-4UpC0NdGyAFqLNPnhCT2iHpza2q+RAY3GV85a/mRPdzyPQMsj0KmMMuetdIkzWRbJ+Hgau1EZztq8ImmiMGhsg== +goober@^2.1.16: + version "2.1.16" + resolved "https://registry.yarnpkg.com/goober/-/goober-2.1.16.tgz#7d548eb9b83ff0988d102be71f271ca8f9c82a95" + integrity sha512-erjk19y1U33+XAMe1VTvIONHYoSqE4iS7BYUZfHaqeohLmnC0FdxEh7rQU+6MZ4OajItzjZFSRtVANrQwNq6/g== gopd@^1.0.1: version "1.0.1" @@ -6263,6 +6504,11 @@ gopd@^1.0.1: dependencies: get-intrinsic "^1.1.3" +gopd@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" + integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== + graceful-fs@^4.1.2, graceful-fs@^4.1.5, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0, graceful-fs@^4.2.4: version "4.2.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" @@ -6357,26 +6603,11 @@ hardhat@^2.20.1: uuid "^8.3.2" ws "^7.4.6" -has-ansi@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" - integrity sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg== - dependencies: - ansi-regex "^2.0.0" - has-bigints@^1.0.1, has-bigints@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== -has-dynamic-import@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/has-dynamic-import/-/has-dynamic-import-2.1.0.tgz#06359ad7672b9e764aea93a54bb9d6e17542d34c" - integrity sha512-su0anMkNEnJKZ/rB99jn3y6lV/J8Ro96hBJ28YAeVzj5rWxH+YL/AdCyiYYA1HDLV9YhmvqpWSJJj2KLo1MX6g== - dependencies: - call-bind "^1.0.5" - get-intrinsic "^1.2.2" - has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" @@ -6394,17 +6625,36 @@ has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.1: dependencies: get-intrinsic "^1.2.2" +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.1" resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== +has-proto@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.2.0.tgz#5de5a6eabd95fdffd9818b43055e8065e39fe9d5" + integrity sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ== + dependencies: + dunder-proto "^1.0.0" + has-symbols@^1.0.2, 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: +has-symbols@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338" + integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== + +has-tostringtag@^1.0.0, has-tostringtag@^1.0.1, has-tostringtag@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== @@ -6435,6 +6685,13 @@ hasown@^2.0.0: dependencies: function-bind "^1.1.2" +hasown@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" + integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== + dependencies: + function-bind "^1.1.2" + he@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" @@ -6551,12 +6808,12 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -internal-slot@^1.0.4, internal-slot@^1.0.5: +internal-slot@^1.0.5: version "1.0.6" resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.6.tgz#37e756098c4911c5e912b8edbf71ed3aa116f930" integrity sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg== @@ -6565,6 +6822,15 @@ internal-slot@^1.0.4, internal-slot@^1.0.5: hasown "^2.0.0" side-channel "^1.0.4" +internal-slot@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.1.0.tgz#1eac91762947d2f7056bc838d93e13b2e9604961" + integrity sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw== + dependencies: + es-errors "^1.3.0" + hasown "^2.0.2" + side-channel "^1.1.0" + invariant@^2.2.4: version "2.2.4" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" @@ -6606,7 +6872,7 @@ is-accessor-descriptor@^1.0.1: dependencies: hasown "^2.0.0" -is-arguments@^1.0.4, is-arguments@^1.1.1: +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== @@ -6622,6 +6888,15 @@ is-array-buffer@^3.0.2, is-array-buffer@^3.0.4: call-bind "^1.0.2" get-intrinsic "^1.2.1" +is-array-buffer@^3.0.5: + version "3.0.5" + resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.5.tgz#65742e1e687bd2cc666253068fd8707fe4d44280" + integrity sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.3" + get-intrinsic "^1.2.6" + is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" @@ -6641,6 +6916,13 @@ is-bigint@^1.0.1: dependencies: has-bigints "^1.0.1" +is-bigint@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.1.0.tgz#dda7a3445df57a42583db4228682eba7c4170672" + integrity sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ== + dependencies: + has-bigints "^1.0.2" + is-binary-path@~2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" @@ -6656,6 +6938,14 @@ is-boolean-object@^1.1.0: call-bind "^1.0.2" has-tostringtag "^1.0.0" +is-boolean-object@^1.2.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.2.2.tgz#7067f47709809a393c71ff5bb3e135d8a9215d9e" + integrity sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A== + dependencies: + call-bound "^1.0.3" + has-tostringtag "^1.0.2" + is-buffer@^1.1.5: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" @@ -6680,6 +6970,15 @@ is-data-descriptor@^1.0.1: dependencies: hasown "^2.0.0" +is-data-view@^1.0.1, is-data-view@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-data-view/-/is-data-view-1.0.2.tgz#bae0a41b9688986c2188dda6657e56b8f9e63b8e" + integrity sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw== + dependencies: + call-bound "^1.0.2" + get-intrinsic "^1.2.6" + is-typed-array "^1.1.13" + is-date-object@^1.0.1, is-date-object@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" @@ -6687,6 +6986,14 @@ is-date-object@^1.0.1, is-date-object@^1.0.5: dependencies: has-tostringtag "^1.0.0" +is-date-object@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.1.0.tgz#ad85541996fc7aa8b2729701d27b7319f95d82f7" + integrity sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg== + dependencies: + call-bound "^1.0.2" + has-tostringtag "^1.0.2" + is-descriptor@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.3.tgz#92d27cb3cd311c4977a4db47df457234a13cb306" @@ -6712,10 +7019,12 @@ is-finalizationregistry@^1.0.2: dependencies: call-bind "^1.0.2" -is-finite@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.1.0.tgz#904135c77fb42c0641d6aa1bcdbc4daa8da082f3" - integrity sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w== +is-finalizationregistry@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz#eefdcdc6c94ddd0674d9c85887bf93f944a97c90" + integrity sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg== + dependencies: + call-bound "^1.0.3" is-fullwidth-code-point@^3.0.0: version "3.0.0" @@ -6760,11 +7069,16 @@ is-inside-container@^1.0.0: dependencies: is-docker "^3.0.0" -is-map@^2.0.1, is-map@^2.0.2: +is-map@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.2.tgz#00922db8c9bf73e81b7a335827bc2a43f2b91127" integrity sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg== +is-map@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.3.tgz#ede96b7fe1e270b3c4465e3a465658764926d62e" + integrity sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw== + is-negative-zero@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" @@ -6777,6 +7091,14 @@ is-number-object@^1.0.4: dependencies: has-tostringtag "^1.0.0" +is-number-object@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.1.1.tgz#144b21e95a1bc148205dcc2814a9134ec41b2541" + integrity sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw== + dependencies: + call-bound "^1.0.3" + has-tostringtag "^1.0.2" + is-number@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" @@ -6807,11 +7129,26 @@ is-regex@^1.1.4: call-bind "^1.0.2" has-tostringtag "^1.0.0" -is-set@^2.0.1, is-set@^2.0.2: +is-regex@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.2.1.tgz#76d70a3ed10ef9be48eb577887d74205bf0cad22" + integrity sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g== + dependencies: + call-bound "^1.0.2" + gopd "^1.2.0" + has-tostringtag "^1.0.2" + hasown "^2.0.2" + +is-set@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.2.tgz#90755fa4c2562dc1c5d4024760d6119b94ca18ec" integrity sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g== +is-set@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.3.tgz#8ab209ea424608141372ded6e0cb200ef1d9d01d" + integrity sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg== + is-shared-array-buffer@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" @@ -6819,6 +7156,13 @@ is-shared-array-buffer@^1.0.2: dependencies: call-bind "^1.0.2" +is-shared-array-buffer@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz#9b67844bd9b7f246ba0708c3a93e34269c774f6f" + integrity sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A== + dependencies: + call-bound "^1.0.3" + is-stream@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" @@ -6836,6 +7180,14 @@ is-string@^1.0.5, is-string@^1.0.7: dependencies: has-tostringtag "^1.0.0" +is-string@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.1.1.tgz#92ea3f3d5c5b6e039ca8677e5ac8d07ea773cbb9" + integrity sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA== + dependencies: + call-bound "^1.0.3" + has-tostringtag "^1.0.2" + is-subdir@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/is-subdir/-/is-subdir-1.2.0.tgz#b791cd28fab5202e91a08280d51d9d7254fd20d4" @@ -6850,6 +7202,15 @@ is-symbol@^1.0.2, is-symbol@^1.0.3: dependencies: has-symbols "^1.0.2" +is-symbol@^1.0.4, is-symbol@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.1.1.tgz#f47761279f532e2b05a7024a7506dbbedacd0634" + integrity sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w== + dependencies: + call-bound "^1.0.2" + has-symbols "^1.1.0" + safe-regex-test "^1.1.0" + is-typed-array@^1.1.10, is-typed-array@^1.1.12, is-typed-array@^1.1.3, is-typed-array@^1.1.9: version "1.1.13" resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.13.tgz#d6c5ca56df62334959322d7d7dd1cca50debe229" @@ -6857,6 +7218,13 @@ is-typed-array@^1.1.10, is-typed-array@^1.1.12, is-typed-array@^1.1.3, is-typed- dependencies: which-typed-array "^1.1.14" +is-typed-array@^1.1.13, is-typed-array@^1.1.14, is-typed-array@^1.1.15: + version "1.1.15" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.15.tgz#4bfb4a45b61cee83a5a46fba778e4e8d59c0ce0b" + integrity sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ== + dependencies: + which-typed-array "^1.1.16" + is-unicode-supported@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" @@ -6867,6 +7235,11 @@ is-weakmap@^2.0.1: resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.1.tgz#5008b59bdc43b698201d18f62b37b2ca243e8cf2" integrity sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA== +is-weakmap@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.2.tgz#bf72615d649dfe5f699079c54b83e47d1ae19cfd" + integrity sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w== + is-weakref@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" @@ -6874,6 +7247,13 @@ is-weakref@^1.0.2: dependencies: call-bind "^1.0.2" +is-weakref@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.1.1.tgz#eea430182be8d64174bd96bffbc46f21bf3f9293" + integrity sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew== + dependencies: + call-bound "^1.0.3" + is-weakset@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.2.tgz#4569d67a747a1ce5a994dfd4ef6dcea76e7c0a1d" @@ -6882,6 +7262,14 @@ is-weakset@^2.0.1: call-bind "^1.0.2" get-intrinsic "^1.1.1" +is-weakset@^2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.4.tgz#c9f5deb0bc1906c6d6f1027f284ddf459249daca" + integrity sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ== + dependencies: + call-bound "^1.0.3" + get-intrinsic "^1.2.6" + is-windows@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" @@ -6942,6 +7330,18 @@ iterator.prototype@^1.1.2: reflect.getprototypeof "^1.0.4" set-function-name "^2.0.1" +iterator.prototype@^1.1.4: + version "1.1.5" + resolved "https://registry.yarnpkg.com/iterator.prototype/-/iterator.prototype-1.1.5.tgz#12c959a29de32de0aa3bbbb801f4d777066dae39" + integrity sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g== + dependencies: + define-data-property "^1.1.4" + es-object-atoms "^1.0.0" + get-intrinsic "^1.2.6" + get-proto "^1.0.0" + has-symbols "^1.1.0" + set-function-name "^2.0.2" + jackspeak@^2.3.5: version "2.3.6" resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.3.6.tgz#647ecc472238aee4b06ac0e461acc21a8c505ca8" @@ -7012,6 +7412,11 @@ jsesc@^2.5.1: resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== +jsesc@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.1.0.tgz#74d335a234f67ed19907fdadfac7ccf9d409825d" + integrity sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA== + json-buffer@3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" @@ -7212,16 +7617,16 @@ listhen@^1.5.5: untun "^0.1.3" uqr "^0.1.2" -listr2@^8.0.2: - version "8.0.2" - resolved "https://registry.yarnpkg.com/listr2/-/listr2-8.0.2.tgz#07649d1f93ee28c9922c0fca64eaf348b7e4a6b7" - integrity sha512-v5jEMOeEJUpRjSXSB4U3w5A3YPmURYMUO/86f1PA4GGYcdbUQYpkbvKYT7Xaq1iu4Zjn51Rv1UeD1zsBXRijiQ== +listr2@^8.2.5: + version "8.2.5" + resolved "https://registry.yarnpkg.com/listr2/-/listr2-8.2.5.tgz#5c9db996e1afeb05db0448196d3d5f64fec2593d" + integrity sha512-iyAZCeyD+c1gPyE9qpFu8af0Y+MRtmKOncdGoA2S5EY8iFq99dmmvkNnHiWo+pj0s7yH7l3KPIgee77tKpXPWQ== dependencies: cli-truncate "^4.0.0" colorette "^2.0.20" eventemitter3 "^5.0.1" - log-update "^6.0.0" - rfdc "^1.3.1" + log-update "^6.1.0" + rfdc "^1.4.1" wrap-ansi "^9.0.0" lit-element@^3.3.0: @@ -7405,7 +7810,7 @@ lodash.uniqby@4.5.0: lodash._baseiteratee "~4.7.0" lodash._baseuniq "~4.6.0" -lodash@^4.17.10, lodash@^4.17.11: +lodash@^4.17.11: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -7418,14 +7823,14 @@ log-symbols@4.1.0: chalk "^4.1.0" is-unicode-supported "^0.1.0" -log-update@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/log-update/-/log-update-6.0.0.tgz#0ddeb7ac6ad658c944c1de902993fce7c33f5e59" - integrity sha512-niTvB4gqvtof056rRIrTZvjNYE4rCUzO6X/X+kYjd7WFxXeJ0NwEFnRxX6ehkvv3jTwrXnNdtAak5XYZuIyPFw== +log-update@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/log-update/-/log-update-6.1.0.tgz#1a04ff38166f94647ae1af562f4bd6a15b1b7cd4" + integrity sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w== dependencies: - ansi-escapes "^6.2.0" - cli-cursor "^4.0.0" - slice-ansi "^7.0.0" + ansi-escapes "^7.0.0" + cli-cursor "^5.0.0" + slice-ansi "^7.1.0" strip-ansi "^7.1.0" wrap-ansi "^9.0.0" @@ -7446,6 +7851,11 @@ lru-cache@^10.0.0, lru-cache@^10.0.1, lru-cache@^10.0.2, lru-cache@^10.1.0, lru- resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.0.tgz#0bd445ca57363465900f4d1f9bd8db343a4d95c3" integrity sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q== +lru-cache@^10.4.3: + version "10.4.3" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.4.3.tgz#410fc8a17b70e598013df257c2446b7f3383f119" + integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ== + lru-cache@^11.0.2: version "11.0.2" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-11.0.2.tgz#fbd8e7cf8211f5e7e5d91905c415a3f55755ca39" @@ -7499,6 +7909,11 @@ markdown-it@^14.1.0: punycode.js "^2.3.1" uc.micro "^2.1.0" +math-intrinsics@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9" + integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== + md5.js@^1.3.4: version "1.3.5" resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" @@ -7589,16 +8004,16 @@ mime@^3.0.0: resolved "https://registry.yarnpkg.com/mime/-/mime-3.0.0.tgz#b374550dca3a0c18443b0c950a6a58f1931cf7a7" integrity sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A== -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== - mimic-fn@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-4.0.0.tgz#60a90550d5cb0b239cca65d893b1a53b29871ecc" integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw== +mimic-function@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/mimic-function/-/mimic-function-5.0.1.tgz#acbe2b3349f99b9deaca7fb70e48b83e94e67076" + integrity sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA== + 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" @@ -7637,14 +8052,14 @@ minimatch@^5.0.1: dependencies: brace-expansion "^2.0.1" -minimatch@^9.0.5: +minimatch@^9.0.4, minimatch@^9.0.5: version "9.0.5" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5" integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== dependencies: brace-expansion "^2.0.1" -minimist@^1.2.0, minimist@^1.2.6, minimist@^1.2.8: +minimist@^1.2.0, minimist@^1.2.6: version "1.2.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== @@ -7702,18 +8117,6 @@ mocha@^10.0.0: yargs-parser "20.2.4" yargs-unparser "2.0.0" -mock-property@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/mock-property/-/mock-property-1.0.3.tgz#3e37c50a56609d548cabd56559fde3dd8767b10c" - integrity sha512-2emPTb1reeLLYwHxyVx993iYyCHEiRRO+y8NFXFPL5kl5q14sgTK76cXyEKkeKCHeRw35SfdkUJ10Q1KfHuiIQ== - dependencies: - define-data-property "^1.1.1" - functions-have-names "^1.2.3" - gopd "^1.0.1" - has-property-descriptors "^1.0.0" - hasown "^2.0.0" - isarray "^2.0.5" - modern-ahocorasick@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/modern-ahocorasick/-/modern-ahocorasick-1.0.1.tgz#dec373444f51b5458ac05216a8ec376e126dd283" @@ -7871,6 +8274,11 @@ node-releases@^2.0.14: resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b" integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw== +node-releases@^2.0.19: + version "2.0.19" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.19.tgz#9e445a52950951ec4d177d843af370b411caf314" + integrity sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw== + normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" @@ -7905,7 +8313,7 @@ obj-multiplex@^1.0.0: once "^1.4.0" readable-stream "^2.3.3" -object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: +object-assign@^4.0.1, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== @@ -7920,20 +8328,17 @@ object-inspect@^1.13.1, object-inspect@^1.9.0: resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== -object-is@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac" - integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" +object-inspect@^1.13.3: + version "1.13.4" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.4.tgz#8375265e21bc20d0fa582c22e1b13485d6e00213" + integrity sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew== 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, object.assign@^4.1.5: +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== @@ -7943,6 +8348,18 @@ object.assign@^4.1.4, object.assign@^4.1.5: has-symbols "^1.0.3" object-keys "^1.1.1" +object.assign@^4.1.7: + version "4.1.7" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.7.tgz#8c14ca1a424c6a561b0bb2a22f66f5049a945d3d" + integrity sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.3" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + has-symbols "^1.1.0" + object-keys "^1.1.1" + object.entries@^1.1.6, object.entries@^1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.7.tgz#2b47760e2a2e3a752f39dd874655c61a7f03c131" @@ -7952,6 +8369,15 @@ object.entries@^1.1.6, object.entries@^1.1.7: define-properties "^1.2.0" es-abstract "^1.22.1" +object.entries@^1.1.8: + version "1.1.8" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.8.tgz#bffe6f282e01f4d17807204a24f8edd823599c41" + integrity sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + object.fromentries@^2.0.6, object.fromentries@^2.0.7: version "2.0.7" resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.7.tgz#71e95f441e9a0ea6baf682ecaaf37fa2a8d7e616" @@ -7961,6 +8387,16 @@ object.fromentries@^2.0.6, object.fromentries@^2.0.7: define-properties "^1.2.0" es-abstract "^1.22.1" +object.fromentries@^2.0.8: + version "2.0.8" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.8.tgz#f7195d8a9b97bd95cbc1999ea939ecd1a2b00c65" + integrity sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-object-atoms "^1.0.0" + object.groupby@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.1.tgz#d41d9f3c8d6c778d9cbac86b4ee9f5af103152ee" @@ -7988,6 +8424,16 @@ object.values@^1.1.6, object.values@^1.1.7: define-properties "^1.2.0" es-abstract "^1.22.1" +object.values@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.2.1.tgz#deed520a50809ff7f75a7cfd4bc64c7a038c6216" + integrity sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.3" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + obliterator@^2.0.0: version "2.0.4" resolved "https://registry.yarnpkg.com/obliterator/-/obliterator-2.0.4.tgz#fa650e019b2d075d745e44f1effeb13a2adbe816" @@ -8019,13 +8465,6 @@ once@^1.3.0, once@^1.3.1, once@^1.4.0: dependencies: wrappy "1" -onetime@^5.1.0: - 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" - onetime@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/onetime/-/onetime-6.0.0.tgz#7c24c18ed1fd2e9bca4bd26806a33613c77d34b4" @@ -8033,6 +8472,13 @@ onetime@^6.0.0: dependencies: mimic-fn "^4.0.0" +onetime@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-7.0.0.tgz#9f16c92d8c9ef5120e3acd9dd9957cceecc1ab60" + integrity sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ== + dependencies: + mimic-function "^5.0.0" + openpgp@^5.5.0: version "5.11.0" resolved "https://registry.yarnpkg.com/openpgp/-/openpgp-5.11.0.tgz#cec5b285d188148f7b5201b9aceb53850cc286a2" @@ -8062,10 +8508,14 @@ outdent@^0.5.0: resolved "https://registry.yarnpkg.com/outdent/-/outdent-0.5.0.tgz#9e10982fdc41492bb473ad13840d22f9655be2ff" integrity sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q== -outdent@^0.8.0: - version "0.8.0" - resolved "https://registry.yarnpkg.com/outdent/-/outdent-0.8.0.tgz#2ebc3e77bf49912543f1008100ff8e7f44428eb0" - integrity sha512-KiOAIsdpUTcAXuykya5fnVVT+/5uS0Q1mrkRHcF89tpieSmY33O/tmc54CqwA+bfhbtEfZUNLHaPUiB9X3jt1A== +own-keys@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/own-keys/-/own-keys-1.0.1.tgz#e4006910a2bf913585289676eebd6f390cf51358" + integrity sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg== + dependencies: + get-intrinsic "^1.2.6" + object-keys "^1.1.1" + safe-push-apply "^1.0.0" ox@0.6.7: version "0.6.7" @@ -8189,11 +8639,6 @@ parse-json@^4.0.0: error-ex "^1.3.1" json-parse-better-errors "^1.0.1" -parse-ms@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parse-ms/-/parse-ms-1.0.1.tgz#56346d4749d78f23430ca0c713850aef91aa361d" - integrity sha512-LpH1Cf5EYuVjkBvCDBYvkUPh+iv2bk3FHflxHkpCYT0/FZ1d3N3uJaLiHr4yGuMcFUhv6eAivitTvWZI4B/chg== - path-exists@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" @@ -8273,7 +8718,7 @@ picocolors@^1, picocolors@^1.0.0: resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== -picocolors@^1.1.0, picocolors@^1.1.1: +picocolors@^1.0.1, picocolors@^1.1.0, picocolors@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== @@ -8360,11 +8805,6 @@ pkg-types@^1.0.3: mlly "^1.2.0" pathe "^1.1.0" -plur@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/plur/-/plur-1.0.0.tgz#db85c6814f5e5e5a3b49efc28d604fec62975156" - integrity sha512-qSnKBSZeDY8ApxwhfVIwKwF36KVJqb1/9nzYYq3j3vdwocULCXT8f8fQGkiw1Nk9BGfxiDagEe/pwakA+bOBqw== - pngjs@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-5.0.0.tgz#e79dd2b215767fd9c04561c01236df960bce7fbb" @@ -8375,6 +8815,11 @@ pony-cause@^2.1.10: resolved "https://registry.yarnpkg.com/pony-cause/-/pony-cause-2.1.10.tgz#828457ad6f13be401a075dbf14107a9057945174" integrity sha512-3IKLNXclQgkU++2fSi93sQ6BznFuxSLB11HdvZQ6JW/spahf/P1pAHBQEahr20rs0htZW0UDkM1HmA+nZkXKsw== +possible-typed-array-names@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz#93e3582bc0e5426586d9d07b79ee40fc841de4ae" + integrity sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg== + postcss-import@^15.1.0: version "15.1.0" resolved "https://registry.yarnpkg.com/postcss-import/-/postcss-import-15.1.0.tgz#41c64ed8cc0e23735a9698b3249ffdbf704adc70" @@ -8470,6 +8915,15 @@ postcss@^8.5.1: picocolors "^1.1.1" source-map-js "^1.2.1" +postcss@^8.5.2: + version "8.5.2" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.5.2.tgz#e7b99cb9d2ec3e8dd424002e7c16517cb2b846bd" + integrity sha512-MjOadfU3Ys9KYoX0AdkBlFEF1Vx37uCCeN4ZHnmwm9FfpbsGWMZeBLMmmpY+6Ocqod7mkdZ0DT31OlbsFrLlkA== + dependencies: + nanoid "^3.3.8" + picocolors "^1.1.1" + source-map-js "^1.2.1" + preact@^10.16.0: version "10.19.3" resolved "https://registry.yarnpkg.com/preact/-/preact-10.19.3.tgz#7a7107ed2598a60676c943709ea3efb8aaafa899" @@ -8505,20 +8959,6 @@ prettier@^3.4.2: resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.4.2.tgz#a5ce1fb522a588bf2b78ca44c6e6fe5aa5a2b13f" integrity sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ== -pretty-ms@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/pretty-ms/-/pretty-ms-2.1.0.tgz#4257c256df3fb0b451d6affaab021884126981dc" - integrity sha512-H2enpsxzDhuzRl3zeSQpQMirn8dB0Z/gxW96j06tMfTviUWvX14gjKb7qd1gtkUyYhDPuoNe00K5PqNvy2oQNg== - dependencies: - is-finite "^1.0.1" - parse-ms "^1.0.0" - plur "^1.0.0" - -process-nextick-args@~1.0.6: - version "1.0.7" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" - integrity sha512-yN0WQmuCX63LP/TMvAg31nvT6m4vDqJEiiv2CAZqWOGNWutc9DfDk1NPYYmKUFmaVM2UwDowH4u5AHWYP/jxKw== - process-nextick-args@~2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" @@ -8593,6 +9033,15 @@ qrcode@1.5.3: pngjs "^5.0.0" yargs "^15.3.1" +qrcode@1.5.4: + version "1.5.4" + resolved "https://registry.yarnpkg.com/qrcode/-/qrcode-1.5.4.tgz#5cb81d86eb57c675febb08cf007fff963405da88" + integrity sha512-1ca71Zgiu6ORjHqFBDpnSMTR2ReToX4l1Au1VFLyVeBTFavzQnv5JxMFr3ukHVKpSrSA2MCk0lNJSykjUfz7Zg== + dependencies: + dijkstrajs "^1.0.1" + pngjs "^5.0.0" + yargs "^15.3.1" + query-string@7.1.3: version "7.1.3" resolved "https://registry.yarnpkg.com/query-string/-/query-string-7.1.3.tgz#a1cf90e994abb113a325804a972d98276fe02328" @@ -8640,11 +9089,6 @@ raw-body@^2.4.1: iconv-lite "0.4.24" unpipe "1.0.0" -re-emitter@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/re-emitter/-/re-emitter-1.1.3.tgz#fa9e319ffdeeeb35b27296ef0f3d374dac2f52a7" - integrity sha512-bHJul9CWcocrS+w5e5QrKYXV9NkbSA9hxSEyhYuctwm6keY9NXR2Xt/4A0vbMP0QvuwyfEyb4bkowYXv1ziEbg== - react-dom@18.2.0, react-dom@^18.2.0: version "18.2.0" resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d" @@ -8653,45 +9097,46 @@ react-dom@18.2.0, react-dom@^18.2.0: loose-envify "^1.1.0" scheduler "^0.23.0" -react-hot-toast@^2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/react-hot-toast/-/react-hot-toast-2.4.1.tgz#df04295eda8a7b12c4f968e54a61c8d36f4c0994" - integrity sha512-j8z+cQbWIM5LY37pR6uZR6D4LfseplqnuAO4co4u8917hBUvXlEqyP1ZzqVLcqoyUesZZv/ImreoCeHVDpE5pQ== +react-hot-toast@^2.5.1: + version "2.5.1" + resolved "https://registry.yarnpkg.com/react-hot-toast/-/react-hot-toast-2.5.1.tgz#fcb182d96353c803ee5af82e96c806d5eaa4dcfa" + integrity sha512-54Gq1ZD1JbmAb4psp9bvFHjS7lje+8ubboUmvKZkCsQBLH6AOpZ9JemfRvIdHcfb9AZXRaFLrb3qUobGYDJhFQ== dependencies: - goober "^2.1.10" + csstype "^3.1.3" + goober "^2.1.16" react-is@^16.13.1: version "16.13.1" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== -react-loading-skeleton@^3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/react-loading-skeleton/-/react-loading-skeleton-3.4.0.tgz#c71a3a17259d08e4064974aa0b07f150a09dfd57" - integrity sha512-1oJEBc9+wn7BbkQQk7YodlYEIjgeR+GrRjD+QXkVjwZN7LGIcAFHrx4NhT7UHGBxNY1+zax3c+Fo6XQM4R7CgA== +react-loading-skeleton@^3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/react-loading-skeleton/-/react-loading-skeleton-3.5.0.tgz#da2090355b4dedcad5c53cb3f0ed364e3a76d6ca" + integrity sha512-gxxSyLbrEAdXTKgfbpBEFZCO/P153DnqSCQau2+o6lNy1jgMRr2MmRmOzMmyrwSaSYLRB8g7b0waYPmUjz7IhQ== react-refresh@^0.14.0: version "0.14.0" resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.14.0.tgz#4e02825378a5f227079554d4284889354e5f553e" integrity sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ== -react-remove-scroll-bar@^2.3.4: - version "2.3.4" - resolved "https://registry.yarnpkg.com/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.4.tgz#53e272d7a5cb8242990c7f144c44d8bd8ab5afd9" - integrity sha512-63C4YQBUt0m6ALadE9XV56hV8BgJWDmmTPY758iIJjfQKt2nYwoUrPk0LXRXcB/yIj82T1/Ixfdpdk68LwIB0A== +react-remove-scroll-bar@^2.3.7: + version "2.3.8" + resolved "https://registry.yarnpkg.com/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.8.tgz#99c20f908ee467b385b68a3469b4a3e750012223" + integrity sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q== dependencies: - react-style-singleton "^2.2.1" + react-style-singleton "^2.2.2" tslib "^2.0.0" -react-remove-scroll@2.5.7: - version "2.5.7" - resolved "https://registry.yarnpkg.com/react-remove-scroll/-/react-remove-scroll-2.5.7.tgz#15a1fd038e8497f65a695bf26a4a57970cac1ccb" - integrity sha512-FnrTWO4L7/Bhhf3CYBNArEG/yROV0tKmTv7/3h9QCFvH6sndeFf1wPqOcbFVu5VAulS5dV1wGT3GZZ/1GawqiA== +react-remove-scroll@2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/react-remove-scroll/-/react-remove-scroll-2.6.2.tgz#2518d2c5112e71ea8928f1082a58459b5c7a2a97" + integrity sha512-KmONPx5fnlXYJQqC62Q+lwIeAk64ws/cUw6omIumRzMRPqgnYqhSSti99nbj0Ry13bv7dF+BKn7NB+OqkdZGTw== dependencies: - react-remove-scroll-bar "^2.3.4" + react-remove-scroll-bar "^2.3.7" react-style-singleton "^2.2.1" tslib "^2.1.0" - use-callback-ref "^1.3.0" + use-callback-ref "^1.3.3" use-sidecar "^1.1.2" react-style-singleton@^2.2.1: @@ -8703,12 +9148,20 @@ react-style-singleton@^2.2.1: invariant "^2.2.4" tslib "^2.0.0" -react-tooltip@^5.26.0: - version "5.26.0" - resolved "https://registry.yarnpkg.com/react-tooltip/-/react-tooltip-5.26.0.tgz#340d054cf952c43c2442f3af24bfc5c2b81fa80a" - integrity sha512-UBbwy3fo1KYDwRCOWwM6AEfQsk9shgVfNkXFqgwS33QHplzg7xao/7mX/6wd+lE6KSZzhUNTkB5TNk9SMaBV/A== +react-style-singleton@^2.2.2: + version "2.2.3" + resolved "https://registry.yarnpkg.com/react-style-singleton/-/react-style-singleton-2.2.3.tgz#4265608be69a4d70cfe3047f2c6c88b2c3ace388" + integrity sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ== + dependencies: + get-nonce "^1.0.0" + tslib "^2.0.0" + +react-tooltip@^5.28.0: + version "5.28.0" + resolved "https://registry.yarnpkg.com/react-tooltip/-/react-tooltip-5.28.0.tgz#c7b5343ab2d740a428494a3d8315515af1f26f46" + integrity sha512-R5cO3JPPXk6FRbBHMO0rI9nkUG/JKfalBSQfZedZYzmqaZQgq7GLzF8vcCWx6IhUCKg0yPqJhXIzmIO5ff15xg== dependencies: - "@floating-ui/dom" "^1.0.0" + "@floating-ui/dom" "^1.6.1" classnames "^2.3.0" react@18.2.0, react@^18.2.0: @@ -8735,20 +9188,7 @@ read-yaml-file@^1.1.0: pify "^4.0.1" strip-bom "^3.0.0" -readable-stream@2.2.9: - version "2.2.9" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.9.tgz#cf78ec6f4a6d1eb43d26488cac97f042e74b7fc8" - integrity sha512-iuxqX7b7FYt08AriYECxUsK9KTXE3A/FenxIa3IPmvANHxaTP/wGIwwf+IidvvIDk/MsCp/oEV6A8CXo4SDcCg== - dependencies: - buffer-shims "~1.0.0" - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "~1.0.0" - process-nextick-args "~1.0.6" - string_decoder "~1.0.0" - util-deprecate "~1.0.1" - -readable-stream@^2.3.3, readable-stream@~2.3.6: +readable-stream@^2.3.3: version "2.3.8" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== @@ -8822,6 +9262,20 @@ reflect.getprototypeof@^1.0.4: globalthis "^1.0.3" which-builtin-type "^1.1.3" +reflect.getprototypeof@^1.0.6, reflect.getprototypeof@^1.0.9: + version "1.0.10" + resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz#c629219e78a3316d8b604c765ef68996964e7bf9" + integrity sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw== + dependencies: + call-bind "^1.0.8" + define-properties "^1.2.1" + es-abstract "^1.23.9" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + get-intrinsic "^1.2.7" + get-proto "^1.0.1" + which-builtin-type "^1.2.1" + regenerator-runtime@^0.14.0: version "0.14.1" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" @@ -8836,10 +9290,17 @@ regexp.prototype.flags@^1.5.0, regexp.prototype.flags@^1.5.1: define-properties "^1.2.0" set-function-name "^2.0.0" -repeat-string@^1.5.2: - version "1.6.1" - resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" - integrity sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w== +regexp.prototype.flags@^1.5.3: + version "1.5.4" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz#1ad6c62d44a259007e55b3970e00f746efbcaa19" + integrity sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA== + dependencies: + call-bind "^1.0.8" + define-properties "^1.2.1" + es-errors "^1.3.0" + get-proto "^1.0.1" + gopd "^1.2.0" + set-function-name "^2.0.2" require-directory@^2.1.1: version "2.1.1" @@ -8901,13 +9362,13 @@ resolve@^2.0.0-next.4, resolve@^2.0.0-next.5: path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" -restore-cursor@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-4.0.0.tgz#519560a4318975096def6e609d44100edaa4ccb9" - integrity sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg== +restore-cursor@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-5.1.0.tgz#0766d95699efacb14150993f55baf0953ea1ebe7" + integrity sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA== dependencies: - onetime "^5.1.0" - signal-exit "^3.0.2" + onetime "^7.0.0" + signal-exit "^4.1.0" retry@^0.12.0: version "0.12.0" @@ -8919,10 +9380,10 @@ reusify@^1.0.4: resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== -rfdc@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.1.tgz#2b6d4df52dffe8bb346992a10ea9451f24373a8f" - integrity sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg== +rfdc@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.4.1.tgz#778f76c4fb731d93414e8f925fbecf64cce7f6ca" + integrity sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA== rimraf@^2.2.8: version "2.7.1" @@ -9039,6 +9500,17 @@ safe-array-concat@^1.0.1: has-symbols "^1.0.3" isarray "^2.0.5" +safe-array-concat@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.3.tgz#c9e54ec4f603b0bbb8e7e5007a5ee7aecd1538c3" + integrity sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.2" + get-intrinsic "^1.2.6" + has-symbols "^1.1.0" + isarray "^2.0.5" + safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" @@ -9049,6 +9521,14 @@ safe-buffer@~5.1.0, safe-buffer@~5.1.1: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== +safe-push-apply@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/safe-push-apply/-/safe-push-apply-1.0.0.tgz#01850e981c1602d398c85081f360e4e6d03d27f5" + integrity sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA== + dependencies: + es-errors "^1.3.0" + isarray "^2.0.5" + safe-regex-test@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.2.tgz#3ba32bdb3ea35f940ee87e5087c60ee786c3f6c5" @@ -9058,6 +9538,15 @@ safe-regex-test@^1.0.0: get-intrinsic "^1.2.2" is-regex "^1.1.4" +safe-regex-test@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.1.0.tgz#7f87dfb67a3150782eaaf18583ff5d1711ac10c1" + integrity sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + is-regex "^1.2.1" + safe-stable-stringify@^2.1.0: version "2.4.3" resolved "https://registry.yarnpkg.com/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz#138c84b6f6edb3db5f8ef3ef7115b8f55ccbf886" @@ -9080,7 +9569,7 @@ scheduler@^0.23.0: dependencies: loose-envify "^1.1.0" -scrypt-js@3.0.1, scrypt-js@^3.0.0: +scrypt-js@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-3.0.1.tgz#d314a57c2aef69d1ad98a138a21fe9eafa9ee312" integrity sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA== @@ -9111,6 +9600,11 @@ semver@^7.3.8, semver@^7.5.3, semver@^7.5.4: dependencies: lru-cache "^6.0.0" +semver@^7.6.0: + version "7.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.1.tgz#abd5098d82b18c6c81f6074ff2647fd3e7220c9f" + integrity sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA== + serialize-javascript@6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" @@ -9134,6 +9628,18 @@ set-function-length@^1.1.1: gopd "^1.0.1" has-property-descriptors "^1.0.1" +set-function-length@^1.2.2: + 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" + set-function-name@^2.0.0, set-function-name@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.1.tgz#12ce38b7954310b9f61faa12701620a0c882793a" @@ -9143,6 +9649,25 @@ set-function-name@^2.0.0, set-function-name@^2.0.1: functions-have-names "^1.2.3" has-property-descriptors "^1.0.0" +set-function-name@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.2.tgz#16a705c5a0dc2f5e638ca96d8a8cd4e1c2b90985" + integrity sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ== + dependencies: + define-data-property "^1.1.4" + es-errors "^1.3.0" + functions-have-names "^1.2.3" + has-property-descriptors "^1.0.2" + +set-proto@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/set-proto/-/set-proto-1.0.0.tgz#0760dbcff30b2d7e801fd6e19983e56da337565e" + integrity sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw== + dependencies: + dunder-proto "^1.0.1" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + setimmediate@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" @@ -9173,6 +9698,35 @@ shebang-regex@^3.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== +side-channel-list@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/side-channel-list/-/side-channel-list-1.0.0.tgz#10cb5984263115d3b7a0e336591e290a830af8ad" + integrity sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA== + dependencies: + es-errors "^1.3.0" + object-inspect "^1.13.3" + +side-channel-map@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/side-channel-map/-/side-channel-map-1.0.1.tgz#d6bb6b37902c6fef5174e5f533fab4c732a26f42" + integrity sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + get-intrinsic "^1.2.5" + object-inspect "^1.13.3" + +side-channel-weakmap@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz#11dda19d5368e40ce9ec2bdc1fb0ecbc0790ecea" + integrity sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + get-intrinsic "^1.2.5" + object-inspect "^1.13.3" + side-channel-map "^1.0.1" + side-channel@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" @@ -9182,6 +9736,17 @@ side-channel@^1.0.4: get-intrinsic "^1.0.2" object-inspect "^1.9.0" +side-channel@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.1.0.tgz#c3fcff9c4da932784873335ec9765fa94ff66bc9" + integrity sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw== + dependencies: + es-errors "^1.3.0" + object-inspect "^1.13.3" + side-channel-list "^1.0.0" + side-channel-map "^1.0.1" + side-channel-weakmap "^1.0.2" + siginfo@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/siginfo/-/siginfo-2.0.0.tgz#32e76c70b79724e3bb567cb9d543eb858ccfaf30" @@ -9249,7 +9814,7 @@ slice-ansi@^5.0.0: ansi-styles "^6.0.0" is-fullwidth-code-point "^4.0.0" -slice-ansi@^7.0.0: +slice-ansi@^7.1.0: version "7.1.0" resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-7.1.0.tgz#cd6b4655e298a8d1bdeb04250a433094b347b9a9" integrity sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg== @@ -9350,13 +9915,6 @@ split2@^4.0.0: resolved "https://registry.yarnpkg.com/split2/-/split2-4.2.0.tgz#c9c5920904d148bab0b9f67145f245a86aadbfa4" integrity sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg== -split@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/split/-/split-1.0.0.tgz#c4395ce683abcd254bc28fe1dabb6e5c27dcffae" - integrity sha512-3SVfJe2A0WZg3D+ZEtXqYkvpSGAVaZ1MgufNCeHioBESCqQFsuT1VcQufiopBfJZqh92ZwQ6ddL378iUSbqVNQ== - dependencies: - through "2" - sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" @@ -9428,13 +9986,6 @@ std-env@^3.8.0: resolved "https://registry.yarnpkg.com/std-env/-/std-env-3.8.0.tgz#b56ffc1baf1a29dcc80a3bdf11d7fca7c315e7d5" integrity sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w== -stop-iteration-iterator@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz#6a60be0b4ee757d1ed5254858ec66b10c49285e4" - integrity sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ== - dependencies: - internal-slot "^1.0.4" - stream-shift@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.3.tgz#85b8fab4d71010fc3ba8772e8046cc49b8a3864b" @@ -9481,6 +10032,25 @@ string-width@^7.0.0: get-east-asian-width "^1.0.0" strip-ansi "^7.1.0" +string.prototype.matchall@^4.0.12: + version "4.0.12" + resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz#6c88740e49ad4956b1332a911e949583a275d4c0" + integrity sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.3" + define-properties "^1.2.1" + es-abstract "^1.23.6" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + get-intrinsic "^1.2.6" + gopd "^1.2.0" + has-symbols "^1.1.0" + internal-slot "^1.1.0" + regexp.prototype.flags "^1.5.3" + set-function-name "^2.0.2" + side-channel "^1.1.0" + string.prototype.matchall@^4.0.8: version "4.0.10" resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz#a1553eb532221d4180c51581d6072cd65d1ee100" @@ -9496,6 +10066,27 @@ string.prototype.matchall@^4.0.8: set-function-name "^2.0.0" side-channel "^1.0.4" +string.prototype.repeat@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz#e90872ee0308b29435aa26275f6e1b762daee01a" + integrity sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" + +string.prototype.trim@^1.2.10: + version "1.2.10" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz#40b2dd5ee94c959b4dcfb1d65ce72e90da480c81" + integrity sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.2" + define-data-property "^1.1.4" + define-properties "^1.2.1" + es-abstract "^1.23.5" + es-object-atoms "^1.0.0" + has-property-descriptors "^1.0.2" + string.prototype.trim@^1.2.8: version "1.2.8" resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz#f9ac6f8af4bd55ddfa8895e6aea92a96395393bd" @@ -9514,6 +10105,16 @@ string.prototype.trimend@^1.0.7: define-properties "^1.2.0" es-abstract "^1.22.1" +string.prototype.trimend@^1.0.9: + version "1.0.9" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz#62e2731272cd285041b36596054e9f66569b6942" + integrity sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.2" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + string.prototype.trimstart@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz#d4cdb44b83a4737ffbac2d406e405d43d0184298" @@ -9523,6 +10124,15 @@ string.prototype.trimstart@^1.0.7: define-properties "^1.2.0" es-abstract "^1.22.1" +string.prototype.trimstart@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz#7ee834dda8c7c17eff3118472bb35bfedaa34dde" + integrity sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + string_decoder@^1.1.1, string_decoder@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" @@ -9530,13 +10140,6 @@ string_decoder@^1.1.1, string_decoder@^1.3.0: dependencies: safe-buffer "~5.2.0" -string_decoder@~1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab" - integrity sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ== - dependencies: - safe-buffer "~5.1.0" - string_decoder@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" @@ -9551,13 +10154,6 @@ string_decoder@~1.1.1: dependencies: ansi-regex "^5.0.1" -strip-ansi@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" - integrity sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg== - dependencies: - ansi-regex "^2.0.0" - strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" @@ -9626,11 +10222,6 @@ supports-color@8.1.1, supports-color@^8: dependencies: has-flag "^4.0.0" -supports-color@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" - integrity sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g== - supports-color@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" @@ -9683,63 +10274,16 @@ tailwindcss@^3.4.1: resolve "^1.22.2" sucrase "^3.32.0" -tap-out@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/tap-out/-/tap-out-2.1.0.tgz#c093079a915036de8b835bfa3297f14458b15358" - integrity sha512-LJE+TBoVbOWhwdz4+FQk40nmbIuxJLqaGvj3WauQw3NYYU5TdjoV3C0x/yq37YAvVyi+oeBXmWnxWSjJ7IEyUw== - dependencies: - re-emitter "1.1.3" - readable-stream "2.2.9" - split "1.0.0" - trim "0.0.1" - -tap-spec@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/tap-spec/-/tap-spec-5.0.0.tgz#7329e4e66e8aa68da2a164215abbb903a7c5d352" - integrity sha512-zMDVJiE5I6Y4XGjlueGXJIX2YIkbDN44broZlnypT38Hj/czfOXrszHNNJBF/DXR8n+x6gbfSx68x04kIEHdrw== - dependencies: - chalk "^1.0.0" - duplexer "^0.1.1" - figures "^1.4.0" - lodash "^4.17.10" - pretty-ms "^2.1.0" - repeat-string "^1.5.2" - tap-out "^2.1.0" - through2 "^2.0.0" +tailwindcss@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-4.0.6.tgz#c033bfba94d6e3bf70650a2f9fe949f39d3bb191" + integrity sha512-mysewHYJKaXgNOW6pp5xon/emCsfAMnO8WMaGKZZ35fomnR/T5gYnRg2/yRTTrtXiEl1tiVkeRt0eMO6HxEZqw== tapable@^2.2.0: version "2.2.1" resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== -tape@^5.5.3: - version "5.7.4" - resolved "https://registry.yarnpkg.com/tape/-/tape-5.7.4.tgz#5c515282a513599e9d1434665640900faf066a3b" - integrity sha512-uaigP+5H9+E8aaMLKMbGkDd33G5TKu4UFpapqT7um+8xSHQQUS2lJNd+hTj9fFVQLg8bmcIofwc8b9f6+ISSfQ== - dependencies: - "@ljharb/resumer" "^0.0.1" - "@ljharb/through" "^2.3.11" - array.prototype.every "^1.1.5" - call-bind "^1.0.5" - deep-equal "^2.2.3" - defined "^1.0.1" - dotignore "^0.1.2" - for-each "^0.3.3" - get-package-type "^0.1.0" - glob "^7.2.3" - has-dynamic-import "^2.1.0" - hasown "^2.0.0" - inherits "^2.0.4" - is-regex "^1.1.4" - minimist "^1.2.8" - mock-property "^1.0.3" - object-inspect "^1.13.1" - object-is "^1.1.5" - object-keys "^1.1.1" - object.assign "^4.1.5" - resolve "^2.0.0-next.5" - string.prototype.trim "^1.2.8" - term-size@^2.1.0: version "2.2.1" resolved "https://registry.yarnpkg.com/term-size/-/term-size-2.2.1.tgz#2a6a54840432c2fb6320fea0f415531e90189f54" @@ -9776,19 +10320,6 @@ thread-stream@^0.15.1: dependencies: real-require "^0.1.0" -through2@^2.0.0: - version "2.0.5" - resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" - integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== - dependencies: - readable-stream "~2.3.6" - xtend "~4.0.1" - -through@2: - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== - tinybench@^2.9.0: version "2.9.0" resolved "https://registry.yarnpkg.com/tinybench/-/tinybench-2.9.0.tgz#103c9f8ba6d7237a47ab6dd1dcff77251863426b" @@ -9858,11 +10389,6 @@ tr46@~0.0.3: resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== -traverse@^0.6.6: - version "0.6.8" - resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.6.8.tgz#5e5e0c41878b57e4b73ad2f3d1e36a715ea4ab15" - integrity sha512-aXJDbk6SnumuaZSANd21XAo15ucCDE38H4fkqiGsc3MhCK+wOlZvLP9cB/TvpHT0mOyWgC4Z8EwRlzqYSUzdsA== - tree-kill@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc" @@ -9873,16 +10399,16 @@ treeify@^1.1.0: resolved "https://registry.yarnpkg.com/treeify/-/treeify-1.1.0.tgz#4e31c6a463accd0943879f30667c4fdaff411bb8" integrity sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A== -trim@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/trim/-/trim-0.0.1.tgz#5858547f6b290757ee95cccc666fb50084c460dd" - integrity sha512-YzQV+TZg4AxpKxaTHK3c3D+kRDCGVEE7LemdlQZoQXn0iennk10RsIoY6ikzAqJTc9Xjl9C1/waHom/J86ziAQ== - ts-api-utils@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.0.3.tgz#f12c1c781d04427313dbac808f453f050e54a331" integrity sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg== +ts-api-utils@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-2.0.1.tgz#660729385b625b939aaa58054f45c058f33f10cd" + integrity sha512-dnlgjFSVetynI8nzgJ+qF62efpglpWRk8isUEWZGWlJYySCTD6aKvbUDu+zbPeDakk3bg5H4XpitHukgfL1m9w== + ts-interface-checker@^0.1.9: version "0.1.13" resolved "https://registry.yarnpkg.com/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz#784fd3d679722bc103b1b4b8030bcddb5db2a699" @@ -9907,6 +10433,11 @@ ts-node@^10.9.2: v8-compile-cache-lib "^3.0.1" yn "3.1.1" +ts-pattern@^5.4.0: + version "5.6.2" + resolved "https://registry.yarnpkg.com/ts-pattern/-/ts-pattern-5.6.2.tgz#aad9b4fe3c3f485dfad46e472e1203b688cc9bb4" + integrity sha512-d4IxJUXROL5NCa3amvMg6VQW2HVtZYmUTPfvVtO7zJWGYLJ+mry9v2OmYm+z67aniQoQ8/yFNadiEwtNS9qQiw== + tsconfck@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/tsconfck/-/tsconfck-3.0.1.tgz#803ca0ed8f2f2075639e4061238f04b99ba85e85" @@ -9936,10 +10467,10 @@ tslib@1.14.1, tslib@^1.9.3: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" - integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== +tslib@2.7.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.7.0.tgz#d9b40c5c40ab59e8738f297df3087bf1a2690c01" + integrity sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA== tslib@^2.0.0, tslib@^2.1.0, tslib@^2.3.0, tslib@^2.3.1, tslib@^2.4.0: version "2.6.2" @@ -10070,11 +10601,6 @@ type-fest@^0.7.1: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.7.1.tgz#8dda65feaf03ed78f0a3f9678f1869147f7c5c48" integrity sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg== -type-fest@^3.0.0: - version "3.13.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-3.13.1.tgz#bb744c1f0678bea7543a2d1ec24e83e68e8c8706" - integrity sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g== - typed-array-buffer@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz#18de3e7ed7974b0a729d3feecb94338d1472cd60" @@ -10084,6 +10610,15 @@ typed-array-buffer@^1.0.0: get-intrinsic "^1.2.1" is-typed-array "^1.1.10" +typed-array-buffer@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz#a72395450a4869ec033fd549371b47af3a2ee536" + integrity sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw== + dependencies: + call-bound "^1.0.3" + es-errors "^1.3.0" + is-typed-array "^1.1.14" + typed-array-byte-length@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz#d787a24a995711611fb2b87a4052799517b230d0" @@ -10094,6 +10629,17 @@ typed-array-byte-length@^1.0.0: has-proto "^1.0.1" is-typed-array "^1.1.10" +typed-array-byte-length@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz#8407a04f7d78684f3d252aa1a143d2b77b4160ce" + integrity sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg== + dependencies: + call-bind "^1.0.8" + for-each "^0.3.3" + gopd "^1.2.0" + has-proto "^1.2.0" + is-typed-array "^1.1.14" + typed-array-byte-offset@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz#cbbe89b51fdef9cd6aaf07ad4707340abbc4ea0b" @@ -10105,6 +10651,19 @@ typed-array-byte-offset@^1.0.0: has-proto "^1.0.1" is-typed-array "^1.1.10" +typed-array-byte-offset@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz#ae3698b8ec91a8ab945016108aef00d5bff12355" + integrity sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ== + dependencies: + available-typed-arrays "^1.0.7" + call-bind "^1.0.8" + for-each "^0.3.3" + gopd "^1.2.0" + has-proto "^1.2.0" + is-typed-array "^1.1.15" + reflect.getprototypeof "^1.0.9" + typed-array-length@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb" @@ -10114,6 +10673,18 @@ typed-array-length@^1.0.4: for-each "^0.3.3" is-typed-array "^1.1.9" +typed-array-length@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.7.tgz#ee4deff984b64be1e118b0de8c9c877d5ce73d3d" + integrity sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg== + dependencies: + call-bind "^1.0.7" + for-each "^0.3.3" + gopd "^1.0.1" + is-typed-array "^1.1.13" + possible-typed-array-names "^1.0.0" + reflect.getprototypeof "^1.0.6" + typedoc-plugin-markdown@^4.4.1: version "4.4.1" resolved "https://registry.yarnpkg.com/typedoc-plugin-markdown/-/typedoc-plugin-markdown-4.4.1.tgz#f57266fa6916cb3837a9c84f59f3aaced309be9a" @@ -10186,6 +10757,16 @@ unbox-primitive@^1.0.2: has-symbols "^1.0.3" which-boxed-primitive "^1.0.2" +unbox-primitive@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.1.0.tgz#8d9d2c9edeea8460c7f35033a88867944934d1e2" + integrity sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw== + dependencies: + call-bound "^1.0.3" + has-bigints "^1.0.2" + has-symbols "^1.1.0" + which-boxed-primitive "^1.1.1" + uncrypto@^0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/uncrypto/-/uncrypto-0.1.3.tgz#e1288d609226f2d02d8d69ee861fa20d8348ef2b" @@ -10196,6 +10777,16 @@ undici-types@~5.26.4: resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== +undici-types@~6.19.2: + version "6.19.8" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.19.8.tgz#35111c9d1437ab83a7cdc0abae2f26d88eda0a02" + integrity sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw== + +undici-types@~6.20.0: + version "6.20.0" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.20.0.tgz#8171bf22c1f588d1554d55bf204bc624af388433" + integrity sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg== + undici@^5.14.0: version "5.28.3" resolved "https://registry.yarnpkg.com/undici/-/undici-5.28.3.tgz#a731e0eff2c3fcfd41c1169a869062be222d1e5b" @@ -10263,6 +10854,14 @@ update-browserslist-db@^1.0.13: escalade "^3.1.1" picocolors "^1.0.0" +update-browserslist-db@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.2.tgz#97e9c96ab0ae7bcac08e9ae5151d26e6bc6b5580" + integrity sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg== + dependencies: + escalade "^3.2.0" + picocolors "^1.1.1" + uqr@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/uqr/-/uqr-0.1.2.tgz#5c6cd5dcff9581f9bb35b982cb89e2c483a41d7d" @@ -10283,10 +10882,10 @@ url-parse@^1.5.7: querystringify "^2.1.1" requires-port "^1.0.0" -use-callback-ref@^1.3.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/use-callback-ref/-/use-callback-ref-1.3.1.tgz#9be64c3902cbd72b07fe55e56408ae3a26036fd0" - integrity sha512-Lg4Vx1XZQauB42Hw3kK7JM6yjVjgFmFC5/Ab797s79aARomD2nEErc4mCgM8EZrARLmmbWpi5DGCadmK50DcAQ== +use-callback-ref@^1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/use-callback-ref/-/use-callback-ref-1.3.3.tgz#98d9fab067075841c5b2c6852090d5d0feabe2bf" + integrity sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg== dependencies: tslib "^2.0.0" @@ -10406,6 +11005,20 @@ viem@^2.16.2: isows "1.0.4" ws "8.17.1" +viem@^2.23.1: + version "2.23.1" + resolved "https://registry.yarnpkg.com/viem/-/viem-2.23.1.tgz#5fe527de258e33b2445af266698fd6575068112d" + integrity sha512-c5AyJCTA5LeNI/KCu++vkbqbh7irYjUSHxLIAHPKJ6IEcBNMt8+7sPG7gjMXpqVWnqPMzaW9CA2n+yUsKWttDA== + dependencies: + "@noble/curves" "1.8.1" + "@noble/hashes" "1.7.1" + "@scure/bip32" "1.6.2" + "@scure/bip39" "1.5.4" + abitype "1.0.8" + isows "1.0.6" + ox "0.6.7" + ws "8.18.0" + vite-node@3.0.5: version "3.0.5" resolved "https://registry.yarnpkg.com/vite-node/-/vite-node-3.0.5.tgz#6a0d06f7a4bdaae6ddcdedc12d910d886cf7d62f" @@ -10474,7 +11087,7 @@ vitest@^3.0.5: vite-node "3.0.5" why-is-node-running "^2.3.0" -wagmi@^2.5.11: +wagmi@^2.14.11: version "2.14.11" resolved "https://registry.yarnpkg.com/wagmi/-/wagmi-2.14.11.tgz#bfdd479e88bb3907efb412d04b5135a0017d5090" integrity sha512-Qj79cq+9MAcnKict9QLo60Lc4S2IXVVE94HBwCmczDrFtoM31NxfX4uQP73Elj2fV9lXH4/dw3jlb8eDhlm6iQ== @@ -10540,6 +11153,17 @@ which-boxed-primitive@^1.0.2: is-string "^1.0.5" is-symbol "^1.0.3" +which-boxed-primitive@^1.1.0, which-boxed-primitive@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz#d76ec27df7fa165f18d5808374a5fe23c29b176e" + integrity sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA== + dependencies: + is-bigint "^1.1.0" + is-boolean-object "^1.2.1" + is-number-object "^1.1.1" + is-string "^1.1.1" + is-symbol "^1.1.1" + which-builtin-type@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/which-builtin-type/-/which-builtin-type-1.1.3.tgz#b1b8443707cc58b6e9bf98d32110ff0c2cbd029b" @@ -10558,6 +11182,25 @@ which-builtin-type@^1.1.3: which-collection "^1.0.1" which-typed-array "^1.1.9" +which-builtin-type@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/which-builtin-type/-/which-builtin-type-1.2.1.tgz#89183da1b4907ab089a6b02029cc5d8d6574270e" + integrity sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q== + dependencies: + call-bound "^1.0.2" + function.prototype.name "^1.1.6" + has-tostringtag "^1.0.2" + is-async-function "^2.0.0" + is-date-object "^1.1.0" + is-finalizationregistry "^1.1.0" + is-generator-function "^1.0.10" + is-regex "^1.2.1" + is-weakref "^1.0.2" + isarray "^2.0.5" + which-boxed-primitive "^1.1.0" + which-collection "^1.0.2" + which-typed-array "^1.1.16" + which-collection@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.1.tgz#70eab71ebbbd2aefaf32f917082fc62cdcb70906" @@ -10568,6 +11211,16 @@ which-collection@^1.0.1: is-weakmap "^2.0.1" is-weakset "^2.0.1" +which-collection@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.2.tgz#627ef76243920a107e7ce8e96191debe4b16c2a0" + integrity sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw== + dependencies: + is-map "^2.0.3" + is-set "^2.0.3" + is-weakmap "^2.0.2" + is-weakset "^2.0.3" + which-module@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.1.tgz#776b1fe35d90aebe99e8ac15eb24093389a4a409" @@ -10584,6 +11237,18 @@ which-typed-array@^1.1.13, which-typed-array@^1.1.14, which-typed-array@^1.1.2, gopd "^1.0.1" has-tostringtag "^1.0.1" +which-typed-array@^1.1.16, which-typed-array@^1.1.18: + version "1.1.18" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.18.tgz#df2389ebf3fbb246a71390e90730a9edb6ce17ad" + integrity sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA== + dependencies: + available-typed-arrays "^1.0.7" + call-bind "^1.0.8" + call-bound "^1.0.3" + for-each "^0.3.3" + gopd "^1.2.0" + has-tostringtag "^1.0.2" + which@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" @@ -10669,11 +11334,6 @@ wrappy@1: resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== -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@8.13.0: version "8.13.0" resolved "https://registry.yarnpkg.com/ws/-/ws-8.13.0.tgz#9a9fb92f93cf41512a0735c8f4dd09b8a1211cd0" @@ -10689,11 +11349,6 @@ ws@8.18.0: resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.0.tgz#0d7505a6eafe2b0e712d232b42279f53bc289bbc" integrity sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw== -ws@8.5.0: - version "8.5.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.5.0.tgz#bfb4be96600757fe5382de12c670dab984a1ed4f" - integrity sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg== - ws@^7.4.6, ws@^7.5.1: version "7.5.9" resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" @@ -10709,7 +11364,7 @@ xmlhttprequest-ssl@~2.0.0: resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.0.0.tgz#91360c86b914e67f44dce769180027c0da618c67" integrity sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A== -xtend@^4.0.1, xtend@~4.0.1: +xtend@^4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== From b8d63552c65390cdbc8e75d20d5741232a6e4226 Mon Sep 17 00:00:00 2001 From: Ryan Goree Date: Tue, 11 Feb 2025 21:31:35 -0600 Subject: [PATCH 025/146] Delete unnecessary eslint --- apps/.eslintrc | 5 ----- 1 file changed, 5 deletions(-) delete mode 100644 apps/.eslintrc diff --git a/apps/.eslintrc b/apps/.eslintrc deleted file mode 100644 index bfe638b3..00000000 --- a/apps/.eslintrc +++ /dev/null @@ -1,5 +0,0 @@ -{ - // fallback eslint config to prevent lint-staged from failing when packages - // don't contain an eslint config. Instead, we'll just ignore them. - "ignorePatterns": ["**/*"] -} From 23f049a889db3fae4af4b559ed923ff949eb5cc9 Mon Sep 17 00:00:00 2001 From: Ryan Goree Date: Tue, 11 Feb 2025 21:36:50 -0600 Subject: [PATCH 026/146] Bump sdk starter deps, rename --- .../.env.example | 0 .../.eslintignore | 0 .../.eslintrc | 0 .../.gitignore | 0 .../CHANGELOG.md | 0 .../README.md | 0 apps/council-js-starter/package.json | 29 +++ .../src/client.ts | 0 .../src/index.ts | 0 .../src/scripts/changeVaultStatus.ts | 0 .../src/scripts/createProposal.ts | 0 .../src/scripts/executeProposal.ts | 0 .../src/scripts/getGSCMembers.ts | 0 .../src/scripts/getProposalResults.ts | 0 .../src/scripts/setLockDuration.ts | 0 apps/council-js-starter/tsconfig.json | 19 ++ apps/council-sdk-starter/package.json | 30 ---- apps/council-sdk-starter/tsconfig.json | 13 -- yarn.lock | 167 ++++++++++++++++++ 19 files changed, 215 insertions(+), 43 deletions(-) rename apps/{council-sdk-starter => council-js-starter}/.env.example (100%) rename apps/{council-sdk-starter => council-js-starter}/.eslintignore (100%) rename apps/{council-sdk-starter => council-js-starter}/.eslintrc (100%) rename apps/{council-sdk-starter => council-js-starter}/.gitignore (100%) rename apps/{council-sdk-starter => council-js-starter}/CHANGELOG.md (100%) rename apps/{council-sdk-starter => council-js-starter}/README.md (100%) create mode 100644 apps/council-js-starter/package.json rename apps/{council-sdk-starter => council-js-starter}/src/client.ts (100%) rename apps/{council-sdk-starter => council-js-starter}/src/index.ts (100%) rename apps/{council-sdk-starter => council-js-starter}/src/scripts/changeVaultStatus.ts (100%) rename apps/{council-sdk-starter => council-js-starter}/src/scripts/createProposal.ts (100%) rename apps/{council-sdk-starter => council-js-starter}/src/scripts/executeProposal.ts (100%) rename apps/{council-sdk-starter => council-js-starter}/src/scripts/getGSCMembers.ts (100%) rename apps/{council-sdk-starter => council-js-starter}/src/scripts/getProposalResults.ts (100%) rename apps/{council-sdk-starter => council-js-starter}/src/scripts/setLockDuration.ts (100%) create mode 100644 apps/council-js-starter/tsconfig.json delete mode 100644 apps/council-sdk-starter/package.json delete mode 100644 apps/council-sdk-starter/tsconfig.json diff --git a/apps/council-sdk-starter/.env.example b/apps/council-js-starter/.env.example similarity index 100% rename from apps/council-sdk-starter/.env.example rename to apps/council-js-starter/.env.example diff --git a/apps/council-sdk-starter/.eslintignore b/apps/council-js-starter/.eslintignore similarity index 100% rename from apps/council-sdk-starter/.eslintignore rename to apps/council-js-starter/.eslintignore diff --git a/apps/council-sdk-starter/.eslintrc b/apps/council-js-starter/.eslintrc similarity index 100% rename from apps/council-sdk-starter/.eslintrc rename to apps/council-js-starter/.eslintrc diff --git a/apps/council-sdk-starter/.gitignore b/apps/council-js-starter/.gitignore similarity index 100% rename from apps/council-sdk-starter/.gitignore rename to apps/council-js-starter/.gitignore diff --git a/apps/council-sdk-starter/CHANGELOG.md b/apps/council-js-starter/CHANGELOG.md similarity index 100% rename from apps/council-sdk-starter/CHANGELOG.md rename to apps/council-js-starter/CHANGELOG.md diff --git a/apps/council-sdk-starter/README.md b/apps/council-js-starter/README.md similarity index 100% rename from apps/council-sdk-starter/README.md rename to apps/council-js-starter/README.md diff --git a/apps/council-js-starter/package.json b/apps/council-js-starter/package.json new file mode 100644 index 00000000..bf1f678c --- /dev/null +++ b/apps/council-js-starter/package.json @@ -0,0 +1,29 @@ +{ + "name": "council-js-starter", + "version": "0.0.4", + "description": "Boilerplate to get started using council-js fast!", + "license": "MIT", + "private": true, + "type": "module", + "scripts": { + "createProposal": "tsx -r dotenv/config src/scripts/createProposal.ts", + "executeProposal": "tsx -r dotenv/config src/scripts/executeProposal.ts", + "setLockDuration": "tsx -r dotenv/config src/scripts/setLockDuration.ts", + "changeVaultStatus": "tsx -r dotenv/config src/scripts/changeVaultStatus.ts", + "getGSCMembers": "tsx -r dotenv/config ./src/scripts/getGSCMembers.ts", + "getProposalResults": "tsx -r dotenv/config src/scripts/getProposalResults.ts", + "dev": "tsx -r dotenv/config src/scripts/dev.ts", + "typecheck": "tsc --noEmit" + }, + "dependencies": { + "@delvtech/drift-viem": "^0.1.3", + "@delvtech/council-js": "^0.0.0", + "viem": "^2.23.1" + }, + "devDependencies": { + "@types/node": "^22.13.1", + "dotenv": "^16.4.5", + "tsx": "^4.19.2", + "typescript": "^5.3.3" + } +} diff --git a/apps/council-sdk-starter/src/client.ts b/apps/council-js-starter/src/client.ts similarity index 100% rename from apps/council-sdk-starter/src/client.ts rename to apps/council-js-starter/src/client.ts diff --git a/apps/council-sdk-starter/src/index.ts b/apps/council-js-starter/src/index.ts similarity index 100% rename from apps/council-sdk-starter/src/index.ts rename to apps/council-js-starter/src/index.ts diff --git a/apps/council-sdk-starter/src/scripts/changeVaultStatus.ts b/apps/council-js-starter/src/scripts/changeVaultStatus.ts similarity index 100% rename from apps/council-sdk-starter/src/scripts/changeVaultStatus.ts rename to apps/council-js-starter/src/scripts/changeVaultStatus.ts diff --git a/apps/council-sdk-starter/src/scripts/createProposal.ts b/apps/council-js-starter/src/scripts/createProposal.ts similarity index 100% rename from apps/council-sdk-starter/src/scripts/createProposal.ts rename to apps/council-js-starter/src/scripts/createProposal.ts diff --git a/apps/council-sdk-starter/src/scripts/executeProposal.ts b/apps/council-js-starter/src/scripts/executeProposal.ts similarity index 100% rename from apps/council-sdk-starter/src/scripts/executeProposal.ts rename to apps/council-js-starter/src/scripts/executeProposal.ts diff --git a/apps/council-sdk-starter/src/scripts/getGSCMembers.ts b/apps/council-js-starter/src/scripts/getGSCMembers.ts similarity index 100% rename from apps/council-sdk-starter/src/scripts/getGSCMembers.ts rename to apps/council-js-starter/src/scripts/getGSCMembers.ts diff --git a/apps/council-sdk-starter/src/scripts/getProposalResults.ts b/apps/council-js-starter/src/scripts/getProposalResults.ts similarity index 100% rename from apps/council-sdk-starter/src/scripts/getProposalResults.ts rename to apps/council-js-starter/src/scripts/getProposalResults.ts diff --git a/apps/council-sdk-starter/src/scripts/setLockDuration.ts b/apps/council-js-starter/src/scripts/setLockDuration.ts similarity index 100% rename from apps/council-sdk-starter/src/scripts/setLockDuration.ts rename to apps/council-js-starter/src/scripts/setLockDuration.ts diff --git a/apps/council-js-starter/tsconfig.json b/apps/council-js-starter/tsconfig.json new file mode 100644 index 00000000..90e7488f --- /dev/null +++ b/apps/council-js-starter/tsconfig.json @@ -0,0 +1,19 @@ +{ + "include": ["src"], + "compilerOptions": { + "rootDir": ".", + "baseUrl": ".", + "lib": ["ESNext", "DOM"], + "target": "ESNext", + "module": "ESNext", + "moduleResolution": "bundler", + "moduleDetection": "force", + "resolveJsonModule": true, + "allowJs": true, + "allowImportingTsExtensions": true, + "verbatimModuleSyntax": true, + "noEmit": true, + "strict": true, + "skipLibCheck": true + } +} diff --git a/apps/council-sdk-starter/package.json b/apps/council-sdk-starter/package.json deleted file mode 100644 index ef9f0934..00000000 --- a/apps/council-sdk-starter/package.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "name": "council-sdk-starter", - "version": "0.0.4", - "description": "Boilerplate to get started using the council-sdk fast!", - "license": "MIT", - "private": true, - "type": "module", - "scripts": { - "createProposal": "tesm-node -r dotenv/config src/scripts/createProposal.ts", - "executeProposal": "tesm-node -r dotenv/config src/scripts/executeProposal.ts", - "setLockDuration": "tesm-node -r dotenv/config src/scripts/setLockDuration.ts", - "changeVaultStatus": "tesm-node -r dotenv/config src/scripts/changeVaultStatus.ts", - "getGSCMembers": "tesm-node -r dotenv/config ./src/scripts/getGSCMembers.ts", - "getProposalResults": "tesm-node -r dotenv/config src/scripts/getProposalResults.ts", - "dev": "tesm-node -r dotenv/config src/scripts/dev.ts", - "typecheck": "tsc --noEmit" - }, - "dependencies": { - "@delvtech/council-viem": "^0.1.0", - "viem": "^2.16.2" - }, - "devDependencies": { - "@council/tsconfig": "*", - "@types/node": "^20.11.19", - "dotenv": "^16.4.5", - "tesm-node": "^1.3.1", - "ts-node": "^10.9.2", - "typescript": "^5.3.3" - } -} diff --git a/apps/council-sdk-starter/tsconfig.json b/apps/council-sdk-starter/tsconfig.json deleted file mode 100644 index 6af24742..00000000 --- a/apps/council-sdk-starter/tsconfig.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "extends": "@council/tsconfig/base.json", - "include": ["src"], - "exclude": ["node_modules"], - "compilerOptions": { - "rootDir": ".", - "baseUrl": ".", - "resolveJsonModule": true, - "module": "ESNext", - "target": "ESNext", - "moduleResolution": "bundler" - } -} diff --git a/yarn.lock b/yarn.lock index b5781262..567d8de3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -717,6 +717,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz#d1bc06aedb6936b3b6d313bf809a5a40387d2b7f" integrity sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA== +"@esbuild/aix-ppc64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.23.1.tgz#51299374de171dbd80bb7d838e1cfce9af36f353" + integrity sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ== + "@esbuild/aix-ppc64@0.24.2": version "0.24.2" resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.24.2.tgz#38848d3e25afe842a7943643cbcd387cc6e13461" @@ -727,6 +732,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz#7ad65a36cfdb7e0d429c353e00f680d737c2aed4" integrity sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA== +"@esbuild/android-arm64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.23.1.tgz#58565291a1fe548638adb9c584237449e5e14018" + integrity sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw== + "@esbuild/android-arm64@0.24.2": version "0.24.2" resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.24.2.tgz#f592957ae8b5643129fa889c79e69cd8669bb894" @@ -737,6 +747,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.19.12.tgz#b0c26536f37776162ca8bde25e42040c203f2824" integrity sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w== +"@esbuild/android-arm@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.23.1.tgz#5eb8c652d4c82a2421e3395b808e6d9c42c862ee" + integrity sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ== + "@esbuild/android-arm@0.24.2": version "0.24.2" resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.24.2.tgz#72d8a2063aa630308af486a7e5cbcd1e134335b3" @@ -747,6 +762,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.19.12.tgz#cb13e2211282012194d89bf3bfe7721273473b3d" integrity sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew== +"@esbuild/android-x64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.23.1.tgz#ae19d665d2f06f0f48a6ac9a224b3f672e65d517" + integrity sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg== + "@esbuild/android-x64@0.24.2": version "0.24.2" resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.24.2.tgz#9a7713504d5f04792f33be9c197a882b2d88febb" @@ -757,6 +777,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz#cbee41e988020d4b516e9d9e44dd29200996275e" integrity sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g== +"@esbuild/darwin-arm64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.23.1.tgz#05b17f91a87e557b468a9c75e9d85ab10c121b16" + integrity sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q== + "@esbuild/darwin-arm64@0.24.2": version "0.24.2" resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.24.2.tgz#02ae04ad8ebffd6e2ea096181b3366816b2b5936" @@ -767,6 +792,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz#e37d9633246d52aecf491ee916ece709f9d5f4cd" integrity sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A== +"@esbuild/darwin-x64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.23.1.tgz#c58353b982f4e04f0d022284b8ba2733f5ff0931" + integrity sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw== + "@esbuild/darwin-x64@0.24.2": version "0.24.2" resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.24.2.tgz#9ec312bc29c60e1b6cecadc82bd504d8adaa19e9" @@ -777,6 +807,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz#1ee4d8b682ed363b08af74d1ea2b2b4dbba76487" integrity sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA== +"@esbuild/freebsd-arm64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.23.1.tgz#f9220dc65f80f03635e1ef96cfad5da1f446f3bc" + integrity sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA== + "@esbuild/freebsd-arm64@0.24.2": version "0.24.2" resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.24.2.tgz#5e82f44cb4906d6aebf24497d6a068cfc152fa00" @@ -787,6 +822,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz#37a693553d42ff77cd7126764b535fb6cc28a11c" integrity sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg== +"@esbuild/freebsd-x64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.23.1.tgz#69bd8511fa013b59f0226d1609ac43f7ce489730" + integrity sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g== + "@esbuild/freebsd-x64@0.24.2": version "0.24.2" resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.24.2.tgz#3fb1ce92f276168b75074b4e51aa0d8141ecce7f" @@ -797,6 +837,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz#be9b145985ec6c57470e0e051d887b09dddb2d4b" integrity sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA== +"@esbuild/linux-arm64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.23.1.tgz#8050af6d51ddb388c75653ef9871f5ccd8f12383" + integrity sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g== + "@esbuild/linux-arm64@0.24.2": version "0.24.2" resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.24.2.tgz#856b632d79eb80aec0864381efd29de8fd0b1f43" @@ -807,6 +852,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz#207ecd982a8db95f7b5279207d0ff2331acf5eef" integrity sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w== +"@esbuild/linux-arm@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.23.1.tgz#ecaabd1c23b701070484990db9a82f382f99e771" + integrity sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ== + "@esbuild/linux-arm@0.24.2": version "0.24.2" resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.24.2.tgz#c846b4694dc5a75d1444f52257ccc5659021b736" @@ -817,6 +867,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz#d0d86b5ca1562523dc284a6723293a52d5860601" integrity sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA== +"@esbuild/linux-ia32@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.23.1.tgz#3ed2273214178109741c09bd0687098a0243b333" + integrity sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ== + "@esbuild/linux-ia32@0.24.2": version "0.24.2" resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.24.2.tgz#f8a16615a78826ccbb6566fab9a9606cfd4a37d5" @@ -827,6 +882,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz#9a37f87fec4b8408e682b528391fa22afd952299" integrity sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA== +"@esbuild/linux-loong64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.23.1.tgz#a0fdf440b5485c81b0fbb316b08933d217f5d3ac" + integrity sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw== + "@esbuild/linux-loong64@0.24.2": version "0.24.2" resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.24.2.tgz#1c451538c765bf14913512c76ed8a351e18b09fc" @@ -837,6 +897,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz#4ddebd4e6eeba20b509d8e74c8e30d8ace0b89ec" integrity sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w== +"@esbuild/linux-mips64el@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.23.1.tgz#e11a2806346db8375b18f5e104c5a9d4e81807f6" + integrity sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q== + "@esbuild/linux-mips64el@0.24.2": version "0.24.2" resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.24.2.tgz#0846edeefbc3d8d50645c51869cc64401d9239cb" @@ -847,6 +912,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz#adb67dadb73656849f63cd522f5ecb351dd8dee8" integrity sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg== +"@esbuild/linux-ppc64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.23.1.tgz#06a2744c5eaf562b1a90937855b4d6cf7c75ec96" + integrity sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw== + "@esbuild/linux-ppc64@0.24.2": version "0.24.2" resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.24.2.tgz#8e3fc54505671d193337a36dfd4c1a23b8a41412" @@ -857,6 +927,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz#11bc0698bf0a2abf8727f1c7ace2112612c15adf" integrity sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg== +"@esbuild/linux-riscv64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.23.1.tgz#65b46a2892fc0d1af4ba342af3fe0fa4a8fe08e7" + integrity sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA== + "@esbuild/linux-riscv64@0.24.2": version "0.24.2" resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.24.2.tgz#6a1e92096d5e68f7bb10a0d64bb5b6d1daf9a694" @@ -867,6 +942,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz#e86fb8ffba7c5c92ba91fc3b27ed5a70196c3cc8" integrity sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg== +"@esbuild/linux-s390x@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.23.1.tgz#e71ea18c70c3f604e241d16e4e5ab193a9785d6f" + integrity sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw== + "@esbuild/linux-s390x@0.24.2": version "0.24.2" resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.24.2.tgz#ab18e56e66f7a3c49cb97d337cd0a6fea28a8577" @@ -877,6 +957,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz#5f37cfdc705aea687dfe5dfbec086a05acfe9c78" integrity sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg== +"@esbuild/linux-x64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.23.1.tgz#d47f97391e80690d4dfe811a2e7d6927ad9eed24" + integrity sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ== + "@esbuild/linux-x64@0.24.2": version "0.24.2" resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.24.2.tgz#8140c9b40da634d380b0b29c837a0b4267aff38f" @@ -892,11 +977,21 @@ resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz#29da566a75324e0d0dd7e47519ba2f7ef168657b" integrity sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA== +"@esbuild/netbsd-x64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.23.1.tgz#44e743c9778d57a8ace4b72f3c6b839a3b74a653" + integrity sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA== + "@esbuild/netbsd-x64@0.24.2": version "0.24.2" resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.24.2.tgz#7a3a97d77abfd11765a72f1c6f9b18f5396bcc40" integrity sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw== +"@esbuild/openbsd-arm64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.23.1.tgz#05c5a1faf67b9881834758c69f3e51b7dee015d7" + integrity sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q== + "@esbuild/openbsd-arm64@0.24.2": version "0.24.2" resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.24.2.tgz#58b00238dd8f123bfff68d3acc53a6ee369af89f" @@ -907,6 +1002,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz#306c0acbdb5a99c95be98bdd1d47c916e7dc3ff0" integrity sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw== +"@esbuild/openbsd-x64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.23.1.tgz#2e58ae511bacf67d19f9f2dcd9e8c5a93f00c273" + integrity sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA== + "@esbuild/openbsd-x64@0.24.2": version "0.24.2" resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.24.2.tgz#0ac843fda0feb85a93e288842936c21a00a8a205" @@ -917,6 +1017,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz#0933eaab9af8b9b2c930236f62aae3fc593faf30" integrity sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA== +"@esbuild/sunos-x64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.23.1.tgz#adb022b959d18d3389ac70769cef5a03d3abd403" + integrity sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA== + "@esbuild/sunos-x64@0.24.2": version "0.24.2" resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.24.2.tgz#8b7aa895e07828d36c422a4404cc2ecf27fb15c6" @@ -927,6 +1032,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz#773bdbaa1971b36db2f6560088639ccd1e6773ae" integrity sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A== +"@esbuild/win32-arm64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.23.1.tgz#84906f50c212b72ec360f48461d43202f4c8b9a2" + integrity sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A== + "@esbuild/win32-arm64@0.24.2": version "0.24.2" resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.24.2.tgz#c023afb647cabf0c3ed13f0eddfc4f1d61c66a85" @@ -937,6 +1047,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz#000516cad06354cc84a73f0943a4aa690ef6fd67" integrity sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ== +"@esbuild/win32-ia32@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.23.1.tgz#5e3eacc515820ff729e90d0cb463183128e82fac" + integrity sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ== + "@esbuild/win32-ia32@0.24.2": version "0.24.2" resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.24.2.tgz#96c356132d2dda990098c8b8b951209c3cd743c2" @@ -947,6 +1062,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz#c57c8afbb4054a3ab8317591a0b7320360b444ae" integrity sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA== +"@esbuild/win32-x64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.23.1.tgz#81fd50d11e2c32b2d6241470e3185b70c7b30699" + integrity sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg== + "@esbuild/win32-x64@0.24.2": version "0.24.2" resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.24.2.tgz#34aa0b52d0fbb1a654b596acfa595f0c7b77a77b" @@ -5528,6 +5648,36 @@ esbuild@^0.24.0, esbuild@^0.24.2: "@esbuild/win32-ia32" "0.24.2" "@esbuild/win32-x64" "0.24.2" +esbuild@~0.23.0: + version "0.23.1" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.23.1.tgz#40fdc3f9265ec0beae6f59824ade1bd3d3d2dab8" + integrity sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg== + optionalDependencies: + "@esbuild/aix-ppc64" "0.23.1" + "@esbuild/android-arm" "0.23.1" + "@esbuild/android-arm64" "0.23.1" + "@esbuild/android-x64" "0.23.1" + "@esbuild/darwin-arm64" "0.23.1" + "@esbuild/darwin-x64" "0.23.1" + "@esbuild/freebsd-arm64" "0.23.1" + "@esbuild/freebsd-x64" "0.23.1" + "@esbuild/linux-arm" "0.23.1" + "@esbuild/linux-arm64" "0.23.1" + "@esbuild/linux-ia32" "0.23.1" + "@esbuild/linux-loong64" "0.23.1" + "@esbuild/linux-mips64el" "0.23.1" + "@esbuild/linux-ppc64" "0.23.1" + "@esbuild/linux-riscv64" "0.23.1" + "@esbuild/linux-s390x" "0.23.1" + "@esbuild/linux-x64" "0.23.1" + "@esbuild/netbsd-x64" "0.23.1" + "@esbuild/openbsd-arm64" "0.23.1" + "@esbuild/openbsd-x64" "0.23.1" + "@esbuild/sunos-x64" "0.23.1" + "@esbuild/win32-arm64" "0.23.1" + "@esbuild/win32-ia32" "0.23.1" + "@esbuild/win32-x64" "0.23.1" + escalade@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" @@ -6388,6 +6538,13 @@ get-tsconfig@^4.5.0: dependencies: resolve-pkg-maps "^1.0.0" +get-tsconfig@^4.7.5: + version "4.10.0" + resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.10.0.tgz#403a682b373a823612475a4c2928c7326fc0f6bb" + integrity sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A== + dependencies: + resolve-pkg-maps "^1.0.0" + glob-parent@^5.1.2, glob-parent@~5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" @@ -10509,6 +10666,16 @@ tsup@^8.3.6: tinyglobby "^0.2.9" tree-kill "^1.2.2" +tsx@^4.19.2: + version "4.19.2" + resolved "https://registry.yarnpkg.com/tsx/-/tsx-4.19.2.tgz#2d7814783440e0ae42354d0417d9c2989a2ae92c" + integrity sha512-pOUl6Vo2LUq/bSa8S5q7b91cgNSjctn9ugq/+Mvow99qW6x/UZYwzxy/3NmqoT66eHYfCVvFvACC58UBPFf28g== + dependencies: + esbuild "~0.23.0" + get-tsconfig "^4.7.5" + optionalDependencies: + fsevents "~2.3.3" + turbo-darwin-64@1.12.2: version "1.12.2" resolved "https://registry.yarnpkg.com/turbo-darwin-64/-/turbo-darwin-64-1.12.2.tgz#4b5e48065b874b2379a45c2db71ce69d7c35c027" From d6e91c3e85610908b56c25e005c0bd1191e3a01d Mon Sep 17 00:00:00 2001 From: Ryan Goree Date: Tue, 11 Feb 2025 21:47:50 -0600 Subject: [PATCH 027/146] Bump remaining deps --- apps/landing-page/package.json | 22 +- packages/council-artifacts/package.json | 2 +- packages/council-cli/package.json | 35 +- .../src/commands/config/inspect.ts | 9 +- yarn.lock | 1393 +++-------------- 5 files changed, 268 insertions(+), 1193 deletions(-) diff --git a/apps/landing-page/package.json b/apps/landing-page/package.json index f015637c..13e90386 100644 --- a/apps/landing-page/package.json +++ b/apps/landing-page/package.json @@ -9,8 +9,8 @@ "preview": "vite preview" }, "dependencies": { - "@heroicons/react": "^2.0.16", - "classnames": "^2.3.2", + "@heroicons/react": "^2.2.0", + "classnames": "^2.5.1", "react": "^18.2.0", "react-dom": "^18.2.0" }, @@ -19,16 +19,16 @@ "@council/tsconfig": "*", "@types/react": "^18.2.57", "@types/react-dom": "^18.2.19", - "@vitejs/plugin-react": "^4.2.1", - "autoprefixer": "^10.4.17", + "@vitejs/plugin-react": "^4.3.4", + "autoprefixer": "^10.4.20", "eslint": "^8.56.0", - "eslint-plugin-react": "^7.33.2", + "eslint-plugin-react": "^7.37.4", "eslint-plugin-react-hooks": "^4.6.0", - "eslint-plugin-tailwindcss": "^3.14.3", - "postcss": "^8.4.35", - "tailwindcss": "^3.4.1", - "typescript": "^5.3.3", - "vite": "^5.1.4", - "vite-tsconfig-paths": "^4.3.1" + "eslint-plugin-tailwindcss": "^3.18.0", + "postcss": "^8.5.2", + "tailwindcss": "^4.0.6", + "typescript": "^5.7.3", + "vite": "^6.1.0", + "vite-tsconfig-paths": "^5.1.4" } } diff --git a/packages/council-artifacts/package.json b/packages/council-artifacts/package.json index ad2a40a3..274bb0e0 100644 --- a/packages/council-artifacts/package.json +++ b/packages/council-artifacts/package.json @@ -25,7 +25,7 @@ "devDependencies": { "@council/eslint-config": "*", "@council/tsconfig": "*", - "typescript": "^5.3.3" + "typescript": "^5.7.3" }, "publishConfig": { "access": "public" diff --git a/packages/council-cli/package.json b/packages/council-cli/package.json index 6c848956..e4914aff 100644 --- a/packages/council-cli/package.json +++ b/packages/council-cli/package.json @@ -12,8 +12,8 @@ ], "scripts": { "council": "node dist/council.js", - "dev": "NODE_ENV=development tesm-node src/council.ts", - "prod": "tesm-node src/council.ts", + "dev": "NODE_ENV=development tsx src/council.ts", + "prod": "tsx src/council.ts", "build": "rimraf dist && tsc", "watch": "tsc --watch", "typecheck": "tsc --noEmit" @@ -28,33 +28,30 @@ } }, "dependencies": { + "@delvtech/drift-viem": "^0.1.3", "@delvtech/council-artifacts": "^0.1.0", - "@delvtech/council-viem": "^0.1.0", - "ajv": "^8.12.0", - "cfonts": "^3.2.0", - "cli-table": "^0.3.11", - "clide-js": "^0.2.0", - "clide-plugin-command-menu": "^0.1.0", + "@delvtech/council-js": "^0.0.0", + "ajv": "^8.17.1", + "clide-js": "^0.2.4", + "clide-plugin-command-menu": "^0.1.1", "colors": "^1.4.0", - "dotenv": "^16.4.5", + "dotenv": "^16.4.7", "json-schema-typed": "^8.0.1", - "merkletreejs": "^0.3.11", - "node-fetch-native": "^1.6.2", + "merkletreejs": "^0.4.1", + "node-fetch-native": "^1.6.6", "signale": "^1.4.0" }, "devDependencies": { "@council/eslint-config": "*", "@council/tsconfig": "*", - "@types/cli-table": "^0.3.4", - "@types/node": "^20.11.19", + "@types/node": "^22.13.1", "@types/prompts": "^2.4.9", "@types/signale": "^1.4.7", - "hardhat": "^2.20.1", - "rimraf": "^5.0.5", - "tesm-node": "^1.3.1", - "ts-node": "^10.9.2", - "typescript": "^5.3.3", - "viem": "^2.16.2" + "hardhat": "^2.22.18", + "rimraf": "^6.0.1", + "tsx": "^4.19.2", + "typescript": "^5.7.3", + "viem": "^2.23.1" }, "publishConfig": { "access": "public" diff --git a/packages/council-cli/src/commands/config/inspect.ts b/packages/council-cli/src/commands/config/inspect.ts index eae08367..8e798c09 100644 --- a/packages/council-cli/src/commands/config/inspect.ts +++ b/packages/council-cli/src/commands/config/inspect.ts @@ -1,16 +1,9 @@ -import Table from "cli-table"; import { command } from "clide-js"; import { config } from "../../config.js"; export default command({ description: "Print all settings out as a table", handler: () => { - const data = config.data; - const table = new Table({ - rows: Object.entries(data).filter( - ([_, value]: unknown[]) => value !== undefined, - ), - }); - console.log(table.toString()); + console.table(config.data); }, }); diff --git a/yarn.lock b/yarn.lock index 567d8de3..5c33f8b3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -22,11 +22,6 @@ resolved "https://registry.yarnpkg.com/@adraffy/ens-normalize/-/ens-normalize-1.11.0.tgz#42cc67c5baa407ac25059fcd7d405cc5ecdb0c33" integrity sha512-/3DDPKHqqIqxUULp8yP4zODUY1i+2xvVWsv8A79xGWdCAG+8sb0hRh0Rk2QyOJUnnbyPUAZYcpBuRe3nS2OIUg== -"@alloc/quick-lru@^5.2.0": - version "5.2.0" - resolved "https://registry.yarnpkg.com/@alloc/quick-lru/-/quick-lru-5.2.0.tgz#7bf68b20c0a350f936915fcae06f58e32007ce30" - integrity sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw== - "@ampproject/remapping@^2.2.0": version "2.2.1" resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630" @@ -35,14 +30,6 @@ "@jridgewell/gen-mapping" "^0.3.0" "@jridgewell/trace-mapping" "^0.3.9" -"@babel/code-frame@^7.23.5": - version "7.23.5" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.23.5.tgz#9009b69a8c602293476ad598ff53e4562e15c244" - integrity sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA== - dependencies: - "@babel/highlight" "^7.23.4" - chalk "^2.4.2" - "@babel/code-frame@^7.26.2": version "7.26.2" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.26.2.tgz#4b5fab97d33338eff916235055f0ebc21e573a85" @@ -52,38 +39,12 @@ js-tokens "^4.0.0" picocolors "^1.0.0" -"@babel/compat-data@^7.23.5": - version "7.23.5" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.23.5.tgz#ffb878728bb6bdcb6f4510aa51b1be9afb8cfd98" - integrity sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw== - "@babel/compat-data@^7.26.5": version "7.26.8" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.26.8.tgz#821c1d35641c355284d4a870b8a4a7b0c141e367" integrity sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ== -"@babel/core@^7.23.5": - version "7.23.9" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.9.tgz#b028820718000f267870822fec434820e9b1e4d1" - integrity sha512-5q0175NOjddqpvvzU+kDiSOAk4PfdO6FvwCWoQ6RO7rTzEe8vlo+4HVfcnAREhD4npMs0e9uZypjTwzZPCf/cw== - dependencies: - "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.23.5" - "@babel/generator" "^7.23.6" - "@babel/helper-compilation-targets" "^7.23.6" - "@babel/helper-module-transforms" "^7.23.3" - "@babel/helpers" "^7.23.9" - "@babel/parser" "^7.23.9" - "@babel/template" "^7.23.9" - "@babel/traverse" "^7.23.9" - "@babel/types" "^7.23.9" - convert-source-map "^2.0.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.2.3" - semver "^6.3.1" - -"@babel/core@^7.26.8": +"@babel/core@^7.26.0", "@babel/core@^7.26.8": version "7.26.8" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.26.8.tgz#7742f11c75acea6b08a8e24c5c0c8c89e89bf53e" integrity sha512-l+lkXCHS6tQEc5oUpK28xBOZ6+HwaH7YwoYQbLFiYb4nS2/l1tKnZEtEWkD0GuiYdvArf9qBS0XlQGXzPMsNqQ== @@ -105,16 +66,6 @@ json5 "^2.2.3" semver "^6.3.1" -"@babel/generator@^7.23.6": - version "7.23.6" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.6.tgz#9e1fca4811c77a10580d17d26b57b036133f3c2e" - integrity sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw== - dependencies: - "@babel/types" "^7.23.6" - "@jridgewell/gen-mapping" "^0.3.2" - "@jridgewell/trace-mapping" "^0.3.17" - jsesc "^2.5.1" - "@babel/generator@^7.26.8": version "7.26.8" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.26.8.tgz#f9c5e770309e12e3099ad8271e52f6caa15442ab" @@ -126,17 +77,6 @@ "@jridgewell/trace-mapping" "^0.3.25" jsesc "^3.0.2" -"@babel/helper-compilation-targets@^7.23.6": - version "7.23.6" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz#4d79069b16cbcf1461289eccfbbd81501ae39991" - integrity sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ== - dependencies: - "@babel/compat-data" "^7.23.5" - "@babel/helper-validator-option" "^7.23.5" - browserslist "^4.22.2" - lru-cache "^5.1.1" - semver "^6.3.1" - "@babel/helper-compilation-targets@^7.26.5": version "7.26.5" resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.26.5.tgz#75d92bb8d8d51301c0d49e52a65c9a7fe94514d8" @@ -148,33 +88,6 @@ lru-cache "^5.1.1" semver "^6.3.1" -"@babel/helper-environment-visitor@^7.22.20": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167" - integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA== - -"@babel/helper-function-name@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz#1f9a3cdbd5b2698a670c30d2735f9af95ed52759" - integrity sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw== - dependencies: - "@babel/template" "^7.22.15" - "@babel/types" "^7.23.0" - -"@babel/helper-hoist-variables@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb" - integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-module-imports@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz#16146307acdc40cc00c3b2c647713076464bdbf0" - integrity sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w== - dependencies: - "@babel/types" "^7.22.15" - "@babel/helper-module-imports@^7.25.9": version "7.25.9" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz#e7f8d20602ebdbf9ebbea0a0751fb0f2a4141715" @@ -183,17 +96,6 @@ "@babel/traverse" "^7.25.9" "@babel/types" "^7.25.9" -"@babel/helper-module-transforms@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz#d7d12c3c5d30af5b3c0fcab2a6d5217773e2d0f1" - integrity sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ== - dependencies: - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-module-imports" "^7.22.15" - "@babel/helper-simple-access" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/helper-validator-identifier" "^7.22.20" - "@babel/helper-module-transforms@^7.26.0": version "7.26.0" resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz#8ce54ec9d592695e58d84cd884b7b5c6a2fdeeae" @@ -203,24 +105,10 @@ "@babel/helper-validator-identifier" "^7.25.9" "@babel/traverse" "^7.25.9" -"@babel/helper-plugin-utils@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295" - integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg== - -"@babel/helper-simple-access@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz#4938357dc7d782b80ed6dbb03a0fba3d22b1d5de" - integrity sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-split-export-declaration@^7.22.6": - version "7.22.6" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c" - integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g== - dependencies: - "@babel/types" "^7.22.5" +"@babel/helper-plugin-utils@^7.25.9": + version "7.26.5" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz#18580d00c9934117ad719392c4f6585c9333cc35" + integrity sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg== "@babel/helper-string-parser@^7.23.4": version "7.23.4" @@ -242,25 +130,11 @@ resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz#24b64e2c3ec7cd3b3c547729b8d16871f22cbdc7" integrity sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ== -"@babel/helper-validator-option@^7.23.5": - version "7.23.5" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz#907a3fbd4523426285365d1206c423c4c5520307" - integrity sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw== - "@babel/helper-validator-option@^7.25.9": version "7.25.9" resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz#86e45bd8a49ab7e03f276577f96179653d41da72" integrity sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw== -"@babel/helpers@^7.23.9": - version "7.23.9" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.9.tgz#c3e20bbe7f7a7e10cb9b178384b4affdf5995c7d" - integrity sha512-87ICKgU5t5SzOT7sBMfCOZQ2rHjRU+Pcb9BoILMYz600W6DkVRLFBPwQ18gwUVvggqXivaUakpnxWQGbpywbBQ== - dependencies: - "@babel/template" "^7.23.9" - "@babel/traverse" "^7.23.9" - "@babel/types" "^7.23.9" - "@babel/helpers@^7.26.7": version "7.26.7" resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.26.7.tgz#fd1d2a7c431b6e39290277aacfd8367857c576a4" @@ -269,16 +143,7 @@ "@babel/template" "^7.25.9" "@babel/types" "^7.26.7" -"@babel/highlight@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.23.4.tgz#edaadf4d8232e1a961432db785091207ead0621b" - integrity sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A== - dependencies: - "@babel/helper-validator-identifier" "^7.22.20" - chalk "^2.4.2" - js-tokens "^4.0.0" - -"@babel/parser@^7.1.0", "@babel/parser@^7.20.7", "@babel/parser@^7.23.9": +"@babel/parser@^7.1.0", "@babel/parser@^7.20.7": version "7.23.9" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.9.tgz#7b903b6149b0f8fa7ad564af646c4c38a77fc44b" integrity sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA== @@ -290,19 +155,19 @@ dependencies: "@babel/types" "^7.26.8" -"@babel/plugin-transform-react-jsx-self@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.23.3.tgz#ed3e7dadde046cce761a8e3cf003a13d1a7972d9" - integrity sha512-qXRvbeKDSfwnlJnanVRp0SfuWE5DQhwQr5xtLBzp56Wabyo+4CMosF6Kfp+eOD/4FYpql64XVJ2W0pVLlJZxOQ== +"@babel/plugin-transform-react-jsx-self@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.25.9.tgz#c0b6cae9c1b73967f7f9eb2fca9536ba2fad2858" + integrity sha512-y8quW6p0WHkEhmErnfe58r7x0A70uKphQm8Sp8cV7tjNQwK56sNVK0M73LK3WuYmsuyrftut4xAkjjgU0twaMg== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-react-jsx-source@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.23.3.tgz#03527006bdc8775247a78643c51d4e715fe39a3e" - integrity sha512-91RS0MDnAWDNvGC6Wio5XYkyWI39FMFO+JK9+4AlgaTH+yWwVTsw7/sn6LK0lH7c5F+TFkpv/3LfCJ1Ydwof/g== +"@babel/plugin-transform-react-jsx-source@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.25.9.tgz#4c6b8daa520b5f155b5fb55547d7c9fa91417503" + integrity sha512-+iqjT8xmXhhYv4/uiYd8FNQsraMFZIfxVSqxxVSZP0WbbSAWvBXAul0m/zu+7Vv4O/3WtApy9pmaTMiumEZgfg== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.25.9" "@babel/runtime@^7.12.5", "@babel/runtime@^7.21.0", "@babel/runtime@^7.23.2", "@babel/runtime@^7.5.5": version "7.23.9" @@ -318,15 +183,6 @@ dependencies: regenerator-runtime "^0.14.0" -"@babel/template@^7.22.15", "@babel/template@^7.23.9": - version "7.23.9" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.23.9.tgz#f881d0487cba2828d3259dcb9ef5005a9731011a" - integrity sha512-+xrD2BWLpvHKNmX2QbpdpsBaWnRxahMwJjO+KZk2JOElj5nSmKezyS1B4u+QbHMTX69t4ukm6hh9lsYQ7GHCKA== - dependencies: - "@babel/code-frame" "^7.23.5" - "@babel/parser" "^7.23.9" - "@babel/types" "^7.23.9" - "@babel/template@^7.25.9", "@babel/template@^7.26.8": version "7.26.8" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.26.8.tgz#db3898f47a17bab2f4c78ec1d0de38527c2ffe19" @@ -336,22 +192,6 @@ "@babel/parser" "^7.26.8" "@babel/types" "^7.26.8" -"@babel/traverse@^7.23.9": - version "7.23.9" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.9.tgz#2f9d6aead6b564669394c5ce0f9302bb65b9d950" - integrity sha512-I/4UJ9vs90OkBtY6iiiTORVMyIhJ4kAVmsKo9KFc8UOxMeUfi2hvtIBsET5u9GizXE6/GFSuKCTNfgCswuEjRg== - dependencies: - "@babel/code-frame" "^7.23.5" - "@babel/generator" "^7.23.6" - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-function-name" "^7.23.0" - "@babel/helper-hoist-variables" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/parser" "^7.23.9" - "@babel/types" "^7.23.9" - debug "^4.3.1" - globals "^11.1.0" - "@babel/traverse@^7.25.9", "@babel/traverse@^7.26.8": version "7.26.8" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.26.8.tgz#0a8a9c2b7cc9519eed14275f4fd2278ad46e8cc9" @@ -365,7 +205,7 @@ debug "^4.3.1" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.6", "@babel/types@^7.23.9": +"@babel/types@^7.0.0", "@babel/types@^7.20.7": version "7.23.9" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.9.tgz#1dd7b59a9a2b5c87f8b41e52770b5ecbf492e002" integrity sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q== @@ -588,31 +428,6 @@ eventemitter3 "^5.0.1" preact "^10.24.2" -"@cspotcode/source-map-support@^0.8.0": - version "0.8.1" - resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" - integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== - dependencies: - "@jridgewell/trace-mapping" "0.3.9" - -"@delvtech/council-core@0.1.0": - version "0.1.0" - resolved "https://registry.yarnpkg.com/@delvtech/council-core/-/council-core-0.1.0.tgz#71afcb982d9654a99e2846157704025950ae753a" - integrity sha512-jIRtEXY8sVxO4UBI24R69xbnYCNex2SkDouZ2puRx1m7gwITY5RobsgV+Dq5wgvZzT6NNuemQg3X4opKocEfXA== - dependencies: - "@delvtech/council-artifacts" "^0.1.0" - big.js "^6.2.1" - fast-json-stable-stringify "^2.1.0" - lru-cache "^10.2.0" - -"@delvtech/council-viem@^0.1.0": - version "0.1.0" - resolved "https://registry.yarnpkg.com/@delvtech/council-viem/-/council-viem-0.1.0.tgz#8a5bd9240c0f781b6cc71e6ac3e0b6485f85e107" - integrity sha512-B9IUZ3fnVN5BklM29HAPYbv7vOZdFSZcfP26KxyM6salOcgvQoYlITNF5fU7iN/L5ISJ9mIUUxuAeBHauGNrDQ== - dependencies: - "@delvtech/council-core" "0.1.0" - "@delvtech/evm-client-viem" "^0.6.1" - "@delvtech/drift-viem@^0.1.3": version "0.1.3" resolved "https://registry.yarnpkg.com/@delvtech/drift-viem/-/drift-viem-0.1.3.tgz#e1a79325e04da0bdd4a006ca7baa0dfa6686457a" @@ -628,23 +443,6 @@ ox "^0.6.9" safe-stable-stringify "^2.5.0" -"@delvtech/evm-client-viem@^0.6.1": - version "0.6.1" - resolved "https://registry.yarnpkg.com/@delvtech/evm-client-viem/-/evm-client-viem-0.6.1.tgz#d8cc37b6a7b5a4ab5957e0bcba4428ddfd3a61e7" - integrity sha512-LtJ9hsRPjqqMZ08+Rwz/spcCEX9WO5Kl94wQPXt/6nwFtCQS+Q7zqBOGruxYT93cRnlLvdI3wLdf26NNY3zFsw== - dependencies: - "@delvtech/evm-client" "0.5.1" - -"@delvtech/evm-client@0.5.1": - version "0.5.1" - resolved "https://registry.yarnpkg.com/@delvtech/evm-client/-/evm-client-0.5.1.tgz#b69bd04ecb9f1690c1ce94acb7362e4d30b9e1e5" - integrity sha512-Ixx7coKko1l9i2CkrrkhzRVnxzf+b3ROEppWvN7Q0+Gx3DLq1lq8oorXjZb5dZhs5K07LtJM7sUJLztxx8BIEA== - dependencies: - "@types/lodash.ismatch" "^4.4.9" - fast-safe-stringify "^2.1.1" - lodash.ismatch "^4.4.0" - lru-cache "^10.0.1" - "@delvtech/fixed-point-wasm@^0.0.7": version "0.0.7" resolved "https://registry.yarnpkg.com/@delvtech/fixed-point-wasm/-/fixed-point-wasm-0.0.7.tgz#616e7e5056eaa6f9c4f0d91445d4e8dbc95a9a08" @@ -712,11 +510,6 @@ pako "^2.1.0" ts-pattern "^5.4.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/aix-ppc64@0.23.1": version "0.23.1" resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.23.1.tgz#51299374de171dbd80bb7d838e1cfce9af36f353" @@ -727,11 +520,6 @@ resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.24.2.tgz#38848d3e25afe842a7943643cbcd387cc6e13461" integrity sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA== -"@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-arm64@0.23.1": version "0.23.1" resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.23.1.tgz#58565291a1fe548638adb9c584237449e5e14018" @@ -742,11 +530,6 @@ resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.24.2.tgz#f592957ae8b5643129fa889c79e69cd8669bb894" integrity sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg== -"@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-arm@0.23.1": version "0.23.1" resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.23.1.tgz#5eb8c652d4c82a2421e3395b808e6d9c42c862ee" @@ -757,11 +540,6 @@ resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.24.2.tgz#72d8a2063aa630308af486a7e5cbcd1e134335b3" integrity sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q== -"@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/android-x64@0.23.1": version "0.23.1" resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.23.1.tgz#ae19d665d2f06f0f48a6ac9a224b3f672e65d517" @@ -772,11 +550,6 @@ resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.24.2.tgz#9a7713504d5f04792f33be9c197a882b2d88febb" integrity sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw== -"@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-arm64@0.23.1": version "0.23.1" resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.23.1.tgz#05b17f91a87e557b468a9c75e9d85ab10c121b16" @@ -787,11 +560,6 @@ resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.24.2.tgz#02ae04ad8ebffd6e2ea096181b3366816b2b5936" integrity sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA== -"@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/darwin-x64@0.23.1": version "0.23.1" resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.23.1.tgz#c58353b982f4e04f0d022284b8ba2733f5ff0931" @@ -802,11 +570,6 @@ resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.24.2.tgz#9ec312bc29c60e1b6cecadc82bd504d8adaa19e9" integrity sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA== -"@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-arm64@0.23.1": version "0.23.1" resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.23.1.tgz#f9220dc65f80f03635e1ef96cfad5da1f446f3bc" @@ -817,11 +580,6 @@ resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.24.2.tgz#5e82f44cb4906d6aebf24497d6a068cfc152fa00" integrity sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg== -"@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/freebsd-x64@0.23.1": version "0.23.1" resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.23.1.tgz#69bd8511fa013b59f0226d1609ac43f7ce489730" @@ -832,11 +590,6 @@ resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.24.2.tgz#3fb1ce92f276168b75074b4e51aa0d8141ecce7f" integrity sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q== -"@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-arm64@0.23.1": version "0.23.1" resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.23.1.tgz#8050af6d51ddb388c75653ef9871f5ccd8f12383" @@ -847,11 +600,6 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.24.2.tgz#856b632d79eb80aec0864381efd29de8fd0b1f43" integrity sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg== -"@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-arm@0.23.1": version "0.23.1" resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.23.1.tgz#ecaabd1c23b701070484990db9a82f382f99e771" @@ -862,11 +610,6 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.24.2.tgz#c846b4694dc5a75d1444f52257ccc5659021b736" integrity sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA== -"@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-ia32@0.23.1": version "0.23.1" resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.23.1.tgz#3ed2273214178109741c09bd0687098a0243b333" @@ -877,11 +620,6 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.24.2.tgz#f8a16615a78826ccbb6566fab9a9606cfd4a37d5" integrity sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw== -"@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-loong64@0.23.1": version "0.23.1" resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.23.1.tgz#a0fdf440b5485c81b0fbb316b08933d217f5d3ac" @@ -892,11 +630,6 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.24.2.tgz#1c451538c765bf14913512c76ed8a351e18b09fc" integrity sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ== -"@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-mips64el@0.23.1": version "0.23.1" resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.23.1.tgz#e11a2806346db8375b18f5e104c5a9d4e81807f6" @@ -907,11 +640,6 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.24.2.tgz#0846edeefbc3d8d50645c51869cc64401d9239cb" integrity sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw== -"@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-ppc64@0.23.1": version "0.23.1" resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.23.1.tgz#06a2744c5eaf562b1a90937855b4d6cf7c75ec96" @@ -922,11 +650,6 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.24.2.tgz#8e3fc54505671d193337a36dfd4c1a23b8a41412" integrity sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw== -"@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-riscv64@0.23.1": version "0.23.1" resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.23.1.tgz#65b46a2892fc0d1af4ba342af3fe0fa4a8fe08e7" @@ -937,11 +660,6 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.24.2.tgz#6a1e92096d5e68f7bb10a0d64bb5b6d1daf9a694" integrity sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q== -"@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-s390x@0.23.1": version "0.23.1" resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.23.1.tgz#e71ea18c70c3f604e241d16e4e5ab193a9785d6f" @@ -952,11 +670,6 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.24.2.tgz#ab18e56e66f7a3c49cb97d337cd0a6fea28a8577" integrity sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw== -"@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/linux-x64@0.23.1": version "0.23.1" resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.23.1.tgz#d47f97391e80690d4dfe811a2e7d6927ad9eed24" @@ -972,11 +685,6 @@ resolved "https://registry.yarnpkg.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.24.2.tgz#65f19161432bafb3981f5f20a7ff45abb2e708e6" integrity sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw== -"@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/netbsd-x64@0.23.1": version "0.23.1" resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.23.1.tgz#44e743c9778d57a8ace4b72f3c6b839a3b74a653" @@ -997,11 +705,6 @@ resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.24.2.tgz#58b00238dd8f123bfff68d3acc53a6ee369af89f" integrity sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A== -"@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/openbsd-x64@0.23.1": version "0.23.1" resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.23.1.tgz#2e58ae511bacf67d19f9f2dcd9e8c5a93f00c273" @@ -1012,11 +715,6 @@ resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.24.2.tgz#0ac843fda0feb85a93e288842936c21a00a8a205" integrity sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA== -"@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/sunos-x64@0.23.1": version "0.23.1" resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.23.1.tgz#adb022b959d18d3389ac70769cef5a03d3abd403" @@ -1027,11 +725,6 @@ resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.24.2.tgz#8b7aa895e07828d36c422a4404cc2ecf27fb15c6" integrity sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig== -"@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-arm64@0.23.1": version "0.23.1" resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.23.1.tgz#84906f50c212b72ec360f48461d43202f4c8b9a2" @@ -1042,11 +735,6 @@ resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.24.2.tgz#c023afb647cabf0c3ed13f0eddfc4f1d61c66a85" integrity sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ== -"@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-ia32@0.23.1": version "0.23.1" resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.23.1.tgz#5e3eacc515820ff729e90d0cb463183128e82fac" @@ -1057,11 +745,6 @@ resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.24.2.tgz#96c356132d2dda990098c8b8b951209c3cd743c2" integrity sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA== -"@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== - "@esbuild/win32-x64@0.23.1": version "0.23.1" resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.23.1.tgz#81fd50d11e2c32b2d6241470e3185b70c7b30699" @@ -1369,11 +1052,6 @@ dependencies: "@hapi/hoek" "^9.0.0" -"@heroicons/react@^2.0.16": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@heroicons/react/-/react-2.1.1.tgz#422deb80c4d6caf3371aec6f4bee8361a354dc13" - integrity sha512-JyyN9Lo66kirbCMuMMRPtJxtKJoIsXKS569ebHGGRKbl8s4CtUfLnyKJxteA+vIKySocO4s1SkTkGS4xtG/yEA== - "@heroicons/react@^2.2.0": version "2.2.0" resolved "https://registry.yarnpkg.com/@heroicons/react/-/react-2.2.0.tgz#0c05124af50434a800773abec8d3af6a297d904b" @@ -1433,7 +1111,7 @@ "@jridgewell/sourcemap-codec" "^1.4.10" "@jridgewell/trace-mapping" "^0.3.24" -"@jridgewell/resolve-uri@^3.0.3", "@jridgewell/resolve-uri@^3.1.0": +"@jridgewell/resolve-uri@^3.1.0": version "3.1.1" resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== @@ -1458,15 +1136,15 @@ resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a" integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== -"@jridgewell/trace-mapping@0.3.9": - version "0.3.9" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" - integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== +"@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": + version "0.3.25" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" + integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== dependencies: - "@jridgewell/resolve-uri" "^3.0.3" - "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" -"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": +"@jridgewell/trace-mapping@^0.3.9": version "0.3.22" resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.22.tgz#72a621e5de59f5f1ef792d0793a82ee20f645e4c" integrity sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw== @@ -1474,14 +1152,6 @@ "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" -"@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": - version "0.3.25" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" - integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== - dependencies: - "@jridgewell/resolve-uri" "^3.1.0" - "@jridgewell/sourcemap-codec" "^1.4.14" - "@leichtgewicht/ip-codec@^2.0.1": version "2.0.4" resolved "https://registry.yarnpkg.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz#b2ac626d6cb9c8718ab459166d4bb405b8ffa78b" @@ -1970,33 +1640,53 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@nomicfoundation/ethereumjs-block@5.0.4": - version "5.0.4" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-block/-/ethereumjs-block-5.0.4.tgz#ff2acb98a86b9290e35e315a6abfb9aebb9cf39e" - integrity sha512-AcyacJ9eX/uPEvqsPiB+WO1ymE+kyH48qGGiGV+YTojdtas8itUTW5dehDSOXEEItWGbbzEJ4PRqnQZlWaPvDw== - dependencies: - "@nomicfoundation/ethereumjs-common" "4.0.4" - "@nomicfoundation/ethereumjs-rlp" "5.0.4" - "@nomicfoundation/ethereumjs-trie" "6.0.4" - "@nomicfoundation/ethereumjs-tx" "5.0.4" - "@nomicfoundation/ethereumjs-util" "9.0.4" - ethereum-cryptography "0.1.3" +"@nomicfoundation/edr-darwin-arm64@0.7.0": + version "0.7.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-darwin-arm64/-/edr-darwin-arm64-0.7.0.tgz#2be3338a61508ed1d24326c82b9aa9224a844dd7" + integrity sha512-vAH20oh4GaSB/iQFTRcoO8jLc0CLd9XuLY9I7vtcqZWAiM4U1J4Y8cu67PWmtxbvUQOqXR7S6FtAr8/AlWm14g== -"@nomicfoundation/ethereumjs-blockchain@7.0.4": - version "7.0.4" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-blockchain/-/ethereumjs-blockchain-7.0.4.tgz#b77511b389290b186c8d999e70f4b15c27ef44ea" - integrity sha512-jYsd/kwzbmpnxx86tXsYV8wZ5xGvFL+7/P0c6OlzpClHsbFzeF41KrYA9scON8Rg6bZu3ZTv6JOAgj3t7USUfg== +"@nomicfoundation/edr-darwin-x64@0.7.0": + version "0.7.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-darwin-x64/-/edr-darwin-x64-0.7.0.tgz#d2f782fc43bcae1c9aca3130aca6aa2a964e8559" + integrity sha512-WHDdIrPvLlgXQr2eKypBM5xOZAwdxhDAEQIvEMQL8tEEm2qYW2bliUlssBPrs8E3bdivFbe1HizImslMAfU3+g== + +"@nomicfoundation/edr-linux-arm64-gnu@0.7.0": + version "0.7.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-arm64-gnu/-/edr-linux-arm64-gnu-0.7.0.tgz#48b156744989acc8e6b0b754158a26e10ad865ed" + integrity sha512-WXpJB54ukz1no7gxCPXVEw9pgl/9UZ/WO3l1ctyv/T7vOygjqA4SUd6kppTs6MNXAuTiisPtvJ/fmvHiMBLrsw== + +"@nomicfoundation/edr-linux-arm64-musl@0.7.0": + version "0.7.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-arm64-musl/-/edr-linux-arm64-musl-0.7.0.tgz#60351352ec26704fed8a232430bf3793d17c29cd" + integrity sha512-1iZYOcEgc+zJI7JQrlAFziuy9sBz1WgnIx3HIIu0J7lBRZ/AXeHHgATb+4InqxtEx9O3W8A0s7f11SyFqJL4Aw== + +"@nomicfoundation/edr-linux-x64-gnu@0.7.0": + version "0.7.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-x64-gnu/-/edr-linux-x64-gnu-0.7.0.tgz#a7b056bfd46ccfde4d55c9601da5a410c2fce40f" + integrity sha512-wSjC94WcR5MM8sg9w3OsAmT6+bbmChJw6uJKoXR3qscps/jdhjzJWzfgT0XGRq3XMUfimyafW2RWOyfX3ouhrQ== + +"@nomicfoundation/edr-linux-x64-musl@0.7.0": + version "0.7.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-x64-musl/-/edr-linux-x64-musl-0.7.0.tgz#0fe9f5ace05072e845f71c8fbd28e57798dd6ab5" + integrity sha512-Us22+AZ7wkG1mZwxqE4S4ZcuwkEA5VrUiBOJSvKHGOgy6vFvB/Euh5Lkp4GovwjrtiXuvyGO2UmtkzymZKDxZw== + +"@nomicfoundation/edr-win32-x64-msvc@0.7.0": + version "0.7.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-win32-x64-msvc/-/edr-win32-x64-msvc-0.7.0.tgz#f1b9a0a643db8dffcf5edb827c18e1cef25c4367" + integrity sha512-HAry0heTsWkzReVtjHwoIq3BgFCvXpVhJ5qPmTnegZGsr/KxqvMmHyDMifzKao4bycU8yrpTSyOiAJt27RWjzQ== + +"@nomicfoundation/edr@^0.7.0": + version "0.7.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr/-/edr-0.7.0.tgz#175cb8a81eac585dc76ad41585c908542acb9383" + integrity sha512-+Zyu7TE47TGNcPhOfWLPA/zISs32WDMXrhSWdWYyPHDVn/Uux5TVuOeScKb0BR/R8EJ+leR8COUF/EGxvDOVKg== dependencies: - "@nomicfoundation/ethereumjs-block" "5.0.4" - "@nomicfoundation/ethereumjs-common" "4.0.4" - "@nomicfoundation/ethereumjs-ethash" "3.0.4" - "@nomicfoundation/ethereumjs-rlp" "5.0.4" - "@nomicfoundation/ethereumjs-trie" "6.0.4" - "@nomicfoundation/ethereumjs-tx" "5.0.4" - "@nomicfoundation/ethereumjs-util" "9.0.4" - debug "^4.3.3" - ethereum-cryptography "0.1.3" - lru-cache "^10.0.0" + "@nomicfoundation/edr-darwin-arm64" "0.7.0" + "@nomicfoundation/edr-darwin-x64" "0.7.0" + "@nomicfoundation/edr-linux-arm64-gnu" "0.7.0" + "@nomicfoundation/edr-linux-arm64-musl" "0.7.0" + "@nomicfoundation/edr-linux-x64-gnu" "0.7.0" + "@nomicfoundation/edr-linux-x64-musl" "0.7.0" + "@nomicfoundation/edr-win32-x64-msvc" "0.7.0" "@nomicfoundation/ethereumjs-common@4.0.4": version "4.0.4" @@ -2005,62 +1695,11 @@ dependencies: "@nomicfoundation/ethereumjs-util" "9.0.4" -"@nomicfoundation/ethereumjs-ethash@3.0.4": - version "3.0.4" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-ethash/-/ethereumjs-ethash-3.0.4.tgz#06cb2502b3012fb6c11cffd44af08aecf71310da" - integrity sha512-xvIrwIMl9sSaiYKRem68+O7vYdj7Q2XWv5P7JXiIkn83918QzWHvqbswTRsH7+r6X1UEvdsURRnZbvZszEjAaQ== - dependencies: - "@nomicfoundation/ethereumjs-block" "5.0.4" - "@nomicfoundation/ethereumjs-rlp" "5.0.4" - "@nomicfoundation/ethereumjs-util" "9.0.4" - bigint-crypto-utils "^3.2.2" - ethereum-cryptography "0.1.3" - -"@nomicfoundation/ethereumjs-evm@2.0.4": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-evm/-/ethereumjs-evm-2.0.4.tgz#c9c761767283ac53946185474362230b169f8f63" - integrity sha512-lTyZZi1KpeMHzaO6cSVisR2tjiTTedjo7PcmhI/+GNFo9BmyY6QYzGeSti0sFttmjbEMioHgXxl5yrLNRg6+1w== - dependencies: - "@nomicfoundation/ethereumjs-common" "4.0.4" - "@nomicfoundation/ethereumjs-statemanager" "2.0.4" - "@nomicfoundation/ethereumjs-tx" "5.0.4" - "@nomicfoundation/ethereumjs-util" "9.0.4" - "@types/debug" "^4.1.9" - debug "^4.3.3" - ethereum-cryptography "0.1.3" - rustbn-wasm "^0.2.0" - "@nomicfoundation/ethereumjs-rlp@5.0.4": version "5.0.4" resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-5.0.4.tgz#66c95256fc3c909f6fb18f6a586475fc9762fa30" integrity sha512-8H1S3s8F6QueOc/X92SdrA4RDenpiAEqMg5vJH99kcQaCy/a3Q6fgseo75mgWlbanGJXSlAPtnCeG9jvfTYXlw== -"@nomicfoundation/ethereumjs-statemanager@2.0.4": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-statemanager/-/ethereumjs-statemanager-2.0.4.tgz#bf14415e1f31b5ea8b98a0c027c547d0555059b6" - integrity sha512-HPDjeFrxw6llEi+BzqXkZ+KkvFnTOPczuHBtk21hRlDiuKuZz32dPzlhpRsDBGV1b5JTmRDUVqCS1lp3Gghw4Q== - dependencies: - "@nomicfoundation/ethereumjs-common" "4.0.4" - "@nomicfoundation/ethereumjs-rlp" "5.0.4" - "@nomicfoundation/ethereumjs-trie" "6.0.4" - "@nomicfoundation/ethereumjs-util" "9.0.4" - debug "^4.3.3" - ethereum-cryptography "0.1.3" - js-sdsl "^4.1.4" - lru-cache "^10.0.0" - -"@nomicfoundation/ethereumjs-trie@6.0.4": - version "6.0.4" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-trie/-/ethereumjs-trie-6.0.4.tgz#688a3f76646c209365ee6d959c3d7330ede5e609" - integrity sha512-3nSwQiFMvr2VFe/aZUyinuohYvtytUqZCUCvIWcPJ/BwJH6oQdZRB42aNFBJ/8nAh2s3OcroWpBLskzW01mFKA== - dependencies: - "@nomicfoundation/ethereumjs-rlp" "5.0.4" - "@nomicfoundation/ethereumjs-util" "9.0.4" - "@types/readable-stream" "^2.3.13" - ethereum-cryptography "0.1.3" - lru-cache "^10.0.0" - readable-stream "^3.6.0" - "@nomicfoundation/ethereumjs-tx@5.0.4": version "5.0.4" resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-5.0.4.tgz#b0ceb58c98cc34367d40a30d255d6315b2f456da" @@ -2079,33 +1718,6 @@ "@nomicfoundation/ethereumjs-rlp" "5.0.4" ethereum-cryptography "0.1.3" -"@nomicfoundation/ethereumjs-verkle@0.0.2": - version "0.0.2" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-verkle/-/ethereumjs-verkle-0.0.2.tgz#7686689edec775b2efea5a71548f417c18f7dea4" - integrity sha512-bjnfZElpYGK/XuuVRmLS3yDvr+cDs85D9oonZ0YUa5A3lgFgokWMp76zXrxX2jVQ0BfHaw12y860n1+iOi6yFQ== - dependencies: - "@nomicfoundation/ethereumjs-rlp" "5.0.4" - "@nomicfoundation/ethereumjs-util" "9.0.4" - lru-cache "^10.0.0" - rust-verkle-wasm "^0.0.1" - -"@nomicfoundation/ethereumjs-vm@7.0.4": - version "7.0.4" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-vm/-/ethereumjs-vm-7.0.4.tgz#e5a6eec4877dc62dda93003c6d7afd1fe4b9625b" - integrity sha512-gsA4IhmtWHI4BofKy3kio9W+dqZQs5Ji5mLjLYxHCkat+JQBUt5szjRKra2F9nGDJ2XcI/wWb0YWUFNgln4zRQ== - dependencies: - "@nomicfoundation/ethereumjs-block" "5.0.4" - "@nomicfoundation/ethereumjs-blockchain" "7.0.4" - "@nomicfoundation/ethereumjs-common" "4.0.4" - "@nomicfoundation/ethereumjs-evm" "2.0.4" - "@nomicfoundation/ethereumjs-rlp" "5.0.4" - "@nomicfoundation/ethereumjs-statemanager" "2.0.4" - "@nomicfoundation/ethereumjs-trie" "6.0.4" - "@nomicfoundation/ethereumjs-tx" "5.0.4" - "@nomicfoundation/ethereumjs-util" "9.0.4" - debug "^4.3.3" - ethereum-cryptography "0.1.3" - "@nomicfoundation/solidity-analyzer-darwin-arm64@0.1.1": version "0.1.1" resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.1.1.tgz#4c858096b1c17fe58a474fe81b46815f93645c15" @@ -2314,41 +1926,21 @@ resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.34.6.tgz#9b726b4dcafb9332991e9ca49d54bafc71d9d87f" integrity sha512-+GcCXtOQoWuC7hhX1P00LqjjIiS/iOouHXhMdiDSnq/1DGTox4SpUvO52Xm+div6+106r+TcvOeo/cxvyEyTgg== -"@rollup/rollup-android-arm-eabi@4.9.6": - version "4.9.6" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.9.6.tgz#66b8d9cb2b3a474d115500f9ebaf43e2126fe496" - integrity sha512-MVNXSSYN6QXOulbHpLMKYi60ppyO13W9my1qogeiAqtjb2yR4LSmfU2+POvDkLzhjYLXz9Rf9+9a3zFHW1Lecg== - "@rollup/rollup-android-arm64@4.34.6": version "4.34.6" resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.34.6.tgz#88326ff46168a47851077ca0bf0c442689ec088f" integrity sha512-E8+2qCIjciYUnCa1AiVF1BkRgqIGW9KzJeesQqVfyRITGQN+dFuoivO0hnro1DjT74wXLRZ7QF8MIbz+luGaJA== -"@rollup/rollup-android-arm64@4.9.6": - version "4.9.6" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.9.6.tgz#46327d5b86420d2307946bec1535fdf00356e47d" - integrity sha512-T14aNLpqJ5wzKNf5jEDpv5zgyIqcpn1MlwCrUXLrwoADr2RkWA0vOWP4XxbO9aiO3dvMCQICZdKeDrFl7UMClw== - "@rollup/rollup-darwin-arm64@4.34.6": version "4.34.6" resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.34.6.tgz#b8fbcc9389bc6fad3334a1d16dbeaaa5637c5772" integrity sha512-z9Ib+OzqN3DZEjX7PDQMHEhtF+t6Mi2z/ueChQPLS/qUMKY7Ybn5A2ggFoKRNRh1q1T03YTQfBTQCJZiepESAg== -"@rollup/rollup-darwin-arm64@4.9.6": - version "4.9.6" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.9.6.tgz#166987224d2f8b1e2fd28ee90c447d52271d5e90" - integrity sha512-CqNNAyhRkTbo8VVZ5R85X73H3R5NX9ONnKbXuHisGWC0qRbTTxnF1U4V9NafzJbgGM0sHZpdO83pLPzq8uOZFw== - "@rollup/rollup-darwin-x64@4.34.6": version "4.34.6" resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.34.6.tgz#1aa2bcad84c0fb5902e945d88822e17a4f661d51" integrity sha512-PShKVY4u0FDAR7jskyFIYVyHEPCPnIQY8s5OcXkdU8mz3Y7eXDJPdyM/ZWjkYdR2m0izD9HHWA8sGcXn+Qrsyg== -"@rollup/rollup-darwin-x64@4.9.6": - version "4.9.6" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.9.6.tgz#a2e6e096f74ccea6e2f174454c26aef6bcdd1274" - integrity sha512-zRDtdJuRvA1dc9Mp6BWYqAsU5oeLixdfUvkTHuiYOHwqYuQ4YgSmi6+/lPvSsqc/I0Omw3DdICx4Tfacdzmhog== - "@rollup/rollup-freebsd-arm64@4.34.6": version "4.34.6" resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.34.6.tgz#29c54617e0929264dcb6416597d6d7481696e49f" @@ -2364,11 +1956,6 @@ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.34.6.tgz#a844e1978c8b9766b169ecb1cb5cc0d8a3f05930" integrity sha512-88fSzjC5xeH9S2Vg3rPgXJULkHcLYMkh8faix8DX4h4TIAL65ekwuQMA/g2CXq8W+NJC43V6fUpYZNjaX3+IIg== -"@rollup/rollup-linux-arm-gnueabihf@4.9.6": - version "4.9.6" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.9.6.tgz#09fcd4c55a2d6160c5865fec708a8e5287f30515" - integrity sha512-oNk8YXDDnNyG4qlNb6is1ojTOGL/tRhbbKeE/YuccItzerEZT68Z9gHrY3ROh7axDc974+zYAPxK5SH0j/G+QQ== - "@rollup/rollup-linux-arm-musleabihf@4.34.6": version "4.34.6" resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.34.6.tgz#6b44c3b7257985d71b087fcb4ef01325e2fff201" @@ -2379,21 +1966,11 @@ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.34.6.tgz#ebb499cf1720115256d0c9ae7598c90cc2251bc5" integrity sha512-9RyprECbRa9zEjXLtvvshhw4CMrRa3K+0wcp3KME0zmBe1ILmvcVHnypZ/aIDXpRyfhSYSuN4EPdCCj5Du8FIA== -"@rollup/rollup-linux-arm64-gnu@4.9.6": - version "4.9.6" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.9.6.tgz#19a3c0b6315c747ca9acf86e9b710cc2440f83c9" - integrity sha512-Z3O60yxPtuCYobrtzjo0wlmvDdx2qZfeAWTyfOjEDqd08kthDKexLpV97KfAeUXPosENKd8uyJMRDfFMxcYkDQ== - "@rollup/rollup-linux-arm64-musl@4.34.6": version "4.34.6" resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.34.6.tgz#9658221b59d9e5643348f9a52fa5ef35b4dc07b1" integrity sha512-qTmklhCTyaJSB05S+iSovfo++EwnIEZxHkzv5dep4qoszUMX5Ca4WM4zAVUMbfdviLgCSQOu5oU8YoGk1s6M9Q== -"@rollup/rollup-linux-arm64-musl@4.9.6": - version "4.9.6" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.9.6.tgz#94aaf95fdaf2ad9335983a4552759f98e6b2e850" - integrity sha512-gpiG0qQJNdYEVad+1iAsGAbgAnZ8j07FapmnIAQgODKcOTjLEWM9sRb+MbQyVsYCnA0Im6M6QIq6ax7liws6eQ== - "@rollup/rollup-linux-loongarch64-gnu@4.34.6": version "4.34.6" resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.34.6.tgz#19418cc57579a5655af2d850a89d74b3f7e9aa92" @@ -2409,11 +1986,6 @@ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.34.6.tgz#9c158360abf6e6f7794285642ba0898c580291f6" integrity sha512-aK+Zp+CRM55iPrlyKiU3/zyhgzWBxLVrw2mwiQSYJRobCURb781+XstzvA8Gkjg/hbdQFuDw44aUOxVQFycrAg== -"@rollup/rollup-linux-riscv64-gnu@4.9.6": - version "4.9.6" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.9.6.tgz#160510e63f4b12618af4013bddf1761cf9fc9880" - integrity sha512-+uCOcvVmFUYvVDr27aiyun9WgZk0tXe7ThuzoUTAukZJOwS5MrGbmSlNOhx1j80GdpqbOty05XqSl5w4dQvcOA== - "@rollup/rollup-linux-s390x-gnu@4.34.6": version "4.34.6" resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.34.6.tgz#f9113498d22962baacdda008b5587d568b05aa34" @@ -2424,51 +1996,26 @@ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.34.6.tgz#aec8d4cdf911cd869a72b8bd00833cb426664e0c" integrity sha512-Sht4aFvmA4ToHd2vFzwMFaQCiYm2lDFho5rPcvPBT5pCdC+GwHG6CMch4GQfmWTQ1SwRKS0dhDYb54khSrjDWw== -"@rollup/rollup-linux-x64-gnu@4.9.6": - version "4.9.6" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.9.6.tgz#5ac5d068ce0726bd0a96ca260d5bd93721c0cb98" - integrity sha512-HUNqM32dGzfBKuaDUBqFB7tP6VMN74eLZ33Q9Y1TBqRDn+qDonkAUyKWwF9BR9unV7QUzffLnz9GrnKvMqC/fw== - "@rollup/rollup-linux-x64-musl@4.34.6": version "4.34.6" resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.34.6.tgz#61c0a146bdd1b5e0dcda33690dd909b321d8f20f" integrity sha512-zmmpOQh8vXc2QITsnCiODCDGXFC8LMi64+/oPpPx5qz3pqv0s6x46ps4xoycfUiVZps5PFn1gksZzo4RGTKT+A== -"@rollup/rollup-linux-x64-musl@4.9.6": - version "4.9.6" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.9.6.tgz#bafa759ab43e8eab9edf242a8259ffb4f2a57a5d" - integrity sha512-ch7M+9Tr5R4FK40FHQk8VnML0Szi2KRujUgHXd/HjuH9ifH72GUmw6lStZBo3c3GB82vHa0ZoUfjfcM7JiiMrQ== - "@rollup/rollup-win32-arm64-msvc@4.34.6": version "4.34.6" resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.34.6.tgz#c6c5bf290a3a459c18871110bc2e7009ce35b15a" integrity sha512-3/q1qUsO/tLqGBaD4uXsB6coVGB3usxw3qyeVb59aArCgedSF66MPdgRStUd7vbZOsko/CgVaY5fo2vkvPLWiA== -"@rollup/rollup-win32-arm64-msvc@4.9.6": - version "4.9.6" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.9.6.tgz#1cc3416682e5a20d8f088f26657e6e47f8db468e" - integrity sha512-VD6qnR99dhmTQ1mJhIzXsRcTBvTjbfbGGwKAHcu+52cVl15AC/kplkhxzW/uT0Xl62Y/meBKDZvoJSJN+vTeGA== - "@rollup/rollup-win32-ia32-msvc@4.34.6": version "4.34.6" resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.34.6.tgz#16ca6bdadc9e054818b9c51f8dac82f6b8afab81" integrity sha512-oLHxuyywc6efdKVTxvc0135zPrRdtYVjtVD5GUm55I3ODxhU/PwkQFD97z16Xzxa1Fz0AEe4W/2hzRtd+IfpOA== -"@rollup/rollup-win32-ia32-msvc@4.9.6": - version "4.9.6" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.9.6.tgz#7d2251e1aa5e8a1e47c86891fe4547a939503461" - integrity sha512-J9AFDq/xiRI58eR2NIDfyVmTYGyIZmRcvcAoJ48oDld/NTR8wyiPUu2X/v1navJ+N/FGg68LEbX3Ejd6l8B7MQ== - "@rollup/rollup-win32-x64-msvc@4.34.6": version "4.34.6" resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.34.6.tgz#f3d03ce2d82723eb089188ea1494a719b09e1561" integrity sha512-0PVwmgzZ8+TZ9oGBmdZoQVXflbvuwzN/HRclujpl4N/q3i+y0lqLw8n1bXA8ru3sApDjlmONaNAuYr38y1Kr9w== -"@rollup/rollup-win32-x64-msvc@4.9.6": - version "4.9.6" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.9.6.tgz#2c1fb69e02a3f1506f52698cfdc3a8b6386df9a6" - integrity sha512-jqzNLhNDvIZOrt69Ce4UjGRpXJBzhUBzawMwnaDAwyHriki3XollsewxWzOzz+4yOFDkuJHtTsZFwMxhYJWmLQ== - "@rushstack/eslint-patch@^1.3.3": version "1.7.2" resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.7.2.tgz#2d4260033e199b3032a08b41348ac10de21c47e9" @@ -2495,7 +2042,7 @@ resolved "https://registry.yarnpkg.com/@safe-global/safe-gateway-typescript-sdk/-/safe-gateway-typescript-sdk-3.14.0.tgz#9581c524c1ea4956555f40761eb6b4007392aa82" integrity sha512-/dqU66RvHw50n+7x3nwnJedq8V6iLQyoWitNdjx5cFTBmae+rpP+LvHq+LqZfXJVkB1qNytMdjFjdyES0t79gQ== -"@scure/base@^1.1.1", "@scure/base@^1.1.3", "@scure/base@^1.1.5", "@scure/base@~1.1.0", "@scure/base@~1.1.2", "@scure/base@~1.1.4": +"@scure/base@^1.1.3", "@scure/base@^1.1.5", "@scure/base@~1.1.0", "@scure/base@~1.1.2", "@scure/base@~1.1.4": version "1.1.5" resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.5.tgz#1d85d17269fe97694b9c592552dd9e5e33552157" integrity sha512-Brj9FiG2W1MRQSTB212YVPRrcbjkv48FoZi/u4l/zds/ieRrqsh7aUf6CLwkAq61oKXr/ZlTzlY66gLIj3TFTQ== @@ -2904,26 +2451,6 @@ resolved "https://registry.yarnpkg.com/@tsconfig/node-lts/-/node-lts-20.1.1.tgz#c43c9cbfc9c4f6e0a5146cd3b16cd79720033252" integrity sha512-V7wHydi1dv8I8xiOX3pJ0lhC+MlOakznvLks94J6y/TqQK6DBcbdD1G4jEq8yU+s6lBASPn4e1Ci636fDqeyvQ== -"@tsconfig/node10@^1.0.7": - version "1.0.9" - resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2" - integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== - -"@tsconfig/node12@^1.0.7": - version "1.0.11" - resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" - integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== - -"@tsconfig/node14@^1.0.0": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" - integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== - -"@tsconfig/node16@^1.0.2": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9" - integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== - "@tsconfig/recommended@^1.0.3": version "1.0.3" resolved "https://registry.yarnpkg.com/@tsconfig/recommended/-/recommended-1.0.3.tgz#742540ba9170897a44097e838bca411abf56ccd2" @@ -2976,33 +2503,28 @@ dependencies: "@types/node" "*" -"@types/cli-table@^0.3.4": - version "0.3.4" - resolved "https://registry.yarnpkg.com/@types/cli-table/-/cli-table-0.3.4.tgz#ecc3efce1b4d13503de59d2ddb49b8f9fd7203e7" - integrity sha512-GsALrTL69mlwbAw/MHF1IPTadSLZQnsxe7a80G8l4inN/iEXCOcVeT/S7aRc6hbhqzL9qZ314kHPDQnQ3ev+HA== - "@types/d3-format@^3.0.4": version "3.0.4" resolved "https://registry.yarnpkg.com/@types/d3-format/-/d3-format-3.0.4.tgz#b1e4465644ddb3fdf3a263febb240a6cd616de90" integrity sha512-fALi2aI6shfg7vM5KiR1wNJnZ7r6UuggVqtDA+xiEdPZQwy/trcQaHnwShLuLdta2rTymCNpxYTiMZX/e09F4g== -"@types/debug@^4.1.7", "@types/debug@^4.1.9": +"@types/debug@^4.1.7": version "4.1.12" resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.12.tgz#a155f21690871953410df4b6b6f53187f0500917" integrity sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ== dependencies: "@types/ms" "*" -"@types/estree@1.0.5", "@types/estree@^1.0.0": - version "1.0.5" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4" - integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== - "@types/estree@1.0.6": version "1.0.6" resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.6.tgz#628effeeae2064a1b4e79f78e81d87b7e5fc7b50" integrity sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw== +"@types/estree@^1.0.0": + version "1.0.5" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4" + integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== + "@types/gensync@^1.0.0": version "1.0.4" resolved "https://registry.yarnpkg.com/@types/gensync/-/gensync-1.0.4.tgz#7122d8f0cd3bf437f9725cc95b180197190cf50b" @@ -3032,13 +2554,6 @@ dependencies: "@types/lodash" "*" -"@types/lodash.ismatch@^4.4.9": - version "4.4.9" - resolved "https://registry.yarnpkg.com/@types/lodash.ismatch/-/lodash.ismatch-4.4.9.tgz#97b4317f7dc3975bb51660a0f9a055ac7b67b134" - integrity sha512-qWihnStOPKH8urljLGm6ZOEdN/5Bt4vxKR81tL3L4ArUNLvcf9RW3QSnPs21eix5BiqioSWq4aAXD4Iep+d0fw== - dependencies: - "@types/lodash" "*" - "@types/lodash@*": version "4.14.202" resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.202.tgz#f09dbd2fb082d507178b2f2a5c7e74bd72ff98f8" @@ -3073,13 +2588,6 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.55.tgz#c329cbd434c42164f846b909bd6f85b5537f6240" integrity sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ== -"@types/node@^20.11.19": - version "20.11.19" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.19.tgz#b466de054e9cb5b3831bee38938de64ac7f81195" - integrity sha512-7xMnVEcZFu0DikYjWOlRq7NTPETrm7teqUT2WkQjrTIkEgUyyGdWsj/Zg8bEJt5TNklzbPD1X3fqfsHw3SpapQ== - dependencies: - undici-types "~5.26.4" - "@types/node@^22.13.1": version "22.13.1" resolved "https://registry.yarnpkg.com/@types/node/-/node-22.13.1.tgz#a2a3fefbdeb7ba6b89f40371842162fac0934f33" @@ -3123,14 +2631,6 @@ "@types/scheduler" "*" csstype "^3.0.2" -"@types/readable-stream@^2.3.13": - version "2.3.15" - resolved "https://registry.yarnpkg.com/@types/readable-stream/-/readable-stream-2.3.15.tgz#3d79c9ceb1b6a57d5f6e6976f489b9b5384321ae" - integrity sha512-oM5JSKQCcICF1wvGgmecmHldZ48OZamtMxcGGVICOJA8o8cahXC1zEVAif8iwoc5j8etxFaRFnf095+CDsuoFQ== - dependencies: - "@types/node" "*" - safe-buffer "~5.1.1" - "@types/scheduler@*": version "0.16.8" resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.8.tgz#ce5ace04cfeabe7ef87c0091e50752e36707deff" @@ -3394,16 +2894,16 @@ resolved "https://registry.yarnpkg.com/@vanilla-extract/sprinkles/-/sprinkles-1.6.3.tgz#733968d653cc2395538b5c29f04dcdb0a2ca15c5" integrity sha512-oCHlQeYOBIJIA2yWy2GnY5wE2A7hGHDyJplJo4lb+KEIBcJWRnDJDg8ywDwQS5VfWJrBBO3drzYZPFpWQjAMiQ== -"@vitejs/plugin-react@^4.2.1": - version "4.2.1" - resolved "https://registry.yarnpkg.com/@vitejs/plugin-react/-/plugin-react-4.2.1.tgz#744d8e4fcb120fc3dbaa471dadd3483f5a304bb9" - integrity sha512-oojO9IDc4nCUUi8qIR11KoQm0XFFLIwsRBwHRR4d/88IWghn1y6ckz/bJ8GHDCsYEJee8mDzqtJxh15/cisJNQ== +"@vitejs/plugin-react@^4.3.4": + version "4.3.4" + resolved "https://registry.yarnpkg.com/@vitejs/plugin-react/-/plugin-react-4.3.4.tgz#c64be10b54c4640135a5b28a2432330e88ad7c20" + integrity sha512-SCCPBJtYLdE8PX/7ZQAs1QAZ8Jqwih+0VBLum1EGqmCCQal+MIUqLCzj3ZUy8ufbC0cAM4LRlSTm7IQJwWT4ug== dependencies: - "@babel/core" "^7.23.5" - "@babel/plugin-transform-react-jsx-self" "^7.23.3" - "@babel/plugin-transform-react-jsx-source" "^7.23.3" + "@babel/core" "^7.26.0" + "@babel/plugin-transform-react-jsx-self" "^7.25.9" + "@babel/plugin-transform-react-jsx-source" "^7.25.9" "@types/babel__core" "^7.20.5" - react-refresh "^0.14.0" + react-refresh "^0.14.2" "@vitest/expect@3.0.5": version "3.0.5" @@ -3760,11 +3260,6 @@ abitype@0.9.8: resolved "https://registry.yarnpkg.com/abitype/-/abitype-0.9.8.tgz#1f120b6b717459deafd213dfbf3a3dd1bf10ae8c" integrity sha512-puLifILdm+8sjyss4S+fsUN09obiT1g2YW6CtcQF+QDzxR0euzgEB29MZujC6zMk2a6SVmtttq1fc6+YFA7WYQ== -abitype@1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/abitype/-/abitype-1.0.4.tgz#a817ff44860e8a84e9a37ed22aa9b738dbb51dba" - integrity sha512-UivtYZOGJGE8rsrM/N5vdRkUpqEZVmuTumfTuolm7m/6O09wprd958rx8kUBwVAAAhQDveGAgD0GJdBuR8s6tw== - abitype@1.0.8, abitype@^1.0.0, abitype@^1.0.6: version "1.0.8" resolved "https://registry.yarnpkg.com/abitype/-/abitype-1.0.8.tgz#3554f28b2e9d6e9f35eb59878193eabd1b9f46ba" @@ -3782,12 +3277,7 @@ acorn-jsx@^5.3.2: resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== -acorn-walk@^8.1.1: - version "8.3.2" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.2.tgz#7703af9415f1b6db9315d6895503862e231d34aa" - integrity sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A== - -acorn@^8.11.3, acorn@^8.4.1, acorn@^8.9.0: +acorn@^8.11.3, acorn@^8.9.0: version "8.11.3" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== @@ -3827,15 +3317,15 @@ ajv@^6.12.4: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ajv@^8.12.0: - version "8.12.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1" - integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== +ajv@^8.17.1: + version "8.17.1" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.17.1.tgz#37d9a5c776af6bc92d7f4f9510eba4c0a60d11a6" + integrity sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g== dependencies: - fast-deep-equal "^3.1.1" + fast-deep-equal "^3.1.3" + fast-uri "^3.0.1" json-schema-traverse "^1.0.0" require-from-string "^2.0.2" - uri-js "^4.2.2" ansi-align@^3.0.0: version "3.0.1" @@ -3910,16 +3400,6 @@ anymatch@^3.1.3, anymatch@~3.1.2: normalize-path "^3.0.0" picomatch "^2.0.4" -arg@^4.1.0: - version "4.1.3" - resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" - integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== - -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@^1.0.7: version "1.0.10" resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" @@ -4133,18 +3613,6 @@ atomic-sleep@^1.0.0: resolved "https://registry.yarnpkg.com/atomic-sleep/-/atomic-sleep-1.0.0.tgz#eb85b77a601fc932cfe432c5acd364a9e2c9075b" integrity sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ== -autoprefixer@^10.4.17: - version "10.4.17" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.17.tgz#35cd5695cbbe82f536a50fa025d561b01fdec8be" - integrity sha512-/cpVNRLSfhOtcGflT13P2794gVSgmPgTR+erw5ifnMLZb0UnSlkK4tquLmkd3BhA+nLo5tX8Cu0upUsGKvKbmg== - dependencies: - browserslist "^4.22.2" - caniuse-lite "^1.0.30001578" - fraction.js "^4.3.7" - normalize-range "^0.1.2" - picocolors "^1.0.0" - postcss-value-parser "^4.2.0" - autoprefixer@^10.4.20: version "10.4.20" resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.20.tgz#5caec14d43976ef42e32dcb4bd62878e96be5b3b" @@ -4213,21 +3681,6 @@ better-path-resolve@1.0.0: dependencies: is-windows "^1.0.0" -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-crypto-utils@^3.2.2: - version "3.3.0" - resolved "https://registry.yarnpkg.com/bigint-crypto-utils/-/bigint-crypto-utils-3.3.0.tgz#72ad00ae91062cf07f2b1def9594006c279c1d77" - integrity sha512-jOTSb+drvEDxEq6OuUybOAv/xxoh3cuYRUIPyu8sSHQNKM303UQ2R1DAo45o1AkcIXw6fzbaFI1+xGGdaXs2lg== - -bignumber.js@^9.0.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== - binary-extensions@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" @@ -4238,11 +3691,6 @@ blakejs@^1.1.0: resolved "https://registry.yarnpkg.com/blakejs/-/blakejs-1.2.1.tgz#5057e4206eadb4a97f7c0b6e197a505042fc3814" integrity sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ== -bn.js@4.11.6: - version "4.11.6" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.6.tgz#53344adb14617a13f6e8dd2ce28905d1c0ba3215" - integrity sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA== - bn.js@^4.0.0, bn.js@^4.11.0, bn.js@^4.11.8, bn.js@^4.11.9, bn.js@^4.12.0: version "4.12.0" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" @@ -4323,16 +3771,6 @@ browserify-aes@^1.2.0: inherits "^2.0.1" safe-buffer "^5.0.1" -browserslist@^4.22.2: - version "4.22.3" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.3.tgz#299d11b7e947a6b843981392721169e27d60c5a6" - integrity sha512-UAp55yfwNv0klWNapjs/ktHoguxuQNGnOzxYmfnXIS+8AsRDZkSDxg7R1AX3GKzn078SBI5dzwzj/Yx0Or0e3A== - dependencies: - caniuse-lite "^1.0.30001580" - electron-to-chromium "^1.4.648" - node-releases "^2.0.14" - update-browserslist-db "^1.0.13" - browserslist@^4.23.3, browserslist@^4.24.0: version "4.24.4" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.24.4.tgz#c6b2865a3f08bcb860a0e827389003b9fe686e4b" @@ -4461,7 +3899,7 @@ camelcase@^6.0.0, camelcase@^6.2.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== -caniuse-lite@^1.0.30001406, caniuse-lite@^1.0.30001578, caniuse-lite@^1.0.30001580: +caniuse-lite@^1.0.30001406: version "1.0.30001583" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001583.tgz#abb2970cc370801dc7e27bf290509dc132cfa390" integrity sha512-acWTYaha8xfhA/Du/z4sNZjHUWjkiuoAi2LM+T/aL+kemKQgPT1xBb/YKjlQ0Qo8gvbHsGNplrEJ+9G3gL7i4Q== @@ -4486,13 +3924,13 @@ caniuse-lite@^1.0.30001646, caniuse-lite@^1.0.30001688: preact "^10.16.0" sha.js "^2.4.11" -cfonts@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/cfonts/-/cfonts-3.2.0.tgz#3c72b79679e48d19c620614d1134326a1f22cdec" - integrity sha512-CFGxRY6aBuOgK85bceCpmMMhuyO6IwcAyyeapB//DtRzm7NbAEsDuuZzBoQxVonz+C2BmZ3swqB/YgcmW+rh3A== +cfonts@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/cfonts/-/cfonts-3.3.0.tgz#53e80fa239c2dc8fb11b9c7c00ede2c8ceedb34c" + integrity sha512-RlVxeEw2FXWI5Bs9LD0/Ef3bsQIc9m6lK/DINN20HIW0Y0YHUO2jjy88cot9YKZITiRTCdWzTfLmTyx47HeSLA== dependencies: supports-color "^8" - window-size "^1.1.1" + window-size "^1" chai@^5.1.2: version "5.1.2" @@ -4505,7 +3943,7 @@ chai@^5.1.2: loupe "^3.1.0" pathval "^2.0.0" -chalk@^2.3.2, chalk@^2.4.2: +chalk@^2.3.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -4547,22 +3985,7 @@ chokidar@3.5.3, chokidar@^3.5.3: optionalDependencies: fsevents "~2.3.2" -chokidar@^3.4.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" - integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== - dependencies: - anymatch "~3.1.2" - braces "~3.0.2" - glob-parent "~5.1.2" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.6.0" - optionalDependencies: - fsevents "~2.3.2" - -chokidar@^4.0.1: +chokidar@^4.0.0, chokidar@^4.0.1: version "4.0.3" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-4.0.3.tgz#7be37a4c03c9aee1ecfe862a4a23b2c70c205d30" integrity sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA== @@ -4594,7 +4017,7 @@ citty@^0.1.5: dependencies: consola "^3.2.3" -classnames@^2.3.0, classnames@^2.3.2, classnames@^2.5.1: +classnames@^2.3.0, classnames@^2.5.1: version "2.5.1" resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.5.1.tgz#ba774c614be0f016da105c858e7159eae8e7687b" integrity sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow== @@ -4616,13 +4039,6 @@ cli-cursor@^5.0.0: dependencies: restore-cursor "^5.0.0" -cli-table@^0.3.11: - version "0.3.11" - resolved "https://registry.yarnpkg.com/cli-table/-/cli-table-0.3.11.tgz#ac69cdecbe81dccdba4889b9a18b7da312a9d3ee" - integrity sha512-IqLQi4lO0nIB4tcdTpN4LCB9FI3uqrJZK7RC515EnhZ6qBaglkIgICb1wjeAqpdoOabm1+SuQtkXIPdYC93jhQ== - dependencies: - colors "1.0.3" - cli-truncate@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-4.0.0.tgz#6cc28a2924fee9e25ce91e973db56c7066e6172a" @@ -4631,23 +4047,22 @@ cli-truncate@^4.0.0: slice-ansi "^5.0.0" string-width "^7.0.0" -clide-js@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/clide-js/-/clide-js-0.2.0.tgz#00c1c9b5c2e84e73f5e349a11a229915e3806ba2" - integrity sha512-ZOGGjH2XFMs1eTfj2uqBcRri00XyoAuuDZ25ym0WOOKd/g6T7m8dSYe72bPq/9aoi2doQ3AOmRdhF0o167AkOw== +clide-js@^0.2.4: + version "0.2.4" + resolved "https://registry.yarnpkg.com/clide-js/-/clide-js-0.2.4.tgz#a3b5e7e7499848d04b3d2ce2787d381cfbcea40e" + integrity sha512-wTXzx2TFz3m5tM3ptboCwdIBcnomOLA5meZ6+fzHZMzUXz3udT0nKX9ewqc6Uc84pmcpPjptt2eBV0MKHqtKDA== dependencies: cliui "^8.0.1" prompts "^2.4.2" yargs-parser "^21.1.1" -clide-plugin-command-menu@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/clide-plugin-command-menu/-/clide-plugin-command-menu-0.1.0.tgz#41dd26ba6cd379b5b706d12e5e5d0d858f8a7ec7" - integrity sha512-E9Pfjnd0/TSVEc9ILcMALm4QaIguwzOV+peOK1fTJhVeRbTwBI0dVNJNCd/qHrQvV/jX3Lx9/A6xKDXTC3zYdg== +clide-plugin-command-menu@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/clide-plugin-command-menu/-/clide-plugin-command-menu-0.1.1.tgz#8bd72856fc3877467573d37d1fda2ce9af967d20" + integrity sha512-/P+dLo7zE7LZk3qSn1WYF3rINODEio3GXJa20nq1eAwwZD3yUsQ1/ZF33Di173XDZnXOduYimAq3d0pRyWvUHQ== dependencies: - cfonts "^3.2.0" + cfonts "^3.3.0" colors "^1.4.0" - tesm-node "^1.3.1" client-only@0.0.1: version "0.0.1" @@ -4755,11 +4170,6 @@ colorette@^2.0.20: resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== -colors@1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b" - integrity sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw== - colors@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" @@ -4785,16 +4195,16 @@ command-exists@^1.2.8: resolved "https://registry.yarnpkg.com/command-exists/-/command-exists-1.2.9.tgz#c50725af3808c8ab0260fd60b01fbfa25b954f69" integrity sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w== -commander@3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/commander/-/commander-3.0.2.tgz#6837c3fb677ad9933d1cfba42dd14d5117d6b39e" - integrity sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow== - commander@^4.0.0: version "4.1.1" resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== +commander@^8.1.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.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" @@ -4858,11 +4268,6 @@ create-hmac@^1.1.4, create-hmac@^1.1.7: safe-buffer "^5.0.1" sha.js "^2.4.8" -create-require@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" - integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== - cross-fetch@^3.1.4, cross-fetch@^3.1.5: version "3.1.8" resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.8.tgz#0327eba65fd68a7d119f8fb2bf9334a1a7956f82" @@ -4997,7 +4402,7 @@ date-fns@^4.1.0: resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-4.1.0.tgz#64b3d83fff5aa80438f5b1a633c2e83b8a1c2d14" integrity sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg== -debug@4, debug@4.3.4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4, debug@~4.3.1, debug@~4.3.2: +debug@4, debug@4.3.4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@~4.3.1, debug@~4.3.2: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== @@ -5142,21 +4547,11 @@ detect-node-es@^1.1.0: resolved "https://registry.yarnpkg.com/detect-node-es/-/detect-node-es-1.1.0.tgz#163acdf643330caa0b4cd7c21e7ee7755d6fa493" integrity sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ== -didyoumean@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/didyoumean/-/didyoumean-1.2.2.tgz#989346ffe9e839b4555ecf5666edea0d3e8ad037" - integrity sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw== - diff@5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== -diff@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" - integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== - diff@^5.1.0: version "5.2.0" resolved "https://registry.yarnpkg.com/diff/-/diff-5.2.0.tgz#26ded047cd1179b78b9537d5ef725503ce1ae531" @@ -5174,11 +4569,6 @@ dir-glob@^3.0.1: dependencies: path-type "^4.0.0" -dlv@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/dlv/-/dlv-1.1.3.tgz#5c198a8a11453596e751494d49874bc7732f2e79" - integrity sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA== - dns-packet@^5.3.1, dns-packet@^5.6.1: version "5.6.1" resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-5.6.1.tgz#ae888ad425a9d1478a0674256ab866de1012cf2f" @@ -5210,6 +4600,11 @@ dotenv@^16.4.5: resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.4.5.tgz#cdd3b3b604cb327e286b4762e13502f717cb099f" integrity sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg== +dotenv@^16.4.7: + version "16.4.7" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.4.7.tgz#0e20c5b82950140aa99be360a8a5f52335f53c26" + integrity sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ== + dunder-proto@^1.0.0, dunder-proto@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a" @@ -5244,11 +4639,6 @@ eciesjs@^0.4.11: "@noble/curves" "^1.6.0" "@noble/hashes" "^1.5.0" -electron-to-chromium@^1.4.648: - version "1.4.656" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.656.tgz#b374fb7cab9b782a5bc967c0ce0e19826186b9c9" - integrity sha512-9AQB5eFTHyR3Gvt2t/NwR0le2jBSUNwCnMbUCejFWHD+so4tH40/dRLgoE+jxlPeWS43XJewyvCv+I8LPMl49Q== - electron-to-chromium@^1.5.73: version "1.5.97" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.97.tgz#5c4a4744c79e7c85b187adf5160264ac130c776f" @@ -5588,35 +4978,6 @@ es-to-primitive@^1.3.0: is-date-object "^1.0.5" is-symbol "^1.0.4" -esbuild@^0.19.3: - 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" - esbuild@^0.24.0, esbuild@^0.24.2: version "0.24.2" resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.24.2.tgz#b5b55bee7de017bff5fb8a4e3e44f2ebe2c3567d" @@ -5850,14 +5211,6 @@ eslint-plugin-react@^7.37.4: string.prototype.matchall "^4.0.12" string.prototype.repeat "^1.0.0" -eslint-plugin-tailwindcss@^3.14.3: - version "3.14.3" - resolved "https://registry.yarnpkg.com/eslint-plugin-tailwindcss/-/eslint-plugin-tailwindcss-3.14.3.tgz#7d845869da1485e7f74226ccbc2c05e278f2a48e" - integrity sha512-1MKT8CrVuqVJleHxb7ICHsF2QwO0G+VJ28athTtlcOkccp0qmwK7nCUa1C9paCZ+VVgQU4fonsjLz/wUxoMHJQ== - dependencies: - fast-glob "^3.2.5" - postcss "^8.4.4" - eslint-plugin-tailwindcss@^3.18.0: version "3.18.0" resolved "https://registry.yarnpkg.com/eslint-plugin-tailwindcss/-/eslint-plugin-tailwindcss-3.18.0.tgz#00b020f6360e616d592c477a9abdc7d18970715d" @@ -6017,13 +5370,6 @@ eth-rpc-errors@^4.0.2, eth-rpc-errors@^4.0.3: dependencies: fast-safe-stringify "^2.0.6" -ethereum-bloom-filters@^1.0.6: - version "1.0.10" - resolved "https://registry.yarnpkg.com/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz#3ca07f4aed698e75bd134584850260246a5fed8a" - integrity sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA== - dependencies: - js-sha3 "^0.8.0" - ethereum-cryptography@0.1.3, ethereum-cryptography@^0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz#8d6143cfc3d74bf79bbd8edecdf29e4ae20dd191" @@ -6055,7 +5401,7 @@ ethereum-cryptography@^1.0.3: "@scure/bip32" "1.1.5" "@scure/bip39" "1.1.1" -ethereum-cryptography@^2.0.0, ethereum-cryptography@^2.1.2: +ethereum-cryptography@^2.0.0: version "2.1.3" resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-2.1.3.tgz#1352270ed3b339fe25af5ceeadcf1b9c8e30768a" integrity sha512-BlwbIL7/P45W8FGW2r7LGuvoEZ+7PWsniMvQ4p5s2xCyw9tmaDlpfsN9HjAucbF+t/qpVHwZUisgfK24TCW8aA== @@ -6099,14 +5445,6 @@ ethers@^6.13.5: tslib "2.7.0" ws "8.17.1" -ethjs-unit@0.1.6: - version "0.1.6" - resolved "https://registry.yarnpkg.com/ethjs-unit/-/ethjs-unit-0.1.6.tgz#c665921e476e87bce2a9d588a6fe0405b2c41699" - integrity sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw== - dependencies: - bn.js "4.11.6" - number-to-bn "1.7.0" - ethjs-util@0.1.6, ethjs-util@^0.1.6: version "0.1.6" resolved "https://registry.yarnpkg.com/ethjs-util/-/ethjs-util-0.1.6.tgz#f308b62f185f9fe6237132fb2a9818866a5cd536" @@ -6190,7 +5528,7 @@ fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== -fast-glob@^3.2.5, fast-glob@^3.2.9, fast-glob@^3.3.0, fast-glob@^3.3.1: +fast-glob@^3.2.5, fast-glob@^3.2.9, fast-glob@^3.3.1: version "3.3.2" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== @@ -6212,7 +5550,7 @@ fast-glob@^3.3.2: merge2 "^1.3.0" micromatch "^4.0.8" -fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: +fast-json-stable-stringify@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== @@ -6227,11 +5565,16 @@ fast-redact@^3.0.0: resolved "https://registry.yarnpkg.com/fast-redact/-/fast-redact-3.3.0.tgz#7c83ce3a7be4898241a46560d51de10f653f7634" integrity sha512-6T5V1QK1u4oF+ATxs1lWUmlEk6P2T9HqJG3e2DnHOdVgZy2rFJBoEnrIedcTXlkAHU/zKC+7KETJ+KGGKwxgMQ== -fast-safe-stringify@^2.0.6, fast-safe-stringify@^2.1.1: +fast-safe-stringify@^2.0.6: version "2.1.1" resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz#c406a83b6e70d9e35ce3b30a81141df30aeba884" integrity sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA== +fast-uri@^3.0.1: + version "3.0.6" + resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-3.0.6.tgz#88f130b77cfaea2378d56bf970dea21257a68748" + integrity sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw== + fastparse@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.2.tgz#91728c5a5942eced8531283c79441ee4122c35a9" @@ -6290,7 +5633,7 @@ find-up@5.0.0, find-up@^5.0.0: locate-path "^6.0.0" path-exists "^4.0.0" -find-up@^2.0.0, find-up@^2.1.0: +find-up@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" integrity sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ== @@ -6368,17 +5711,6 @@ fraction.js@^4.3.7: resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.3.7.tgz#06ca0085157e42fda7f9e726e79fefc4068840f7" integrity sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew== -fs-extra@^0.30.0: - version "0.30.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-0.30.0.tgz#f233ffcc08d4da7d432daa449776989db1df93f0" - integrity sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA== - dependencies: - graceful-fs "^4.1.2" - jsonfile "^2.1.0" - klaw "^1.0.0" - path-is-absolute "^1.0.0" - rimraf "^2.2.8" - fs-extra@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" @@ -6559,7 +5891,7 @@ glob-parent@^6.0.2: dependencies: is-glob "^4.0.3" -glob@10.3.10, glob@^10.3.10, glob@^10.3.7: +glob@10.3.10, glob@^10.3.10: version "10.3.10" resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.10.tgz#0351ebb809fd187fe421ab96af83d3a70715df4b" integrity sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g== @@ -6570,18 +5902,6 @@ glob@10.3.10, glob@^10.3.10, glob@^10.3.7: minipass "^5.0.0 || ^6.0.2 || ^7.0.0" path-scurry "^1.10.1" -glob@7.2.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" - integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - glob@8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" @@ -6593,6 +5913,18 @@ glob@8.1.0: minimatch "^5.0.1" once "^1.3.0" +glob@^11.0.0: + version "11.0.1" + resolved "https://registry.yarnpkg.com/glob/-/glob-11.0.1.tgz#1c3aef9a59d680e611b53dcd24bb8639cef064d9" + integrity sha512-zrQDm8XPnYEKawJScsnM0QzobJxlT/kHOOlRTio8IH/GrmxRE5fjllkzdaHclIuNjUQTJYH2xHNIGfdpJkDJUw== + dependencies: + foreground-child "^3.1.0" + jackspeak "^4.0.1" + minimatch "^10.0.0" + minipass "^7.1.2" + package-json-from-dist "^1.0.0" + path-scurry "^2.0.0" + glob@^7.1.3: version "7.2.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" @@ -6666,7 +5998,7 @@ gopd@^1.2.0: resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== -graceful-fs@^4.1.2, graceful-fs@^4.1.5, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0, graceful-fs@^4.2.4: +graceful-fs@^4.1.2, graceful-fs@^4.1.5, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4: version "4.2.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== @@ -6704,24 +6036,17 @@ h3@^1.10.1, h3@^1.8.2: uncrypto "^0.1.3" unenv "^1.9.0" -hardhat@^2.20.1: - version "2.20.1" - resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.20.1.tgz#3ad8f2b003a96c9ce80a55fec3575580ff2ddcd4" - integrity sha512-q75xDQiQtCZcTMBwjTovrXEU5ECr49baxr4/OBkIu/ULTPzlB20yk1dRWNmD2IFbAeAeXggaWvQAdpiScaHtPw== +hardhat@^2.22.18: + version "2.22.18" + resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.22.18.tgz#e299a26a67b521bbb225370eb47a032d4e097e3a" + integrity sha512-2+kUz39gvMo56s75cfLBhiFedkQf+gXdrwCcz4R/5wW0oBdwiyfj2q9BIkMoaA0WIGYYMU2I1Cc4ucTunhfjzw== dependencies: "@ethersproject/abi" "^5.1.2" "@metamask/eth-sig-util" "^4.0.0" - "@nomicfoundation/ethereumjs-block" "5.0.4" - "@nomicfoundation/ethereumjs-blockchain" "7.0.4" + "@nomicfoundation/edr" "^0.7.0" "@nomicfoundation/ethereumjs-common" "4.0.4" - "@nomicfoundation/ethereumjs-evm" "2.0.4" - "@nomicfoundation/ethereumjs-rlp" "5.0.4" - "@nomicfoundation/ethereumjs-statemanager" "2.0.4" - "@nomicfoundation/ethereumjs-trie" "6.0.4" "@nomicfoundation/ethereumjs-tx" "5.0.4" "@nomicfoundation/ethereumjs-util" "9.0.4" - "@nomicfoundation/ethereumjs-verkle" "0.0.2" - "@nomicfoundation/ethereumjs-vm" "7.0.4" "@nomicfoundation/solidity-analyzer" "^0.1.0" "@sentry/node" "^5.18.1" "@types/bn.js" "^5.1.0" @@ -6730,31 +6055,32 @@ hardhat@^2.20.1: aggregate-error "^3.0.0" ansi-escapes "^4.3.0" boxen "^5.1.2" - chalk "^2.4.2" - chokidar "^3.4.0" + chokidar "^4.0.0" ci-info "^2.0.0" debug "^4.1.1" enquirer "^2.3.0" env-paths "^2.2.0" ethereum-cryptography "^1.0.3" ethereumjs-abi "^0.6.8" - find-up "^2.1.0" + find-up "^5.0.0" fp-ts "1.19.3" fs-extra "^7.0.1" - glob "7.2.0" immutable "^4.0.0-rc.12" io-ts "1.10.4" + json-stream-stringify "^3.1.4" keccak "^3.0.2" lodash "^4.17.11" mnemonist "^0.38.0" mocha "^10.0.0" p-map "^4.0.0" + picocolors "^1.1.0" raw-body "^2.4.1" resolve "1.17.0" semver "^6.3.0" - solc "0.7.3" + solc "0.8.26" source-map-support "^0.5.13" stacktrace-parser "^0.1.10" + tinyglobby "^0.2.6" tsort "0.0.1" undici "^5.14.0" uuid "^8.3.2" @@ -7466,11 +6792,6 @@ isows@1.0.3: resolved "https://registry.yarnpkg.com/isows/-/isows-1.0.3.tgz#93c1cf0575daf56e7120bab5c8c448b0809d0d74" integrity sha512-2cKei4vlmg2cxEjm3wVSqn8pcoRF/LX/wpifuuNquFO4SQmPwarClT+SUCA2lt+l581tTeZIPIZuIDo2jWN1fg== -isows@1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/isows/-/isows-1.0.4.tgz#810cd0d90cc4995c26395d2aa4cfa4037ebdf061" - integrity sha512-hEzjY+x9u9hPmBom9IIAqdJCwNLax+xrPb51vEPpERoFlIxgmZcHzsT5jKG06nvInKOBGvReAVz80Umed5CczQ== - isows@1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/isows/-/isows-1.0.6.tgz#0da29d706fa51551c663c627ace42769850f86e7" @@ -7508,7 +6829,14 @@ jackspeak@^2.3.5: optionalDependencies: "@pkgjs/parseargs" "^0.11.0" -jiti@^1.19.1, jiti@^1.21.0: +jackspeak@^4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-4.0.3.tgz#8a21082b8c019e7a0a8187ad8b736609bc85ab18" + integrity sha512-oSwM7q8PTHQWuZAlp995iPpPJ4Vkl7qT0ZRD+9duL9j2oBy6KcTfyxc8mEuHJYC+z/kbps80aJLkaNzTOrf/kw== + dependencies: + "@isaacs/cliui" "^8.0.2" + +jiti@^1.21.0: version "1.21.0" resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.21.0.tgz#7c97f8fe045724e136a397f7340475244156105d" integrity sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q== @@ -7534,12 +6862,7 @@ js-base64@^3.7.2: resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-3.7.6.tgz#6ccb5d761b48381fd819f9ce04998866dbcbbc99" integrity sha512-NPrWuHFxFUknr1KqJRDgUQPexQF0uIJWjeT+2KjEePhitQxQEx5EJBG1lVn5/hc8aLycTpXrDOgPQ6Zq+EDiTA== -js-sdsl@^4.1.4: - version "4.4.2" - resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.4.2.tgz#2e3c031b1f47d3aca8b775532e3ebb0818e7f847" - integrity sha512-dwXFwByc/ajSV6m5bcKAPwe4yDDF6D614pxmIi5odytzxRlwqF6nwoiCek80Ixc7Cvma5awClxrzFtxCQvcM8w== - -js-sha3@0.8.0, 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== @@ -7564,11 +6887,6 @@ js-yaml@^3.13.1, js-yaml@^3.6.1: argparse "^1.0.7" esprima "^4.0.0" -jsesc@^2.5.1: - version "2.5.2" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" - integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== - jsesc@^3.0.2: version "3.1.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.1.0.tgz#74d335a234f67ed19907fdadfac7ccf9d409825d" @@ -7617,6 +6935,11 @@ json-stable-stringify-without-jsonify@^1.0.1: resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== +json-stream-stringify@^3.1.4: + version "3.1.6" + resolved "https://registry.yarnpkg.com/json-stream-stringify/-/json-stream-stringify-3.1.6.tgz#ebe32193876fb99d4ec9f612389a8d8e2b5d54d4" + integrity sha512-x7fpwxOkbhFCaJDJ8vb1fBY3DdSa4AlITaz+HHILQJzdPMnHEFjxPwVUi1ALIbcIxDE0PNe/0i7frnY8QnBQog== + json5@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" @@ -7634,13 +6957,6 @@ jsonc-parser@^3.2.0: resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.2.1.tgz#031904571ccf929d7670ee8c547545081cb37f1a" integrity sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA== -jsonfile@^2.1.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" - integrity sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw== - optionalDependencies: - graceful-fs "^4.1.6" - jsonfile@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" @@ -7691,13 +7007,6 @@ kind-of@^3.0.2: dependencies: is-buffer "^1.1.5" -klaw@^1.0.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439" - integrity sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw== - optionalDependencies: - graceful-fs "^4.1.9" - kleur@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" @@ -7723,16 +7032,6 @@ levn@^0.4.1: prelude-ls "^1.2.1" type-check "~0.4.0" -lilconfig@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.1.0.tgz#78e23ac89ebb7e1bfbf25b18043de756548e7f52" - integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ== - -lilconfig@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-3.0.0.tgz#f8067feb033b5b74dab4602a5f5029420be749bc" - integrity sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g== - lilconfig@^3.1.1: version "3.1.3" resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-3.1.3.tgz#a1bcfd6257f9585bf5ae14ceeebb7b559025e4c4" @@ -8003,7 +7302,7 @@ loupe@^3.1.0, loupe@^3.1.2: resolved "https://registry.yarnpkg.com/loupe/-/loupe-3.1.3.tgz#042a8f7986d77f3d0f98ef7990a2b2fef18b0fd2" integrity sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug== -lru-cache@^10.0.0, lru-cache@^10.0.1, lru-cache@^10.0.2, lru-cache@^10.1.0, lru-cache@^10.2.0, "lru-cache@^9.1.1 || ^10.0.0": +lru-cache@^10.0.2, lru-cache@^10.1.0, "lru-cache@^9.1.1 || ^10.0.0": version "10.2.0" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.0.tgz#0bd445ca57363465900f4d1f9bd8db343a4d95c3" integrity sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q== @@ -8013,7 +7312,7 @@ lru-cache@^10.4.3: resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.4.3.tgz#410fc8a17b70e598013df257c2446b7f3383f119" integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ== -lru-cache@^11.0.2: +lru-cache@^11.0.0, lru-cache@^11.0.2: version "11.0.2" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-11.0.2.tgz#fbd8e7cf8211f5e7e5d91905c415a3f55755ca39" integrity sha512-123qHRfJBmo2jXDbo/a5YOQrJoHF/GNQTLzQ5+IdK5pWpceK17yRc6ozlWd25FxvGKQbIUs91fDFkXmDHTKcyA== @@ -8049,11 +7348,6 @@ magic-string@^0.30.17: dependencies: "@jridgewell/sourcemap-codec" "^1.5.0" -make-error@^1.1.1: - version "1.3.6" - resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" - integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== - markdown-it@^14.1.0: version "14.1.0" resolved "https://registry.yarnpkg.com/markdown-it/-/markdown-it-14.1.0.tgz#3c3c5992883c633db4714ccb4d7b5935d98b7d45" @@ -8107,16 +7401,14 @@ merge2@^1.3.0, merge2@^1.4.1: resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== -merkletreejs@^0.3.11: - version "0.3.11" - resolved "https://registry.yarnpkg.com/merkletreejs/-/merkletreejs-0.3.11.tgz#e0de05c3ca1fd368de05a12cb8efb954ef6fc04f" - integrity sha512-LJKTl4iVNTndhL+3Uz/tfkjD0klIWsHlUzgtuNnNrsf7bAlXR30m+xYB7lHr5Z/l6e/yAIsr26Dabx6Buo4VGQ== +merkletreejs@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/merkletreejs/-/merkletreejs-0.4.1.tgz#a77a0c3d16adec71a09ef7e5b7e055dde29d30e1" + integrity sha512-W2VSHeGTdAnWtedee+pgGn7SHvncMdINnMeHAaXrfarSaMNLff/pm7RCr/QXYxN6XzJFgJZY+28ejO0lAosW4A== dependencies: - bignumber.js "^9.0.1" buffer-reverse "^1.0.1" crypto-js "^4.2.0" treeify "^1.1.0" - web3-utils "^1.3.4" mersenne-twister@^1.1.0: version "1.1.0" @@ -8195,7 +7487,14 @@ minimatch@9.0.3, minimatch@^9.0.1: dependencies: brace-expansion "^2.0.1" -minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: +minimatch@^10.0.0: + version "10.0.1" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-10.0.1.tgz#ce0521856b453c86e25f2c4c0d03e6ff7ddc440b" + integrity sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ== + dependencies: + brace-expansion "^2.0.1" + +minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== @@ -8226,6 +7525,11 @@ minimist@^1.2.0, minimist@^1.2.6: resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.4.tgz#dbce03740f50a4786ba994c1fb908844d27b038c" integrity sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ== +minipass@^7.1.2: + version "7.1.2" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.2.tgz#93a9626ce5e5e66bd4db86849e7515e92340a707" + integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== + mipd@0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/mipd/-/mipd-0.0.7.tgz#bb5559e21fa18dc3d9fe1c08902ef14b7ce32fd9" @@ -8404,10 +7708,10 @@ node-fetch-native@^1.4.0, node-fetch-native@^1.4.1, node-fetch-native@^1.6.1: resolved "https://registry.yarnpkg.com/node-fetch-native/-/node-fetch-native-1.6.1.tgz#f95c74917d3cebc794cdae0cd2a9c7594aad0cb4" integrity sha512-bW9T/uJDPAJB2YNYEpWzE54U5O3MQidXsOyTfnbKYtTtFexRvGzb1waphBN4ZwP6EcIvYYEOwW0b72BpAqydTw== -node-fetch-native@^1.6.2: - version "1.6.2" - resolved "https://registry.yarnpkg.com/node-fetch-native/-/node-fetch-native-1.6.2.tgz#f439000d972eb0c8a741b65dcda412322955e1c6" - integrity sha512-69mtXOFZ6hSkYiXAVB5SqaRvrbITC/NPyqv7yuu/qw0nmgPyYbIMYYNIDhNtwPrzk0ptrimrLz/hhjvm4w5Z+w== +node-fetch-native@^1.6.6: + version "1.6.6" + resolved "https://registry.yarnpkg.com/node-fetch-native/-/node-fetch-native-1.6.6.tgz#ae1d0e537af35c2c0b0de81cbff37eedd410aa37" + integrity sha512-8Mc2HhqPdlIfedsuZoc3yioPuzp6b+L5jRCRY1QzuWZh2EGJVQrGppC6V6cF0bLdbW0+O2YpqCA25aF/1lvipQ== node-fetch@^2.6.12: version "2.7.0" @@ -8426,11 +7730,6 @@ node-gyp-build@^4.2.0, node-gyp-build@^4.3.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-releases@^2.0.14: - version "2.0.14" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b" - integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw== - node-releases@^2.0.19: version "2.0.19" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.19.tgz#9e445a52950951ec4d177d843af370b411caf314" @@ -8453,14 +7752,6 @@ npm-run-path@^5.1.0: dependencies: path-key "^4.0.0" -number-to-bn@1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/number-to-bn/-/number-to-bn-1.7.0.tgz#bb3623592f7e5f9e0030b1977bd41a0c53fe1ea0" - integrity sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig== - dependencies: - bn.js "4.11.6" - strip-hex-prefix "1.0.0" - obj-multiplex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/obj-multiplex/-/obj-multiplex-1.0.0.tgz#2f2ae6bfd4ae11befe742ea9ea5b36636eabffc1" @@ -8475,11 +7766,6 @@ object-assign@^4.0.1, object-assign@^4.1.1: resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== -object-hash@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-3.0.0.tgz#73f97f753e7baffc0e2cc9d6e079079744ac82e9" - integrity sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw== - object-inspect@^1.13.1, object-inspect@^1.9.0: version "1.13.1" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" @@ -8771,6 +8057,11 @@ p-try@^2.0.0: resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== +package-json-from-dist@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz#4f1471a010827a86f94cfd9b0727e36d267de505" + integrity sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw== + package-manager-detector@^0.2.0: version "0.2.9" resolved "https://registry.yarnpkg.com/package-manager-detector/-/package-manager-detector-0.2.9.tgz#20990785afa69d38b4520ccc83b34e9f69cb970f" @@ -8834,6 +8125,14 @@ path-scurry@^1.10.1: lru-cache "^9.1.1 || ^10.0.0" minipass "^5.0.0 || ^6.0.2 || ^7.0.0" +path-scurry@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-2.0.0.tgz#9f052289f23ad8bf9397a2a0425e7b8615c58580" + integrity sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg== + dependencies: + lru-cache "^11.0.0" + minipass "^7.1.2" + path-to-regexp@^6.2.1: version "6.2.1" resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-6.2.1.tgz#d54934d6798eb9e5ef14e7af7962c945906918e5" @@ -8890,11 +8189,6 @@ picomatch@^4.0.2: resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.2.tgz#77c742931e8f3b8820946c76cd0c1f13730d1dab" integrity sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg== -pify@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" - integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== - pify@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" @@ -8977,30 +8271,13 @@ possible-typed-array-names@^1.0.0: resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz#93e3582bc0e5426586d9d07b79ee40fc841de4ae" integrity sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg== -postcss-import@^15.1.0: - version "15.1.0" - resolved "https://registry.yarnpkg.com/postcss-import/-/postcss-import-15.1.0.tgz#41c64ed8cc0e23735a9698b3249ffdbf704adc70" - integrity sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew== - dependencies: - postcss-value-parser "^4.0.0" - read-cache "^1.0.0" - resolve "^1.1.7" - -postcss-js@^4, postcss-js@^4.0.1: +postcss-js@^4: version "4.0.1" resolved "https://registry.yarnpkg.com/postcss-js/-/postcss-js-4.0.1.tgz#61598186f3703bab052f1c4f7d805f3991bee9d2" integrity sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw== dependencies: camelcase-css "^2.0.1" -postcss-load-config@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-4.0.2.tgz#7159dcf626118d33e299f485d6afe4aff7c4a3e3" - integrity sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ== - dependencies: - lilconfig "^3.0.0" - yaml "^2.3.4" - postcss-load-config@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-6.0.1.tgz#6fd7dcd8ae89badcf1b2d644489cbabf83aa8096" @@ -9008,13 +8285,6 @@ postcss-load-config@^6.0.1: dependencies: lilconfig "^3.1.1" -postcss-nested@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/postcss-nested/-/postcss-nested-6.0.1.tgz#f83dc9846ca16d2f4fa864f16e9d9f7d0961662c" - integrity sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ== - dependencies: - postcss-selector-parser "^6.0.11" - postcss-selector-parser@6.0.10: version "6.0.10" resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz#79b61e2c0d1bfc2602d549e11d0876256f8df88d" @@ -9023,15 +8293,7 @@ postcss-selector-parser@6.0.10: cssesc "^3.0.0" util-deprecate "^1.0.2" -postcss-selector-parser@^6.0.11: - version "6.0.15" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.15.tgz#11cc2b21eebc0b99ea374ffb9887174855a01535" - integrity sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw== - dependencies: - cssesc "^3.0.0" - util-deprecate "^1.0.2" - -postcss-value-parser@^4.0.0, postcss-value-parser@^4.2.0: +postcss-value-parser@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== @@ -9045,7 +8307,7 @@ postcss@8.4.14: picocolors "^1.0.0" source-map-js "^1.0.2" -postcss@^8.4.23, postcss@^8.4.4: +postcss@^8.4.4: version "8.4.33" resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.33.tgz#1378e859c9f69bf6f638b990a0212f43e2aaa742" integrity sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg== @@ -9054,15 +8316,6 @@ postcss@^8.4.23, postcss@^8.4.4: picocolors "^1.0.0" source-map-js "^1.0.2" -postcss@^8.4.35: - version "8.4.35" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.35.tgz#60997775689ce09011edf083a549cea44aabe2f7" - integrity sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA== - dependencies: - nanoid "^3.3.7" - picocolors "^1.0.0" - source-map-js "^1.0.2" - postcss@^8.5.1: version "8.5.1" resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.5.1.tgz#e2272a1f8a807fafa413218245630b5db10a3214" @@ -9272,10 +8525,10 @@ react-loading-skeleton@^3.5.0: resolved "https://registry.yarnpkg.com/react-loading-skeleton/-/react-loading-skeleton-3.5.0.tgz#da2090355b4dedcad5c53cb3f0ed364e3a76d6ca" integrity sha512-gxxSyLbrEAdXTKgfbpBEFZCO/P153DnqSCQau2+o6lNy1jgMRr2MmRmOzMmyrwSaSYLRB8g7b0waYPmUjz7IhQ== -react-refresh@^0.14.0: - version "0.14.0" - resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.14.0.tgz#4e02825378a5f227079554d4284889354e5f553e" - integrity sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ== +react-refresh@^0.14.2: + version "0.14.2" + resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.14.2.tgz#3833da01ce32da470f1f936b9d477da5c7028bf9" + integrity sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA== react-remove-scroll-bar@^2.3.7: version "2.3.8" @@ -9328,13 +8581,6 @@ react@18.2.0, react@^18.2.0: dependencies: loose-envify "^1.1.0" -read-cache@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/read-cache/-/read-cache-1.0.0.tgz#e664ef31161166c9751cdbe8dbcf86b5fb58f774" - integrity sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA== - dependencies: - pify "^2.3.0" - read-yaml-file@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/read-yaml-file/-/read-yaml-file-1.1.0.tgz#9362bbcbdc77007cc8ea4519fe1c0b821a7ce0d8" @@ -9464,7 +8710,7 @@ require-directory@^2.1.1: resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== -require-from-string@^2.0.0, require-from-string@^2.0.2: +require-from-string@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== @@ -9501,7 +8747,7 @@ resolve@1.17.0: dependencies: path-parse "^1.0.6" -resolve@^1.1.7, resolve@^1.22.2, resolve@^1.22.4: +resolve@^1.22.4: version "1.22.8" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== @@ -9542,13 +8788,6 @@ rfdc@^1.4.1: resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.4.1.tgz#778f76c4fb731d93414e8f925fbecf64cce7f6ca" integrity sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA== -rimraf@^2.2.8: - version "2.7.1" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" - integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== - dependencies: - glob "^7.1.3" - rimraf@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" @@ -9556,12 +8795,13 @@ rimraf@^3.0.2: dependencies: glob "^7.1.3" -rimraf@^5.0.5: - version "5.0.5" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-5.0.5.tgz#9be65d2d6e683447d2e9013da2bf451139a61ccf" - integrity sha512-CqDakW+hMe/Bz202FPEymy68P+G50RfMQK+Qo5YUqc9SPipvbGjCGKd0RSKEelbsfQuw3g5NZDSrlZZAJurH1A== +rimraf@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-6.0.1.tgz#ffb8ad8844dd60332ab15f52bc104bc3ed71ea4e" + integrity sha512-9dkvaxAsk/xNXSJzMgFqqMCuFgt2+KsOFek3TMLfo8NCPfWpBmqwyNn5Y+NX56QUYfCtsyhF3ayiboEoUmJk/A== dependencies: - glob "^10.3.7" + glob "^11.0.0" + package-json-from-dist "^1.0.0" ripemd160@^2.0.0, ripemd160@^2.0.1: version "2.0.2" @@ -9578,28 +8818,6 @@ rlp@^2.2.3: dependencies: bn.js "^5.2.0" -rollup@^4.2.0: - version "4.9.6" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.9.6.tgz#4515facb0318ecca254a2ee1315e22e09efc50a0" - integrity sha512-05lzkCS2uASX0CiLFybYfVkwNbKZG5NFQ6Go0VWyogFTXXbR039UVsegViTntkk4OglHBdF54ccApXRRuXRbsg== - dependencies: - "@types/estree" "1.0.5" - optionalDependencies: - "@rollup/rollup-android-arm-eabi" "4.9.6" - "@rollup/rollup-android-arm64" "4.9.6" - "@rollup/rollup-darwin-arm64" "4.9.6" - "@rollup/rollup-darwin-x64" "4.9.6" - "@rollup/rollup-linux-arm-gnueabihf" "4.9.6" - "@rollup/rollup-linux-arm64-gnu" "4.9.6" - "@rollup/rollup-linux-arm64-musl" "4.9.6" - "@rollup/rollup-linux-riscv64-gnu" "4.9.6" - "@rollup/rollup-linux-x64-gnu" "4.9.6" - "@rollup/rollup-linux-x64-musl" "4.9.6" - "@rollup/rollup-win32-arm64-msvc" "4.9.6" - "@rollup/rollup-win32-ia32-msvc" "4.9.6" - "@rollup/rollup-win32-x64-msvc" "4.9.6" - fsevents "~2.3.2" - rollup@^4.24.0, rollup@^4.30.1: version "4.34.6" resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.34.6.tgz#a07e4d2621759e29034d909655e7a32eee9195c9" @@ -9635,18 +8853,6 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" -rust-verkle-wasm@^0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/rust-verkle-wasm/-/rust-verkle-wasm-0.0.1.tgz#fd8396a7060d8ee8ea10da50ab6e862948095a74" - integrity sha512-BN6fiTsxcd2dCECz/cHtGTt9cdLJR925nh7iAuRcj8ymKw7OOaPmCneQZ7JePOJ/ia27TjEL91VdOi88Yf+mcA== - -rustbn-wasm@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/rustbn-wasm/-/rustbn-wasm-0.2.0.tgz#0407521fb55ae69eeb4968d01885d63efd1c4ff9" - integrity sha512-FThvYFNTqrEKGqXuseeg0zR7yROh/6U1617mCHF68OVqrN1tNKRN7Tdwy4WayPVsCmmK+eMxtIZX1qL6JxTkMg== - dependencies: - "@scure/base" "^1.1.1" - safe-array-concat@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.0.tgz#8d0cae9cb806d6d1c06e08ab13d847293ebe0692" @@ -9997,18 +9203,16 @@ socket.io-parser@~4.2.4: "@socket.io/component-emitter" "~3.1.0" debug "~4.3.1" -solc@0.7.3: - version "0.7.3" - resolved "https://registry.yarnpkg.com/solc/-/solc-0.7.3.tgz#04646961bd867a744f63d2b4e3c0701ffdc7d78a" - integrity sha512-GAsWNAjGzIDg7VxzP6mPjdurby3IkGCjQcM8GFYZT6RyaoUZKmMU6Y7YwG+tFGhv7dwZ8rmR4iwFDrrD99JwqA== +solc@0.8.26: + version "0.8.26" + resolved "https://registry.yarnpkg.com/solc/-/solc-0.8.26.tgz#afc78078953f6ab3e727c338a2fefcd80dd5b01a" + integrity sha512-yiPQNVf5rBFHwN6SIf3TUUvVAFKcQqmSUFeq+fb6pNRCo0ZCgpYOZDi3BVoezCPIAcKrVYd/qXlBLUP9wVrZ9g== dependencies: command-exists "^1.2.8" - commander "3.0.2" + commander "^8.1.0" follow-redirects "^1.12.1" - fs-extra "^0.30.0" js-sha3 "0.8.0" memorystream "^0.3.1" - require-from-string "^2.0.0" semver "^5.5.0" tmp "0.0.33" @@ -10354,7 +9558,7 @@ styled-jsx@5.1.0: dependencies: client-only "0.0.1" -sucrase@^3.32.0, sucrase@^3.35.0: +sucrase@^3.35.0: version "3.35.0" resolved "https://registry.yarnpkg.com/sucrase/-/sucrase-3.35.0.tgz#57f17a3d7e19b36d8995f06679d121be914ae263" integrity sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA== @@ -10403,34 +9607,6 @@ system-architecture@^0.1.0: resolved "https://registry.yarnpkg.com/system-architecture/-/system-architecture-0.1.0.tgz#71012b3ac141427d97c67c56bc7921af6bff122d" integrity sha512-ulAk51I9UVUyJgxlv9M6lFot2WP3e7t8Kz9+IS6D4rVba1tR9kON+Ey69f+1R4Q8cd45Lod6a4IcJIxnzGc/zA== -tailwindcss@^3.4.1: - version "3.4.1" - resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.4.1.tgz#f512ca5d1dd4c9503c7d3d28a968f1ad8f5c839d" - integrity sha512-qAYmXRfk3ENzuPBakNK0SRrUDipP8NQnEY6772uDhflcQz5EhRdD7JNZxyrFHVQNCwULPBn6FNPp9brpO7ctcA== - dependencies: - "@alloc/quick-lru" "^5.2.0" - arg "^5.0.2" - chokidar "^3.5.3" - didyoumean "^1.2.2" - dlv "^1.1.3" - fast-glob "^3.3.0" - glob-parent "^6.0.2" - is-glob "^4.0.3" - jiti "^1.19.1" - lilconfig "^2.1.0" - micromatch "^4.0.5" - normalize-path "^3.0.0" - object-hash "^3.0.0" - picocolors "^1.0.0" - postcss "^8.4.23" - postcss-import "^15.1.0" - postcss-js "^4.0.1" - postcss-load-config "^4.0.1" - postcss-nested "^6.0.1" - postcss-selector-parser "^6.0.11" - resolve "^1.22.2" - sucrase "^3.32.0" - tailwindcss@^4.0.6: version "4.0.6" resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-4.0.6.tgz#c033bfba94d6e3bf70650a2f9fe949f39d3bb191" @@ -10446,11 +9622,6 @@ term-size@^2.1.0: resolved "https://registry.yarnpkg.com/term-size/-/term-size-2.2.1.tgz#2a6a54840432c2fb6320fea0f415531e90189f54" integrity sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg== -tesm-node@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/tesm-node/-/tesm-node-1.3.1.tgz#306da50594ef3f1eef64f2bb55110047c583bb62" - integrity sha512-zyNa8mIJoTN8S61XSr9oYJaZft7/hAE7tPYu2Nu4FALJAexjgE4apD0NUp1x/8Bn4PmX16r0aHrwipUG82+Q1w== - text-table@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" @@ -10487,7 +9658,7 @@ tinyexec@^0.3.1, tinyexec@^0.3.2: resolved "https://registry.yarnpkg.com/tinyexec/-/tinyexec-0.3.2.tgz#941794e657a85e496577995c6eef66f53f42b3d2" integrity sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA== -tinyglobby@^0.2.9: +tinyglobby@^0.2.6, tinyglobby@^0.2.9: version "0.2.10" resolved "https://registry.yarnpkg.com/tinyglobby/-/tinyglobby-0.2.10.tgz#e712cf2dc9b95a1f5c5bbd159720e15833977a0f" integrity sha512-Zc+8eJlFMvgatPZTl6A9L/yht8QqdmUNtURHaKZLmKBE12hNPSrqNkUp2cs3M/UKmNVVAMFQYSjYIVHDjW5zew== @@ -10571,34 +9742,15 @@ ts-interface-checker@^0.1.9: resolved "https://registry.yarnpkg.com/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz#784fd3d679722bc103b1b4b8030bcddb5db2a699" integrity sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA== -ts-node@^10.9.2: - version "10.9.2" - resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.2.tgz#70f021c9e185bccdca820e26dc413805c101c71f" - integrity sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ== - dependencies: - "@cspotcode/source-map-support" "^0.8.0" - "@tsconfig/node10" "^1.0.7" - "@tsconfig/node12" "^1.0.7" - "@tsconfig/node14" "^1.0.0" - "@tsconfig/node16" "^1.0.2" - acorn "^8.4.1" - acorn-walk "^8.1.1" - arg "^4.1.0" - create-require "^1.1.0" - diff "^4.0.1" - make-error "^1.1.1" - v8-compile-cache-lib "^3.0.1" - yn "3.1.1" - ts-pattern@^5.4.0: version "5.6.2" resolved "https://registry.yarnpkg.com/ts-pattern/-/ts-pattern-5.6.2.tgz#aad9b4fe3c3f485dfad46e472e1203b688cc9bb4" integrity sha512-d4IxJUXROL5NCa3amvMg6VQW2HVtZYmUTPfvVtO7zJWGYLJ+mry9v2OmYm+z67aniQoQ8/yFNadiEwtNS9qQiw== -tsconfck@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/tsconfck/-/tsconfck-3.0.1.tgz#803ca0ed8f2f2075639e4061238f04b99ba85e85" - integrity sha512-7ppiBlF3UEddCLeI1JRx5m2Ryq+xk4JrZuq4EuYXykipebaq1dV0Fhgr1hb7CkmHt32QSgOZlcqVLEtHBG4/mg== +tsconfck@^3.0.3: + version "3.1.5" + resolved "https://registry.yarnpkg.com/tsconfck/-/tsconfck-3.1.5.tgz#2f07f9be6576825e7a77470a5304ce06c7746e61" + integrity sha512-CLDfGgUp7XPswWnezWwsCRxNmgQjhYq3VXHM0/XIRxhVrKw0M1if9agzryh1QS3nxjCROvV+xWxoJO1YctzzWg== tsconfig-paths@^3.15.0: version "3.15.0" @@ -11013,14 +10165,6 @@ untun@^0.1.3: consola "^3.2.3" pathe "^1.1.1" -update-browserslist-db@^1.0.13: - version "1.0.13" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz#3c5e4f5c083661bd38ef64b6328c26ed6c8248c4" - integrity sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg== - dependencies: - escalade "^3.1.1" - picocolors "^1.0.0" - update-browserslist-db@^1.1.1: version "1.1.2" resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.2.tgz#97e9c96ab0ae7bcac08e9ae5151d26e6bc6b5580" @@ -11081,11 +10225,6 @@ utf-8-validate@^5.0.2: dependencies: node-gyp-build "^4.3.0" -utf8@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/utf8/-/utf8-3.0.0.tgz#f052eed1364d696e769ef058b183df88c87f69d1" - integrity sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ== - util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" @@ -11112,11 +10251,6 @@ uuid@^9.0.0, uuid@^9.0.1: resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30" integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== -v8-compile-cache-lib@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" - integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== - valtio@1.11.2: version "1.11.2" resolved "https://registry.yarnpkg.com/valtio/-/valtio-1.11.2.tgz#b8049c02dfe65620635d23ebae9121a741bb6530" @@ -11158,20 +10292,6 @@ viem@^2.1.1: ox "0.6.7" ws "8.18.0" -viem@^2.16.2: - version "2.16.2" - resolved "https://registry.yarnpkg.com/viem/-/viem-2.16.2.tgz#227e14c61afc9057d2290501649e37f7ed0379be" - integrity sha512-qor3v1cJFR3jcPtcJxPbKfKURAH2agNf2IWZIaSReV6teNLERiu4Sr7kbqpkIeTAEpiDCVQwg336M+mub1m+pg== - dependencies: - "@adraffy/ens-normalize" "1.10.0" - "@noble/curves" "1.2.0" - "@noble/hashes" "1.3.2" - "@scure/bip32" "1.3.2" - "@scure/bip39" "1.2.1" - abitype "1.0.4" - isows "1.0.4" - ws "8.17.1" - viem@^2.23.1: version "2.23.1" resolved "https://registry.yarnpkg.com/viem/-/viem-2.23.1.tgz#5fe527de258e33b2445af266698fd6575068112d" @@ -11197,16 +10317,16 @@ vite-node@3.0.5: pathe "^2.0.2" vite "^5.0.0 || ^6.0.0" -vite-tsconfig-paths@^4.3.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/vite-tsconfig-paths/-/vite-tsconfig-paths-4.3.1.tgz#28762938151e7c80aec9d70c57e65ddce43a576f" - integrity sha512-cfgJwcGOsIxXOLU/nELPny2/LUD/lcf1IbfyeKTv2bsupVbTH/xpFtdQlBmIP1GEK2CjjLxYhFfB+QODFAx5aw== +vite-tsconfig-paths@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/vite-tsconfig-paths/-/vite-tsconfig-paths-5.1.4.tgz#d9a71106a7ff2c1c840c6f1708042f76a9212ed4" + integrity sha512-cYj0LRuLV2c2sMqhqhGpaO3LretdtMn/BVX4cPLanIZuwwrkVl+lK84E/miEXkCHWXuq65rhNN4rXsBcOB3S4w== dependencies: debug "^4.1.1" globrex "^0.1.2" - tsconfck "^3.0.1" + tsconfck "^3.0.3" -"vite@^5.0.0 || ^6.0.0": +"vite@^5.0.0 || ^6.0.0", vite@^6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/vite/-/vite-6.1.0.tgz#00a4e99a23751af98a2e4701c65ba89ce23858a6" integrity sha512-RjjMipCKVoR4hVfPY6GQTgveinjNuyLw+qruksLDvA5ktI1150VmcMBKmQaEWJhg/j6Uaf6dNCNA0AfdzUb/hQ== @@ -11217,17 +10337,6 @@ vite-tsconfig-paths@^4.3.1: optionalDependencies: fsevents "~2.3.3" -vite@^5.1.4: - version "5.1.4" - resolved "https://registry.yarnpkg.com/vite/-/vite-5.1.4.tgz#14e9d3e7a6e488f36284ef13cebe149f060bcfb6" - integrity sha512-n+MPqzq+d9nMVTKyewqw6kSt+R3CkvF9QAKY8obiQn8g1fwTscKxyfaYnC632HtBXAQGc1Yjomphwn1dtwGAHg== - dependencies: - esbuild "^0.19.3" - postcss "^8.4.35" - rollup "^4.2.0" - optionalDependencies: - fsevents "~2.3.3" - vitest@^3.0.5: version "3.0.5" resolved "https://registry.yarnpkg.com/vitest/-/vitest-3.0.5.tgz#a9a3fa1203d85869c9ba66f3ea990b72d00ddeb0" @@ -11263,20 +10372,6 @@ wagmi@^2.14.11: "@wagmi/core" "2.16.4" use-sync-external-store "1.4.0" -web3-utils@^1.3.4: - version "1.10.3" - resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.10.3.tgz#f1db99c82549c7d9f8348f04ffe4e0188b449714" - integrity sha512-OqcUrEE16fDBbGoQtZXWdavsPzbGIDc5v3VrRTZ0XrIpefC/viZ1ZU9bGEemazyS0catk/3rkOOxpzTfY+XsyQ== - dependencies: - "@ethereumjs/util" "^8.1.0" - bn.js "^5.2.1" - ethereum-bloom-filters "^1.0.6" - ethereum-cryptography "^2.1.2" - ethjs-unit "0.1.6" - number-to-bn "1.7.0" - randombytes "^2.1.0" - utf8 "3.0.0" - "webextension-polyfill@>=0.10.0 <1.0", webextension-polyfill@^0.10.0: version "0.10.0" resolved "https://registry.yarnpkg.com/webextension-polyfill/-/webextension-polyfill-0.10.0.tgz#ccb28101c910ba8cf955f7e6a263e662d744dbb8" @@ -11438,7 +10533,7 @@ widest-line@^3.1.0: dependencies: string-width "^4.0.0" -window-size@^1.1.1: +window-size@^1: version "1.1.1" resolved "https://registry.yarnpkg.com/window-size/-/window-size-1.1.1.tgz#9858586580ada78ab26ecd6978a6e03115c1af20" integrity sha512-5D/9vujkmVQ7pSmc0SCBmHXbkv6eaHwXEx65MywhmUMsI8sGqJ972APq1lotfcwMKPFLuCFfL8xGHLIp7jaBmA== @@ -11556,11 +10651,6 @@ yallist@^4.0.0: resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== -yaml@^2.3.4: - version "2.3.4" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.3.4.tgz#53fc1d514be80aabf386dc6001eb29bf3b7523b2" - integrity sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA== - yaml@^2.6.1: version "2.7.0" resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.7.0.tgz#aef9bb617a64c937a9a748803786ad8d3ffe1e98" @@ -11629,11 +10719,6 @@ yargs@^15.3.1: y18n "^4.0.0" yargs-parser "^18.1.2" -yn@3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" - integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== - yocto-queue@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" From 7d28eb77003cc5ff02008e793abedb61f2d4818f Mon Sep 17 00:00:00 2001 From: Ryan Goree Date: Tue, 11 Feb 2025 22:00:15 -0600 Subject: [PATCH 028/146] Added `createCouncil` fn --- .../src/entities/council/createCouncil.ts | 26 +++++++++++++++++++ packages/council-js/src/index.ts | 1 + 2 files changed, 27 insertions(+) create mode 100644 packages/council-js/src/entities/council/createCouncil.ts diff --git a/packages/council-js/src/entities/council/createCouncil.ts b/packages/council-js/src/entities/council/createCouncil.ts new file mode 100644 index 00000000..59e25084 --- /dev/null +++ b/packages/council-js/src/entities/council/createCouncil.ts @@ -0,0 +1,26 @@ +import { Adapter, createDrift, ReadWriteAdapter } from "@delvtech/drift"; +import { ReadCouncil } from "src/entities/council/ReadCouncil"; +import { ReadWriteCouncil } from "src/entities/council/ReadWriteCouncil"; +import { EntityConfig } from "src/entities/Entity"; + +export function createCouncil({ + drift: _drift, + earliestBlock, + ...driftConfig +}: EntityConfig = {}): A extends ReadWriteAdapter + ? ReadWriteCouncil + : ReadCouncil { + const drift = _drift || createDrift(driftConfig); + + if (drift.isReadWrite()) { + return new ReadWriteCouncil({ + drift: drift as any, + earliestBlock, + }); + } + + return new ReadCouncil({ + drift, + earliestBlock, + }) as any; +} diff --git a/packages/council-js/src/index.ts b/packages/council-js/src/index.ts index a6ac212c..92329f95 100644 --- a/packages/council-js/src/index.ts +++ b/packages/council-js/src/index.ts @@ -17,6 +17,7 @@ export type { // Council export { ReadCouncil } from "src/entities/council/ReadCouncil"; export { ReadWriteCouncil } from "src/entities/council/ReadWriteCouncil"; +export { createCouncil } from "src/entities/council/createCouncil"; // Voting vaults export { ReadVotingVault } from "src/entities/votingVault/ReadVotingVault"; From 872cb25247276a16b9e1141fa2f4150bd2855bb9 Mon Sep 17 00:00:00 2001 From: Ryan Goree Date: Tue, 11 Feb 2025 22:02:16 -0600 Subject: [PATCH 029/146] Fix type import --- .../votingVault/vestingVault/ReadWriteVestingVault.ts | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/packages/council-js/src/entities/votingVault/vestingVault/ReadWriteVestingVault.ts b/packages/council-js/src/entities/votingVault/vestingVault/ReadWriteVestingVault.ts index 505aeb9a..9320178c 100644 --- a/packages/council-js/src/entities/votingVault/vestingVault/ReadWriteVestingVault.ts +++ b/packages/council-js/src/entities/votingVault/vestingVault/ReadWriteVestingVault.ts @@ -1,5 +1,10 @@ -import { Address, Hash, OnMinedParam, ReadWriteAdapter } from "@delvtech/drift"; -import { ContractWriteOptions } from "@delvtech/evm-client"; +import { + Address, + ContractWriteOptions, + Hash, + OnMinedParam, + ReadWriteAdapter, +} from "@delvtech/drift"; import { EntityWriteParams } from "src/entities/Entity"; import { ReadWriteToken } from "src/entities/token/ReadWriteToken"; import { ReadVestingVault } from "src/entities/votingVault/vestingVault/ReadVestingVault"; From acdadca167db2cd9f53b33f0de981ef3da67a5b5 Mon Sep 17 00:00:00 2001 From: Ryan Goree Date: Wed, 12 Feb 2025 00:41:11 -0600 Subject: [PATCH 030/146] Add executeProposal --- .../coreVoting/ReadWriteCoreVoting.ts | 30 +++++++++++++++++++ .../entities/votingVault/ReadVotingVault.ts | 2 +- 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/packages/council-js/src/entities/coreVoting/ReadWriteCoreVoting.ts b/packages/council-js/src/entities/coreVoting/ReadWriteCoreVoting.ts index 38360348..43ee94b3 100644 --- a/packages/council-js/src/entities/coreVoting/ReadWriteCoreVoting.ts +++ b/packages/council-js/src/entities/coreVoting/ReadWriteCoreVoting.ts @@ -158,4 +158,34 @@ export class ReadWriteCoreVoting< }, ); } + + /** + * Execute a proposal. + */ + async executeProposal({ + args: { proposalId, targets, calldatas }, + options, + }: EntityWriteParams<{ + proposalId: bigint; + targets: Address[]; + calldatas: Bytes[]; + }>): Promise { + return this.contract.write( + "execute", + { + proposalId, + targets, + calldatas, + }, + { + ...options, + onMined: async (receipt) => { + if (receipt?.status === "success") { + await this.contract.invalidateRead("proposals", [proposalId]); + } + options?.onMined?.(receipt); + }, + }, + ); + } } diff --git a/packages/council-js/src/entities/votingVault/ReadVotingVault.ts b/packages/council-js/src/entities/votingVault/ReadVotingVault.ts index 58e375e7..f5d1f711 100644 --- a/packages/council-js/src/entities/votingVault/ReadVotingVault.ts +++ b/packages/council-js/src/entities/votingVault/ReadVotingVault.ts @@ -44,7 +44,7 @@ export class ReadVotingVault extends Entity { options, }: { voter: Address; - block: Blockish; + block?: Blockish; extraData?: Bytes; options?: ContractReadOptions; }): Promise { From 1abb2a199df89b435d408d3e0f2b4377d8f57d33 Mon Sep 17 00:00:00 2001 From: Ryan Goree Date: Wed, 12 Feb 2025 01:19:46 -0600 Subject: [PATCH 031/146] Add `getProposalResults` to ReadCoreVoting --- .../src/entities/coreVoting/ReadCoreVoting.ts | 48 ++++++++++++++++++- .../src/entities/coreVoting/types.ts | 18 +++++-- 2 files changed, 61 insertions(+), 5 deletions(-) diff --git a/packages/council-js/src/entities/coreVoting/ReadCoreVoting.ts b/packages/council-js/src/entities/coreVoting/ReadCoreVoting.ts index b82514a5..40f51a85 100644 --- a/packages/council-js/src/entities/coreVoting/ReadCoreVoting.ts +++ b/packages/council-js/src/entities/coreVoting/ReadCoreVoting.ts @@ -10,7 +10,12 @@ import { BALLOTS, EXECUTED_PROPOSAL_HASH, } from "src/entities/coreVoting/constants"; -import { Proposal, ProposalArgs, Vote } from "src/entities/coreVoting/types"; +import { + Proposal, + ProposalArgs, + Vote, + VoteResults, +} from "src/entities/coreVoting/types"; import { Blockish } from "src/utils/types"; export class ReadCoreVoting extends Entity { @@ -73,6 +78,47 @@ export class ReadCoreVoting extends Entity { ); } + /** + * Get the total voting power of all votes on a proposal by ballot. + */ + async getProposalResults( + proposalId: bigint, + options?: ContractReadOptions, + ): Promise { + const { createdBlock, lastCallBlock } = + (await this.getProposal(proposalId, options)) || {}; + const latestBlock = lastCallBlock ? lastCallBlock + 1n : undefined; + const executedEvents = await this.contract.getEvents("ProposalExecuted", { + fromBlock: createdBlock, + toBlock: latestBlock, + }); + const isExecuted = executedEvents.some( + ({ args }) => args.proposalId === proposalId, + ); + + // The proposal voting power is deleted when the proposal is executed, so we + // have to get the results from vote events. + if (isExecuted) { + const votes = await this.getVotes({ toBlock: latestBlock }); + const results: VoteResults = { + yes: 0n, + no: 0n, + maybe: 0n, + }; + for (const { ballot, votingPower } of votes) { + results[ballot] += votingPower; + } + return results; + } + + const [yes, no, maybe] = await this.contract.read( + "getProposalVotingPower", + { proposalId }, + options, + ); + return { yes, no, maybe }; + } + /** * Get a casted vote for a given address on a given proposal id. */ diff --git a/packages/council-js/src/entities/coreVoting/types.ts b/packages/council-js/src/entities/coreVoting/types.ts index c0b62dfd..c951ff3e 100644 --- a/packages/council-js/src/entities/coreVoting/types.ts +++ b/packages/council-js/src/entities/coreVoting/types.ts @@ -1,3 +1,4 @@ +import { Address, Bytes, Hash } from "@delvtech/drift"; import { BALLOTS } from "src/entities/coreVoting/constants"; /** @@ -14,20 +15,29 @@ export type VoteResults = Record; * The actions a proposal will perform. */ export interface Actions { - targets: `0x${string}`[] | readonly `0x${string}`[]; - calldatas: `0x${string}`[] | readonly `0x${string}`[]; + targets: Address[]; + calldatas: Bytes[]; } export interface ProposalArgs { proposalId: bigint; createdBlock: bigint; + /** + * The block number after which the proposal can be executed. + */ unlockBlock: bigint; + /** + * The block number after which the proposal can no longer be voted on. + */ expirationBlock: bigint; } export interface Proposal extends ProposalArgs { - proposalHash: `0x${string}`; + proposalHash: Hash; requiredQuorum: bigint; + /** + * The block number after which the proposal can no longer be executed. + */ lastCallBlock: bigint; } @@ -35,5 +45,5 @@ export interface Vote { proposalId: bigint; ballot: Ballot; votingPower: bigint; - voter: `0x${string}`; + voter: Address; } From c626accdb3dcc3e5028c6efa11f65bc2597c4b46 Mon Sep 17 00:00:00 2001 From: Ryan Goree Date: Wed, 12 Feb 2025 01:28:15 -0600 Subject: [PATCH 032/146] Update scripts --- apps/council-js-starter/src/client.ts | 24 +++-- apps/council-js-starter/src/index.ts | 3 - .../src/scripts/changeVaultStatus.ts | 39 +++---- .../src/scripts/createProposal.ts | 100 +++++++----------- .../src/scripts/executeProposal.ts | 43 ++++---- .../src/scripts/getGSCMembers.ts | 69 +++++------- .../src/scripts/getProposalResults.ts | 42 +++----- .../src/scripts/setLockDuration.ts | 36 +++---- 8 files changed, 142 insertions(+), 214 deletions(-) delete mode 100644 apps/council-js-starter/src/index.ts diff --git a/apps/council-js-starter/src/client.ts b/apps/council-js-starter/src/client.ts index d1075462..42a1955b 100644 --- a/apps/council-js-starter/src/client.ts +++ b/apps/council-js-starter/src/client.ts @@ -1,8 +1,12 @@ +import { createCouncil } from "@delvtech/council-js"; +import { viemAdapter } from "@delvtech/drift-viem"; import { - PublicClient, createPublicClient, createWalletClient, http, + type Address, + type PublicClient, + type WalletClient, } from "viem"; import { privateKeyToAccount } from "viem/accounts"; @@ -10,11 +14,17 @@ export const publicClient: PublicClient = createPublicClient({ transport: http(process.env.RPC_URL), }); -export const walletClient = - process.env.WALLET_PRIVATE_KEY && - createWalletClient({ - account: privateKeyToAccount( - process.env.WALLET_PRIVATE_KEY as `0x${string}`, - ), +export let walletClient: WalletClient | undefined; + +if (process.env.WALLET_PRIVATE_KEY) { + walletClient = createWalletClient({ + account: privateKeyToAccount(process.env.WALLET_PRIVATE_KEY as Address), transport: http(process.env.RPC_URL), }); +} + +export const council = createCouncil({ + adapter: viemAdapter({ publicClient, walletClient }), +}); + +export const drift = council.drift; diff --git a/apps/council-js-starter/src/index.ts b/apps/council-js-starter/src/index.ts deleted file mode 100644 index 41f4ab17..00000000 --- a/apps/council-js-starter/src/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -export * from "./scripts/createProposal"; -export * from "./scripts/getGSCMembers"; -export * from "./scripts/getProposalResults"; diff --git a/apps/council-js-starter/src/scripts/changeVaultStatus.ts b/apps/council-js-starter/src/scripts/changeVaultStatus.ts index 1c800043..3f5af6a8 100644 --- a/apps/council-js-starter/src/scripts/changeVaultStatus.ts +++ b/apps/council-js-starter/src/scripts/changeVaultStatus.ts @@ -1,30 +1,21 @@ -import { ReadWriteCouncil } from "@delvtech/council-viem"; -import { publicClient, walletClient } from "src/client"; +import { ReadWriteCouncil } from "@delvtech/council-js"; +import { council, publicClient } from "src/client"; -// wrap the script in an async function so we can await promises -export async function changeVaultStatus(): Promise { - if (!walletClient) { - throw new Error( - "Wallet client not available. Ensure the WALLET_PRIVATE_KEY environment variable is set.", - ); - } - - // create a ReadWriteCouncil instance - const council = new ReadWriteCouncil({ publicClient, walletClient }); +if (!(council instanceof ReadWriteCouncil)) { + throw new Error("Missing WALLET_PRIVATE_KEY environment variable."); +} - // Create a ReadWriteCoreVoting instance. - const coreVoting = council.coreVoting({ - address: "0x", // <-- replace with the CoreVoting contract address - }); +const coreVoting = council.coreVoting("0x"); // <-- replace address - const hash = await coreVoting.changeVaultStatus({ - vault: "0x", // <-- replace with the vault address +const hash = await coreVoting.changeVaultStatus({ + args: { + vault: "0x", // <-- replace address isValid: true, - }); + }, +}); +console.log("Transaction submitted:", hash); - console.log(`Submitted! (${hash})`); - - process.exit(); -} +const receipt = await publicClient.waitForTransactionReceipt({ hash }); +console.log("Transaction receipt:", receipt); -changeVaultStatus(); +process.exit(); diff --git a/apps/council-js-starter/src/scripts/createProposal.ts b/apps/council-js-starter/src/scripts/createProposal.ts index 4ec8bab8..f667b6c0 100644 --- a/apps/council-js-starter/src/scripts/createProposal.ts +++ b/apps/council-js-starter/src/scripts/createProposal.ts @@ -1,78 +1,54 @@ -import { ReadWriteCouncil } from "@delvtech/council-viem"; -import { publicClient, walletClient } from "src/client"; +import { ReadWriteCouncil } from "@delvtech/council-js"; +import { council, publicClient } from "src/client"; +import type { Address } from "viem"; // approx 90 days in blocks assuming 12 seconds a block const FOURTEEN_DAYS_IN_BLOCKS = (14n * 24n * 60n * 60n) / 12n; -// wrap the script in an async function so we can await promises -export async function createProposal(): Promise { - if (!walletClient) { - throw new Error( - "Wallet client not available. Ensure the WALLET_PRIVATE_KEY environment variable is set.", - ); - } - - // create a ReadWriteCouncil instance - const council = new ReadWriteCouncil({ publicClient, walletClient }); - - // create model instances - const lockingVault = council.lockingVault("0x"); // <-- replace with the LockingVault contract address - const vestingVault = council.vestingVault("0x"); // <-- replace with the VestingVault contract address - const coreVoting = council.coreVoting({ - address: "0x", // <-- replace with the CoreVoting contract address - vaults: [lockingVault, vestingVault], - }); +if (!(council instanceof ReadWriteCouncil)) { + throw new Error("Missing WALLET_PRIVATE_KEY environment variable."); +} - // prep arguments +const coreVoting = council.coreVoting("0x"); // <-- replace address +const walletAddress = await coreVoting.contract.getSignerAddress(); - // the vaults that will be used to cast the first vote - const vaults = []; - const account = (await walletClient.getAddresses())[0]; +// the vaults from which power will be drawn for the initial ballot +let votingVaults: Address[] = ["0x", "0x"]; // <-- replace addresses - // trying to create a proposal with vaults you have no power in will throw an - // uninitialized error. - const lockingVaultVotingPower = await lockingVault.getVotingPower({ - account, - }); - if (lockingVaultVotingPower > 0n) { - vaults.push(lockingVault); - } - const vestingVaultVotingPower = await vestingVault.getVotingPower({ - account, - }); - if (vestingVaultVotingPower > 0) { - vaults.push(vestingVault); - } +// Trying to create a proposal with vaults you have no power in will throw an +// uninitialized error. +const vaultPowers = await Promise.all( + votingVaults.map((vault) => + council.votingVault(vault).getVotingPower({ voter: walletAddress }), + ), +); +votingVaults = votingVaults.filter((_, i) => vaultPowers[i] > 0n); - // the target contract addresses for the proposal - const targets = [coreVoting.address]; +// The contracts to call in the proposal +const targets = [coreVoting.address]; - // the proposed calls datas to send to the targets - const calldatas = [ - coreVoting.contract.encodeFunctionData("setDefaultQuorum", { - quorum: 100n, - }), - ]; +// The data to send in the contract calls +const calldatas = [ + coreVoting.contract.encodeFunctionData("setDefaultQuorum", { + quorum: 100n, + }), +]; - const currentBlock = await publicClient.getBlockNumber(); +const currentBlock = await publicClient.getBlockNumber(); - // the block number after which the proposal can no longer be executed - const lastCall = currentBlock + FOURTEEN_DAYS_IN_BLOCKS; +// the block number after which the proposal can no longer be executed +const lastCallBlock = currentBlock + FOURTEEN_DAYS_IN_BLOCKS; - // the ballot to cast for the first vote - const ballot = "yes"; +// the ballot to cast for the first vote +const ballot = "yes"; - const hash = await coreVoting.createProposal({ - ballot, - calldatas, - lastCall, - targets, - vaults, - }); +const hash = await coreVoting.createProposal({ + args: { ballot, calldatas, lastCallBlock, targets, votingVaults }, +}); - console.log(hash); +console.log("Transaction submitted:", hash); - process.exit(); -} +const receipt = await publicClient.waitForTransactionReceipt({ hash }); +console.log("Transaction receipt:", receipt); -createProposal(); +process.exit(); diff --git a/apps/council-js-starter/src/scripts/executeProposal.ts b/apps/council-js-starter/src/scripts/executeProposal.ts index 16a091b3..444f5c73 100644 --- a/apps/council-js-starter/src/scripts/executeProposal.ts +++ b/apps/council-js-starter/src/scripts/executeProposal.ts @@ -1,30 +1,23 @@ -import { ReadWriteCouncil } from "@delvtech/council-viem"; -import { publicClient, walletClient } from "src/client"; +import { ReadWriteCouncil } from "@delvtech/council-js"; +import { council, publicClient } from "src/client"; -// wrap the script in an async function so we can await promises -export async function getProposalResults(): Promise { - if (!walletClient) { - throw new Error( - "Wallet client not available. Ensure the WALLET_PRIVATE_KEY environment variable is set.", - ); - } - - // create a ReadWriteCouncil instance - const council = new ReadWriteCouncil({ publicClient, walletClient }); - - // Create a ReadWriteCoreVoting instance. - const coreVoting = council.coreVoting({ - address: "0x", // <-- replace with the CoreVoting contract address - }); - - // get the proposal to be executed - const proposal = await coreVoting.getProposal({ id: 0n }); +if (!(council instanceof ReadWriteCouncil)) { + throw new Error("Missing WALLET_PRIVATE_KEY environment variable."); +} - const hash = await proposal?.execute(); +const coreVoting = council.coreVoting("0x"); // <-- replace with the CoreVoting contract address - console.log(`Execution transaction submitted! (${hash})`); +// get the proposal to be executed +const hash = await coreVoting.executeProposal({ + args: { + proposalId: 0n, // <-- replace with the proposal ID + targets: ["0x"], // <-- replace with the contract addresses + calldatas: ["0x"], // <-- replace with the execution calldata + }, +}); +console.log("Transaction submitted:", hash); - process.exit(); -} +const receipt = await publicClient.waitForTransactionReceipt({ hash }); +console.log("Transaction receipt:", receipt); -getProposalResults(); +process.exit(); diff --git a/apps/council-js-starter/src/scripts/getGSCMembers.ts b/apps/council-js-starter/src/scripts/getGSCMembers.ts index 9ff22d92..ddb1a9c1 100644 --- a/apps/council-js-starter/src/scripts/getGSCMembers.ts +++ b/apps/council-js-starter/src/scripts/getGSCMembers.ts @@ -1,44 +1,29 @@ -import { ReadWriteCouncil } from "@delvtech/council-viem"; -import { publicClient, walletClient } from "src/client"; - -// wrap the script in an async function so we can await promises -export async function getGSCMembers(): Promise { - if (!walletClient) { - throw new Error( - "Wallet client not available. Ensure the WALLET_PRIVATE_KEY environment variable is set.", - ); - } - - // create a ReadWriteCouncil instance - const council = new ReadWriteCouncil({ publicClient, walletClient }); - - // create a ReadGscVault instance - const gscVault = council.gscVault("0x"); // <-- replace with the LockingVault contract address - - // get all members - const members = await gscVault.getMembers(); - - // create an array of member stat objects - const memberStats = []; - for (const member of members) { - console.log("fetching", member.address); - - // get the voting vaults that were used to prove the member meets the - // minimum voting power requirement - const votingPowerVaults = await gscVault.getMemberVaults({ - account: member.address, - }); - - memberStats.push({ - address: member.address, - joinDate: await gscVault.getJoinDate({ account: member.address }), - votingPower: await member.getVotingPower({ vaults: votingPowerVaults }), - }); - } - - console.table(memberStats); - - process.exit(); +import { council } from "src/client"; + +const gscVault = council.gscVault("0x"); // <-- replace address + +// get all members +const members = await gscVault.getMembers(); + +// create an array of member stat objects +const memberStats = []; +for (const member of members) { + console.log("fetching", member); + + // get the voting vaults that were used to prove the member meets the + // minimum voting power requirement + const votingPowerVaults = await gscVault.getMemberVaults(member); + const votingPowers = await Promise.all( + votingPowerVaults.map((vault) => vault.getVotingPower({ voter: member })), + ); + + memberStats.push({ + address: member, + joinDate: await gscVault.getJoinDate(member), + votingPower: votingPowers.reduce((a, b) => a + b, 0n), + }); } -getGSCMembers(); +console.table(memberStats); + +process.exit(); diff --git a/apps/council-js-starter/src/scripts/getProposalResults.ts b/apps/council-js-starter/src/scripts/getProposalResults.ts index 48714378..3920b463 100644 --- a/apps/council-js-starter/src/scripts/getProposalResults.ts +++ b/apps/council-js-starter/src/scripts/getProposalResults.ts @@ -1,34 +1,18 @@ -import { ReadWriteCouncil, VoteResults } from "@delvtech/council-viem"; -import { publicClient, walletClient } from "src/client"; +import type { VoteResults } from "@delvtech/council-js"; +import { council } from "src/client"; -// wrap the script in an async function so we can await promises -export async function getProposalResults(): Promise { - if (!walletClient) { - throw new Error( - "Wallet client not available. Ensure the WALLET_PRIVATE_KEY environment variable is set.", - ); - } +const coreVoting = council.coreVoting("0x"); // <-- replace address - // create a ReadWriteCouncil instance - const council = new ReadWriteCouncil({ publicClient, walletClient }); +// get all proposals +const proposals = await coreVoting.getProposals(); - // Create a ReadWriteCoreVoting instance. - const coreVoting = council.coreVoting({ - address: "0x", // <-- replace with the CoreVoting contract address - }); - - // get all proposals - const proposals = await coreVoting.getProposals(); - - // get results for all proposals and key them by id in a new object - const resultsByProposalId: Record = {}; - for (const proposal of proposals) { - resultsByProposalId[Number(proposal.id)] = await proposal.getResults(); - } - - console.table(resultsByProposalId); - - process.exit(); +// get results for all proposals and key them by id in a new object +const resultsByProposalId: Record = {}; +for (const { proposalId } of proposals) { + resultsByProposalId[Number(proposalId)] = + await coreVoting.getProposalResults(proposalId); } -getProposalResults(); +console.table(resultsByProposalId); + +process.exit(); diff --git a/apps/council-js-starter/src/scripts/setLockDuration.ts b/apps/council-js-starter/src/scripts/setLockDuration.ts index db193376..4e3525a7 100644 --- a/apps/council-js-starter/src/scripts/setLockDuration.ts +++ b/apps/council-js-starter/src/scripts/setLockDuration.ts @@ -1,29 +1,21 @@ -import { ReadWriteCouncil } from "@delvtech/council-viem"; -import { publicClient, walletClient } from "src/client"; +import { ReadWriteCouncil } from "@delvtech/council-js"; +import { council, publicClient } from "src/client"; -// wrap the script in an async function so we can await promises -export async function setLockDuration(): Promise { - if (!walletClient) { - throw new Error( - "Wallet client not available. Ensure the WALLET_PRIVATE_KEY environment variable is set.", - ); - } - - // create a ReadWriteCouncil instance - const council = new ReadWriteCouncil({ publicClient, walletClient }); +if (!(council instanceof ReadWriteCouncil)) { + throw new Error("Missing WALLET_PRIVATE_KEY environment variable."); +} - // Create a ReadWriteCoreVoting instance. - const coreVoting = council.coreVoting({ - address: "0x", // <-- replace with the CoreVoting contract address - }); +const coreVoting = council.coreVoting("0x"); // <-- replace address - const hash = await coreVoting.setLockDuration({ +const hash = await coreVoting.setLockDuration({ + args: { blocks: 0n, // <-- replace with the number of blocks to lock - }); + }, +}); - console.log(`Submitted! (${hash})`); +console.log("Transaction submitted:", hash); - process.exit(); -} +const receipt = await publicClient.waitForTransactionReceipt({ hash }); +console.log("Transaction receipt:", receipt); -setLockDuration(); +process.exit(); From b91e7ed1cc7cb9994b083a26aa3b2e6b319a63ce Mon Sep 17 00:00:00 2001 From: Ryan Goree Date: Wed, 12 Feb 2025 01:57:13 -0600 Subject: [PATCH 033/146] Add `Council` type to sdk --- .../council-js/src/entities/council/createCouncil.ts | 10 ++++++---- packages/council-js/src/index.ts | 5 ++++- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/packages/council-js/src/entities/council/createCouncil.ts b/packages/council-js/src/entities/council/createCouncil.ts index 59e25084..1d248eb9 100644 --- a/packages/council-js/src/entities/council/createCouncil.ts +++ b/packages/council-js/src/entities/council/createCouncil.ts @@ -7,16 +7,14 @@ export function createCouncil({ drift: _drift, earliestBlock, ...driftConfig -}: EntityConfig = {}): A extends ReadWriteAdapter - ? ReadWriteCouncil - : ReadCouncil { +}: EntityConfig = {}): Council { const drift = _drift || createDrift(driftConfig); if (drift.isReadWrite()) { return new ReadWriteCouncil({ drift: drift as any, earliestBlock, - }); + }) as any; } return new ReadCouncil({ @@ -24,3 +22,7 @@ export function createCouncil({ earliestBlock, }) as any; } + +export type Council = A extends ReadWriteAdapter + ? ReadWriteCouncil + : ReadCouncil; diff --git a/packages/council-js/src/index.ts b/packages/council-js/src/index.ts index 92329f95..87a8d262 100644 --- a/packages/council-js/src/index.ts +++ b/packages/council-js/src/index.ts @@ -17,7 +17,10 @@ export type { // Council export { ReadCouncil } from "src/entities/council/ReadCouncil"; export { ReadWriteCouncil } from "src/entities/council/ReadWriteCouncil"; -export { createCouncil } from "src/entities/council/createCouncil"; +export { + createCouncil, + type Council, +} from "src/entities/council/createCouncil"; // Voting vaults export { ReadVotingVault } from "src/entities/votingVault/ReadVotingVault"; From 6763ef76b0eb750936c02bdede303e69a1a62904 Mon Sep 17 00:00:00 2001 From: Ryan Goree Date: Tue, 18 Feb 2025 15:54:55 -0600 Subject: [PATCH 034/146] Bump turbo --- package.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 7682bf87..a781b7ce 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,8 @@ "format:check": "turbo run format:check", "typecheck": "turbo run typecheck", "test": "turbo test", - "release": "turbo build && changeset publish" + "reset-node-modules": "find . -name 'node_modules' -type d -prune -exec rm -rf '{}' + && yarn cache clean && yarn", + "release": "yarn build:packages && changeset publish" }, "devDependencies": { "@changesets/cli": "^2.27.2", @@ -24,7 +25,7 @@ "prettier": "^3.4.2", "prettier-plugin-organize-imports": "^4.1.0", "prettier-plugin-tailwindcss": "^0.6.11", - "turbo": "latest" + "turbo": "^2.4.2" }, "engines": { "node": ">=18.0.0" From f88fc3eda1b3334053e21a8a19fa073486aa9b26 Mon Sep 17 00:00:00 2001 From: Ryan Goree Date: Tue, 18 Feb 2025 16:00:09 -0600 Subject: [PATCH 035/146] Bump drift --- apps/council-js-starter/package.json | 4 +- apps/council-ui/package.json | 4 +- packages/council-cli/package.json | 2 +- packages/council-js/package.json | 2 +- yarn.lock | 84 ++++++++++++++-------------- 5 files changed, 49 insertions(+), 47 deletions(-) diff --git a/apps/council-js-starter/package.json b/apps/council-js-starter/package.json index bf1f678c..7ecea8d2 100644 --- a/apps/council-js-starter/package.json +++ b/apps/council-js-starter/package.json @@ -13,10 +13,12 @@ "getGSCMembers": "tsx -r dotenv/config ./src/scripts/getGSCMembers.ts", "getProposalResults": "tsx -r dotenv/config src/scripts/getProposalResults.ts", "dev": "tsx -r dotenv/config src/scripts/dev.ts", + "dev:watch": "tsx -r dotenv/config --watch src/scripts/dev.ts", "typecheck": "tsc --noEmit" }, "dependencies": { - "@delvtech/drift-viem": "^0.1.3", + "@delvtech/drift": "^0.2.0", + "@delvtech/drift-viem": "^0.2.0", "@delvtech/council-js": "^0.0.0", "viem": "^2.23.1" }, diff --git a/apps/council-ui/package.json b/apps/council-ui/package.json index 735ac71f..8adbae8d 100644 --- a/apps/council-ui/package.json +++ b/apps/council-ui/package.json @@ -12,8 +12,8 @@ "typecheck": "tsc --noEmit" }, "dependencies": { - "@delvtech/drift-viem": "^0.1.3", - "@delvtech/council-artifacts": "^0.1.0", + "@delvtech/drift": "^0.2.0", + "@delvtech/drift-viem": "^0.2.0", "@delvtech/council-js": "^0.0.0", "@ensdomains/ensjs": "^4.0.2", "@heroicons/react": "^2.2.0", diff --git a/packages/council-cli/package.json b/packages/council-cli/package.json index e4914aff..65d9dfb3 100644 --- a/packages/council-cli/package.json +++ b/packages/council-cli/package.json @@ -28,7 +28,7 @@ } }, "dependencies": { - "@delvtech/drift-viem": "^0.1.3", + "@delvtech/drift-viem": "^0.2.0", "@delvtech/council-artifacts": "^0.1.0", "@delvtech/council-js": "^0.0.0", "ajv": "^8.17.1", diff --git a/packages/council-js/package.json b/packages/council-js/package.json index e22f640b..9c3fa549 100644 --- a/packages/council-js/package.json +++ b/packages/council-js/package.json @@ -19,7 +19,7 @@ "typecheck": "tsc --noEmit" }, "dependencies": { - "@delvtech/drift": "^0.1.3", + "@delvtech/drift": "^0.2.0", "@delvtech/fixed-point-wasm": "^0.0.7", "@delvtech/council-artifacts": "^0.1.0" }, diff --git a/yarn.lock b/yarn.lock index 5c33f8b3..ac1917b7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -428,15 +428,15 @@ eventemitter3 "^5.0.1" preact "^10.24.2" -"@delvtech/drift-viem@^0.1.3": - version "0.1.3" - resolved "https://registry.yarnpkg.com/@delvtech/drift-viem/-/drift-viem-0.1.3.tgz#e1a79325e04da0bdd4a006ca7baa0dfa6686457a" - integrity sha512-XBKWOwRx0MzMJYwWGfM5v1ddu6Z+ci7DZ+AiwhhLVpB178SpDZRuaC6qmS3vNMUDHb10Ip/k2BkoNiG+SehM6A== +"@delvtech/drift-viem@^0.2.0": + version "0.2.0" + resolved "https://registry.yarnpkg.com/@delvtech/drift-viem/-/drift-viem-0.2.0.tgz#93bd9db373e4c2237151cdaf2b108f23a1c6c766" + integrity sha512-rAs0E5jfYWzj0OaN+oUTjtGFZuCoWoKdRasry5J0TtnaMemiXoEcpNDgBWPJUgni6joBbRrBkEx9kau2nHNYEw== -"@delvtech/drift@^0.1.3": - version "0.1.3" - resolved "https://registry.yarnpkg.com/@delvtech/drift/-/drift-0.1.3.tgz#1bb8273eff5e7796e76b027105cfd263e3a8827f" - integrity sha512-j0/VdunuyHqZepMMEEiKWWkQuaoUDvspYs9933W2KFfm+sc+DLYes3BzUWK0gIXR/SZSIrfSkyoKvdDYIpkyvQ== +"@delvtech/drift@^0.2.0": + version "0.2.0" + resolved "https://registry.yarnpkg.com/@delvtech/drift/-/drift-0.2.0.tgz#dec25dafb3ada00454fc89b8dc11c61b2a70b456" + integrity sha512-5hU1s2Bx4QUWxVKMIpjMidzQkQ/GJUp1TeymFwSV+gt8aV/SKIfKTTxsMJDp/q2Vs/ncahdfmrWjBwg9ua/zmA== dependencies: lodash.ismatch "^4.4.0" lru-cache "^11.0.2" @@ -9828,47 +9828,47 @@ tsx@^4.19.2: optionalDependencies: fsevents "~2.3.3" -turbo-darwin-64@1.12.2: - version "1.12.2" - resolved "https://registry.yarnpkg.com/turbo-darwin-64/-/turbo-darwin-64-1.12.2.tgz#4b5e48065b874b2379a45c2db71ce69d7c35c027" - integrity sha512-Aq/ePQ5KNx6XGwlZWTVTqpQYfysm1vkwkI6kAYgrX5DjMWn+tUXrSgNx4YNte0F+V4DQ7PtuWX+jRG0h0ZNg0A== +turbo-darwin-64@2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/turbo-darwin-64/-/turbo-darwin-64-2.4.2.tgz#2a4ef093f2a87988308d6b28ef771d71baeeb7ce" + integrity sha512-HFfemyWB60CJtEvVQj9yby5rkkWw9fLAdLtAPGtPQoU3tKh8t/uzCAZKso2aPVbib9vGUuGbPGoGpaRXdVhj5g== -turbo-darwin-arm64@1.12.2: - version "1.12.2" - resolved "https://registry.yarnpkg.com/turbo-darwin-arm64/-/turbo-darwin-arm64-1.12.2.tgz#f952ac488480b869316bc12cf3c022e4e40a6be8" - integrity sha512-wTr+dqkwJo/eXE+4SPTSeNBKyyfQJhI6I9sKVlCSBmtaNEqoGNgdVzgMUdqrg9AIFzLIiKO+zhfskNaSWpVFow== +turbo-darwin-arm64@2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/turbo-darwin-arm64/-/turbo-darwin-arm64-2.4.2.tgz#51a69d6b5decdc6c6ee247c5f2e2d95d8651c165" + integrity sha512-uwSx1dsBSSFeEC0nxyx2O219FEsS/haiESaWwE9JI8mHkQK61s6w6fN2G586krKxyNam4AIxRltleL+O2Em94g== -turbo-linux-64@1.12.2: - version "1.12.2" - resolved "https://registry.yarnpkg.com/turbo-linux-64/-/turbo-linux-64-1.12.2.tgz#160ae2e3baf7c3738b9bc2b6b99ba8e2435e9034" - integrity sha512-BggBKrLojGarDaa2zBo+kUR3fmjpd6bLA8Unm3Aa2oJw0UvEi3Brd+w9lNsPZHXXQYBUzNUY2gCdxf3RteWb0g== +turbo-linux-64@2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/turbo-linux-64/-/turbo-linux-64-2.4.2.tgz#b49977e5f60e9e44e91b730debf934eb80fa0a3e" + integrity sha512-Fy/uL8z/LAYcPbm7a1LwFnTY9pIi5FAi12iuHsgB7zHjdh4eeIKS2NIg4nroAmTcUTUZ0/cVTo4bDOCUcS3aKw== -turbo-linux-arm64@1.12.2: - version "1.12.2" - resolved "https://registry.yarnpkg.com/turbo-linux-arm64/-/turbo-linux-arm64-1.12.2.tgz#32d3408bc112cf433e3cec37b048da38f28a82ea" - integrity sha512-v/apSRvVuwYjq1D9MJFsHv2EpGd1S4VoSdZvVfW6FaM06L8CFZa92urNR1svdGYN28YVKwK9Ikc9qudC6t/d5A== +turbo-linux-arm64@2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/turbo-linux-arm64/-/turbo-linux-arm64-2.4.2.tgz#f6c09843cbc262ffc43e1add7bee8db5eb125d16" + integrity sha512-AEA0d8h5W/K6iiXfEgiNwWt0yqRL1NpBs8zQCLdc4/L7WeYeJW3sORWX8zt7xhutF/KW9gTm8ehKpiK6cCIsAA== -turbo-windows-64@1.12.2: - version "1.12.2" - resolved "https://registry.yarnpkg.com/turbo-windows-64/-/turbo-windows-64-1.12.2.tgz#bef2607f8fe88e5e337daa016ec417191086794e" - integrity sha512-3uDdwXcRGkgopYFdPDpxQiuQjfQ12Fxq0fhj+iGymav0eWA4W4wzYwSdlUp6rT22qOBIzaEsrIspRwx1DsMkNg== +turbo-windows-64@2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/turbo-windows-64/-/turbo-windows-64-2.4.2.tgz#142646430009149a3f0ac8309fcc695fdadc9e57" + integrity sha512-CybtIZ9wRgnnNFVN9En9G+rxsO+mwU81fvW4RpE8BWyNEkhQ8J28qYf4PaimueMxGHHp/28i/G7Kcdn2GAWG0g== -turbo-windows-arm64@1.12.2: - version "1.12.2" - resolved "https://registry.yarnpkg.com/turbo-windows-arm64/-/turbo-windows-arm64-1.12.2.tgz#784c91ef77b8db17c441d78e487f0b3d570275bf" - integrity sha512-zNIHnwtQfJSjFi7movwhPQh2rfrcKZ7Xv609EN1yX0gEp9GxooCUi2yNnBQ8wTqFjioA2M5hZtGJQ0RrKaEm/Q== +turbo-windows-arm64@2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/turbo-windows-arm64/-/turbo-windows-arm64-2.4.2.tgz#63ae5e8bb6b9efa74aca6c5ef49d0fdebe123b45" + integrity sha512-7V0yneVPL8Y3TgrkUIjw7Odmwu1tHnyIiPHFM7eFcA7U+H6hPXyCxge7nC3wOKfjhKCQqUm+Vf/k6kjmLz5G4g== -turbo@latest: - version "1.12.2" - resolved "https://registry.yarnpkg.com/turbo/-/turbo-1.12.2.tgz#aa66ce09dc134f8c3adc7ba9491eb30b4d9491db" - integrity sha512-BcoQjBZ+LJCMdjzWhzQflOinUjek28rWXj07aaaAQ8T3Ehs0JFSjIsXOm4qIbo52G4xk3gFVcUtJhh/QRADl7g== +turbo@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/turbo/-/turbo-2.4.2.tgz#3e2b285b63535e3631632febb8d05fad54e19697" + integrity sha512-Qxi0ioQCxMRUCcHKHZkTnYH8e7XCpNfg9QiJcyfWIc+ZXeaCjzV5rCGlbQlTXMAtI8qgfP8fZADv3CFtPwqdPQ== optionalDependencies: - turbo-darwin-64 "1.12.2" - turbo-darwin-arm64 "1.12.2" - turbo-linux-64 "1.12.2" - turbo-linux-arm64 "1.12.2" - turbo-windows-64 "1.12.2" - turbo-windows-arm64 "1.12.2" + turbo-darwin-64 "2.4.2" + turbo-darwin-arm64 "2.4.2" + turbo-linux-64 "2.4.2" + turbo-linux-arm64 "2.4.2" + turbo-windows-64 "2.4.2" + turbo-windows-arm64 "2.4.2" tus-js-client@^3.1.0: version "3.1.3" From 454c06f3ec4da03254aa1173a29c6eed3e75d03c Mon Sep 17 00:00:00 2001 From: Ryan Goree Date: Tue, 18 Feb 2025 17:17:49 -0600 Subject: [PATCH 036/146] Add `getProposalExecution` to `ReadCoreVoting` --- .../src/entities/coreVoting/ReadCoreVoting.ts | 45 +++++++++++++------ 1 file changed, 31 insertions(+), 14 deletions(-) diff --git a/packages/council-js/src/entities/coreVoting/ReadCoreVoting.ts b/packages/council-js/src/entities/coreVoting/ReadCoreVoting.ts index 40f51a85..b77424b8 100644 --- a/packages/council-js/src/entities/coreVoting/ReadCoreVoting.ts +++ b/packages/council-js/src/entities/coreVoting/ReadCoreVoting.ts @@ -4,6 +4,7 @@ import { Address, Contract, ContractReadOptions, + EventLog, } from "@delvtech/drift"; import { ContractEntityConfig, Entity } from "src/entities/Entity"; import { @@ -18,9 +19,11 @@ import { } from "src/entities/coreVoting/types"; import { Blockish } from "src/utils/types"; +type CoreVotingAbi = typeof CoreVoting.abi; + export class ReadCoreVoting extends Entity { readonly address: Address; - readonly contract: Contract; + readonly contract: Contract; constructor({ address, ...config }: ContractEntityConfig) { super(config); @@ -79,27 +82,41 @@ export class ReadCoreVoting extends Entity { } /** - * Get the total voting power of all votes on a proposal by ballot. + * Get the `ProposalExecuted` event for a given proposal id. */ - async getProposalResults( + async getProposalExecution( proposalId: bigint, options?: ContractReadOptions, - ): Promise { - const { createdBlock, lastCallBlock } = - (await this.getProposal(proposalId, options)) || {}; - const latestBlock = lastCallBlock ? lastCallBlock + 1n : undefined; + ): Promise | undefined> { + const proposal = await this.getProposal(proposalId, options); + + // Proposals are deleted when they are executed. + if (proposal) { + return undefined; + } + const executedEvents = await this.contract.getEvents("ProposalExecuted", { - fromBlock: createdBlock, - toBlock: latestBlock, + toBlock: options?.block, }); - const isExecuted = executedEvents.some( - ({ args }) => args.proposalId === proposalId, - ); + return executedEvents.find(({ args }) => args.proposalId === proposalId); + } + + /** + * Get the total voting power of all votes on a proposal by ballot. + */ + async getProposalVotingPower( + proposalId: bigint, + options?: ContractReadOptions, + ): Promise { + const execution = await this.getProposalExecution(proposalId, options); // The proposal voting power is deleted when the proposal is executed, so we // have to get the results from vote events. - if (isExecuted) { - const votes = await this.getVotes({ toBlock: latestBlock }); + if (execution) { + const votes = await this.getVotes({ + toBlock: options?.block, + proposalId, + }); const results: VoteResults = { yes: 0n, no: 0n, From 9457b40adcd0eb786889c2f86902ec59a88025cf Mon Sep 17 00:00:00 2001 From: Ryan Goree Date: Tue, 18 Feb 2025 21:13:57 -0600 Subject: [PATCH 037/146] Combine hook and extension in `Entity` --- packages/council-js/src/entities/Entity.ts | 142 +++--------------- .../src/utils/getEventsWithSplitAndRetry.ts | 124 +++++++++++++++ 2 files changed, 143 insertions(+), 123 deletions(-) create mode 100644 packages/council-js/src/utils/getEventsWithSplitAndRetry.ts diff --git a/packages/council-js/src/entities/Entity.ts b/packages/council-js/src/entities/Entity.ts index 29d6131b..bea5ae2c 100644 --- a/packages/council-js/src/entities/Entity.ts +++ b/packages/council-js/src/entities/Entity.ts @@ -8,13 +8,7 @@ import { OneOf, createDrift, } from "@delvtech/drift"; -import { CouncilSdkError } from "src/error"; - -/** - * The maximum number of times to split a failed event request into smaller - * requests before giving up. - */ -const MAX_EVENT_SPLIT_RETRIES = 4; +import { getEventsWithSplitAndRetry } from "src/utils/getEventsWithSplitAndRetry"; /** * Configuration options for an {@link Entity}. @@ -38,126 +32,28 @@ export class Entity { drift: Drift; constructor({ drift, earliestBlock, ...driftConfig }: EntityConfig = {}) { - this.drift = drift || createDrift(driftConfig); - - // Overwrite `fromBlock` if earlier than the `earliestBlock` option. - if (earliestBlock) { - this.drift.hooks.on("before:getEvents", ({ args, setArgs }) => { - const { fromBlock, ...params } = args[0]; + this.drift = (drift || createDrift(driftConfig)).extend({ + // Override the `getEvents` method with + getEvents: ({ fromBlock = earliestBlock, ...restParams }) => { + // Overwrite `fromBlock` if earlier than the `earliestBlock` option. if ( - !fromBlock || - fromBlock === "earliest" || - (typeof fromBlock === "bigint" && fromBlock < earliestBlock) + earliestBlock && + (fromBlock === "earliest" || + (typeof fromBlock === "bigint" && fromBlock < earliestBlock)) ) { - setArgs({ - ...params, - fromBlock: earliestBlock, - }); - } - }); - } - - // Extend the drift instance to override the `getEvents` method with - // logic to split failed requests into multiple smaller requests. - this.drift.extend({ - async getEvents(params) { - let chunks = [params]; - let error = new CouncilSdkError( - `Unknown error fetching '${params.event}' events from ${params.address}`, - ); - let retries = 0; - - while (retries <= MAX_EVENT_SPLIT_RETRIES) { - let nextChunks: (typeof params)[] = []; - let nextError; - - const chunkedEvents = await Promise.all( - chunks.map(async (chunkParams) => { - let { fromBlock, toBlock } = chunkParams; - - // Check the cache for the chunk - const cacheKey = await this.cache.eventsKey(chunkParams); - if (await this.cache.has(cacheKey)) { - nextChunks.push(chunkParams); - // Casting as never causes this arm of the function to be - // ignored in the inferred return type. This is done to avoid - // having to rewrite the type signature of the `getEvents` - // method which has multiple type parameters. - return this.cache.get(cacheKey) as never; - } - - const chunk = await this.adapter - .getEvents(chunkParams) - // Split the request into 2 smaller requests if it throws an error - .catch(async (e) => { - nextError = new CouncilSdkError(e); - - // Check if the chunk is too small to split - if ( - toBlock === 0n || - toBlock === "earliest" || - fromBlock === toBlock || - // Implies the chunk starts at "finalized", "latest", "safe", or "pending" - (typeof fromBlock === "string" && fromBlock !== "earliest") - ) { - throw nextError; - } - - // Coerce fromBlock and toBlock to bigints to find the middle - if (typeof fromBlock !== "bigint") { - fromBlock = earliestBlock || 0n; - } - if (typeof toBlock !== "bigint") { - const block = await this.getBlock(); - if (!block?.number) { - throw nextError; - } - toBlock = block.number; - } - - // Check again if they're the same after coercion - if (fromBlock === toBlock) { - throw nextError; - } - - const middleBlock = fromBlock + (toBlock - fromBlock) / 2n; - nextChunks.push( - { - ...chunkParams, - fromBlock, - toBlock: middleBlock, - }, - { - ...chunkParams, - fromBlock: middleBlock + 1n, - toBlock, - }, - ); - }); - - if (chunk) { - this.cache.preloadEvents({ - ...chunkParams, - value: chunk, - }); - nextChunks.push(chunkParams); - return chunk; - } - - return []; - }), - ); - - if (!nextError) { - return chunkedEvents.flat(); - } - - chunks = nextChunks; - error = nextError; - retries++; + fromBlock = earliestBlock; } - throw error; + // Add logic to split failed requests into multiple smaller requests to + // accommodate block range and/or event count limits. + return getEventsWithSplitAndRetry({ + params: { + fromBlock, + ...restParams, + }, + drift: this.drift, + earliestBlock, + }); }, }); } diff --git a/packages/council-js/src/utils/getEventsWithSplitAndRetry.ts b/packages/council-js/src/utils/getEventsWithSplitAndRetry.ts new file mode 100644 index 00000000..ccfecb59 --- /dev/null +++ b/packages/council-js/src/utils/getEventsWithSplitAndRetry.ts @@ -0,0 +1,124 @@ +import { + Abi, + Drift, + EventLog, + EventName, + GetEventsParams, +} from "@delvtech/drift"; +import { CouncilSdkError } from "src/error"; + +export async function getEventsWithSplitAndRetry< + A extends Abi, + E extends EventName, +>({ + params, + drift, + earliestBlock, + /** + * The maximum number of times to split failed event requests into smaller + * requests before giving up. Defaults to 4. + */ + maxRetries = 4, +}: { + params: GetEventsParams; + drift: Drift; + earliestBlock?: bigint; + maxRetries?: number; +}): Promise[]> { + let chunkedParams = [params]; + let error: Error | undefined; + let retries = maxRetries; + + while (retries) { + let nextChunkedParams: GetEventsParams[] = []; + let nextError; + + const chunkedEvents = await Promise.all( + chunkedParams.map(async (params) => { + let { fromBlock, toBlock } = params; + + // Check the cache for the chunk + const cacheKey = await drift.cache.eventsKey(params); + if (await drift.cache.has(cacheKey)) { + nextChunkedParams.push(params); + return drift.cache.get(cacheKey) as Promise[]>; + } + + const chunk = await drift.adapter + .getEvents(params) + // Split the request into 2 smaller requests if it throws an error + .catch(async (e) => { + nextError = new CouncilSdkError(e); + + // Check if the chunk is too small to split + if ( + toBlock === 0n || + toBlock === "earliest" || + fromBlock === toBlock || + // Implies the chunk starts at "finalized", "latest", "safe", or "pending" + (typeof fromBlock === "string" && fromBlock !== "earliest") + ) { + throw nextError; + } + + // Coerce fromBlock and toBlock to bigints to find the middle + if (typeof fromBlock !== "bigint") { + fromBlock = earliestBlock || 0n; + } + if (typeof toBlock !== "bigint") { + const block = await drift.getBlock(); + if (!block?.number) { + throw nextError; + } + toBlock = block.number; + } + + // Check again if they're the same after coercion + if (fromBlock === toBlock) { + throw nextError; + } + + const middleBlock = fromBlock + (toBlock - fromBlock) / 2n; + nextChunkedParams.push( + { + ...params, + fromBlock, + toBlock: middleBlock, + }, + { + ...params, + fromBlock: middleBlock + 1n, + toBlock, + }, + ); + }); + + if (chunk) { + drift.cache.preloadEvents({ + ...params, + value: chunk, + }); + nextChunkedParams.push(params); + return chunk; + } + + return []; + }), + ); + + if (!nextError) { + return chunkedEvents.flat(); + } + + chunkedParams = nextChunkedParams; + error = nextError; + retries--; + } + + throw ( + error || + new CouncilSdkError( + `Unknown error fetching '${params.event}' events from ${params.address}`, + ) + ); +} From d1da813db667d6b06a872e1b56270d79c5a17ba2 Mon Sep 17 00:00:00 2001 From: Ryan Goree Date: Tue, 18 Feb 2025 23:00:54 -0600 Subject: [PATCH 038/146] Add test for `getProposalVotingPower` --- .../coreVoting/ReadCoreVoting.test.ts | 91 +++++++++++++++++++ .../src/entities/coreVoting/ReadCoreVoting.ts | 4 +- packages/council-js/vitest.config.ts | 4 +- 3 files changed, 95 insertions(+), 4 deletions(-) create mode 100644 packages/council-js/src/entities/coreVoting/ReadCoreVoting.test.ts diff --git a/packages/council-js/src/entities/coreVoting/ReadCoreVoting.test.ts b/packages/council-js/src/entities/coreVoting/ReadCoreVoting.test.ts new file mode 100644 index 00000000..8f0f2c45 --- /dev/null +++ b/packages/council-js/src/entities/coreVoting/ReadCoreVoting.test.ts @@ -0,0 +1,91 @@ +import { CoreVoting } from "@delvtech/council-artifacts/CoreVoting"; +import { createMockDrift, MockContract } from "@delvtech/drift/testing"; +import { EXECUTED_PROPOSAL_HASH } from "src/entities/coreVoting/constants"; +import { ReadCoreVoting } from "src/entities/coreVoting/ReadCoreVoting"; +import { VoteResults } from "src/entities/coreVoting/types"; +import { beforeEach, describe, expect, it } from "vitest"; + +describe("ReadCoreVoting", () => { + const drift = createMockDrift({ chainId: 0 }); + const coreVoting = new ReadCoreVoting({ address: "0x123", drift }); + const contract = coreVoting.contract as MockContract; + + beforeEach(async () => { + drift.reset(); + await drift.cache.clear(); + }); + + it("Returns voting power for a deleted/executed proposal", async () => { + contract.onRead("proposals").resolves({ + proposalHash: EXECUTED_PROPOSAL_HASH, + created: 0n, + expiration: 0n, + lastCall: 0n, + quorum: 0n, + unlock: 0n, + }); + contract.onGetEvents("Voted").resolves([ + // 2 votes for yes w/ 200 voting power + { + eventName: "Voted", + args: { + proposalId: 1n, + vote: { castBallot: 0, votingPower: 200n }, + voter: "0x123", + }, + }, + { + eventName: "Voted", + args: { + proposalId: 1n, + vote: { castBallot: 0, votingPower: 200n }, + voter: "0x123", + }, + }, + + // 2 votes for no w/ 150 voting power + { + eventName: "Voted", + args: { + proposalId: 1n, + vote: { castBallot: 1, votingPower: 150n }, + voter: "0x123", + }, + }, + { + eventName: "Voted", + args: { + proposalId: 1n, + vote: { castBallot: 1, votingPower: 150n }, + voter: "0x123", + }, + }, + + // 2 votes for maybe w/ 100 voting power + { + eventName: "Voted", + args: { + proposalId: 1n, + vote: { castBallot: 2, votingPower: 100n }, + voter: "0x123", + }, + }, + { + eventName: "Voted", + args: { + proposalId: 1n, + vote: { castBallot: 2, votingPower: 100n }, + voter: "0x123", + }, + }, + ]); + + const results = await coreVoting.getProposalVotingPower(1n); + + expect(results).toEqual({ + yes: 400n, + no: 300n, + maybe: 200n, + } satisfies VoteResults); + }); +}); diff --git a/packages/council-js/src/entities/coreVoting/ReadCoreVoting.ts b/packages/council-js/src/entities/coreVoting/ReadCoreVoting.ts index b77424b8..d5715332 100644 --- a/packages/council-js/src/entities/coreVoting/ReadCoreVoting.ts +++ b/packages/council-js/src/entities/coreVoting/ReadCoreVoting.ts @@ -108,11 +108,11 @@ export class ReadCoreVoting extends Entity { proposalId: bigint, options?: ContractReadOptions, ): Promise { - const execution = await this.getProposalExecution(proposalId, options); + const proposal = await this.getProposal(proposalId, options); // The proposal voting power is deleted when the proposal is executed, so we // have to get the results from vote events. - if (execution) { + if (!proposal) { const votes = await this.getVotes({ toBlock: options?.block, proposalId, diff --git a/packages/council-js/vitest.config.ts b/packages/council-js/vitest.config.ts index 430cf4b6..f3db8088 100644 --- a/packages/council-js/vitest.config.ts +++ b/packages/council-js/vitest.config.ts @@ -7,7 +7,7 @@ export default defineConfig({ }, coverage: { // get coverage for all of source except the example dir - include: ["./src/{!(example),}/**/*.ts"] - } + include: ["./src/**/*.ts"], + }, }, }); From c23deab1c335f8dc0c83f0a468be449cbffc1ea2 Mon Sep 17 00:00:00 2001 From: Ryan Goree Date: Tue, 18 Feb 2025 23:05:18 -0600 Subject: [PATCH 039/146] Remove scripts for non-existent script --- apps/council-js-starter/package.json | 2 -- 1 file changed, 2 deletions(-) diff --git a/apps/council-js-starter/package.json b/apps/council-js-starter/package.json index 7ecea8d2..849c04dc 100644 --- a/apps/council-js-starter/package.json +++ b/apps/council-js-starter/package.json @@ -12,8 +12,6 @@ "changeVaultStatus": "tsx -r dotenv/config src/scripts/changeVaultStatus.ts", "getGSCMembers": "tsx -r dotenv/config ./src/scripts/getGSCMembers.ts", "getProposalResults": "tsx -r dotenv/config src/scripts/getProposalResults.ts", - "dev": "tsx -r dotenv/config src/scripts/dev.ts", - "dev:watch": "tsx -r dotenv/config --watch src/scripts/dev.ts", "typecheck": "tsc --noEmit" }, "dependencies": { From 0e1afbd5057dd9e94294f07c949bcc9bbbd8cb4e Mon Sep 17 00:00:00 2001 From: Ryan Goree Date: Tue, 18 Feb 2025 23:10:07 -0600 Subject: [PATCH 040/146] Update ui lib files --- apps/council-ui/src/lib/councilSdk.ts | 3 --- apps/council-ui/src/lib/rainbowKit.ts | 34 -------------------------- apps/council-ui/src/lib/reactQuery.ts | 9 ++++++- apps/council-ui/src/lib/sdk.ts | 22 +++++++++++++++++ apps/council-ui/src/lib/wagmi.ts | 35 ++++++++++++++++++++++++++- apps/council-ui/src/ui/app.tsx | 6 ++--- 6 files changed, 67 insertions(+), 42 deletions(-) delete mode 100644 apps/council-ui/src/lib/councilSdk.ts delete mode 100644 apps/council-ui/src/lib/rainbowKit.ts create mode 100644 apps/council-ui/src/lib/sdk.ts diff --git a/apps/council-ui/src/lib/councilSdk.ts b/apps/council-ui/src/lib/councilSdk.ts deleted file mode 100644 index aa14c4b6..00000000 --- a/apps/council-ui/src/lib/councilSdk.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { createLruSimpleCache } from "@delvtech/council-viem"; - -export const sdkCache = createLruSimpleCache({ max: 500 }); diff --git a/apps/council-ui/src/lib/rainbowKit.ts b/apps/council-ui/src/lib/rainbowKit.ts deleted file mode 100644 index 7c73990f..00000000 --- a/apps/council-ui/src/lib/rainbowKit.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { getDefaultConfig } from "@rainbow-me/rainbowkit"; -import { - injectedWallet, - metaMaskWallet, - rainbowWallet, - safeWallet, - walletConnectWallet, -} from "@rainbow-me/rainbowkit/wallets"; -import { chains, transports } from "src/lib/wagmi"; - -const walletConnectId = process.env.NEXT_PUBLIC_WALLET_CONNECT_PROJECT_ID; -const wallets = [injectedWallet, safeWallet, rainbowWallet, metaMaskWallet]; - -// WalletConnect -if (walletConnectId) { - wallets.push(walletConnectWallet); -} else if (process.env.NODE_ENV === "development") { - console.warn( - "Missing WalletConnect project ID. Set the NEXT_PUBLIC_WALLET_CONNECT_PROJECT_ID variable in your environment to use WalletConnect.", - ); -} - -export const wagmiConfig = getDefaultConfig({ - appName: "Council", - projectId: walletConnectId || "0", - chains: chains as any, - transports, - wallets: [ - { - groupName: "Wallets", - wallets, - }, - ], -}); diff --git a/apps/council-ui/src/lib/reactQuery.ts b/apps/council-ui/src/lib/reactQuery.ts index c5cd083a..a870f894 100644 --- a/apps/council-ui/src/lib/reactQuery.ts +++ b/apps/council-ui/src/lib/reactQuery.ts @@ -1,3 +1,10 @@ import { QueryClient } from "@tanstack/react-query"; -export const reactQueryClient = new QueryClient(); +export const queryClient = new QueryClient({ + defaultOptions: { + queries: { + retry: false, + staleTime: 60_000, + }, + }, +}); diff --git a/apps/council-ui/src/lib/sdk.ts b/apps/council-ui/src/lib/sdk.ts new file mode 100644 index 00000000..5a122718 --- /dev/null +++ b/apps/council-ui/src/lib/sdk.ts @@ -0,0 +1,22 @@ +import { createCouncil } from "@delvtech/council-js"; +import { LruSimpleCache } from "@delvtech/drift"; +import { viemAdapter } from "@delvtech/drift-viem"; +import { GetPublicClientParameters, getPublicClient } from "@wagmi/core"; +import { wagmiConfig } from "src/lib/wagmi"; + +// 1 minute TTL to match the queryClient's staleTime +export const sdkCache = new LruSimpleCache({ max: 500, ttl: 60_000 }); + +export function getCouncil(params?: GetPublicClientParameters) { + const publicClient = getPublicClient(wagmiConfig, params); + + if (!publicClient) { + throw new Error("No public client found"); + } + + return createCouncil({ + adapter: viemAdapter({ publicClient }), + cache: sdkCache, + chainId: publicClient.chain.id, + }); +} diff --git a/apps/council-ui/src/lib/wagmi.ts b/apps/council-ui/src/lib/wagmi.ts index c63d227e..3ce73d0f 100644 --- a/apps/council-ui/src/lib/wagmi.ts +++ b/apps/council-ui/src/lib/wagmi.ts @@ -1,6 +1,14 @@ +import { getDefaultConfig } from "@rainbow-me/rainbowkit"; +import { + injectedWallet, + metaMaskWallet, + rainbowWallet, + safeWallet, + walletConnectWallet, +} from "@rainbow-me/rainbowkit/wallets"; import { councilConfigs } from "src/config/council.config"; import { http } from "wagmi"; -import { goerli, hardhat, localhost, mainnet } from "wagmi/chains"; +import { Chain, goerli, hardhat, localhost, mainnet } from "wagmi/chains"; const configuredChainIds = Object.keys(councilConfigs); @@ -21,3 +29,28 @@ export const transports = Object.fromEntries( return [id, http(rpcUrlsByChainId[id])]; }), ); + +const walletConnectId = process.env.NEXT_PUBLIC_WALLET_CONNECT_PROJECT_ID; +const wallets = [injectedWallet, safeWallet, rainbowWallet, metaMaskWallet]; + +// WalletConnect +if (walletConnectId) { + wallets.push(walletConnectWallet); +} else if (process.env.NODE_ENV === "development") { + console.warn( + "Missing WalletConnect project ID. Set the NEXT_PUBLIC_WALLET_CONNECT_PROJECT_ID variable in your environment to use WalletConnect.", + ); +} + +export const wagmiConfig = getDefaultConfig({ + appName: "Council", + projectId: walletConnectId || "", + chains: allChains as Chain[] as [Chain, ...Chain[]], + transports, + wallets: [ + { + groupName: "Wallets", + wallets, + }, + ], +}); diff --git a/apps/council-ui/src/ui/app.tsx b/apps/council-ui/src/ui/app.tsx index 7b874579..02fe73f8 100644 --- a/apps/council-ui/src/ui/app.tsx +++ b/apps/council-ui/src/ui/app.tsx @@ -4,8 +4,8 @@ import type { AppProps } from "next/app"; import { ReactElement } from "react"; import { Toaster } from "react-hot-toast"; import { councilConfigs } from "src/config/council.config"; -import { wagmiConfig } from "src/lib/rainbowKit"; -import { reactQueryClient } from "src/lib/reactQuery"; +import { queryClient } from "src/lib/reactQuery"; +import { wagmiConfig } from "src/lib/wagmi"; import { Navigation } from "src/ui/navigation/Navigation"; import { WagmiProvider } from "wagmi"; @@ -14,7 +14,7 @@ console.log(councilConfigs); function App({ Component, pageProps }: AppProps): ReactElement { return ( - + From 2ce51ec4c61cd8d742edfa2d8a1b890b512560f2 Mon Sep 17 00:00:00 2001 From: Ryan Goree Date: Tue, 18 Feb 2025 23:17:19 -0600 Subject: [PATCH 041/146] Update UI utils --- .../src/ui/base/utils/getBlockDate.ts | 6 ++-- apps/council-ui/src/utils/getAirdropData.ts | 35 +++++++++++-------- .../council-ui/src/utils/getBulkEnsRecords.ts | 6 ++-- .../council-ui/src/utils/getProposalStatus.ts | 2 +- 4 files changed, 26 insertions(+), 23 deletions(-) diff --git a/apps/council-ui/src/ui/base/utils/getBlockDate.ts b/apps/council-ui/src/ui/base/utils/getBlockDate.ts index 1ec228c1..714ddf63 100644 --- a/apps/council-ui/src/ui/base/utils/getBlockDate.ts +++ b/apps/council-ui/src/ui/base/utils/getBlockDate.ts @@ -11,13 +11,11 @@ export async function getBlockDate( client: UsePublicClientReturnType, ): Promise { if (!client) { - return; + return; } const block = await client - .getBlock({ - blockNumber: blockNumber, - }) + .getBlock({ blockNumber }) .catch((error) => { if (error instanceof BlockNotFoundError) { return undefined; diff --git a/apps/council-ui/src/utils/getAirdropData.ts b/apps/council-ui/src/utils/getAirdropData.ts index 8ff62c49..ff2740d2 100644 --- a/apps/council-ui/src/utils/getAirdropData.ts +++ b/apps/council-ui/src/utils/getAirdropData.ts @@ -8,19 +8,26 @@ export interface AirdropData { /** * Fetch the data needed to claim an airdrop for the given address. */ -export async function getAirdropData( - address: string, - chainId: SupportedChainId, -): Promise { - let baseDataURL = councilConfigs[chainId]?.airdrop?.baseDataURL; +export async function getAirdropData({ + account, + chainId, +}: { + account: string; + chainId?: SupportedChainId; +}): Promise { + const config = councilConfigs[chainId as SupportedChainId]?.airdrop; + + if (!config) { + return undefined; + } + + let baseDataURL = config.baseDataURL ?? ""; // Ensure the base URL has a trailing slash - if (baseDataURL && !baseDataURL.endsWith("/")) { + if (!baseDataURL.endsWith("/")) { baseDataURL += "/"; } - let dataURL: URL | undefined; - // Construct the full URL to fetch the airdrop data from // for example: // baseDataURL = "https://cdn.io/airdrop/" @@ -30,11 +37,9 @@ export async function getAirdropData( // baseDataURL = "/api/airdrop" // address = "0x123..." // dataURL = "/api/airdrop/0x123..." - if (address && baseDataURL) { - dataURL = new URL(`${baseDataURL}${address}`, window.location.origin); - } + const dataURL = new URL(`${baseDataURL}${account}`, window.location.origin); - const data = await fetch(dataURL as URL) + const data = await fetch(dataURL) .then(async (res) => { // Assume that a 404 means the address doesn't have an airdrop if (res.status === 404) { @@ -45,7 +50,7 @@ export async function getAirdropData( // the response and assume the address doesn't have an airdrop if (!res.ok) { console.warn( - `Failed to fetch airdrop data for address ${address}:\n${await res.text()}`, + `Failed to fetch airdrop data for address ${account}:\n${await res.text()}`, ); return undefined; } @@ -54,7 +59,7 @@ export async function getAirdropData( }) .catch((err) => { console.warn( - `Failed to fetch airdrop data for address ${address}:\n${err}`, + `Failed to fetch airdrop data for address ${account}:\n${err}`, ); return undefined; }); @@ -66,7 +71,7 @@ export async function getAirdropData( // Throw an error if the data doesn't match the expected format if (!isAirdropData(data)) { throw new Error( - `Invalid airdrop data for address ${address}:\n${JSON.stringify( + `Invalid airdrop data for address ${account}:\n${JSON.stringify( data, null, 2, diff --git a/apps/council-ui/src/utils/getBulkEnsRecords.ts b/apps/council-ui/src/utils/getBulkEnsRecords.ts index b7c92f9b..2fe0fb77 100644 --- a/apps/council-ui/src/utils/getBulkEnsRecords.ts +++ b/apps/council-ui/src/utils/getBulkEnsRecords.ts @@ -1,5 +1,5 @@ import { - UnsupportedNetworkError, + UnsupportedChainError, createEnsPublicClient, } from "@ensdomains/ensjs"; import { getName } from "@ensdomains/ensjs/public"; @@ -50,8 +50,8 @@ export async function getBulkEnsRecords( transport: transports[chain.id], }) as ReturnType; } catch (error) { - // Not every network is supported by ENS, so we return null for all addresses - if (error instanceof UnsupportedNetworkError) { + // Not every chain is supported by ENS, so we return null for all addresses + if (error instanceof UnsupportedChainError) { return Object.fromEntries(addresses.map((address) => [address, null])); } } diff --git a/apps/council-ui/src/utils/getProposalStatus.ts b/apps/council-ui/src/utils/getProposalStatus.ts index e459ea0a..a1e718fb 100644 --- a/apps/council-ui/src/utils/getProposalStatus.ts +++ b/apps/council-ui/src/utils/getProposalStatus.ts @@ -1,4 +1,4 @@ -import { VoteResults } from "@delvtech/council-viem"; +import { VoteResults } from "@delvtech/council-js"; export type ProposalStatus = | "UNKNOWN" From 9d99eb3931ad9d8e38de38ea15652cd52960df85 Mon Sep 17 00:00:00 2001 From: Ryan Goree Date: Tue, 18 Feb 2025 23:21:53 -0600 Subject: [PATCH 042/146] Update core UI hooks --- .../src/ui/config/hooks/useCouncilConfig.ts | 14 ++++++--- .../src/ui/council/hooks/useReadCoreVoting.ts | 28 ------------------ .../src/ui/council/hooks/useReadCouncil.ts | 25 ---------------- .../src/ui/council/hooks/useReadGscVoting.ts | 23 --------------- .../council/hooks/useReadWriteCoreVoting.ts | 28 ------------------ .../ui/council/hooks/useReadWriteGscVoting.ts | 23 --------------- .../ui/network/hooks/useSupportedChainId.ts | 7 +++-- .../src/ui/sdk/hooks/useReadCouncil.ts | 29 +++++++++++++++++++ .../hooks/useReadWriteCouncil.ts | 19 +++++++----- 9 files changed, 55 insertions(+), 141 deletions(-) delete mode 100644 apps/council-ui/src/ui/council/hooks/useReadCoreVoting.ts delete mode 100644 apps/council-ui/src/ui/council/hooks/useReadCouncil.ts delete mode 100644 apps/council-ui/src/ui/council/hooks/useReadGscVoting.ts delete mode 100644 apps/council-ui/src/ui/council/hooks/useReadWriteCoreVoting.ts delete mode 100644 apps/council-ui/src/ui/council/hooks/useReadWriteGscVoting.ts create mode 100644 apps/council-ui/src/ui/sdk/hooks/useReadCouncil.ts rename apps/council-ui/src/ui/{council => sdk}/hooks/useReadWriteCouncil.ts (52%) diff --git a/apps/council-ui/src/ui/config/hooks/useCouncilConfig.ts b/apps/council-ui/src/ui/config/hooks/useCouncilConfig.ts index f7276a84..ee293559 100644 --- a/apps/council-ui/src/ui/config/hooks/useCouncilConfig.ts +++ b/apps/council-ui/src/ui/config/hooks/useCouncilConfig.ts @@ -1,8 +1,14 @@ +import { SupportedChainId, councilConfigs } from "src/config/council.config"; import { CouncilConfig } from "src/config/CouncilConfig"; -import { councilConfigs } from "src/config/council.config"; import { useSupportedChainId } from "src/ui/network/hooks/useSupportedChainId"; -export function useCouncilConfig(): CouncilConfig { - const chainId = useSupportedChainId(); - return councilConfigs[chainId]; +export function useCouncilConfig({ + chainId, +}: { + chainId?: SupportedChainId; +} = {}) { + chainId = useSupportedChainId(chainId); + return councilConfigs[chainId] as CouncilConfig & { + chainId: SupportedChainId; + }; } diff --git a/apps/council-ui/src/ui/council/hooks/useReadCoreVoting.ts b/apps/council-ui/src/ui/council/hooks/useReadCoreVoting.ts deleted file mode 100644 index 9b9e1960..00000000 --- a/apps/council-ui/src/ui/council/hooks/useReadCoreVoting.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { ReadCoreVoting } from "@delvtech/council-viem"; -import { useMemo } from "react"; -import { useCouncilConfig } from "src/ui/config/hooks/useCouncilConfig"; -import { useReadCouncil } from "src/ui/council/hooks/useReadCouncil"; - -/** - * Use a ReadCoreVoting instance for configured core voting contract. - */ -export function useReadCoreVoting(): ReadCoreVoting { - const council = useReadCouncil(); - const { coreVoting } = useCouncilConfig(); - - return useMemo(() => { - return council.coreVoting({ - address: coreVoting.address, - vaults: coreVoting.vaults.map((vault) => { - switch (vault.type) { - case "LockingVault": - return council.lockingVault(vault.address); - case "VestingVault": - return council.vestingVault(vault.address); - default: - return vault.address; - } - }), - }); - }, [council, coreVoting.address, coreVoting.vaults]); -} diff --git a/apps/council-ui/src/ui/council/hooks/useReadCouncil.ts b/apps/council-ui/src/ui/council/hooks/useReadCouncil.ts deleted file mode 100644 index 2a57c27a..00000000 --- a/apps/council-ui/src/ui/council/hooks/useReadCouncil.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { ReadCouncil } from "@delvtech/council-viem"; -import { useMemo } from "react"; -import { sdkCache } from "src/lib/councilSdk"; -import { useSupportedChainId } from "src/ui/network/hooks/useSupportedChainId"; -import { usePublicClient } from "wagmi"; - -/** - * Use a ReadCouncil instance. - */ -export function useReadCouncil(): ReadCouncil { - const chainId = useSupportedChainId(); - const publicClient = usePublicClient({ chainId }); - - return useMemo(() => { - if (!publicClient) { - throw new Error("Public client is not available"); - } - - return new ReadCouncil({ - publicClient, - cache: sdkCache, - namespace: "council-viem", - }); - }, [chainId]); -} diff --git a/apps/council-ui/src/ui/council/hooks/useReadGscVoting.ts b/apps/council-ui/src/ui/council/hooks/useReadGscVoting.ts deleted file mode 100644 index 01b372df..00000000 --- a/apps/council-ui/src/ui/council/hooks/useReadGscVoting.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { ReadCoreVoting } from "@delvtech/council-viem"; -import { useMemo } from "react"; -import { useCouncilConfig } from "src/ui/config/hooks/useCouncilConfig"; -import { useReadCouncil } from "src/ui/council/hooks/useReadCouncil"; - -/** - * Use a ReadCoreVoting instance for the configured gsc voting contract. - */ -export function useReadGscVoting(): ReadCoreVoting | undefined { - const council = useReadCouncil(); - const { gscVoting } = useCouncilConfig(); - - return useMemo(() => { - if (!gscVoting) { - return undefined; - } - - return council.coreVoting({ - address: gscVoting.address, - vaults: [council.gscVault(gscVoting.vault.address)], - }); - }, [council, gscVoting]); -} diff --git a/apps/council-ui/src/ui/council/hooks/useReadWriteCoreVoting.ts b/apps/council-ui/src/ui/council/hooks/useReadWriteCoreVoting.ts deleted file mode 100644 index 3a7f7b41..00000000 --- a/apps/council-ui/src/ui/council/hooks/useReadWriteCoreVoting.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { ReadWriteCoreVoting } from "@delvtech/council-viem"; -import { useMemo } from "react"; -import { useCouncilConfig } from "src/ui/config/hooks/useCouncilConfig"; -import { useReadWriteCouncil } from "src/ui/council/hooks/useReadWriteCouncil"; - -/** - * Use a ReadWriteCoreVoting instance for configured core voting contract. - */ -export function useReadWriteCoreVoting(): ReadWriteCoreVoting | undefined { - const council = useReadWriteCouncil(); - const { coreVoting } = useCouncilConfig(); - - return useMemo(() => { - return council?.coreVoting({ - address: coreVoting.address, - vaults: coreVoting.vaults.map((vault) => { - switch (vault.type) { - case "LockingVault": - return council.lockingVault(vault.address); - case "VestingVault": - return council.vestingVault(vault.address); - default: - return vault.address; - } - }), - }); - }, [council, coreVoting.address, coreVoting.vaults]); -} diff --git a/apps/council-ui/src/ui/council/hooks/useReadWriteGscVoting.ts b/apps/council-ui/src/ui/council/hooks/useReadWriteGscVoting.ts deleted file mode 100644 index 510e3b28..00000000 --- a/apps/council-ui/src/ui/council/hooks/useReadWriteGscVoting.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { ReadWriteCoreVoting } from "@delvtech/council-viem"; -import { useMemo } from "react"; -import { useCouncilConfig } from "src/ui/config/hooks/useCouncilConfig"; -import { useReadWriteCouncil } from "src/ui/council/hooks/useReadWriteCouncil"; - -/** - * Use a ReadWriteCoreVoting instance for configured gsc voting contract. - */ -export function useReadWriteGscVoting(): ReadWriteCoreVoting | undefined { - const council = useReadWriteCouncil(); - const { gscVoting } = useCouncilConfig(); - - return useMemo(() => { - if (!gscVoting || !council) { - return undefined; - } - - return council.coreVoting({ - address: gscVoting.address, - vaults: [council.gscVault(gscVoting.vault.address)], - }); - }, [council, gscVoting]); -} diff --git a/apps/council-ui/src/ui/network/hooks/useSupportedChainId.ts b/apps/council-ui/src/ui/network/hooks/useSupportedChainId.ts index c4b3398f..e911d5ff 100644 --- a/apps/council-ui/src/ui/network/hooks/useSupportedChainId.ts +++ b/apps/council-ui/src/ui/network/hooks/useSupportedChainId.ts @@ -6,8 +6,11 @@ import { useChainId } from "wagmi"; const allChainIds = chains.map(({ id }) => id); const defaultChainId = chains[0].id as SupportedChainId; -export function useSupportedChainId(): SupportedChainId { - const chainId = useChainId() as SupportedChainId; +export function useSupportedChainId( + chainId?: SupportedChainId, +): SupportedChainId { + const connectedChainId = useChainId() as SupportedChainId; + chainId ??= connectedChainId; return useMemo(() => { if (allChainIds.includes(chainId)) { diff --git a/apps/council-ui/src/ui/sdk/hooks/useReadCouncil.ts b/apps/council-ui/src/ui/sdk/hooks/useReadCouncil.ts new file mode 100644 index 00000000..bc42ae3c --- /dev/null +++ b/apps/council-ui/src/ui/sdk/hooks/useReadCouncil.ts @@ -0,0 +1,29 @@ +import { ReadCouncil } from "@delvtech/council-js"; +import { viemAdapter } from "@delvtech/drift-viem"; +import { useMemo } from "react"; +import { SupportedChainId } from "src/config/council.config"; +import { sdkCache } from "src/lib/sdk"; +import { usePublicClient } from "wagmi"; + +/** + * Use a ReadCouncil instance. + */ +export function useReadCouncil({ + chainId, +}: { + chainId?: SupportedChainId; +} = {}): ReadCouncil { + const publicClient = usePublicClient({ chainId }); + + return useMemo(() => { + if (!publicClient) { + throw new Error("Public client is not available"); + } + + return new ReadCouncil({ + adapter: viemAdapter({ publicClient }), + cache: sdkCache, + chainId, + }); + }, [chainId]); +} diff --git a/apps/council-ui/src/ui/council/hooks/useReadWriteCouncil.ts b/apps/council-ui/src/ui/sdk/hooks/useReadWriteCouncil.ts similarity index 52% rename from apps/council-ui/src/ui/council/hooks/useReadWriteCouncil.ts rename to apps/council-ui/src/ui/sdk/hooks/useReadWriteCouncil.ts index 55f4b9c4..c5c08085 100644 --- a/apps/council-ui/src/ui/council/hooks/useReadWriteCouncil.ts +++ b/apps/council-ui/src/ui/sdk/hooks/useReadWriteCouncil.ts @@ -1,14 +1,18 @@ -import { ReadWriteCouncil } from "@delvtech/council-viem"; +import { ReadWriteCouncil } from "@delvtech/council-js"; +import { viemAdapter } from "@delvtech/drift-viem"; import { useMemo } from "react"; -import { sdkCache } from "src/lib/councilSdk"; -import { useSupportedChainId } from "src/ui/network/hooks/useSupportedChainId"; +import { SupportedChainId } from "src/config/council.config"; +import { sdkCache } from "src/lib/sdk"; import { usePublicClient, useWalletClient } from "wagmi"; /** * Use a ReadWriteCouncil instance. */ -export function useReadWriteCouncil(): ReadWriteCouncil | undefined { - const chainId = useSupportedChainId(); +export function useReadWriteCouncil({ + chainId, +}: { + chainId?: SupportedChainId; +}): ReadWriteCouncil | undefined { const publicClient = usePublicClient({ chainId }); const { data: walletClient } = useWalletClient({ chainId }); @@ -18,10 +22,9 @@ export function useReadWriteCouncil(): ReadWriteCouncil | undefined { } return new ReadWriteCouncil({ - publicClient, - walletClient, + adapter: viemAdapter({ publicClient, walletClient }), cache: sdkCache, - namespace: "council-viem", + chainId, }); }, [publicClient, walletClient]); } From bb3d81a5570f836bce4abe4a5bcf45c8413fad34 Mon Sep 17 00:00:00 2001 From: Ryan Goree Date: Tue, 18 Feb 2025 23:26:24 -0600 Subject: [PATCH 043/146] Update proposals page --- apps/council-ui/pages/proposals/index.tsx | 139 +++++++++++++--------- 1 file changed, 83 insertions(+), 56 deletions(-) diff --git a/apps/council-ui/pages/proposals/index.tsx b/apps/council-ui/pages/proposals/index.tsx index 2aa54a2b..aa7cb604 100644 --- a/apps/council-ui/pages/proposals/index.tsx +++ b/apps/council-ui/pages/proposals/index.tsx @@ -5,14 +5,13 @@ import { ExternalInfoCard } from "src/ui/base/information/ExternalInfoCard"; import { Page } from "src/ui/base/Page"; import { getBlockDate } from "src/ui/base/utils/getBlockDate"; import { useCouncilConfig } from "src/ui/config/hooks/useCouncilConfig"; -import { useReadCoreVoting } from "src/ui/council/hooks/useReadCoreVoting"; -import { useReadGscVoting } from "src/ui/council/hooks/useReadGscVoting"; import { useSupportedChainId } from "src/ui/network/hooks/useSupportedChainId"; import { ProposalRowData, ProposalsTable, } from "src/ui/proposals/ProposalTable/ProposalsTable"; import { ProposalsTableSkeleton } from "src/ui/proposals/ProposalTable/ProposalsTableSkeleton"; +import { useReadCouncil } from "src/ui/sdk/hooks/useReadCouncil"; import { getProposalStatus } from "src/utils/getProposalStatus"; import { useAccount, usePublicClient } from "wagmi"; @@ -36,7 +35,7 @@ export default function ProposalsPage(): ReactElement { case "error": return (
- + {error ? String(error) : "Unknown error"}
@@ -72,69 +71,97 @@ export default function ProposalsPage(): ReactElement { function useProposalsPageData( account: `0x${string}` | undefined, ): UseQueryResult { - const coreVoting = useReadCoreVoting(); - const gscVoting = useReadGscVoting(); const chainId = useSupportedChainId(); const config = useCouncilConfig(); const client = usePublicClient(); + const council = useReadCouncil(); return useQuery({ queryKey: ["proposalsPage", account, chainId], queryFn: async (): Promise => { - let allProposals = await coreVoting.getProposals(); - - if (gscVoting) { - const gscProposals = await gscVoting.getProposals(); - allProposals = [...allProposals, ...gscProposals]; + const coreVoting = council.coreVoting(config.coreVoting.address); + const gscVoting = config.gscVoting + ? council.coreVoting(config.gscVoting.address) + : undefined; + + const [coreProposals, gscProposals] = await Promise.all([ + coreVoting.getProposals(), + gscVoting?.getProposals(), + ]); + + const allProposals = coreProposals.map((proposal) => { + return { + ...proposal, + votingContract: coreVoting, + }; + }); + + if (gscProposals) { + allProposals.push( + ...gscProposals.map((proposal) => { + return { + ...proposal, + votingContract: gscVoting!, + }; + }), + ); } return await Promise.all( - allProposals.map(async (proposal) => { - const vote = account - ? await proposal.getVote({ account }) - : undefined; - - const currentQuorum = await proposal.getCurrentQuorum(); - - const requiredQuorum = await proposal.getRequiredQuorum(); - const isExecuted = await proposal.getIsExecuted(); - const results = await proposal.getResults(); - - const lastCall = await proposal.getLastCallBlock(); - const lastCallDate = lastCall - ? await getBlockDate(lastCall, client) - : undefined; - - const createdDate = await getBlockDate(proposal.created, client); - const votingEnds = await getBlockDate(proposal.expiration, client); - - const status = getProposalStatus({ - isExecuted, - currentQuorum, - lastCallDate, - requiredQuorum, - results, - }); - - const isGsc = proposal.coreVoting.address === gscVoting?.address; - const proposalConfig = isGsc - ? config.gscVoting?.proposals[String(proposal.id)] - : config.coreVoting.proposals[String(proposal.id)]; - - const result: ProposalRowData = { - status, - coreVotingAddress: proposal.coreVoting.address, - votingContractName: proposal.coreVoting.name, - id: proposal.id, - created: createdDate, - votingEnds, - currentQuorum, - ballot: vote && vote.power > BigInt(0) ? vote.ballot : undefined, - sentenceSummary: proposalConfig?.sentenceSummary, - title: proposalConfig?.title, - }; - return result; - }), + allProposals.map( + async ({ + createdBlock, + expirationBlock, + proposalId, + votingContract, + }) => { + const [proposal, results, executionEvent, vote] = await Promise.all( + [ + coreVoting.getProposal(proposalId), + coreVoting.getProposalVotingPower(proposalId), + coreVoting.getProposalExecution(proposalId), + account + ? await coreVoting.getVote({ proposalId, voter: account }) + : undefined, + ], + ); + + const [lastCallDate, createdDate, votingEnds] = await Promise.all([ + proposal?.lastCallBlock + ? getBlockDate(proposal?.lastCallBlock, client) + : undefined, + getBlockDate(createdBlock, client), + getBlockDate(expirationBlock, client), + ]); + + const currentQuorum = results.yes + results.no + results.maybe; + const status = getProposalStatus({ + isExecuted: !!executionEvent, + currentQuorum, + lastCallDate, + requiredQuorum: proposal?.requiredQuorum, + results, + }); + + const proposalConfig = + votingContract.address === gscVoting?.address + ? config.gscVoting?.proposals[String(proposalId)] + : config.coreVoting.proposals[String(proposalId)]; + + const result: ProposalRowData = { + id: proposalId, + title: proposalConfig?.title, + sentenceSummary: proposalConfig?.sentenceSummary, + status, + created: createdDate, + currentQuorum, + ballot: vote?.votingPower ? vote.ballot : undefined, + votingEnds, + votingContract, + }; + return result; + }, + ), ); }, }); From 0757c3eef6e96ef065a0253d3f4d102c58c8ab37 Mon Sep 17 00:00:00 2001 From: Ryan Goree Date: Wed, 19 Feb 2025 00:42:46 -0600 Subject: [PATCH 044/146] Update `ProposalsTable` --- apps/council-ui/pages/proposals/index.tsx | 31 ++-- .../src/ui/base/tables/SortableGridTable.tsx | 7 +- .../ProposalTable/ProposalsTable.tsx | 167 +++++++++--------- .../src/ui/voting/FormattedBallot.tsx | 6 +- 4 files changed, 104 insertions(+), 107 deletions(-) diff --git a/apps/council-ui/pages/proposals/index.tsx b/apps/council-ui/pages/proposals/index.tsx index aa7cb604..70e233da 100644 --- a/apps/council-ui/pages/proposals/index.tsx +++ b/apps/council-ui/pages/proposals/index.tsx @@ -109,35 +109,25 @@ function useProposalsPageData( return await Promise.all( allProposals.map( - async ({ - createdBlock, - expirationBlock, - proposalId, - votingContract, - }) => { - const [proposal, results, executionEvent, vote] = await Promise.all( - [ + async ({ expirationBlock, proposalId, votingContract }) => { + const [votingEnds, proposal, results, executionEvent, vote] = + await Promise.all([ + getBlockDate(expirationBlock, client), coreVoting.getProposal(proposalId), coreVoting.getProposalVotingPower(proposalId), coreVoting.getProposalExecution(proposalId), account ? await coreVoting.getVote({ proposalId, voter: account }) : undefined, - ], - ); + ]); - const [lastCallDate, createdDate, votingEnds] = await Promise.all([ - proposal?.lastCallBlock - ? getBlockDate(proposal?.lastCallBlock, client) - : undefined, - getBlockDate(createdBlock, client), - getBlockDate(expirationBlock, client), - ]); + const lastCallDate = proposal?.lastCallBlock + ? await getBlockDate(proposal?.lastCallBlock, client) + : undefined; - const currentQuorum = results.yes + results.no + results.maybe; const status = getProposalStatus({ isExecuted: !!executionEvent, - currentQuorum, + currentQuorum: results.yes + results.no + results.maybe, lastCallDate, requiredQuorum: proposal?.requiredQuorum, results, @@ -153,12 +143,11 @@ function useProposalsPageData( title: proposalConfig?.title, sentenceSummary: proposalConfig?.sentenceSummary, status, - created: createdDate, - currentQuorum, ballot: vote?.votingPower ? vote.ballot : undefined, votingEnds, votingContract, }; + return result; }, ), diff --git a/apps/council-ui/src/ui/base/tables/SortableGridTable.tsx b/apps/council-ui/src/ui/base/tables/SortableGridTable.tsx index a13cceee..188c3bf7 100644 --- a/apps/council-ui/src/ui/base/tables/SortableGridTable.tsx +++ b/apps/council-ui/src/ui/base/tables/SortableGridTable.tsx @@ -42,6 +42,9 @@ interface SortableGridTableProps { * }, * "Ballot" * ]} + * onSort={({ key, direction }) => { + * // ... + * }} * rows={[ * ["Voter 1", "100", "YES"], * ["Voter 2", "200", "YES"], @@ -98,7 +101,7 @@ export function SortableGridTable({ return ( diff --git a/apps/council-ui/src/ui/vaults/gscVault/GscVaultDetails.tsx b/apps/council-ui/src/ui/vaults/gscVault/GscVaultDetails.tsx index 7157a658..37ce578c 100644 --- a/apps/council-ui/src/ui/vaults/gscVault/GscVaultDetails.tsx +++ b/apps/council-ui/src/ui/vaults/gscVault/GscVaultDetails.tsx @@ -15,8 +15,8 @@ import { VaultDetails } from "src/ui/vaults/VaultDetails/VaultDetails"; import { VaultDetailsSkeleton } from "src/ui/vaults/VaultDetails/VaultDetailsSkeleton"; import { VaultHeader } from "src/ui/vaults/VaultHeader"; import { getBulkEnsRecords } from "src/utils/getBulkEnsRecords"; -import { getGscStatus } from "src/utils/gsc/getGscStatus"; -import { GscStatus } from "src/utils/gsc/types"; +import { getGscStatus } from "src/utils/vaults/gsc/getGscStatus"; +import { GscStatus } from "src/utils/vaults/gsc/types"; import { useAccount } from "wagmi"; interface GscVaultDetailsProps { diff --git a/apps/council-ui/src/ui/vaults/gscVault/GscVaultProfileCard.tsx b/apps/council-ui/src/ui/vaults/gscVault/GscVaultProfileCard.tsx index cf23ca01..0e9b8c82 100644 --- a/apps/council-ui/src/ui/vaults/gscVault/GscVaultProfileCard.tsx +++ b/apps/council-ui/src/ui/vaults/gscVault/GscVaultProfileCard.tsx @@ -7,7 +7,7 @@ import { useSupportedChainId } from "src/ui/network/hooks/useSupportedChainId"; import { VaultProfileCard } from "src/ui/vaults/VaultProfileCard"; import { VaultProfileCardSkeleton } from "src/ui/vaults/VaultProfileCardSkeleton"; import { useKickGscMember } from "src/ui/vaults/gscVault/hooks/useKickGscMember"; -import { getGscStatus, isGscMember } from "src/utils/gsc/getGscStatus"; +import { getGscStatus, isGscMember } from "src/utils/vaults/gsc/getGscStatus"; interface GSCVaultProfileCardProps { address: `0x${string}`; diff --git a/apps/council-ui/src/ui/vaults/gscVault/GscVaultStatsRow.tsx b/apps/council-ui/src/ui/vaults/gscVault/GscVaultStatsRow.tsx index 9d9ee300..f72c13e5 100644 --- a/apps/council-ui/src/ui/vaults/gscVault/GscVaultStatsRow.tsx +++ b/apps/council-ui/src/ui/vaults/gscVault/GscVaultStatsRow.tsx @@ -2,7 +2,7 @@ import { ReactElement } from "react"; import { Stat } from "src/ui/base/Stat"; import { DefinitionTooltip } from "src/ui/base/Tooltip"; import { formatVotingPower } from "src/ui/base/formatting/formatVotingPower"; -import { GscStatus } from "src/utils/gsc/types"; +import { GscStatus } from "src/utils/vaults/gsc/types"; import { GscMembershipStatusStat } from "./GscMembershipStatusStat"; interface GSCVaultStatsRowProps { diff --git a/apps/council-ui/src/ui/vaults/gscVault/hooks/useGscStatus.ts b/apps/council-ui/src/ui/vaults/gscVault/hooks/useGscStatus.ts index c7a34f16..7c8a0482 100644 --- a/apps/council-ui/src/ui/vaults/gscVault/hooks/useGscStatus.ts +++ b/apps/council-ui/src/ui/vaults/gscVault/hooks/useGscStatus.ts @@ -1,6 +1,6 @@ import { useQuery } from "@tanstack/react-query"; import { useSupportedChainId } from "src/ui/network/hooks/useSupportedChainId"; -import { getGscStatus } from "src/utils/gsc/getGscStatus"; +import { getGscStatus } from "src/utils/vaults/gsc/getGscStatus"; export function useGscStatus(account: `0x${string}` | undefined) { const chainId = useSupportedChainId(); diff --git a/apps/council-ui/src/ui/vaults/hooks/useVaultVotingPower.ts b/apps/council-ui/src/ui/vaults/hooks/useVaultVotingPower.ts index 34d5484c..0a36887a 100644 --- a/apps/council-ui/src/ui/vaults/hooks/useVaultVotingPower.ts +++ b/apps/council-ui/src/ui/vaults/hooks/useVaultVotingPower.ts @@ -32,6 +32,9 @@ export function useVaultVotingPower({ council .votingVault(vaultAddress) .getVotingPower({ voter: accountToUse, block }) + // Wagmi doesn't decode the uninitialized error, so we simply + // return 0 if the the call fails. + .catch(() => 0n) : undefined, }); } diff --git a/apps/council-ui/src/ui/vaults/hooks/useVotingPower.ts b/apps/council-ui/src/ui/vaults/hooks/useVotingPower.ts index dadebd43..f227dbfe 100644 --- a/apps/council-ui/src/ui/vaults/hooks/useVotingPower.ts +++ b/apps/council-ui/src/ui/vaults/hooks/useVotingPower.ts @@ -2,8 +2,8 @@ import { Address, RangeBlock } from "@delvtech/drift"; import { useQuery } from "@tanstack/react-query"; import { SupportedChainId } from "src/config/council.config"; import { VotingContractConfig } from "src/config/types"; -import { useSupportedChainId } from "src/ui/network/hooks/useSupportedChainId"; import { useReadCouncil } from "src/ui/council/useReadCouncil"; +import { useSupportedChainId } from "src/ui/network/hooks/useSupportedChainId"; interface UseVotingPowerOptions { votingContract: VotingContractConfig; @@ -26,7 +26,13 @@ export default function useVotingPower({ const council = useReadCouncil({ chainId }); const enabled = !!account && !!chainId && !!council; return useQuery({ - queryKey: ["votingPower", chainId, votingContract.address, account, block], + queryKey: [ + "votingPower", + chainId, + votingContract.address, + account, + block?.toString(), + ], enabled, queryFn: enabled ? async () => { diff --git a/apps/council-ui/src/ui/voters/VoterStatsRow.tsx b/apps/council-ui/src/ui/voters/VoterStatsRow.tsx index 68792872..981bdc04 100644 --- a/apps/council-ui/src/ui/voters/VoterStatsRow.tsx +++ b/apps/council-ui/src/ui/voters/VoterStatsRow.tsx @@ -2,7 +2,7 @@ import { ReactElement } from "react"; import { Stat } from "src/ui/base/Stat"; import { DefinitionTooltip } from "src/ui/base/Tooltip"; import { formatVotingPower } from "src/ui/base/formatting/formatVotingPower"; -import { GscStatus } from "src/utils/gsc/types"; +import { GscStatus } from "src/utils/vaults/gsc/types"; interface VoterStatsRowProps { gscStatus: GscStatus | undefined; diff --git a/apps/council-ui/src/ui/voters/VoterVaultsList.tsx b/apps/council-ui/src/ui/voters/VoterVaultsList.tsx index df8995fa..aee151b1 100644 --- a/apps/council-ui/src/ui/voters/VoterVaultsList.tsx +++ b/apps/council-ui/src/ui/voters/VoterVaultsList.tsx @@ -12,7 +12,7 @@ import { LockingVaultProfileCard } from "src/ui/vaults/lockingVault/LockingVault import { VaultProfileCard } from "src/ui/vaults/VaultProfileCard"; import { VaultProfileCardSkeleton } from "src/ui/vaults/VaultProfileCardSkeleton"; import { VestingVaultProfileCard } from "src/ui/vaults/vestingVault/VestingVaultProfileCard"; -import { getIsGscEligible } from "src/utils/gsc/getIsGscEligible"; +import { getIsGscEligible } from "src/utils/vaults/gsc/getIsGscEligible"; interface VoterVaultsListProps { account: `0x${string}`; diff --git a/apps/council-ui/src/ui/voting/hooks/useVote.ts b/apps/council-ui/src/ui/voting/hooks/useVote.ts index aa41601f..a9309c18 100644 --- a/apps/council-ui/src/ui/voting/hooks/useVote.ts +++ b/apps/council-ui/src/ui/voting/hooks/useVote.ts @@ -1,8 +1,8 @@ import { Address } from "@delvtech/drift"; import { useQuery } from "@tanstack/react-query"; import { SupportedChainId } from "src/config/council.config"; -import { useSupportedChainId } from "src/ui/network/hooks/useSupportedChainId"; import { useReadCouncil } from "src/ui/council/useReadCouncil"; +import { useSupportedChainId } from "src/ui/network/hooks/useSupportedChainId"; interface UseVoteOptions { votingContract: Address; @@ -24,10 +24,11 @@ export function useVote({ queryKey: ["vote", chainId, votingContract, account, chainId], enabled, queryFn: enabled - ? () => { - return council + ? async () => { + const vote = await council .coreVoting(votingContract) .getVote({ proposalId, voter: account }); + return vote || null; } : undefined, }); diff --git a/apps/council-ui/src/utils/council/getCouncil.ts b/apps/council-ui/src/utils/council/getCouncil.ts new file mode 100644 index 00000000..42cdaa4b --- /dev/null +++ b/apps/council-ui/src/utils/council/getCouncil.ts @@ -0,0 +1,9 @@ +import { createCouncil } from "@delvtech/council-js"; +import { SupportedChainId } from "src/config/council.config"; +import { getDrift } from "src/lib/drift"; + +export function getCouncil(chainId: SupportedChainId) { + return createCouncil({ + drift: getDrift({ chainId }), + }); +} diff --git a/apps/council-ui/src/utils/gsc/getGscStatus.ts b/apps/council-ui/src/utils/vaults/gsc/getGscStatus.ts similarity index 82% rename from apps/council-ui/src/utils/gsc/getGscStatus.ts rename to apps/council-ui/src/utils/vaults/gsc/getGscStatus.ts index 51ce4e72..a0f32019 100644 --- a/apps/council-ui/src/utils/gsc/getGscStatus.ts +++ b/apps/council-ui/src/utils/vaults/gsc/getGscStatus.ts @@ -1,10 +1,9 @@ -import { createCouncil } from "@delvtech/council-js"; import { Address } from "@delvtech/drift"; import { SupportedChainId } from "src/config/council.config"; import { getCouncilConfig } from "src/config/utils/getCouncilConfig"; -import { getDrift } from "src/lib/drift"; -import { getIsGscEligible } from "src/utils/gsc/getIsGscEligible"; -import { GscStatus } from "src/utils/gsc/types"; +import { getCouncil } from "src/utils/council/getCouncil"; +import { getIsGscEligible } from "src/utils/vaults/gsc/getIsGscEligible"; +import { GscStatus } from "src/utils/vaults/gsc/types"; interface GetGscStatusOptions { account: Address | undefined; @@ -27,10 +26,7 @@ export async function getGscStatus({ return "N/A"; } - const council = createCouncil({ - drift: getDrift({ chainId }), - }); - + const council = getCouncil(chainId); const gscVaultAddress = gscVoting.vaults[0].address; const gscVault = council.gscVault(gscVaultAddress); diff --git a/apps/council-ui/src/utils/gsc/getIsGscEligible.ts b/apps/council-ui/src/utils/vaults/gsc/getIsGscEligible.ts similarity index 71% rename from apps/council-ui/src/utils/gsc/getIsGscEligible.ts rename to apps/council-ui/src/utils/vaults/gsc/getIsGscEligible.ts index 1b7092b6..318f081a 100644 --- a/apps/council-ui/src/utils/gsc/getIsGscEligible.ts +++ b/apps/council-ui/src/utils/vaults/gsc/getIsGscEligible.ts @@ -1,8 +1,7 @@ -import { createCouncil } from "@delvtech/council-js"; import { Address } from "@delvtech/drift"; import { SupportedChainId } from "src/config/council.config"; import { getCouncilConfig } from "src/config/utils/getCouncilConfig"; -import { getDrift } from "src/lib/drift"; +import { getCouncil } from "src/utils/council/getCouncil"; interface GetIsGscEligibleOptions { account: Address | undefined; @@ -19,20 +18,21 @@ export async function getIsGscEligible({ return false; } - const council = createCouncil({ - drift: getDrift({ chainId }), - }); - + const council = getCouncil(chainId); const gscVaultAddress = gscVoting.vaults[0].address; const gscVault = council.gscVault(gscVaultAddress); - const qualifyingVaults = coreVoting.vaults.map(({ address }) => + const approvedVaults = coreVoting.vaults.map(({ address }) => council.votingVault(address), ); const [requiredVotingPower, ...vaultVotingPowers] = await Promise.all([ gscVault.getRequiredVotingPower(), - ...qualifyingVaults.map((vault) => - vault.getVotingPower({ voter: account }), + ...approvedVaults.map((vault) => + vault + .getVotingPower({ voter: account }) + // Wagmi doesn't decode the uninitialized error, so we simply + // return 0 if the the call fails. + .catch(() => 0n), ), ]); diff --git a/apps/council-ui/src/utils/gsc/types.ts b/apps/council-ui/src/utils/vaults/gsc/types.ts similarity index 100% rename from apps/council-ui/src/utils/gsc/types.ts rename to apps/council-ui/src/utils/vaults/gsc/types.ts diff --git a/apps/sandbox/package.json b/apps/sandbox/package.json index 59c30087..3cd88a72 100644 --- a/apps/sandbox/package.json +++ b/apps/sandbox/package.json @@ -20,7 +20,7 @@ "@delvtech/drift": "^0.6.0", "@delvtech/drift-viem": "^0.6.0", "@delvtech/council-js": "^0.0.0", - "viem": "^2.23.1" + "viem": "^2.23.6" }, "devDependencies": { "@types/node": "^22.13.1", diff --git a/apps/sandbox/src/sandbox.ts b/apps/sandbox/src/sandbox.ts index 5a4d4e2a..af055043 100644 --- a/apps/sandbox/src/sandbox.ts +++ b/apps/sandbox/src/sandbox.ts @@ -1,7 +1,24 @@ -import { council } from "src/client"; +import { ReadVotingVault } from "@delvtech/council-js"; +import { council, drift } from "src/client"; -const gscVault = council.gscVault("0xcA870E8aa4FCEa85b5f0c6F4209C8CBA9265B940"); -const vaults = await gscVault.getMemberVaults( - "0x16C0a9C9967d8e860bf84596769ef513dd6f2094", +const coreVoting = council.coreVoting( + "0xEaCD577C3F6c44C3ffA398baaD97aE12CDCFed4a", ); -console.log("vaults: ", vaults); + +const vestingVault = new ReadVotingVault({ + address: "0x6De73946eab234F1EE61256F10067D713aF0e37A", + drift, +}); + +const currentBlock = await drift.getBlockNumber(); +const votingPower = await vestingVault.getVotingPower({ + voter: "0x3E3EDe36Ae478082C07e353D4fC36831100acF87", + block: currentBlock, + extraData: "0x", +}); +console.log(votingPower); + +const decoded = vestingVault.contract.decodeFunctionData( + "0xe91f32350000000000000000000000003e3ede36ae478082c07e353d4fc36831100acf8700000000000000000000000000000000000000000000000000000000014f637d00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", +); +console.log(decoded); diff --git a/packages/council-cli/package.json b/packages/council-cli/package.json index 4cc47fa5..ad9343a6 100644 --- a/packages/council-cli/package.json +++ b/packages/council-cli/package.json @@ -51,7 +51,7 @@ "rimraf": "^6.0.1", "tsx": "^4.19.2", "typescript": "^5.7.3", - "viem": "^2.23.1" + "viem": "^2.23.6" }, "publishConfig": { "access": "public" diff --git a/packages/council-js/src/entities/Entity.ts b/packages/council-js/src/entities/Entity.ts index 7180b748..4e7aa010 100644 --- a/packages/council-js/src/entities/Entity.ts +++ b/packages/council-js/src/entities/Entity.ts @@ -31,10 +31,18 @@ export type EntityConfig = OneOf< export class Entity { drift: Drift; - constructor({ drift, earliestBlock, ...driftConfig }: EntityConfig = {}) { + constructor({ + drift, + earliestBlock = 0n, + ...driftConfig + }: EntityConfig = {}) { this.drift = drift || createDrift(driftConfig); this.drift.extend({ - getEvents({ fromBlock = earliestBlock, ...restParams }) { + getEvents({ + fromBlock = earliestBlock, + toBlock = "latest", + ...restParams + }) { // Overwrite `fromBlock` if earlier than the `earliestBlock` option. if ( earliestBlock && @@ -49,6 +57,7 @@ export class Entity { return getEventsWithSplitAndRetry({ params: { fromBlock, + toBlock, ...restParams, }, drift: this, diff --git a/packages/council-js/src/utils/getEventsWithSplitAndRetry.ts b/packages/council-js/src/utils/getEventsWithSplitAndRetry.ts index d9d0ac2a..5f5dea50 100644 --- a/packages/council-js/src/utils/getEventsWithSplitAndRetry.ts +++ b/packages/council-js/src/utils/getEventsWithSplitAndRetry.ts @@ -110,6 +110,12 @@ export async function getEventsWithSplitAndRetry< return chunkedEvents.flat(); } + console.warn( + `Failed to fetch '${params.event}' events from ${params.address}. Retrying with ${ + nextChunkedParams.length + } smaller requests.`, + ); + chunkedParams = nextChunkedParams; error = nextError; retries--; From cf863600ee6235ddc788231dfe063f898dafeea0 Mon Sep 17 00:00:00 2001 From: Ryan Goree Date: Wed, 5 Mar 2025 07:00:47 -0600 Subject: [PATCH 130/146] Progress --- apps/council-ui/pages/vaults/index.tsx | 14 +++++--- apps/council-ui/pages/voters/details.tsx | 12 +++---- .../FrozenLockingVaultDetails.tsx | 13 ++++++-- .../genericVault/GenericVaultDetails.tsx | 10 ++++-- .../ui/vaults/gscVault/GscVaultDetails.tsx | 5 ++- .../vaults/gscVault/GscVaultProfileCard.tsx | 11 ++++--- .../ui/vaults/hooks/useVaultVotingPower.ts | 19 ++++++----- .../src/ui/vaults/hooks/useVotingPower.ts | 13 ++++---- .../lockingVault/LockingVaultDetails.tsx | 13 ++++++-- .../vestingVault/VestingVaultDetails.tsx | 33 +++++++++---------- .../src/utils/vaults/getVotingPower.ts | 28 ++++++++++++++++ .../src/utils/vaults/gsc/getIsGscEligible.ts | 11 ++++--- .../lockingVault/ReadLockingVault.ts | 2 +- .../vestingVault/ReadVestingVault.ts | 2 +- 14 files changed, 123 insertions(+), 63 deletions(-) create mode 100644 apps/council-ui/src/utils/vaults/getVotingPower.ts diff --git a/apps/council-ui/pages/vaults/index.tsx b/apps/council-ui/pages/vaults/index.tsx index b154826f..8663a140 100644 --- a/apps/council-ui/pages/vaults/index.tsx +++ b/apps/council-ui/pages/vaults/index.tsx @@ -4,16 +4,19 @@ import { ExternalInfoCard } from "src/ui/base/information/ExternalInfoCard"; import { Page } from "src/ui/base/Page"; import { useCouncilConfig } from "src/ui/config/useCouncilConfig"; import { useReadCouncil } from "src/ui/council/useReadCouncil"; +import { useSupportedChainId } from "src/ui/network/hooks/useSupportedChainId"; import { GenericVaultCard, GenericVaultCardSkeleton, } from "src/ui/vaults/GenericVaultCard"; import { GscVaultPreviewCard } from "src/ui/vaults/gscVault/GscVaultPreviewCard"; +import { getVotingPower } from "src/utils/vaults/getVotingPower"; import { useAccount } from "wagmi"; export default function VaultsPage(): ReactElement { const { address } = useAccount(); - const { data, status } = useVaultsPageData(address); + const { data, status, error } = useVaultsPageData(address); + console.log({ data, status, error }); return ( @@ -90,6 +93,7 @@ interface VaultData { function useVaultsPageData( account: `0x${string}` | undefined, ): UseQueryResult { + const chainId = useSupportedChainId(); const council = useReadCouncil(); const config = useCouncilConfig(); const enabled = !!council; @@ -114,9 +118,11 @@ function useVaultsPageData( } let accountVotingPower = account - ? council - .votingVault(address) - .getVotingPower({ voter: account }) + ? getVotingPower({ + chainId, + vault: address, + voter: account, + }) : 0n; return Promise.all([tvp, accountVotingPower]).then( diff --git a/apps/council-ui/pages/voters/details.tsx b/apps/council-ui/pages/voters/details.tsx index 43302d53..5fbe77e8 100644 --- a/apps/council-ui/pages/voters/details.tsx +++ b/apps/council-ui/pages/voters/details.tsx @@ -21,6 +21,7 @@ import { VotingHistoryTableSkeleton } from "src/ui/voters/VotingHistorySkeleton" import { VotingHistoryTable } from "src/ui/voters/VotingHistoryTable"; import { makeEtherscanAddressURL } from "src/utils/etherscan/makeEtherscanAddressURL"; import { getTotalVotingPower } from "src/utils/vaults/getTotalVotingPower"; +import { getVotingPower } from "src/utils/vaults/getVotingPower"; import { getGscStatus } from "src/utils/vaults/gsc/getGscStatus"; import { GscStatus } from "src/utils/vaults/gsc/types"; import { getAddress } from "viem"; @@ -215,12 +216,11 @@ export function useVoterData( for (const vault of config.coreVoting.vaults) { promises.push( (async () => { - const vaultVotingPower = await council - .votingVault(vault.address) - .getVotingPower({ voter: account }) - // Wagmi doesn't decode the uninitialized error, so we simply - // return 0 if the the call fails. - .catch(() => 0n); + const vaultVotingPower = await getVotingPower({ + chainId, + vault: vault.address, + voter: account, + }); voterData.votingPower += vaultVotingPower; })(), (async () => { diff --git a/apps/council-ui/src/ui/vaults/frozenLockingVault/FrozenLockingVaultDetails.tsx b/apps/council-ui/src/ui/vaults/frozenLockingVault/FrozenLockingVaultDetails.tsx index 903316e1..b46a6886 100644 --- a/apps/council-ui/src/ui/vaults/frozenLockingVault/FrozenLockingVaultDetails.tsx +++ b/apps/council-ui/src/ui/vaults/frozenLockingVault/FrozenLockingVaultDetails.tsx @@ -2,14 +2,15 @@ import { useQuery, UseQueryResult } from "@tanstack/react-query"; import { ReactElement } from "react"; import { getVaultConfig } from "src/config/utils/getVaultConfig"; import { ErrorMessage } from "src/ui/base/error/ErrorMessage"; -import { useSupportedChainId } from "src/ui/network/hooks/useSupportedChainId"; import { useReadCouncil } from "src/ui/council/useReadCouncil"; +import { useSupportedChainId } from "src/ui/network/hooks/useSupportedChainId"; import { ChangeDelegateForm } from "src/ui/vaults/ChangeDelegateForm"; import { useChangeDelegate } from "src/ui/vaults/lockingVault/hooks/useChangeDelegate"; import { LockingVaultStatsRow } from "src/ui/vaults/lockingVault/LockingVaultStatsRow"; import { VaultDetails } from "src/ui/vaults/VaultDetails/VaultDetails"; import { VaultDetailsSkeleton } from "src/ui/vaults/VaultDetails/VaultDetailsSkeleton"; import { VaultHeader } from "src/ui/vaults/VaultHeader"; +import { getVotingPower } from "src/utils/vaults/getVotingPower"; import { zeroAddress } from "viem"; import { useAccount } from "wagmi"; @@ -101,13 +102,19 @@ function useFrozenLockingVaultDetailsData( ? async () => { const lockingVault = council.lockingVault(address); - const [token, voters, accountVotingPower, delegate, delegators] = + const [token, voters, delegate, delegators, accountVotingPower] = await Promise.all([ lockingVault.getToken(), lockingVault.getVoters(), - account ? lockingVault.getVotingPower({ voter: account }) : 0n, account ? lockingVault.getDelegate(account) : undefined, account ? lockingVault.getDelegatorsTo(account) : [], + account + ? getVotingPower({ + chainId, + vault: address, + voter: account, + }) + : 0n, ]); const [tokenSymbol, tokenBalance, tokenAllowance, depositedBalance] = diff --git a/apps/council-ui/src/ui/vaults/genericVault/GenericVaultDetails.tsx b/apps/council-ui/src/ui/vaults/genericVault/GenericVaultDetails.tsx index 3c49eec5..863c707c 100644 --- a/apps/council-ui/src/ui/vaults/genericVault/GenericVaultDetails.tsx +++ b/apps/council-ui/src/ui/vaults/genericVault/GenericVaultDetails.tsx @@ -2,11 +2,12 @@ import { useQuery, UseQueryResult } from "@tanstack/react-query"; import { ReactElement } from "react"; import { getVaultConfig } from "src/config/utils/getVaultConfig"; import { ErrorMessage } from "src/ui/base/error/ErrorMessage"; -import { useSupportedChainId } from "src/ui/network/hooks/useSupportedChainId"; import { useReadCouncil } from "src/ui/council/useReadCouncil"; +import { useSupportedChainId } from "src/ui/network/hooks/useSupportedChainId"; import { VaultDetails } from "src/ui/vaults/VaultDetails/VaultDetails"; import { VaultDetailsSkeleton } from "src/ui/vaults/VaultDetails/VaultDetailsSkeleton"; import { VaultHeader } from "src/ui/vaults/VaultHeader"; +import { getVotingPower } from "src/utils/vaults/getVotingPower"; import { useAccount } from "wagmi"; import { GenericVaultStatsRow } from "./GenericVaultStatsRow"; @@ -63,9 +64,12 @@ function useGenericVaultDetailsData( enabled, queryFn: enabled ? async () => { - const vault = council.votingVault(address); const accountVotingPower = account - ? await vault.getVotingPower({ voter: account }) + ? await getVotingPower({ + chainId, + vault: address, + voter: account, + }) : 0n; return { diff --git a/apps/council-ui/src/ui/vaults/gscVault/GscVaultDetails.tsx b/apps/council-ui/src/ui/vaults/gscVault/GscVaultDetails.tsx index 37ce578c..e9176f45 100644 --- a/apps/council-ui/src/ui/vaults/gscVault/GscVaultDetails.tsx +++ b/apps/council-ui/src/ui/vaults/gscVault/GscVaultDetails.tsx @@ -15,6 +15,7 @@ import { VaultDetails } from "src/ui/vaults/VaultDetails/VaultDetails"; import { VaultDetailsSkeleton } from "src/ui/vaults/VaultDetails/VaultDetailsSkeleton"; import { VaultHeader } from "src/ui/vaults/VaultHeader"; import { getBulkEnsRecords } from "src/utils/getBulkEnsRecords"; +import { getVotingPower } from "src/utils/vaults/getVotingPower"; import { getGscStatus } from "src/utils/vaults/gsc/getGscStatus"; import { GscStatus } from "src/utils/vaults/gsc/types"; import { useAccount } from "wagmi"; @@ -113,7 +114,9 @@ function useGscVaultDetailsData({ ...memberVaults .map(({ member, qualifyingVaults }) => qualifyingVaults.map(async (vault) => { - const votingPower = await vault.getVotingPower({ + const votingPower = await getVotingPower({ + chainId, + vault: vault.address, voter: member, }); return { member, votingPower }; diff --git a/apps/council-ui/src/ui/vaults/gscVault/GscVaultProfileCard.tsx b/apps/council-ui/src/ui/vaults/gscVault/GscVaultProfileCard.tsx index 0e9b8c82..78a40b40 100644 --- a/apps/council-ui/src/ui/vaults/gscVault/GscVaultProfileCard.tsx +++ b/apps/council-ui/src/ui/vaults/gscVault/GscVaultProfileCard.tsx @@ -7,6 +7,7 @@ import { useSupportedChainId } from "src/ui/network/hooks/useSupportedChainId"; import { VaultProfileCard } from "src/ui/vaults/VaultProfileCard"; import { VaultProfileCardSkeleton } from "src/ui/vaults/VaultProfileCardSkeleton"; import { useKickGscMember } from "src/ui/vaults/gscVault/hooks/useKickGscMember"; +import { getVotingPower } from "src/utils/vaults/getVotingPower"; import { getGscStatus, isGscMember } from "src/utils/vaults/gsc/getGscStatus"; interface GSCVaultProfileCardProps { @@ -93,11 +94,13 @@ function useGSCVaultProfileCardData( ]); const votingPowers = await Promise.all( - qualifyingVaults.map(({ address }) => { - return council.votingVault(address).getVotingPower({ + qualifyingVaults.map(({ address }) => + getVotingPower({ + chainId, + vault: address, voter: account, - }); - }), + }), + ), ); const qualifyingVotingPower = votingPowers.reduce( diff --git a/apps/council-ui/src/ui/vaults/hooks/useVaultVotingPower.ts b/apps/council-ui/src/ui/vaults/hooks/useVaultVotingPower.ts index 0a36887a..fc5a8b81 100644 --- a/apps/council-ui/src/ui/vaults/hooks/useVaultVotingPower.ts +++ b/apps/council-ui/src/ui/vaults/hooks/useVaultVotingPower.ts @@ -1,6 +1,7 @@ import { Address, RangeBlock } from "@delvtech/drift"; import { useQuery } from "@tanstack/react-query"; -import { useReadCouncil } from "src/ui/council/useReadCouncil"; +import { useSupportedChainId } from "src/ui/network/hooks/useSupportedChainId"; +import { getVotingPower } from "src/utils/vaults/getVotingPower"; import { useAccount } from "wagmi"; interface UseVaultVotingPowerOptions { @@ -20,21 +21,21 @@ export function useVaultVotingPower({ account, block, }: UseVaultVotingPowerOptions) { - const council = useReadCouncil(); const { address: connectedAccount } = useAccount(); const accountToUse = account ?? connectedAccount; - const enabled = !!council && !!accountToUse; + const enabled = !!accountToUse; + const chainId = useSupportedChainId(); return useQuery({ queryKey: ["vaultVotingPower", vaultAddress, account], enabled, queryFn: enabled ? () => - council - .votingVault(vaultAddress) - .getVotingPower({ voter: accountToUse, block }) - // Wagmi doesn't decode the uninitialized error, so we simply - // return 0 if the the call fails. - .catch(() => 0n) + getVotingPower({ + chainId, + vault: vaultAddress, + voter: accountToUse, + block, + }) : undefined, }); } diff --git a/apps/council-ui/src/ui/vaults/hooks/useVotingPower.ts b/apps/council-ui/src/ui/vaults/hooks/useVotingPower.ts index f227dbfe..61d8c1df 100644 --- a/apps/council-ui/src/ui/vaults/hooks/useVotingPower.ts +++ b/apps/council-ui/src/ui/vaults/hooks/useVotingPower.ts @@ -4,6 +4,7 @@ import { SupportedChainId } from "src/config/council.config"; import { VotingContractConfig } from "src/config/types"; import { useReadCouncil } from "src/ui/council/useReadCouncil"; import { useSupportedChainId } from "src/ui/network/hooks/useSupportedChainId"; +import { getVotingPower } from "src/utils/vaults/getVotingPower"; interface UseVotingPowerOptions { votingContract: VotingContractConfig; @@ -39,12 +40,12 @@ export default function useVotingPower({ let totalVotingPower = 0n; const vaultPowers = await Promise.all( votingContract.vaults.map(async (vault) => { - const votingPower = await council - .votingVault(vault.address) - .getVotingPower({ - voter: account, - block, - }); + const votingPower = await getVotingPower({ + chainId, + vault: vault.address, + voter: account, + block, + }); totalVotingPower += votingPower; return { diff --git a/apps/council-ui/src/ui/vaults/lockingVault/LockingVaultDetails.tsx b/apps/council-ui/src/ui/vaults/lockingVault/LockingVaultDetails.tsx index 53107311..9259111a 100644 --- a/apps/council-ui/src/ui/vaults/lockingVault/LockingVaultDetails.tsx +++ b/apps/council-ui/src/ui/vaults/lockingVault/LockingVaultDetails.tsx @@ -3,8 +3,8 @@ import { ReactElement } from "react"; import { getVaultConfig } from "src/config/utils/getVaultConfig"; import { ErrorMessage } from "src/ui/base/error/ErrorMessage"; import { makeTransactionErrorToast } from "src/ui/base/toast/makeTransactionErrorToast"; -import { useSupportedChainId } from "src/ui/network/hooks/useSupportedChainId"; import { useReadCouncil } from "src/ui/council/useReadCouncil"; +import { useSupportedChainId } from "src/ui/network/hooks/useSupportedChainId"; import { ChangeDelegateForm } from "src/ui/vaults/ChangeDelegateForm"; import { DepositAndWithdrawForm } from "src/ui/vaults/DepositAndWithdrawForm"; import { useApprove } from "src/ui/vaults/lockingVault/hooks/useApprove"; @@ -15,6 +15,7 @@ import { LockingVaultStatsRow } from "src/ui/vaults/lockingVault/LockingVaultSta import { VaultDetails } from "src/ui/vaults/VaultDetails/VaultDetails"; import { VaultDetailsSkeleton } from "src/ui/vaults/VaultDetails/VaultDetailsSkeleton"; import { VaultHeader } from "src/ui/vaults/VaultHeader"; +import { getVotingPower } from "src/utils/vaults/getVotingPower"; import { isAddress } from "viem"; import { useAccount, usePublicClient } from "wagmi"; @@ -25,6 +26,7 @@ interface LockingVaultDetailsProps { export function LockingVaultDetails({ address, }: LockingVaultDetailsProps): ReactElement { + const publicClient = usePublicClient(); const { address: account } = useAccount(); const { data, status, error } = useLockingVaultDetailsData(address, account); const chainId = useSupportedChainId(); @@ -51,7 +53,6 @@ export function LockingVaultDetails({ return ; } - const publicClient = usePublicClient(); async function handleDelegate(delegate: string): Promise { let delegateAddress: string | null | undefined = delegate; if (!isAddress(delegate)) { @@ -156,7 +157,13 @@ function useLockingVaultDetailsData( await Promise.all([ lockingVault.getToken(), lockingVault.getVoters(), - account ? lockingVault.getVotingPower({ voter: account }) : 0n, + account + ? getVotingPower({ + chainId, + vault: address, + voter: account, + }) + : 0n, account ? lockingVault.getDelegate(account) : undefined, account ? lockingVault.getDelegatorsTo(account) : [], ]); diff --git a/apps/council-ui/src/ui/vaults/vestingVault/VestingVaultDetails.tsx b/apps/council-ui/src/ui/vaults/vestingVault/VestingVaultDetails.tsx index e58038d2..613b6ebb 100644 --- a/apps/council-ui/src/ui/vaults/vestingVault/VestingVaultDetails.tsx +++ b/apps/council-ui/src/ui/vaults/vestingVault/VestingVaultDetails.tsx @@ -3,8 +3,8 @@ import { ReactElement } from "react"; import { getVaultConfig } from "src/config/utils/getVaultConfig"; import { ErrorMessage } from "src/ui/base/error/ErrorMessage"; import { getBlockDate } from "src/ui/base/utils/getBlockDate"; -import { useSupportedChainId } from "src/ui/network/hooks/useSupportedChainId"; import { useReadCouncil } from "src/ui/council/useReadCouncil"; +import { useSupportedChainId } from "src/ui/network/hooks/useSupportedChainId"; import { ChangeDelegateForm } from "src/ui/vaults/ChangeDelegateForm"; import { VaultDetails } from "src/ui/vaults/VaultDetails/VaultDetails"; import { VaultDetailsSkeleton } from "src/ui/vaults/VaultDetails/VaultDetailsSkeleton"; @@ -12,6 +12,7 @@ import { VaultHeader } from "src/ui/vaults/VaultHeader"; import { GrantCard } from "src/ui/vaults/vestingVault/GrantCard"; import { useChangeDelegate } from "src/ui/vaults/vestingVault/hooks/useChangeDelegate"; import { VestingVaultStatsRow } from "src/ui/vaults/vestingVault/VestingVaultStatsRow"; +import { getVotingPower } from "src/utils/vaults/getVotingPower"; import { Address } from "viem"; import { useAccount } from "wagmi"; @@ -115,38 +116,36 @@ function useVestingVaultDetailsData( voters, unvestedMultiplier, grant, - accountVotingPower, delegate, delegators, + accountVotingPower, ] = await Promise.all([ vestingVault.getToken(), vestingVault.getVoters(), vestingVault.getUnvestedMultiplier(), account ? vestingVault.getGrant(account) : undefined, - account ? vestingVault.getVotingPower({ voter: account }) : 0n, account ? vestingVault.getDelegate(account) : undefined, account ? vestingVault.getDelegatorsTo(account) : [], + account + ? getVotingPower({ + chainId, + vault: address, + voter: account, + }) + : 0n, ]); - const [tokenSymbol, tokenDecimals, tokenBalance, tokenAllowance] = + const [tokenSymbol, tokenDecimals, unlockDate, expirationDate] = await Promise.all([ token.getSymbol(), token.getDecimals(), - account ? token.getBalanceOf(account) : 0n, - account - ? token.getAllowance({ - owner: account, - spender: address, - }) - : 0n, + grant ? await getBlockDate(grant.cliffBlock, chainId) : undefined, + grant + ? await getBlockDate(grant.expirationBlock, chainId) + : undefined, ]); - const [unlockDate, expirationDate] = await Promise.all([ - grant ? await getBlockDate(grant.cliffBlock, chainId) : undefined, - grant - ? await getBlockDate(grant.expirationBlock, chainId) - : undefined, - ]); + console.log("voters", delegators); return { participants: voters.length, diff --git a/apps/council-ui/src/utils/vaults/getVotingPower.ts b/apps/council-ui/src/utils/vaults/getVotingPower.ts new file mode 100644 index 00000000..6512678f --- /dev/null +++ b/apps/council-ui/src/utils/vaults/getVotingPower.ts @@ -0,0 +1,28 @@ +import type { ReadVotingVault } from "@delvtech/council-js"; +import { Address, RangeBlock } from "@delvtech/drift"; +import { SupportedChainId } from "src/config/council.config"; +import { getCouncil } from "src/utils/council/getCouncil"; + +/** + * A wrapper around the {@linkcode ReadVotingVault.getVotingPower} method which + * returns `0n` if the call fails. This is needed because Wagmi doesn't decode + * the `uninitialized` error which is thrown when the voter has no data in the + * vault, so the SDK doesn't handle it. + */ +export function getVotingPower({ + voter, + vault, + chainId, + block, +}: { + voter: Address; + vault: Address; + chainId: SupportedChainId; + block?: RangeBlock; +}): Promise { + const council = getCouncil(chainId); + return council + .votingVault(vault) + .getVotingPower({ voter, block }) + .catch(() => 0n); +} diff --git a/apps/council-ui/src/utils/vaults/gsc/getIsGscEligible.ts b/apps/council-ui/src/utils/vaults/gsc/getIsGscEligible.ts index 318f081a..ccc519fd 100644 --- a/apps/council-ui/src/utils/vaults/gsc/getIsGscEligible.ts +++ b/apps/council-ui/src/utils/vaults/gsc/getIsGscEligible.ts @@ -2,6 +2,7 @@ import { Address } from "@delvtech/drift"; import { SupportedChainId } from "src/config/council.config"; import { getCouncilConfig } from "src/config/utils/getCouncilConfig"; import { getCouncil } from "src/utils/council/getCouncil"; +import { getVotingPower } from "src/utils/vaults/getVotingPower"; interface GetIsGscEligibleOptions { account: Address | undefined; @@ -28,11 +29,11 @@ export async function getIsGscEligible({ const [requiredVotingPower, ...vaultVotingPowers] = await Promise.all([ gscVault.getRequiredVotingPower(), ...approvedVaults.map((vault) => - vault - .getVotingPower({ voter: account }) - // Wagmi doesn't decode the uninitialized error, so we simply - // return 0 if the the call fails. - .catch(() => 0n), + getVotingPower({ + chainId, + vault: vault.address, + voter: account, + }), ), ]); diff --git a/packages/council-js/src/entities/votingVault/lockingVault/ReadLockingVault.ts b/packages/council-js/src/entities/votingVault/lockingVault/ReadLockingVault.ts index 043681a3..cdee03b8 100644 --- a/packages/council-js/src/entities/votingVault/lockingVault/ReadLockingVault.ts +++ b/packages/council-js/src/entities/votingVault/lockingVault/ReadLockingVault.ts @@ -98,7 +98,7 @@ export class ReadLockingVault< voter, ...options, }); - return breakdown[0].delegators; + return breakdown[0]?.delegators || []; } /** diff --git a/packages/council-js/src/entities/votingVault/vestingVault/ReadVestingVault.ts b/packages/council-js/src/entities/votingVault/vestingVault/ReadVestingVault.ts index 4c5f106c..21ebfc37 100644 --- a/packages/council-js/src/entities/votingVault/vestingVault/ReadVestingVault.ts +++ b/packages/council-js/src/entities/votingVault/vestingVault/ReadVestingVault.ts @@ -170,7 +170,7 @@ export class ReadVestingVault< voter, ...options, }); - return breakdown[0].delegators; + return breakdown[0]?.delegators || []; } /** From 0bedb08a0f9d92911c2e24e87417c5f5953c5612 Mon Sep 17 00:00:00 2001 From: Ryan Goree Date: Wed, 5 Mar 2025 07:11:50 -0600 Subject: [PATCH 131/146] Bump deps --- apps/council-ui/package.json | 2 +- apps/landing-page/package.json | 2 +- packages/council-artifacts/package.json | 2 +- packages/council-cli/package.json | 11 +- packages/council-js/package.json | 2 +- yarn.lock | 323 ++++++++++++++++++------ 6 files changed, 254 insertions(+), 88 deletions(-) diff --git a/apps/council-ui/package.json b/apps/council-ui/package.json index 96ce32f0..b398e2bf 100644 --- a/apps/council-ui/package.json +++ b/apps/council-ui/package.json @@ -60,6 +60,6 @@ "next-transpile-modules": "10.0.1", "postcss": "^8.5.3", "tailwindcss": "^3.4.17", - "typescript": "^5.7.3" + "typescript": "^5.8.2" } } diff --git a/apps/landing-page/package.json b/apps/landing-page/package.json index 13e90386..7aba10fb 100644 --- a/apps/landing-page/package.json +++ b/apps/landing-page/package.json @@ -27,7 +27,7 @@ "eslint-plugin-tailwindcss": "^3.18.0", "postcss": "^8.5.2", "tailwindcss": "^4.0.6", - "typescript": "^5.7.3", + "typescript": "^5.8.2", "vite": "^6.1.0", "vite-tsconfig-paths": "^5.1.4" } diff --git a/packages/council-artifacts/package.json b/packages/council-artifacts/package.json index 274bb0e0..b073916c 100644 --- a/packages/council-artifacts/package.json +++ b/packages/council-artifacts/package.json @@ -25,7 +25,7 @@ "devDependencies": { "@council/eslint-config": "*", "@council/tsconfig": "*", - "typescript": "^5.7.3" + "typescript": "^5.8.2" }, "publishConfig": { "access": "public" diff --git a/packages/council-cli/package.json b/packages/council-cli/package.json index ad9343a6..e58449c1 100644 --- a/packages/council-cli/package.json +++ b/packages/council-cli/package.json @@ -32,12 +32,12 @@ "@delvtech/council-artifacts": "^0.1.0", "@delvtech/council-js": "^0.0.0", "ajv": "^8.17.1", - "clide-js": "^0.2.4", + "clide-js": "^0.2.11", "clide-plugin-command-menu": "^0.1.1", "colors": "^1.4.0", "dotenv": "^16.4.7", "json-schema-typed": "^8.0.1", - "merkletreejs": "^0.4.1", + "merkletreejs": "^0.5.1", "node-fetch-native": "^1.6.6", "signale": "^1.4.0" }, @@ -45,12 +45,11 @@ "@council/eslint-config": "*", "@council/tsconfig": "*", "@types/node": "^22.13.1", - "@types/prompts": "^2.4.9", "@types/signale": "^1.4.7", - "hardhat": "^2.22.18", + "hardhat": "^2.22.19", "rimraf": "^6.0.1", - "tsx": "^4.19.2", - "typescript": "^5.7.3", + "tsx": "^4.19.3", + "typescript": "^5.8.2", "viem": "^2.23.6" }, "publishConfig": { diff --git a/packages/council-js/package.json b/packages/council-js/package.json index c885c607..68762c14 100644 --- a/packages/council-js/package.json +++ b/packages/council-js/package.json @@ -33,7 +33,7 @@ "tsup": "^8.3.6", "typedoc": "^0.27.6", "typedoc-plugin-markdown": "^4.4.1", - "typescript": "^5.7.3", + "typescript": "^5.8.2", "vitest": "^3.0.5" }, "type": "module", diff --git a/yarn.lock b/yarn.lock index 079d4b32..c7e1811c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -525,6 +525,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.24.2.tgz#38848d3e25afe842a7943643cbcd387cc6e13461" integrity sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA== +"@esbuild/aix-ppc64@0.25.0": + version "0.25.0" + resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.25.0.tgz#499600c5e1757a524990d5d92601f0ac3ce87f64" + integrity sha512-O7vun9Sf8DFjH2UtqK8Ku3LkquL9SZL8OLY1T5NZkA34+wG3OQF7cl4Ql8vdNzM6fzBbYfLaiRLIOZ+2FOCgBQ== + "@esbuild/android-arm64@0.23.1": version "0.23.1" resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.23.1.tgz#58565291a1fe548638adb9c584237449e5e14018" @@ -535,6 +540,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.24.2.tgz#f592957ae8b5643129fa889c79e69cd8669bb894" integrity sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg== +"@esbuild/android-arm64@0.25.0": + version "0.25.0" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.25.0.tgz#b9b8231561a1dfb94eb31f4ee056b92a985c324f" + integrity sha512-grvv8WncGjDSyUBjN9yHXNt+cq0snxXbDxy5pJtzMKGmmpPxeAmAhWxXI+01lU5rwZomDgD3kJwulEnhTRUd6g== + "@esbuild/android-arm@0.23.1": version "0.23.1" resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.23.1.tgz#5eb8c652d4c82a2421e3395b808e6d9c42c862ee" @@ -545,6 +555,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.24.2.tgz#72d8a2063aa630308af486a7e5cbcd1e134335b3" integrity sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q== +"@esbuild/android-arm@0.25.0": + version "0.25.0" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.25.0.tgz#ca6e7888942505f13e88ac9f5f7d2a72f9facd2b" + integrity sha512-PTyWCYYiU0+1eJKmw21lWtC+d08JDZPQ5g+kFyxP0V+es6VPPSUhM6zk8iImp2jbV6GwjX4pap0JFbUQN65X1g== + "@esbuild/android-x64@0.23.1": version "0.23.1" resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.23.1.tgz#ae19d665d2f06f0f48a6ac9a224b3f672e65d517" @@ -555,6 +570,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.24.2.tgz#9a7713504d5f04792f33be9c197a882b2d88febb" integrity sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw== +"@esbuild/android-x64@0.25.0": + version "0.25.0" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.25.0.tgz#e765ea753bac442dfc9cb53652ce8bd39d33e163" + integrity sha512-m/ix7SfKG5buCnxasr52+LI78SQ+wgdENi9CqyCXwjVR2X4Jkz+BpC3le3AoBPYTC9NHklwngVXvbJ9/Akhrfg== + "@esbuild/darwin-arm64@0.23.1": version "0.23.1" resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.23.1.tgz#05b17f91a87e557b468a9c75e9d85ab10c121b16" @@ -565,6 +585,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.24.2.tgz#02ae04ad8ebffd6e2ea096181b3366816b2b5936" integrity sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA== +"@esbuild/darwin-arm64@0.25.0": + version "0.25.0" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.25.0.tgz#fa394164b0d89d4fdc3a8a21989af70ef579fa2c" + integrity sha512-mVwdUb5SRkPayVadIOI78K7aAnPamoeFR2bT5nszFUZ9P8UpK4ratOdYbZZXYSqPKMHfS1wdHCJk1P1EZpRdvw== + "@esbuild/darwin-x64@0.23.1": version "0.23.1" resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.23.1.tgz#c58353b982f4e04f0d022284b8ba2733f5ff0931" @@ -575,6 +600,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.24.2.tgz#9ec312bc29c60e1b6cecadc82bd504d8adaa19e9" integrity sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA== +"@esbuild/darwin-x64@0.25.0": + version "0.25.0" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.25.0.tgz#91979d98d30ba6e7d69b22c617cc82bdad60e47a" + integrity sha512-DgDaYsPWFTS4S3nWpFcMn/33ZZwAAeAFKNHNa1QN0rI4pUjgqf0f7ONmXf6d22tqTY+H9FNdgeaAa+YIFUn2Rg== + "@esbuild/freebsd-arm64@0.23.1": version "0.23.1" resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.23.1.tgz#f9220dc65f80f03635e1ef96cfad5da1f446f3bc" @@ -585,6 +615,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.24.2.tgz#5e82f44cb4906d6aebf24497d6a068cfc152fa00" integrity sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg== +"@esbuild/freebsd-arm64@0.25.0": + version "0.25.0" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.0.tgz#b97e97073310736b430a07b099d837084b85e9ce" + integrity sha512-VN4ocxy6dxefN1MepBx/iD1dH5K8qNtNe227I0mnTRjry8tj5MRk4zprLEdG8WPyAPb93/e4pSgi1SoHdgOa4w== + "@esbuild/freebsd-x64@0.23.1": version "0.23.1" resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.23.1.tgz#69bd8511fa013b59f0226d1609ac43f7ce489730" @@ -595,6 +630,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.24.2.tgz#3fb1ce92f276168b75074b4e51aa0d8141ecce7f" integrity sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q== +"@esbuild/freebsd-x64@0.25.0": + version "0.25.0" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.25.0.tgz#f3b694d0da61d9910ec7deff794d444cfbf3b6e7" + integrity sha512-mrSgt7lCh07FY+hDD1TxiTyIHyttn6vnjesnPoVDNmDfOmggTLXRv8Id5fNZey1gl/V2dyVK1VXXqVsQIiAk+A== + "@esbuild/linux-arm64@0.23.1": version "0.23.1" resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.23.1.tgz#8050af6d51ddb388c75653ef9871f5ccd8f12383" @@ -605,6 +645,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.24.2.tgz#856b632d79eb80aec0864381efd29de8fd0b1f43" integrity sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg== +"@esbuild/linux-arm64@0.25.0": + version "0.25.0" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.25.0.tgz#f921f699f162f332036d5657cad9036f7a993f73" + integrity sha512-9QAQjTWNDM/Vk2bgBl17yWuZxZNQIF0OUUuPZRKoDtqF2k4EtYbpyiG5/Dk7nqeK6kIJWPYldkOcBqjXjrUlmg== + "@esbuild/linux-arm@0.23.1": version "0.23.1" resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.23.1.tgz#ecaabd1c23b701070484990db9a82f382f99e771" @@ -615,6 +660,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.24.2.tgz#c846b4694dc5a75d1444f52257ccc5659021b736" integrity sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA== +"@esbuild/linux-arm@0.25.0": + version "0.25.0" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.25.0.tgz#cc49305b3c6da317c900688995a4050e6cc91ca3" + integrity sha512-vkB3IYj2IDo3g9xX7HqhPYxVkNQe8qTK55fraQyTzTX/fxaDtXiEnavv9geOsonh2Fd2RMB+i5cbhu2zMNWJwg== + "@esbuild/linux-ia32@0.23.1": version "0.23.1" resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.23.1.tgz#3ed2273214178109741c09bd0687098a0243b333" @@ -625,6 +675,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.24.2.tgz#f8a16615a78826ccbb6566fab9a9606cfd4a37d5" integrity sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw== +"@esbuild/linux-ia32@0.25.0": + version "0.25.0" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.25.0.tgz#3e0736fcfab16cff042dec806247e2c76e109e19" + integrity sha512-43ET5bHbphBegyeqLb7I1eYn2P/JYGNmzzdidq/w0T8E2SsYL1U6un2NFROFRg1JZLTzdCoRomg8Rvf9M6W6Gg== + "@esbuild/linux-loong64@0.23.1": version "0.23.1" resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.23.1.tgz#a0fdf440b5485c81b0fbb316b08933d217f5d3ac" @@ -635,6 +690,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.24.2.tgz#1c451538c765bf14913512c76ed8a351e18b09fc" integrity sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ== +"@esbuild/linux-loong64@0.25.0": + version "0.25.0" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.25.0.tgz#ea2bf730883cddb9dfb85124232b5a875b8020c7" + integrity sha512-fC95c/xyNFueMhClxJmeRIj2yrSMdDfmqJnyOY4ZqsALkDrrKJfIg5NTMSzVBr5YW1jf+l7/cndBfP3MSDpoHw== + "@esbuild/linux-mips64el@0.23.1": version "0.23.1" resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.23.1.tgz#e11a2806346db8375b18f5e104c5a9d4e81807f6" @@ -645,6 +705,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.24.2.tgz#0846edeefbc3d8d50645c51869cc64401d9239cb" integrity sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw== +"@esbuild/linux-mips64el@0.25.0": + version "0.25.0" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.25.0.tgz#4cababb14eede09248980a2d2d8b966464294ff1" + integrity sha512-nkAMFju7KDW73T1DdH7glcyIptm95a7Le8irTQNO/qtkoyypZAnjchQgooFUDQhNAy4iu08N79W4T4pMBwhPwQ== + "@esbuild/linux-ppc64@0.23.1": version "0.23.1" resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.23.1.tgz#06a2744c5eaf562b1a90937855b4d6cf7c75ec96" @@ -655,6 +720,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.24.2.tgz#8e3fc54505671d193337a36dfd4c1a23b8a41412" integrity sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw== +"@esbuild/linux-ppc64@0.25.0": + version "0.25.0" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.25.0.tgz#8860a4609914c065373a77242e985179658e1951" + integrity sha512-NhyOejdhRGS8Iwv+KKR2zTq2PpysF9XqY+Zk77vQHqNbo/PwZCzB5/h7VGuREZm1fixhs4Q/qWRSi5zmAiO4Fw== + "@esbuild/linux-riscv64@0.23.1": version "0.23.1" resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.23.1.tgz#65b46a2892fc0d1af4ba342af3fe0fa4a8fe08e7" @@ -665,6 +735,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.24.2.tgz#6a1e92096d5e68f7bb10a0d64bb5b6d1daf9a694" integrity sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q== +"@esbuild/linux-riscv64@0.25.0": + version "0.25.0" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.25.0.tgz#baf26e20bb2d38cfb86ee282dff840c04f4ed987" + integrity sha512-5S/rbP5OY+GHLC5qXp1y/Mx//e92L1YDqkiBbO9TQOvuFXM+iDqUNG5XopAnXoRH3FjIUDkeGcY1cgNvnXp/kA== + "@esbuild/linux-s390x@0.23.1": version "0.23.1" resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.23.1.tgz#e71ea18c70c3f604e241d16e4e5ab193a9785d6f" @@ -675,6 +750,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.24.2.tgz#ab18e56e66f7a3c49cb97d337cd0a6fea28a8577" integrity sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw== +"@esbuild/linux-s390x@0.25.0": + version "0.25.0" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.25.0.tgz#8323afc0d6cb1b6dc6e9fd21efd9e1542c3640a4" + integrity sha512-XM2BFsEBz0Fw37V0zU4CXfcfuACMrppsMFKdYY2WuTS3yi8O1nFOhil/xhKTmE1nPmVyvQJjJivgDT+xh8pXJA== + "@esbuild/linux-x64@0.23.1": version "0.23.1" resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.23.1.tgz#d47f97391e80690d4dfe811a2e7d6927ad9eed24" @@ -685,11 +765,21 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.24.2.tgz#8140c9b40da634d380b0b29c837a0b4267aff38f" integrity sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q== +"@esbuild/linux-x64@0.25.0": + version "0.25.0" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.25.0.tgz#08fcf60cb400ed2382e9f8e0f5590bac8810469a" + integrity sha512-9yl91rHw/cpwMCNytUDxwj2XjFpxML0y9HAOH9pNVQDpQrBxHy01Dx+vaMu0N1CKa/RzBD2hB4u//nfc+Sd3Cw== + "@esbuild/netbsd-arm64@0.24.2": version "0.24.2" resolved "https://registry.yarnpkg.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.24.2.tgz#65f19161432bafb3981f5f20a7ff45abb2e708e6" integrity sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw== +"@esbuild/netbsd-arm64@0.25.0": + version "0.25.0" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.0.tgz#935c6c74e20f7224918fbe2e6c6fe865b6c6ea5b" + integrity sha512-RuG4PSMPFfrkH6UwCAqBzauBWTygTvb1nxWasEJooGSJ/NwRw7b2HOwyRTQIU97Hq37l3npXoZGYMy3b3xYvPw== + "@esbuild/netbsd-x64@0.23.1": version "0.23.1" resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.23.1.tgz#44e743c9778d57a8ace4b72f3c6b839a3b74a653" @@ -700,6 +790,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.24.2.tgz#7a3a97d77abfd11765a72f1c6f9b18f5396bcc40" integrity sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw== +"@esbuild/netbsd-x64@0.25.0": + version "0.25.0" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.25.0.tgz#414677cef66d16c5a4d210751eb2881bb9c1b62b" + integrity sha512-jl+qisSB5jk01N5f7sPCsBENCOlPiS/xptD5yxOx2oqQfyourJwIKLRA2yqWdifj3owQZCL2sn6o08dBzZGQzA== + "@esbuild/openbsd-arm64@0.23.1": version "0.23.1" resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.23.1.tgz#05c5a1faf67b9881834758c69f3e51b7dee015d7" @@ -710,6 +805,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.24.2.tgz#58b00238dd8f123bfff68d3acc53a6ee369af89f" integrity sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A== +"@esbuild/openbsd-arm64@0.25.0": + version "0.25.0" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.0.tgz#8fd55a4d08d25cdc572844f13c88d678c84d13f7" + integrity sha512-21sUNbq2r84YE+SJDfaQRvdgznTD8Xc0oc3p3iW/a1EVWeNj/SdUCbm5U0itZPQYRuRTW20fPMWMpcrciH2EJw== + "@esbuild/openbsd-x64@0.23.1": version "0.23.1" resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.23.1.tgz#2e58ae511bacf67d19f9f2dcd9e8c5a93f00c273" @@ -720,6 +820,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.24.2.tgz#0ac843fda0feb85a93e288842936c21a00a8a205" integrity sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA== +"@esbuild/openbsd-x64@0.25.0": + version "0.25.0" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.25.0.tgz#0c48ddb1494bbc2d6bcbaa1429a7f465fa1dedde" + integrity sha512-2gwwriSMPcCFRlPlKx3zLQhfN/2WjJ2NSlg5TKLQOJdV0mSxIcYNTMhk3H3ulL/cak+Xj0lY1Ym9ysDV1igceg== + "@esbuild/sunos-x64@0.23.1": version "0.23.1" resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.23.1.tgz#adb022b959d18d3389ac70769cef5a03d3abd403" @@ -730,6 +835,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.24.2.tgz#8b7aa895e07828d36c422a4404cc2ecf27fb15c6" integrity sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig== +"@esbuild/sunos-x64@0.25.0": + version "0.25.0" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.25.0.tgz#86ff9075d77962b60dd26203d7352f92684c8c92" + integrity sha512-bxI7ThgLzPrPz484/S9jLlvUAHYMzy6I0XiU1ZMeAEOBcS0VePBFxh1JjTQt3Xiat5b6Oh4x7UC7IwKQKIJRIg== + "@esbuild/win32-arm64@0.23.1": version "0.23.1" resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.23.1.tgz#84906f50c212b72ec360f48461d43202f4c8b9a2" @@ -740,6 +850,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.24.2.tgz#c023afb647cabf0c3ed13f0eddfc4f1d61c66a85" integrity sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ== +"@esbuild/win32-arm64@0.25.0": + version "0.25.0" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.25.0.tgz#849c62327c3229467f5b5cd681bf50588442e96c" + integrity sha512-ZUAc2YK6JW89xTbXvftxdnYy3m4iHIkDtK3CLce8wg8M2L+YZhIvO1DKpxrd0Yr59AeNNkTiic9YLf6FTtXWMw== + "@esbuild/win32-ia32@0.23.1": version "0.23.1" resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.23.1.tgz#5e3eacc515820ff729e90d0cb463183128e82fac" @@ -750,6 +865,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.24.2.tgz#96c356132d2dda990098c8b8b951209c3cd743c2" integrity sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA== +"@esbuild/win32-ia32@0.25.0": + version "0.25.0" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.25.0.tgz#f62eb480cd7cca088cb65bb46a6db25b725dc079" + integrity sha512-eSNxISBu8XweVEWG31/JzjkIGbGIJN/TrRoiSVZwZ6pkC6VX4Im/WV2cz559/TXLcYbcrDN8JtKgd9DJVIo8GA== + "@esbuild/win32-x64@0.23.1": version "0.23.1" resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.23.1.tgz#81fd50d11e2c32b2d6241470e3185b70c7b30699" @@ -760,6 +880,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.24.2.tgz#34aa0b52d0fbb1a654b596acfa595f0c7b77a77b" integrity sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg== +"@esbuild/win32-x64@0.25.0": + version "0.25.0" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.25.0.tgz#c8e119a30a7c8d60b9d2e22d2073722dde3b710b" + integrity sha512-ZENoHJBxA20C2zFzh6AI4fT6RraMzjYw4xKWemRTRmRVtN9c5DcH9r/f2ihEkMjOW5eGgrwCslG/+Y/3bL+DHQ== + "@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": version "4.4.0" resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" @@ -1645,53 +1770,53 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@nomicfoundation/edr-darwin-arm64@0.7.0": - version "0.7.0" - resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-darwin-arm64/-/edr-darwin-arm64-0.7.0.tgz#2be3338a61508ed1d24326c82b9aa9224a844dd7" - integrity sha512-vAH20oh4GaSB/iQFTRcoO8jLc0CLd9XuLY9I7vtcqZWAiM4U1J4Y8cu67PWmtxbvUQOqXR7S6FtAr8/AlWm14g== +"@nomicfoundation/edr-darwin-arm64@0.8.0": + version "0.8.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-darwin-arm64/-/edr-darwin-arm64-0.8.0.tgz#70a23214a2dd2941fcb55e47bb4653514d2dae06" + integrity sha512-sKTmOu/P5YYhxT0ThN2Pe3hmCE/5Ag6K/eYoiavjLWbR7HEb5ZwPu2rC3DpuUk1H+UKJqt7o4/xIgJxqw9wu6A== -"@nomicfoundation/edr-darwin-x64@0.7.0": - version "0.7.0" - resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-darwin-x64/-/edr-darwin-x64-0.7.0.tgz#d2f782fc43bcae1c9aca3130aca6aa2a964e8559" - integrity sha512-WHDdIrPvLlgXQr2eKypBM5xOZAwdxhDAEQIvEMQL8tEEm2qYW2bliUlssBPrs8E3bdivFbe1HizImslMAfU3+g== +"@nomicfoundation/edr-darwin-x64@0.8.0": + version "0.8.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-darwin-x64/-/edr-darwin-x64-0.8.0.tgz#89c11ae510b3ac5c0e5268cd3a6b04194552112f" + integrity sha512-8ymEtWw1xf1Id1cc42XIeE+9wyo3Dpn9OD/X8GiaMz9R70Ebmj2g+FrbETu8o6UM+aL28sBZQCiCzjlft2yWAg== -"@nomicfoundation/edr-linux-arm64-gnu@0.7.0": - version "0.7.0" - resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-arm64-gnu/-/edr-linux-arm64-gnu-0.7.0.tgz#48b156744989acc8e6b0b754158a26e10ad865ed" - integrity sha512-WXpJB54ukz1no7gxCPXVEw9pgl/9UZ/WO3l1ctyv/T7vOygjqA4SUd6kppTs6MNXAuTiisPtvJ/fmvHiMBLrsw== +"@nomicfoundation/edr-linux-arm64-gnu@0.8.0": + version "0.8.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-arm64-gnu/-/edr-linux-arm64-gnu-0.8.0.tgz#02c1b4f426576af4e464320e340855139a00fe9b" + integrity sha512-h/wWzS2EyQuycz+x/SjMRbyA+QMCCVmotRsgM1WycPARvVZWIVfwRRsKoXKdCftsb3S8NTprqBdJlOmsFyETFA== -"@nomicfoundation/edr-linux-arm64-musl@0.7.0": - version "0.7.0" - resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-arm64-musl/-/edr-linux-arm64-musl-0.7.0.tgz#60351352ec26704fed8a232430bf3793d17c29cd" - integrity sha512-1iZYOcEgc+zJI7JQrlAFziuy9sBz1WgnIx3HIIu0J7lBRZ/AXeHHgATb+4InqxtEx9O3W8A0s7f11SyFqJL4Aw== +"@nomicfoundation/edr-linux-arm64-musl@0.8.0": + version "0.8.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-arm64-musl/-/edr-linux-arm64-musl-0.8.0.tgz#9b432dca973068f16a33abb70260e904494638dd" + integrity sha512-gnWxDgdkka0O9GpPX/gZT3REeKYV28Guyg13+Vj/bbLpmK1HmGh6Kx+fMhWv+Ht/wEmGDBGMCW1wdyT/CftJaQ== -"@nomicfoundation/edr-linux-x64-gnu@0.7.0": - version "0.7.0" - resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-x64-gnu/-/edr-linux-x64-gnu-0.7.0.tgz#a7b056bfd46ccfde4d55c9601da5a410c2fce40f" - integrity sha512-wSjC94WcR5MM8sg9w3OsAmT6+bbmChJw6uJKoXR3qscps/jdhjzJWzfgT0XGRq3XMUfimyafW2RWOyfX3ouhrQ== +"@nomicfoundation/edr-linux-x64-gnu@0.8.0": + version "0.8.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-x64-gnu/-/edr-linux-x64-gnu-0.8.0.tgz#72954e5fd875df17c43d4ef3fcc381e3312e1347" + integrity sha512-DTMiAkgAx+nyxcxKyxFZk1HPakXXUCgrmei7r5G7kngiggiGp/AUuBBWFHi8xvl2y04GYhro5Wp+KprnLVoAPA== -"@nomicfoundation/edr-linux-x64-musl@0.7.0": - version "0.7.0" - resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-x64-musl/-/edr-linux-x64-musl-0.7.0.tgz#0fe9f5ace05072e845f71c8fbd28e57798dd6ab5" - integrity sha512-Us22+AZ7wkG1mZwxqE4S4ZcuwkEA5VrUiBOJSvKHGOgy6vFvB/Euh5Lkp4GovwjrtiXuvyGO2UmtkzymZKDxZw== +"@nomicfoundation/edr-linux-x64-musl@0.8.0": + version "0.8.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-x64-musl/-/edr-linux-x64-musl-0.8.0.tgz#0d59390c512106010d6f4d94b7fffd99fb7fd8ae" + integrity sha512-iTITWe0Zj8cNqS0xTblmxPbHVWwEtMiDC+Yxwr64d7QBn/1W0ilFQ16J8gB6RVVFU3GpfNyoeg3tUoMpSnrm6Q== -"@nomicfoundation/edr-win32-x64-msvc@0.7.0": - version "0.7.0" - resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-win32-x64-msvc/-/edr-win32-x64-msvc-0.7.0.tgz#f1b9a0a643db8dffcf5edb827c18e1cef25c4367" - integrity sha512-HAry0heTsWkzReVtjHwoIq3BgFCvXpVhJ5qPmTnegZGsr/KxqvMmHyDMifzKao4bycU8yrpTSyOiAJt27RWjzQ== +"@nomicfoundation/edr-win32-x64-msvc@0.8.0": + version "0.8.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-win32-x64-msvc/-/edr-win32-x64-msvc-0.8.0.tgz#d14225c513372fda54684de1229cc793ffe48c12" + integrity sha512-mNRDyd/C3j7RMcwapifzv2K57sfA5xOw8g2U84ZDvgSrXVXLC99ZPxn9kmolb+dz8VMm9FONTZz9ESS6v8DTnA== -"@nomicfoundation/edr@^0.7.0": - version "0.7.0" - resolved "https://registry.yarnpkg.com/@nomicfoundation/edr/-/edr-0.7.0.tgz#175cb8a81eac585dc76ad41585c908542acb9383" - integrity sha512-+Zyu7TE47TGNcPhOfWLPA/zISs32WDMXrhSWdWYyPHDVn/Uux5TVuOeScKb0BR/R8EJ+leR8COUF/EGxvDOVKg== +"@nomicfoundation/edr@^0.8.0": + version "0.8.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr/-/edr-0.8.0.tgz#63441bb24c1804b6d27b075d0d29f3a02d94fc4f" + integrity sha512-dwWRrghSVBQDpt0wP+6RXD8BMz2i/9TI34TcmZqeEAZuCLei3U9KZRgGTKVAM1rMRvrpf5ROfPqrWNetKVUTag== dependencies: - "@nomicfoundation/edr-darwin-arm64" "0.7.0" - "@nomicfoundation/edr-darwin-x64" "0.7.0" - "@nomicfoundation/edr-linux-arm64-gnu" "0.7.0" - "@nomicfoundation/edr-linux-arm64-musl" "0.7.0" - "@nomicfoundation/edr-linux-x64-gnu" "0.7.0" - "@nomicfoundation/edr-linux-x64-musl" "0.7.0" - "@nomicfoundation/edr-win32-x64-msvc" "0.7.0" + "@nomicfoundation/edr-darwin-arm64" "0.8.0" + "@nomicfoundation/edr-darwin-x64" "0.8.0" + "@nomicfoundation/edr-linux-arm64-gnu" "0.8.0" + "@nomicfoundation/edr-linux-arm64-musl" "0.8.0" + "@nomicfoundation/edr-linux-x64-gnu" "0.8.0" + "@nomicfoundation/edr-linux-x64-musl" "0.8.0" + "@nomicfoundation/edr-win32-x64-msvc" "0.8.0" "@nomicfoundation/ethereumjs-common@4.0.4": version "4.0.4" @@ -2969,10 +3094,10 @@ loupe "^3.1.2" tinyrainbow "^2.0.0" -"@wagmi/connectors@5.7.7": - version "5.7.7" - resolved "https://registry.yarnpkg.com/@wagmi/connectors/-/connectors-5.7.7.tgz#35fe03d69ca3f1494c0e97a758884e06e535eefd" - integrity sha512-hveKxuR35ZQQyteLo7aiN/TBVECYKVbLNTYGGgqzTNHJ8vVoblTP9PwPrRPGOPi5ji8raYSFWShxNK7QpGL+Kg== +"@wagmi/connectors@5.7.8": + version "5.7.8" + resolved "https://registry.yarnpkg.com/@wagmi/connectors/-/connectors-5.7.8.tgz#a6886a3a0598da7fe6b0fc20ed7944717a6700fc" + integrity sha512-idLCc+GQ/GcGgxakEMC7/NSbpD6r1GB07lfDyEjvI5TMzl18pOZhKiqOTENzNi3hDas6ZMvS1xaGwrWufsb1rA== dependencies: "@coinbase/wallet-sdk" "4.3.0" "@metamask/sdk" "0.32.0" @@ -2981,10 +3106,10 @@ "@walletconnect/ethereum-provider" "2.17.0" cbw-sdk "npm:@coinbase/wallet-sdk@3.9.3" -"@wagmi/core@2.16.4": - version "2.16.4" - resolved "https://registry.yarnpkg.com/@wagmi/core/-/core-2.16.4.tgz#96f1a2803dbf3ca110938402bdf2d99ab8da638e" - integrity sha512-E4jY4A98gwuHCjzuEajHIG/WhNDY5BChVHMjflV9Bx5CO7COqYRG2dcRLuF6Bo0LQNvVvXDAFUwR2JShJnT5pA== +"@wagmi/core@2.16.5": + version "2.16.5" + resolved "https://registry.yarnpkg.com/@wagmi/core/-/core-2.16.5.tgz#ae451daba4d84402f4ddf7b1279efeab46f3567f" + integrity sha512-7WlsxIvcS2WXO/8KnIkutCfY6HACsPsEuZHoYGu2TbwM7wlJv2HmR9zSvmyeEDsTBDPva/tuFbmJo4HJ9llkWA== dependencies: eventemitter3 "5.0.1" mipd "0.0.7" @@ -4072,11 +4197,12 @@ cli-truncate@^4.0.0: slice-ansi "^5.0.0" string-width "^7.0.0" -clide-js@^0.2.4: - version "0.2.4" - resolved "https://registry.yarnpkg.com/clide-js/-/clide-js-0.2.4.tgz#a3b5e7e7499848d04b3d2ce2787d381cfbcea40e" - integrity sha512-wTXzx2TFz3m5tM3ptboCwdIBcnomOLA5meZ6+fzHZMzUXz3udT0nKX9ewqc6Uc84pmcpPjptt2eBV0MKHqtKDA== +clide-js@^0.2.11: + version "0.2.11" + resolved "https://registry.yarnpkg.com/clide-js/-/clide-js-0.2.11.tgz#82978d9e37f41bc879071c22d408229268b00afb" + integrity sha512-z/P0mnePzuw9mUGCeBGFzkBlJ5eCgETUGAbYWqDEtCZd+r8+niqUOZ+vTJs+PfkUmNShtRtUQKZnhIiTAj5XUA== dependencies: + "@types/prompts" "^2.4.9" cliui "^8.0.1" prompts "^2.4.2" yargs-parser "^21.1.1" @@ -5074,6 +5200,37 @@ esbuild@~0.23.0: "@esbuild/win32-ia32" "0.23.1" "@esbuild/win32-x64" "0.23.1" +esbuild@~0.25.0: + version "0.25.0" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.25.0.tgz#0de1787a77206c5a79eeb634a623d39b5006ce92" + integrity sha512-BXq5mqc8ltbaN34cDqWuYKyNhX8D/Z0J1xdtdQ8UcIIIyJyz+ZMKUt58tF3SrZ85jcfN/PZYhjR5uDQAYNVbuw== + optionalDependencies: + "@esbuild/aix-ppc64" "0.25.0" + "@esbuild/android-arm" "0.25.0" + "@esbuild/android-arm64" "0.25.0" + "@esbuild/android-x64" "0.25.0" + "@esbuild/darwin-arm64" "0.25.0" + "@esbuild/darwin-x64" "0.25.0" + "@esbuild/freebsd-arm64" "0.25.0" + "@esbuild/freebsd-x64" "0.25.0" + "@esbuild/linux-arm" "0.25.0" + "@esbuild/linux-arm64" "0.25.0" + "@esbuild/linux-ia32" "0.25.0" + "@esbuild/linux-loong64" "0.25.0" + "@esbuild/linux-mips64el" "0.25.0" + "@esbuild/linux-ppc64" "0.25.0" + "@esbuild/linux-riscv64" "0.25.0" + "@esbuild/linux-s390x" "0.25.0" + "@esbuild/linux-x64" "0.25.0" + "@esbuild/netbsd-arm64" "0.25.0" + "@esbuild/netbsd-x64" "0.25.0" + "@esbuild/openbsd-arm64" "0.25.0" + "@esbuild/openbsd-x64" "0.25.0" + "@esbuild/sunos-x64" "0.25.0" + "@esbuild/win32-arm64" "0.25.0" + "@esbuild/win32-ia32" "0.25.0" + "@esbuild/win32-x64" "0.25.0" + escalade@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" @@ -6071,14 +6228,14 @@ h3@^1.10.1, h3@^1.8.2: uncrypto "^0.1.3" unenv "^1.9.0" -hardhat@^2.22.18: - version "2.22.18" - resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.22.18.tgz#e299a26a67b521bbb225370eb47a032d4e097e3a" - integrity sha512-2+kUz39gvMo56s75cfLBhiFedkQf+gXdrwCcz4R/5wW0oBdwiyfj2q9BIkMoaA0WIGYYMU2I1Cc4ucTunhfjzw== +hardhat@^2.22.19: + version "2.22.19" + resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.22.19.tgz#92eb6f59e75b0dded841fecf16260a5e3f6eb4eb" + integrity sha512-jptJR5o6MCgNbhd7eKa3mrteR+Ggq1exmE5RUL5ydQEVKcZm0sss5laa86yZ0ixIavIvF4zzS7TdGDuyopj0sQ== dependencies: "@ethersproject/abi" "^5.1.2" "@metamask/eth-sig-util" "^4.0.0" - "@nomicfoundation/edr" "^0.7.0" + "@nomicfoundation/edr" "^0.8.0" "@nomicfoundation/ethereumjs-common" "4.0.4" "@nomicfoundation/ethereumjs-tx" "5.0.4" "@nomicfoundation/ethereumjs-util" "9.0.4" @@ -7448,10 +7605,10 @@ merge2@^1.3.0, merge2@^1.4.1: resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== -merkletreejs@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/merkletreejs/-/merkletreejs-0.4.1.tgz#a77a0c3d16adec71a09ef7e5b7e055dde29d30e1" - integrity sha512-W2VSHeGTdAnWtedee+pgGn7SHvncMdINnMeHAaXrfarSaMNLff/pm7RCr/QXYxN6XzJFgJZY+28ejO0lAosW4A== +merkletreejs@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/merkletreejs/-/merkletreejs-0.5.1.tgz#cbb30f5db453b437510c0d32f91ec969a63c8e83" + integrity sha512-iR1MI07/HvioeZUvG9EQorcY6zSun8LCmW4jqNbHdecv2XsOt7qYMHWspcjY//lwaSM8/GUMX7ehpm/+UvqrqQ== dependencies: buffer-reverse "^1.0.1" crypto-js "^4.2.0" @@ -8605,10 +8762,10 @@ react-dom@18.2.0, react-dom@^18.2.0: loose-envify "^1.1.0" scheduler "^0.23.0" -react-hot-toast@^2.5.1: - version "2.5.1" - resolved "https://registry.yarnpkg.com/react-hot-toast/-/react-hot-toast-2.5.1.tgz#fcb182d96353c803ee5af82e96c806d5eaa4dcfa" - integrity sha512-54Gq1ZD1JbmAb4psp9bvFHjS7lje+8ubboUmvKZkCsQBLH6AOpZ9JemfRvIdHcfb9AZXRaFLrb3qUobGYDJhFQ== +react-hot-toast@^2.5.2: + version "2.5.2" + resolved "https://registry.yarnpkg.com/react-hot-toast/-/react-hot-toast-2.5.2.tgz#b55328966a26add56513e2dc1682e2cb4753c244" + integrity sha512-Tun3BbCxzmXXM7C+NI4qiv6lT0uwGh4oAfeJyNOjYUejTsm35mK9iCaYLGv8cBz9L5YxZLx/2ii7zsIwPtPUdw== dependencies: csstype "^3.1.3" goober "^2.1.16" @@ -9970,6 +10127,16 @@ tsx@^4.19.2: optionalDependencies: fsevents "~2.3.3" +tsx@^4.19.3: + version "4.19.3" + resolved "https://registry.yarnpkg.com/tsx/-/tsx-4.19.3.tgz#2bdbcb87089374d933596f8645615142ed727666" + integrity sha512-4H8vUNGNjQ4V2EOoGw005+c+dGuPSnhpPBPHBtsZdGZBk/iJb4kguGlPWaZTZ3q5nMtFOEsY0nRDlh9PJyd6SQ== + dependencies: + esbuild "~0.25.0" + get-tsconfig "^4.7.5" + optionalDependencies: + fsevents "~2.3.3" + turbo-darwin-64@2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/turbo-darwin-64/-/turbo-darwin-64-2.4.2.tgz#2a4ef093f2a87988308d6b28ef771d71baeeb7ce" @@ -10174,10 +10341,10 @@ typescript@^5.3.3: resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.3.3.tgz#b3ce6ba258e72e6305ba66f5c9b452aaee3ffe37" integrity sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw== -typescript@^5.7.3: - version "5.7.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.7.3.tgz#919b44a7dbb8583a9b856d162be24a54bf80073e" - integrity sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw== +typescript@^5.8.2: + version "5.8.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.8.2.tgz#8170b3702f74b79db2e5a96207c15e65807999e4" + integrity sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ== ua-parser-js@^1.0.37: version "1.0.37" @@ -10434,10 +10601,10 @@ viem@^2.1.1: ox "0.6.7" ws "8.18.0" -viem@^2.23.1: - version "2.23.1" - resolved "https://registry.yarnpkg.com/viem/-/viem-2.23.1.tgz#5fe527de258e33b2445af266698fd6575068112d" - integrity sha512-c5AyJCTA5LeNI/KCu++vkbqbh7irYjUSHxLIAHPKJ6IEcBNMt8+7sPG7gjMXpqVWnqPMzaW9CA2n+yUsKWttDA== +viem@^2.23.6: + version "2.23.6" + resolved "https://registry.yarnpkg.com/viem/-/viem-2.23.6.tgz#05d9b49cc0b5130707ecdcd1b5c141f72b68606c" + integrity sha512-+yUeK8rktbGFQaLIvY4Tki22HUjian9Z4eKGAUT72RF9bcfkYgK8CJZz9P83tgoeLpiTyX3xcBM4xJZrJyKmsA== dependencies: "@noble/curves" "1.8.1" "@noble/hashes" "1.7.1" @@ -10505,13 +10672,13 @@ vitest@^3.0.5: vite-node "3.0.5" why-is-node-running "^2.3.0" -wagmi@^2.14.11: - version "2.14.11" - resolved "https://registry.yarnpkg.com/wagmi/-/wagmi-2.14.11.tgz#bfdd479e88bb3907efb412d04b5135a0017d5090" - integrity sha512-Qj79cq+9MAcnKict9QLo60Lc4S2IXVVE94HBwCmczDrFtoM31NxfX4uQP73Elj2fV9lXH4/dw3jlb8eDhlm6iQ== +wagmi@^2.14.12: + version "2.14.12" + resolved "https://registry.yarnpkg.com/wagmi/-/wagmi-2.14.12.tgz#28390caef9b035b8f57cd5118822259e50175635" + integrity sha512-HSX7CkwF7YWecV5EqcOQrHUSGqZ+f8GJ8FWRYktVcxitfaAd0YofwfJNJB+zEsV17hV6uZ5Tu1nP32tgz+1eTQ== dependencies: - "@wagmi/connectors" "5.7.7" - "@wagmi/core" "2.16.4" + "@wagmi/connectors" "5.7.8" + "@wagmi/core" "2.16.5" use-sync-external-store "1.4.0" "webextension-polyfill@>=0.10.0 <1.0", webextension-polyfill@^0.10.0: From 57d94c656d8584ca6cc9c54f30d27fa4619a019e Mon Sep 17 00:00:00 2001 From: Ryan Goree Date: Fri, 7 Mar 2025 16:55:36 -0600 Subject: [PATCH 132/146] Add `getProposalArgs` to `ReadCoreVoting`, make `targets` & `calldatas` optional in `executeProposal` --- .../src/entities/coreVoting/ReadCoreVoting.ts | 33 +++++++++++++++++++ .../coreVoting/ReadWriteCoreVoting.ts | 27 ++++++++++----- packages/council-js/tsup.config.ts | 1 + 3 files changed, 52 insertions(+), 9 deletions(-) diff --git a/packages/council-js/src/entities/coreVoting/ReadCoreVoting.ts b/packages/council-js/src/entities/coreVoting/ReadCoreVoting.ts index 69be3056..a5976476 100644 --- a/packages/council-js/src/entities/coreVoting/ReadCoreVoting.ts +++ b/packages/council-js/src/entities/coreVoting/ReadCoreVoting.ts @@ -3,6 +3,7 @@ import { Address, Contract, ContractReadOptions, + FunctionArgs, RangeBlock, } from "@delvtech/drift"; import { ContractEntityConfig, Entity } from "src/entities/Entity"; @@ -292,4 +293,36 @@ export class ReadCoreVoting extends Entity { ); return { yes, no, maybe, total: yes + no + maybe }; } + + /** + * Get the array of addresses that will be called (targets) and the data + * they'll be called with (calldatas) by a proposal. + */ + async getProposalArgs( + proposalId: bigint, + options?: ContractReadOptions, + ): Promise | undefined> { + const logs = await this.contract.getEvents("ProposalCreated", { + toBlock: await convertToRangeBlock(options?.block, this.drift), + }); + const log = logs.find(({ args }) => args.proposalId === proposalId); + + if (!log?.transactionHash) { + return undefined; + } + + const createTransaction = await this.drift.getTransaction({ + hash: log.transactionHash, + }); + + if (!createTransaction?.input) { + return undefined; + } + + const { args } = this.contract.decodeFunctionData<"proposal">( + createTransaction.input, + ); + + return args; + } } diff --git a/packages/council-js/src/entities/coreVoting/ReadWriteCoreVoting.ts b/packages/council-js/src/entities/coreVoting/ReadWriteCoreVoting.ts index 10806c96..e5e814fe 100644 --- a/packages/council-js/src/entities/coreVoting/ReadWriteCoreVoting.ts +++ b/packages/council-js/src/entities/coreVoting/ReadWriteCoreVoting.ts @@ -11,6 +11,7 @@ import { ReadCoreVoting } from "src/entities/coreVoting/ReadCoreVoting"; import { Ballot } from "src/entities/coreVoting/types"; import { EntityWriteParams } from "src/entities/Entity"; import { ReadVotingVault } from "src/entities/votingVault/ReadVotingVault"; +import { CouncilSdkError } from "src/error"; export class ReadWriteCoreVoting< A extends ReadWriteAdapter = ReadWriteAdapter, @@ -175,9 +176,20 @@ export class ReadWriteCoreVoting< options, }: EntityWriteParams<{ proposalId: bigint; - targets: Address[]; - calldatas: Bytes[]; + targets?: Readonly; + calldatas?: Readonly; }>): Promise { + if (!targets || !calldatas) { + const args = await this.getProposalArgs(proposalId); + if (!args) { + throw new CouncilSdkError( + `Missing targets and calldatas to execute proposal ${proposalId}`, + ); + } + targets = args.targets; + calldatas = args.calldatas; + } + return this.contract.write( "execute", { @@ -201,12 +213,9 @@ export class ReadWriteCoreVoting< * Vote on this a proposal. */ async vote({ - proposalId, - ballot, - vaults, - extraVaultData, + args: { proposalId, ballot, vaults, extraVaultData }, options, - }: { + }: EntityWriteParams<{ proposalId: bigint; ballot: Ballot; /** @@ -217,9 +226,9 @@ export class ReadWriteCoreVoting< /** * Extra data given to the vaults to help calculation. */ - extraVaultData?: Bytes[]; + extraVaultData?: (Bytes | undefined)[]; options?: ContractWriteOptions & OnMinedParam; - }): Promise { + }>): Promise { const voter = await this.contract.getSignerAddress(); // Filter out vaults with no voting power which would cause a revert. diff --git a/packages/council-js/tsup.config.ts b/packages/council-js/tsup.config.ts index f021811a..fed259d9 100644 --- a/packages/council-js/tsup.config.ts +++ b/packages/council-js/tsup.config.ts @@ -9,4 +9,5 @@ export default defineConfig({ minify: true, shims: true, cjsInterop: true, + splitting: true, }); From 25bbb0865f69cba986177581bfd424f180aa5202 Mon Sep 17 00:00:00 2001 From: Ryan Goree Date: Fri, 7 Mar 2025 16:59:24 -0600 Subject: [PATCH 133/146] Update CLI --- .changeset/fifty-months-brake.md | 5 + .vscode/settings.json | 2 + apps/council-ui/package.json | 2 +- packages/council-cli/.env.example | 2 +- packages/council-cli/hardhat.config.cjs | 2 +- packages/council-cli/package.json | 8 +- .../core-voting/change-vault-status.ts | 60 +-- packages/council-cli/src/commands/deploy.ts | 78 ++- .../src/commands/deploy/airdrop.ts | 115 ++--- .../src/commands/deploy/core-voting.ts | 128 ++--- .../src/commands/deploy/default.ts | 463 ++++++++---------- .../src/commands/deploy/gsc-vault.ts | 99 +--- .../src/commands/deploy/locking-vault.ts | 72 +-- .../src/commands/deploy/mock-erc20.ts | 72 +-- .../src/commands/deploy/optimistic-grants.ts | 75 +-- .../src/commands/deploy/optimistic-rewards.ts | 149 ++---- .../src/commands/deploy/simple-proxy.ts | 75 +-- .../council-cli/src/commands/deploy/simple.ts | 298 ++++------- .../src/commands/deploy/spender.ts | 137 ++---- .../src/commands/deploy/timelock.ts | 84 +--- .../src/commands/deploy/treasury.ts | 65 +-- .../src/commands/deploy/vesting-vault.ts | 72 +-- .../src/commands/encode/airdrop/reclaim.ts | 26 +- .../commands/encode/authorizable/authorize.ts | 22 +- .../encode/authorizable/deauthorize.ts | 22 +- .../commands/encode/authorizable/set-owner.ts | 22 +- .../core-voting/change-extra-voting-time.ts | 24 +- .../encode/core-voting/change-vault-status.ts | 31 +- .../encode/core-voting/set-custom-quorum.ts | 48 +- .../encode/core-voting/set-default-quorum.ts | 33 +- .../encode/core-voting/set-lock-duration.ts | 24 +- .../core-voting/set-min-proposal-power.ts | 35 +- .../encode/gsc-vault/set-core-voting.ts | 26 +- .../encode/gsc-vault/set-idle-duration.ts | 24 +- .../encode/gsc-vault/set-vote-power-bound.ts | 35 +- .../encode/locking-vault/change-delegation.ts | 28 +- .../commands/encode/locking-vault/deposit.ts | 63 ++- .../commands/encode/locking-vault/withdraw.ts | 31 +- .../merkle-rewards/claim-and-delegate.ts | 90 ++-- .../commands/encode/merkle-rewards/claim.ts | 67 ++- .../encode/optimistic-grants/claim.ts | 28 +- .../optimistic-grants/configure-grant.ts | 56 +-- .../encode/optimistic-grants/deposit.ts | 31 +- .../encode/optimistic-grants/withdraw.ts | 45 +- .../optimistic-rewards/challenge-rewards.ts | 14 +- .../optimistic-rewards/propose-rewards.ts | 26 +- .../set-challenge-period.ts | 24 +- .../encode/optimistic-rewards/set-proposer.ts | 26 +- .../src/commands/encode/spender/high-spend.ts | 44 +- .../commands/encode/spender/medium-spend.ts | 44 +- .../commands/encode/spender/remove-token.ts | 44 +- .../src/commands/encode/spender/set-limits.ts | 42 +- .../commands/encode/spender/small-spend.ts | 44 +- .../src/commands/encode/timelock/execute.ts | 30 +- .../commands/encode/timelock/increase-time.ts | 32 +- .../commands/encode/timelock/register-call.ts | 21 +- .../commands/encode/timelock/set-wait-time.ts | 20 +- .../src/commands/encode/timelock/stop-call.ts | 21 +- .../src/commands/encode/treasury/approve.ts | 57 +-- .../commands/encode/treasury/generic-call.ts | 34 +- .../commands/encode/treasury/send-funds.ts | 57 +-- .../encode/vesting-vault/accept-grant.ts | 15 +- .../vesting-vault/add-grant-and-delegate.ts | 100 ++-- .../encode/vesting-vault/change-delegation.ts | 26 +- .../change-unvested-multiplier.ts | 21 +- .../commands/encode/vesting-vault/delegate.ts | 26 +- .../commands/encode/vesting-vault/deposit.ts | 30 +- .../encode/vesting-vault/initialize.ts | 33 +- .../encode/vesting-vault/remove-grant.ts | 26 +- .../encode/vesting-vault/set-manager.ts | 26 +- .../encode/vesting-vault/set-timelock.ts | 26 +- .../vesting-vault/update-voting-power.ts | 24 +- .../commands/encode/vesting-vault/withdraw.ts | 44 +- .../src/commands/locking-vault/approve.ts | 62 +-- .../src/commands/locking-vault/deposit.ts | 62 +-- .../src/commands/locking-vault/get-balance.ts | 49 +- .../commands/locking-vault/get-delegate.ts | 44 +- .../src/commands/locking-vault/get-token.ts | 28 +- .../locking-vault/get-voting-power.ts | 44 +- .../src/commands/locking-vault/withdraw.ts | 53 +- .../commands/merkle-rewards/create-tree.ts | 118 +++-- .../src/commands/mock-token/mint.ts | 71 ++- .../src/commands/mock-token/set-allowance.ts | 80 ++- .../src/commands/mock-token/set-balance.ts | 72 ++- .../src/commands/proposal/create.ts | 134 +++-- .../src/commands/proposal/execute.ts | 46 +- .../council-cli/src/commands/proposal/vote.ts | 93 ++-- packages/council-cli/src/commands/server.ts | 78 ++- .../src/commands/server/block-number.ts | 13 +- .../council-cli/src/commands/server/mine.ts | 23 +- .../src/commands/vault/get-voting-power.ts | 44 +- .../commands/vesting-vault/get-delegate.ts | 44 +- .../src/commands/vesting-vault/get-token.ts | 28 +- packages/council-cli/src/config.ts | 6 +- packages/council-cli/src/council.ts | 11 +- packages/council-cli/src/deploy/Deployer.ts | 128 +++++ .../DeploymentJson.ts} | 53 +- packages/council-cli/src/lib/viem.ts | 62 ++- .../call-hash.ts | 24 +- packages/council-cli/src/options/chain.ts | 48 ++ packages/council-cli/src/options/decimals.ts | 9 + .../deploy/fresh-deploy.ts | 6 +- packages/council-cli/src/options/owner.ts | 8 + .../{reusable-options => options}/rpc-url.ts | 8 +- packages/council-cli/src/options/types.ts | 8 + .../wallet-key.ts | 6 +- .../council-cli/src/options/writeOptions.ts | 69 +++ .../council-cli/src/reusable-options/chain.ts | 81 --- .../src/reusable-options/writeOptions.ts | 43 -- .../council-cli/src/utils/config/JsonStore.ts | 158 +++--- .../src/utils/config/getAppRootDir.ts | 23 + .../src/utils/config/getOSConfigDir.ts | 39 -- .../council-cli/src/utils/createCallHash.ts | 3 +- .../src/utils/defaultOptionValues.ts | 11 - .../council-cli/src/utils/deployContract.ts | 71 --- packages/council-cli/src/utils/types.ts | 12 +- .../{config => validation}/validateData.ts | 0 packages/council-cli/tsconfig.json | 15 +- turbo.json | 41 +- yarn.lock | 16 +- 120 files changed, 2484 insertions(+), 3512 deletions(-) create mode 100644 .changeset/fifty-months-brake.md create mode 100644 packages/council-cli/src/deploy/Deployer.ts rename packages/council-cli/src/{deploymentStore.ts => deploy/DeploymentJson.ts} (58%) rename packages/council-cli/src/{reusable-options => options}/call-hash.ts (77%) create mode 100644 packages/council-cli/src/options/chain.ts create mode 100644 packages/council-cli/src/options/decimals.ts rename packages/council-cli/src/{reusable-options => options}/deploy/fresh-deploy.ts (51%) create mode 100644 packages/council-cli/src/options/owner.ts rename packages/council-cli/src/{reusable-options => options}/rpc-url.ts (54%) create mode 100644 packages/council-cli/src/options/types.ts rename packages/council-cli/src/{reusable-options => options}/wallet-key.ts (61%) create mode 100644 packages/council-cli/src/options/writeOptions.ts delete mode 100644 packages/council-cli/src/reusable-options/chain.ts delete mode 100644 packages/council-cli/src/reusable-options/writeOptions.ts create mode 100644 packages/council-cli/src/utils/config/getAppRootDir.ts delete mode 100644 packages/council-cli/src/utils/config/getOSConfigDir.ts delete mode 100644 packages/council-cli/src/utils/defaultOptionValues.ts delete mode 100644 packages/council-cli/src/utils/deployContract.ts rename packages/council-cli/src/utils/{config => validation}/validateData.ts (100%) diff --git a/.changeset/fifty-months-brake.md b/.changeset/fifty-months-brake.md new file mode 100644 index 00000000..5a761d70 --- /dev/null +++ b/.changeset/fifty-months-brake.md @@ -0,0 +1,5 @@ +--- +"@delvtech/council-cli": patch +--- + +Updated and improved the CLI diff --git a/.vscode/settings.json b/.vscode/settings.json index 9cf6b227..52208f84 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -13,7 +13,9 @@ "calldatas", "delegators", "delvtech", + "linea", "merkle", + "signale", "timelock", "tsup", "typecheck", diff --git a/apps/council-ui/package.json b/apps/council-ui/package.json index b398e2bf..c5396f8d 100644 --- a/apps/council-ui/package.json +++ b/apps/council-ui/package.json @@ -38,7 +38,7 @@ "react-hot-toast": "^2.5.2", "react-loading-skeleton": "^3.5.0", "react-tooltip": "^5.28.0", - "viem": "^2.23.6", + "viem": "^2.23.7", "wagmi": "^2.14.12" }, "devDependencies": { diff --git a/packages/council-cli/.env.example b/packages/council-cli/.env.example index 6d7be679..c234d31b 100644 --- a/packages/council-cli/.env.example +++ b/packages/council-cli/.env.example @@ -1,4 +1,4 @@ -RPC_URL= +RPC_URL=http://127.0.0.1:8545/ # For signing transactions WALLET_PRIVATE_KEY= \ No newline at end of file diff --git a/packages/council-cli/hardhat.config.cjs b/packages/council-cli/hardhat.config.cjs index b86b01ec..ea457377 100644 --- a/packages/council-cli/hardhat.config.cjs +++ b/packages/council-cli/hardhat.config.cjs @@ -3,7 +3,7 @@ module.exports = { solidity: { compilers: [ { - version: "0.8.3", + version: "0.8.24", settings: { optimizer: { enabled: true, diff --git a/packages/council-cli/package.json b/packages/council-cli/package.json index e58449c1..9a59402e 100644 --- a/packages/council-cli/package.json +++ b/packages/council-cli/package.json @@ -13,7 +13,9 @@ "scripts": { "council": "node dist/council.js", "dev": "NODE_ENV=development tsx src/council.ts", + "dev:watch": "NODE_ENV=development tsx --watch src/council.ts", "prod": "tsx src/council.ts", + "prod:watch": "tsx --watch src/council.ts", "build": "rimraf dist && tsc", "watch": "tsc --watch", "typecheck": "tsc --noEmit" @@ -28,11 +30,13 @@ } }, "dependencies": { + "@delvtech/drift": "^0.6.0", "@delvtech/drift-viem": "^0.6.0", "@delvtech/council-artifacts": "^0.1.0", "@delvtech/council-js": "^0.0.0", + "@delvtech/fixed-point-wasm": "^0.0.7", "ajv": "^8.17.1", - "clide-js": "^0.2.11", + "clide-js": "^0.2.13", "clide-plugin-command-menu": "^0.1.1", "colors": "^1.4.0", "dotenv": "^16.4.7", @@ -50,7 +54,7 @@ "rimraf": "^6.0.1", "tsx": "^4.19.3", "typescript": "^5.8.2", - "viem": "^2.23.6" + "viem": "^2.23.7" }, "publishConfig": { "access": "public" diff --git a/packages/council-cli/src/commands/core-voting/change-vault-status.ts b/packages/council-cli/src/commands/core-voting/change-vault-status.ts index 8c128703..c757cf9b 100644 --- a/packages/council-cli/src/commands/core-voting/change-vault-status.ts +++ b/packages/council-cli/src/commands/core-voting/change-vault-status.ts @@ -1,29 +1,26 @@ -import { ReadWriteCouncil } from "@delvtech/council-viem"; import { command } from "clide-js"; import signale from "signale"; -import { createPublicClient, createWalletClient, http } from "viem"; -import { - getWriteOptions, - writeOptions, -} from "../../reusable-options/writeOptions.js"; +import { getWriteOptions, writeOptions } from "../../options/writeOptions.js"; export default command({ description: "Change a vault's status in a CoreVoting contract.", options: { - address: { - describe: "The CoreVoting contract address", - type: "string", + a: { + alias: ["address"], + describe: "The CoreVoting contract address.", + type: "hex", required: true, }, - vault: { - describe: "The vault address", - type: "string", + v: { + alias: ["vault"], + describe: "The vault address.", + type: "hex", required: true, }, - valid: { - alias: ["is-valid", "approved"], - describe: "Whether or not the vault is valid", + V: { + alias: ["valid", "approved"], + describe: "Whether or not the vault is valid.", type: "boolean", default: true, required: true, @@ -31,12 +28,8 @@ export default command({ ...writeOptions, }, - handler: async ({ options, context, next }) => { - const { - account: signerAccount, - chain, - rpcUrl, - } = await getWriteOptions(options, context); + handler: async ({ options, client, next }) => { + const { council } = await getWriteOptions(options, client); const address = await options.address({ prompt: "Enter Core Voting address", @@ -50,25 +43,16 @@ export default command({ prompt: "Is the vault valid/approved?", }); - const transport = http(rpcUrl); - const publicClient = createPublicClient({ chain, transport }); - const walletClient = createWalletClient({ - transport, - chain, - account: signerAccount, + const hash = await council.coreVoting(address).changeVaultStatus({ + args: { vault, isValid }, + options: { + onMined: () => { + signale.success(`Transaction success: ${hash}`); + }, + }, }); - const coreVoting = new ReadWriteCouncil({ - publicClient, - walletClient, - }).coreVoting({ address: address as `0x${string}` }); - - const hash = await coreVoting.changeVaultStatus({ - vault: vault as `0x${string}`, - isValid, - }); - - signale.success(hash); + signale.pending(`Transaction submitted: ${hash}`); next(hash); }, }); diff --git a/packages/council-cli/src/commands/deploy.ts b/packages/council-cli/src/commands/deploy.ts index c78a4c4e..a733e303 100644 --- a/packages/council-cli/src/commands/deploy.ts +++ b/packages/council-cli/src/commands/deploy.ts @@ -1,14 +1,82 @@ import { command } from "clide-js"; +import colors from "colors"; +import { Deployer } from "../deploy/Deployer.js"; import { getWriteOptions, + WriteOptions, writeOptions, -} from "../reusable-options/writeOptions.js"; +} from "../options/writeOptions.js"; + +const line = colors.dim("-".repeat(80)); +const thickLine = colors.dim("=".repeat(80)); export default command({ - description: "Deploy a contract or combination of contracts", + description: "Deploy a contract or combination of contracts.", requiresSubcommand: true, - options: writeOptions, - handler: async ({ options, context, next }) => { - return next(await getWriteOptions(options, context)); + + options: { + name: { + description: + "A name for the deployment. Defaults to the the contract name if a single contract is deployed, otherwise a timestamp.", + type: "string", + }, + "out-dir": { + alias: ["deployments-dir"], + description: + "The directory to write the contract deployment information to, relative to the current working directory. Defaults to process.env.DEPLOYMENTS_DIR.", + type: "string", + default: process.env.DEPLOYMENTS_DIR, + }, + ...writeOptions, + }, + + handler: async ({ options, client, next }) => { + const { walletClient, publicClient, ...rest } = await getWriteOptions( + options, + client, + ); + + const deployer = new Deployer({ publicClient, walletClient }); + + const deployOptions: DeployOptions = { + deployer, + publicClient, + walletClient, + ...rest, + }; + + await next(deployOptions); + + const outDir = await options.outDir(); + let name = await options.name(); + + if (!name) { + if (deployer.deployedContracts.length === 1) { + name = deployer.deployedContracts[0].name; + } else { + name = new Date().toISOString().replace(/:/g, "-"); + } + } + + await deployer.save({ name, outDir }); + + console.log(` +Deployment complete! + +${thickLine} +${deployer.deployedContracts + .map(({ name, address }, i) => { + if (i !== 0) { + return `${line}\n${name}: ${address}`; + } + return `${name}: ${address}`; + }) + .join("\n")} +${thickLine} +`); }, }); + +export interface DeployOptions extends WriteOptions { + deployer: Deployer; +} diff --git a/packages/council-cli/src/commands/deploy/airdrop.ts b/packages/council-cli/src/commands/deploy/airdrop.ts index 46ae810e..f5fe6fc5 100644 --- a/packages/council-cli/src/commands/deploy/airdrop.ts +++ b/packages/council-cli/src/commands/deploy/airdrop.ts @@ -1,51 +1,46 @@ import { Airdrop } from "@delvtech/council-artifacts/Airdrop"; import { command } from "clide-js"; -import signale from "signale"; -import { PrivateKeyAccount } from "viem"; -import { Chain } from "viem/chains"; -import { WriteOptions } from "../../reusable-options/writeOptions.js"; -import { - DeployedContract, - deployContract, -} from "../../utils/deployContract.js"; +import { ownerOption } from "../../options/owner.js"; +import { DeployOptions } from "../deploy.js"; export default command({ description: "Deploy an Airdrop contract", options: { - owner: { - alias: ["governance"], - description: "The contract owner's address (e.g., a Timelock contract)", - type: "string", + g: { + ...ownerOption, + alias: ["governance", ...ownerOption.alias], }, - root: { - alias: ["merkle-root"], - description: "The merkle root of the airdrop", - type: "string", + r: { + alias: ["root"], + description: "The merkle root of the airdrop.", + type: "hex", required: true, }, - token: { - description: "The address of the ERC20 token contract", - type: "string", + t: { + alias: ["token"], + description: "The address of the ERC20 token contract.", + type: "hex", required: true, }, - vault: { - alias: ["locking-vault"], + v: { + alias: ["vault"], description: - "The address of the locking vault contract that will be used when calling OptimisticRewards.claimAndDelegate()", - type: "string", + "The address of the locking vault contract that will be used when calling OptimisticRewards.claimAndDelegate().", + type: "hex", required: true, }, - expiration: { + e: { + alias: ["expiration"], description: - "The expiration timestamp (in seconds) after which the funds can be reclaimed by the owner", + "The expiration timestamp (in seconds) after which the funds can be reclaimed by the owner.", type: "number", required: true, }, }, handler: async ({ data, options, next }) => { - const { account, chain, rpcUrl } = data as WriteOptions; + const { account, deployer } = data as DeployOptions; const owner = (await options.owner()) || account.address; @@ -57,7 +52,7 @@ export default command({ prompt: "Enter token address", }); - const lockingVault = await options.lockingVault({ + const vault = await options.vault({ prompt: "Enter locking vault address", }); @@ -65,63 +60,19 @@ export default command({ prompt: "Enter expiration timestamp (in seconds)", }); - signale.pending("Deploying Airdrop..."); - - const deployData = await deployAirDrop({ - owner, - merkleRoot: root, - token, - expiration, - lockingVault, - account, - rpcUrl, - chain, - onSubmitted: (txHash) => { - signale.pending(`Airdrop deployment tx submitted: ${txHash}`); + const deployedContract = await deployer.deploy({ + abi: Airdrop.abi, + bytecode: Airdrop.bytecode, + name: "Airdrop", + args: { + _expiration: BigInt(expiration), + _governance: owner, + _lockingVault: vault, + _merkleRoot: root, + _token: token, }, }); - signale.success(`Airdrop deployed @ ${deployData.address}`); - next(deployData); + next(deployedContract); }, }); - -export interface DeployAirDropOptions { - owner: string; - merkleRoot: string; - token: string; - expiration: number; - lockingVault: string; - account: PrivateKeyAccount; - rpcUrl: string; - chain: Chain; - onSubmitted?: (txHash: string) => void; -} - -export async function deployAirDrop({ - owner, - merkleRoot, - token, - expiration, - lockingVault, - account, - rpcUrl, - chain, - onSubmitted, -}: DeployAirDropOptions): Promise { - return deployContract({ - abi: Airdrop.abi, - args: [ - owner as `0x${string}`, - merkleRoot as `0x${string}`, - token as `0x${string}`, - BigInt(expiration), - lockingVault as `0x${string}`, - ], - bytecode: Airdrop.bytecode, - account, - rpcUrl, - chain, - onSubmitted, - }); -} diff --git a/packages/council-cli/src/commands/deploy/core-voting.ts b/packages/council-cli/src/commands/deploy/core-voting.ts index cc043318..b2c18bc3 100644 --- a/packages/council-cli/src/commands/deploy/core-voting.ts +++ b/packages/council-cli/src/commands/deploy/core-voting.ts @@ -1,135 +1,77 @@ import { CoreVoting } from "@delvtech/council-artifacts/CoreVoting"; import { command } from "clide-js"; -import signale from "signale"; -import { PrivateKeyAccount, parseUnits } from "viem"; -import { Chain } from "viem/chains"; -import { WriteOptions } from "../../reusable-options/writeOptions.js"; -import { - DeployedContract, - deployContract, -} from "../../utils/deployContract.js"; +import { parseEther } from "viem"; +import { ownerOption } from "../../options/owner.js"; +import { DeployOptions } from "../deploy.js"; export default command({ description: "Deploy a CoreVoting contract", options: { - owner: { - alias: ["timelock"], - description: "The contract owner's address (e.g., a Timelock contract)", - type: "string", + t: { + ...ownerOption, + alias: ["timelock", ...ownerOption.alias], }, - quorum: { - alias: ["base-quorum"], - description: "The default quorum for proposals", + q: { + alias: ["quorum"], + description: + "The minimum voting power required for a proposal to pass as a decimal string.", type: "string", required: true, }, - "min-power": { + p: { alias: ["min-proposal-power"], - description: "The minimum voting power required to create a proposal", + description: + "The minimum voting power required to create a proposal as a decimal string.", type: "string", required: true, }, - decimals: { - description: - "The decimal precision to use. The quorum and power options will be multiplied by (10 ** decimals). For example, if quorum is 100 and decimals is 18, then the result will be 100000000000000000000", - type: "number", - default: 18, - }, - gsc: { - description: "The address of the Governance Steering Committee contract", - type: "string", + g: { + alias: ["gsc"], + description: "The address of the Governance Steering Committee contract.", + type: "hex", }, - vaults: { - alias: ["voting-vaults"], + v: { + alias: ["vaults"], description: "The addresses of the approved voting vaults", - type: "array", + type: "hexArray", default: [], }, }, handler: async ({ data, options, next }) => { - const { account, chain, rpcUrl } = data as WriteOptions; + const { account, deployer } = data as DeployOptions; - const owner = (await options.owner()) || account.address; + const timelock = (await options.timelock()) || account.address; const quorum = await options.quorum({ prompt: "Enter default quorum", }); - const minPower = await options.minPower({ + const minProposalPower = await options.minProposalPower({ prompt: "Enter minimum proposal power", }); - const decimals = await options.decimals(); - - const gsc = (await options.gsc()) || owner; + const gsc = (await options.gsc()) || timelock; const maybeVaults = await options.vaults({ prompt: "Enter approved voting vaults", }); const vaults = maybeVaults?.filter((v) => !!v) || []; - signale.pending("Deploying CoreVoting..."); - - const deployData = await deployCoreVoting({ - owner, - quorum, - minPower, - decimals, - gsc, - vaults, - account, - rpcUrl, - chain, - onSubmitted: (txHash) => { - signale.pending(`CoreVoting deployment tx submitted: ${txHash}`); + const deployedContract = deployer.deploy({ + abi: CoreVoting.abi, + bytecode: CoreVoting.bytecode, + name: "CoreVoting", + args: { + _baseQuorum: parseEther(quorum), + _minProposalPower: parseEther(minProposalPower), + _gsc: gsc, + _timelock: timelock, + votingVaults: vaults, }, }); - signale.success(`CoreVoting deployed @ ${deployData.address}`); - next(deployData); + next(deployedContract); }, }); - -export interface DeployCoreVotingOptions { - quorum: string; - minPower: string; - decimals: number; - gsc: string; - vaults: string[]; - account: PrivateKeyAccount; - rpcUrl: string; - chain: Chain; - owner?: string; - onSubmitted?: (txHash: string) => void; -} - -export async function deployCoreVoting({ - quorum, - minPower, - decimals, - gsc, - vaults, - account, - rpcUrl, - chain, - owner = account.address, - onSubmitted, -}: DeployCoreVotingOptions): Promise { - return await deployContract({ - abi: CoreVoting.abi, - args: [ - owner as `0x${string}`, - parseUnits(quorum, decimals), - parseUnits(minPower, decimals), - gsc as `0x${string}`, - vaults as `0x${string}`[], - ], - bytecode: CoreVoting.bytecode, - account, - rpcUrl, - chain, - onSubmitted, - }); -} diff --git a/packages/council-cli/src/commands/deploy/default.ts b/packages/council-cli/src/commands/deploy/default.ts index abd99492..fdeafff1 100644 --- a/packages/council-cli/src/commands/deploy/default.ts +++ b/packages/council-cli/src/commands/deploy/default.ts @@ -1,33 +1,26 @@ -import { CoreVoting } from "@delvtech/council-artifacts/CoreVoting"; import { Timelock } from "@delvtech/council-artifacts/Timelock"; -import { ReadWriteCouncil } from "@delvtech/council-viem"; import { command } from "clide-js"; import colors from "colors"; import signale from "signale"; -import { Address, createPublicClient, createWalletClient, http } from "viem"; -import { - ContractInfo, - DEFAULT_DEPLOYMENTS_DIR, - getDeploymentStore, -} from "../../deploymentStore.js"; -import { WriteOptions } from "../../reusable-options/writeOptions.js"; +import { Address } from "viem"; +import { DeployedContractInfo } from "../../deploy/DeploymentJson.js"; +import { localChainIds, mine } from "../../lib/viem.js"; +import { freshDeployOption } from "../../options/deploy/fresh-deploy.js"; import { DAY_IN_BLOCKS, DAY_IN_SECONDS } from "../../utils/constants.js"; -import { DeployedContract } from "../../utils/deployContract.js"; -import { stringifyBigInts } from "../../utils/stringifyBigInts.js"; -import { mine } from "../server/mine.js"; +import { DeployOptions } from "../deploy.js"; import deployCoreVotingCommand from "./core-voting.js"; import deployGscVaultCommand from "./gsc-vault.js"; import deployLockingVaultCommand from "./locking-vault.js"; import deployMockErc20Command from "./mock-erc20.js"; import deploySimpleProxyCommand from "./simple-proxy.js"; import deployTimelockCommand from "./timelock.js"; -import deployTreasuryCommand from "./treasury.js"; +import deployTreasury from "./treasury.js"; const defaults = { - tokenAddress: process.env.VOTING_TOKEN_ADDRESS, + token: process.env.VOTING_TOKEN_ADDRESS, tokenName: process.env.VOTING_TOKEN_NAME || "Mock Voting Token", tokenSymbol: process.env.VOTING_TOKEN_SYMBOL || "MVT", - baseQuorum: process.env.BASE_QUORUM || "1000000", + quorum: process.env.BASE_QUORUM || "1000000", minProposalPower: process.env.MIN_PROPOSAL_POWER || "25000", lockDuration: process.env.LOCK_DURATION ? +process.env.LOCK_DURATION @@ -38,7 +31,7 @@ const defaults = { timelockWaitTime: process.env.TIMELOCK_WAIT_TIME ? +process.env.TIMELOCK_WAIT_TIME : DAY_IN_SECONDS * 3n, - treasuryAddress: process.env.TREASURY_ADDRESS, + treasury: process.env.TREASURY_ADDRESS, staleBlockLag: DAY_IN_BLOCKS * 28n, gscQuorum: process.env.GSC_QUORUM || "3", gscLockDuration: process.env.GSC_LOCK_DURATION @@ -51,8 +44,6 @@ const defaults = { gscIdleDuration: process.env.GSC_IDLE_DURATION ? +process.env.GSC_IDLE_DURATION : undefined, - outDir: DEFAULT_DEPLOYMENTS_DIR, - name: "default", }; export default command({ @@ -60,44 +51,55 @@ export default command({ "Deploy a default version of Council which includes 2 CoreVoting contracts - 1 for general voting with power from a LockingVault deployed behind a SimpleProxy contract, and another for GSC voting with membership in a GSCVault. Also deployed will be a Timelock, Treasury, and if no voting token address is provided, a mock voting token.", options: { - "token-address": { + f: freshDeployOption, + t: { + alias: ["token"], description: "The address of the token used for voting.", - type: "string", - default: defaults.tokenAddress, + type: "hex", + default: defaults.token, + conflicts: ["token-name", "token-symbol"], }, - "token-name": { + n: { + alias: ["token-name"], description: "The name of the mock token to be deployed for voting if no token address is provided.", type: "string", default: defaults.tokenName, + conflicts: ["token"], }, - "token-symbol": { + s: { + alias: ["token-symbol"], description: "The symbol of the mock token to be deployed for voting if no token address is provided.", type: "string", default: defaults.tokenSymbol, + conflicts: ["token"], }, - "base-quorum": { + q: { + alias: ["quorum"], description: - "The minimum voting power required for a proposal to pass. Will be scaled by 10 ** token.decimals.", + "The minimum voting power required for a proposal to pass as a decimal string.", type: "string", - default: defaults.baseQuorum, + default: defaults.quorum, required: true, }, - "min-proposal-power": { + m: { + alias: ["min-proposal-power"], description: - "The minimum voting power required to create a proposal. Will be scaled by 10 ** token.decimals.", + "The minimum voting power required to create a proposal as a decimal string.", type: "string", default: defaults.minProposalPower, required: true, }, - "lock-duration": { + d: { + alias: ["lock-duration"], description: "The number of blocks a proposal must wait before it can be executed.", type: "number", default: defaults.lockDuration, }, - "extra-voting-blocks": { + b: { + alias: ["extra-voting-blocks"], description: "The number of blocks for which a proposal can still be voted on after it's unlocked.", type: "number", @@ -110,12 +112,14 @@ export default command({ default: Number(defaults.timelockWaitTime), required: true, }, - "treasury-address": { + T: { + alias: ["treasury"], description: "The address of the treasury contract.", - type: "string", - default: defaults.treasuryAddress, + type: "hex", + default: defaults.treasury, }, - "stale-block-lag": { + l: { + alias: ["stale-block-lag"], description: "The number of blocks before the delegation history is forgotten. Voting power can't be used on proposals that are older than the stale block lag.", type: "number", @@ -124,7 +128,7 @@ export default command({ }, "gsc-quorum": { description: - "The minimum voting power required for a GSC proposal to pass.", + "The minimum voting power required for a GSC proposal to pass as a decimal string.", type: "string", default: defaults.gscQuorum, required: true, @@ -143,7 +147,7 @@ export default command({ }, "gsc-voting-power-bound": { description: - "The minimum voting power required to become a member of the GSC. Will be scaled by 10 ** token.decimals.", + "The minimum voting power required to become a member of the GSC as a decimal string.", type: "string", default: defaults.gscVotingPowerBound, required: true, @@ -154,35 +158,13 @@ export default command({ type: "number", default: defaults.gscIdleDuration, }, - out: { - alias: ["out-dir"], - description: - "The directory to write the contract addresses to; relative to the current working directory.", - type: "string", - default: defaults.outDir, - }, - name: { - description: "The name of the deployment.", - type: "string", - default: defaults.name, - }, }, handler: async ({ data, options, fork, next }) => { - const { account, chain, rpcUrl } = data as WriteOptions; - - const publicClient = createPublicClient({ - transport: http(rpcUrl), - chain, - }); - const walletClient = createWalletClient({ - account, - transport: http(rpcUrl), - chain, - }); - const council = new ReadWriteCouncil({ publicClient, walletClient }); + const { account, deployer, council, chain, publicClient, walletClient } = + data as DeployOptions; - const contractInfos: ContractInfo[] = []; + const isFreshDeploy = await options.freshDeploy(); signale.pending("Deploying Council contracts..."); @@ -190,53 +172,35 @@ export default command({ // 1. Voting Token // ========================================================================= - let votingTokenAddress = await options.tokenAddress({ - prompt: `Enter voting token address ${colors.dim( - "(leave blank to deploy a mock voting token)", - )}`, - }); - - // Used to scale voting power to match the token's decimals - let decimals = 18; + let votingTokenAddress: Address | undefined; - // If a voting token address was provided, fetch the name and decimals - if (votingTokenAddress) { - signale.pending("Fetching data from voting token..."); - - const token = council.token(votingTokenAddress as `0x${string}`); - const tokenName = await token.getName(); - decimals = await token.getDecimals(); - - signale.success(`Data successfully fetched from voting token`); - - contractInfos.push({ - name: tokenName, - address: votingTokenAddress, + if (!isFreshDeploy) { + votingTokenAddress = await options.token({ + prompt: `Enter voting token address ${colors.dim( + "(leave blank to deploy a mock voting token)", + )}`, }); } // Deploy a mock voting token if no voting token address was provided if (!votingTokenAddress) { - const tokenName = await options.tokenName({ + const name = await options.tokenName({ prompt: "Enter voting token name", }); - const tokenSymbol = await options.tokenSymbol({ + const symbol = await options.tokenSymbol({ prompt: "Enter voting token symbol", }); - const tokenDeployData: DeployedContract = await fork({ + const { address } = (await fork({ commands: [deployMockErc20Command], optionValues: { - name: tokenName, - symbol: tokenSymbol, + name, + symbol, }, - }); - contractInfos.push({ - name: tokenName, - ...tokenDeployData, - }); - votingTokenAddress = tokenDeployData.address; + })) as DeployedContractInfo; + + votingTokenAddress = address; } // ========================================================================= @@ -244,26 +208,19 @@ export default command({ // ========================================================================= const gscQuorum = await options.gscQuorum({ - prompt: "Enter GSC quorum", + prompt: "Enter default GSC quorum", }); - const gscCoreVotingDeployData: DeployedContract = await fork({ + const gscCoreVotingDeployInfo = (await fork({ commands: [deployCoreVotingCommand], optionValues: { owner: account.address, quorum: gscQuorum, - minPower: gscQuorum, - decimals, + minProposalPower: "1", }, - }); - contractInfos.push({ - name: "GSCCoreVoting", - ...gscCoreVotingDeployData, - }); + })) as DeployedContractInfo; - const gscCoreVoting = council.coreVoting({ - address: gscCoreVotingDeployData.address, - }); + const gscCoreVoting = council.coreVoting(gscCoreVotingDeployInfo.address); const gscLockDuration = await options.gscLockDuration(); // Set the GSC CoreVoting lock duration if provided @@ -273,14 +230,19 @@ export default command({ ); const hash = await gscCoreVoting.setLockDuration({ - blocks: BigInt(gscLockDuration), + args: { + blocks: BigInt(gscLockDuration), + }, + options: { + onMined: () => { + signale.success( + `Successfully set GSC CoreVoting lock duration to ${gscLockDuration}`, + ); + }, + }, }); signale.pending(`GSC CoreVoting lock duration tx submitted: ${hash}`); - await publicClient.waitForTransactionReceipt({ hash }); - signale.success( - `Successfully set GSC CoreVoting lock duration to ${gscLockDuration}`, - ); } const gscExtraVotingBlocks = await options.gscExtraVotingBlocks(); @@ -292,14 +254,19 @@ export default command({ ); const hash = await gscCoreVoting.changeExtraVotingTime({ - extraVoteBlocks: BigInt(gscExtraVotingBlocks), + args: { + extraVoteBlocks: BigInt(gscExtraVotingBlocks), + }, + options: { + onMined: () => { + signale.success( + `Successfully set GSC CoreVoting extra voting time to ${gscExtraVotingBlocks}`, + ); + }, + }, }); signale.pending(`GSC CoreVoting extra voting time tx submitted: ${hash}`); - await publicClient.waitForTransactionReceipt({ hash }); - signale.success( - `Successfully set GSC CoreVoting extra voting time to ${gscExtraVotingBlocks}`, - ); } // ========================================================================= @@ -310,39 +277,35 @@ export default command({ prompt: `Enter timelock wait time ${colors.dim("(in seconds)")}`, }); - const timelockDeployData: DeployedContract = await fork({ + const timelockDeployInfo = (await fork({ commands: [deployTimelockCommand], optionValues: { waitTime: timelockWaitTime, - gsc: gscCoreVotingDeployData.address, + gsc: gscCoreVotingDeployInfo.address, }, - }); - contractInfos.push({ - name: "Timelock", - ...timelockDeployData, - }); + })) as DeployedContractInfo; // ========================================================================= // 4. Treasury // ========================================================================= - const treasuryAddress = await options.treasuryAddress({ - prompt: `Enter Treasury address ${colors.dim( - "(leave blank to deploy a new one)", - )}`, - }); + let treasury: Address | undefined; + + if (!isFreshDeploy) { + treasury = await options.treasury({ + prompt: `Enter Treasury address ${colors.dim( + "(leave blank to deploy a new one)", + )}`, + }); + } - if (!treasuryAddress) { - const treasuryDeployData: DeployedContract = await fork({ - commands: [deployTreasuryCommand], + if (!treasury) { + await fork({ + commands: [deployTreasury], optionValues: { - owner: timelockDeployData.address, + owner: timelockDeployInfo.address, }, }); - contractInfos.push({ - name: "Treasury", - ...treasuryDeployData, - }); } // ========================================================================= @@ -353,11 +316,12 @@ export default command({ prompt: "Enter stale block lag", }); - if (chain.id === 31337) { - const blocksToMine = staleBlockLag * 2; - // Calling queryVotePower on a voting vault that has a stale block lag larger - // than the current block height will result in an error. To avoid this, we - // we fast forward the block height by the stale block lag. + if (localChainIds.includes(chain.id)) { + // Calling queryVotePower on a voting vault that has a stale block lag + // larger than the current block height will result in an error. To avoid + // this, we we fast forward the block height. + const blocksToMine = staleBlockLag + 1; + signale.pending( `Fast forwarding block height by ${blocksToMine} blocks...`, ); @@ -372,61 +336,45 @@ export default command({ ); } - const lockingVaultDeployData: DeployedContract = await fork({ + const lockingVaultDeployInfo = (await fork({ commands: [deployLockingVaultCommand], optionValues: { token: votingTokenAddress, staleBlockLag, }, - }); - contractInfos.push({ - name: "LockingVault", - ...lockingVaultDeployData, - }); + })) as DeployedContractInfo; - const lockVaultProxyDeployData: DeployedContract = await fork({ + const lockVaultProxyDeployInfo = (await fork({ commands: [deploySimpleProxyCommand], optionValues: { - owner: timelockDeployData.address, - implementation: lockingVaultDeployData.address, + owner: timelockDeployInfo.address, + implementation: lockingVaultDeployInfo.address, }, - }); - - contractInfos.push({ - name: "LockingVaultProxy", - ...lockVaultProxyDeployData, - }); + })) as DeployedContractInfo; // ========================================================================= // 6. CoreVoting // ========================================================================= - const baseQuorum = await options.baseQuorum({ - prompt: "Enter base quorum", + const quorum = await options.quorum({ + prompt: "Enter default quorum", }); const minProposalPower = await options.minProposalPower({ prompt: "Enter minimum proposal power", }); - const coreVotingDeployData: DeployedContract = await fork({ + const coreVotingDeployInfo = (await fork({ commands: [deployCoreVotingCommand], optionValues: { - quorum: baseQuorum, - minPower: minProposalPower, - decimals, - gsc: gscCoreVotingDeployData.address, - vaults: [lockVaultProxyDeployData.address], + quorum, + minProposalPower, + gsc: gscCoreVotingDeployInfo.address, + vaults: [lockVaultProxyDeployInfo.address], }, - }); - contractInfos.push({ - name: "CoreVoting", - ...coreVotingDeployData, - }); + })) as DeployedContractInfo; - const coreVoting = council.coreVoting({ - address: coreVotingDeployData.address, - }); + const coreVoting = council.coreVoting(coreVotingDeployInfo.address); const lockDuration = await options.lockDuration(); // Set the CoreVoting lock duration if provided @@ -434,14 +382,19 @@ export default command({ signale.pending(`Setting CoreVoting lock duration to ${lockDuration}...`); const hash = await coreVoting.setLockDuration({ - blocks: BigInt(lockDuration), + args: { + blocks: BigInt(lockDuration), + }, + options: { + onMined: () => { + signale.success( + `Successfully set CoreVoting lock duration to ${lockDuration}`, + ); + }, + }, }); signale.pending(`CoreVoting lock duration tx submitted: ${hash}`); - await publicClient.waitForTransactionReceipt({ hash }); - signale.success( - `Successfully set CoreVoting lock duration to ${lockDuration}`, - ); } const extraVotingBlocks = await options.extraVotingBlocks(); @@ -453,16 +406,19 @@ export default command({ ); const hash = await coreVoting.changeExtraVotingTime({ - extraVoteBlocks: BigInt(extraVotingBlocks), + args: { + extraVoteBlocks: BigInt(extraVotingBlocks), + }, + options: { + onMined: () => { + signale.success( + `Successfully set CoreVoting extra voting time to ${extraVotingBlocks}`, + ); + }, + }, }); signale.pending(`CoreVoting extra voting time tx submitted: ${hash}`); - - await publicClient.waitForTransactionReceipt({ hash }); - - signale.success( - `Successfully set CoreVoting extra voting time to ${extraVotingBlocks}`, - ); } // ========================================================================= @@ -473,19 +429,14 @@ export default command({ prompt: "Enter GSC voting power bound", }); - const gscVaultDeployData: DeployedContract = await fork({ + const gscVaultDeployInfo = (await fork({ commands: [deployGscVaultCommand], optionValues: { - coreVoting: coreVotingDeployData.address, + coreVoting: coreVotingDeployInfo.address, votingPowerBound: gscVotingPowerBound, - decimals, - owner: timelockDeployData.address, + owner: timelockDeployInfo.address, }, - }); - contractInfos.push({ - name: "GSCVault", - ...gscVaultDeployData, - }); + })) as DeployedContractInfo; const gscIdleDuration = await options.gscIdleDuration(); @@ -495,29 +446,41 @@ export default command({ `Setting GSCVault idle duration to ${gscIdleDuration}...`, ); - const gscVault = council.gscVault(gscCoreVotingDeployData.address); + const gscVault = council.gscVault(gscCoreVotingDeployInfo.address); const hash = await gscVault.setIdleDuration({ - duration: BigInt(gscIdleDuration), + args: { + duration: BigInt(gscIdleDuration), + }, + options: { + onMined: () => { + signale.success( + `Successfully set GSCVault idle duration to ${gscIdleDuration}`, + ); + }, + }, }); signale.pending(`GSCVault idle duration tx submitted: ${hash}`); - await publicClient.waitForTransactionReceipt({ hash }); - signale.success( - `Successfully set GSCVault idle duration to ${gscIdleDuration}`, - ); } // Approve the GSCVault to be used by the GSC CoreVoting contract - signale.pending("Changing GSCVault status in GSC CoreVoting"); + signale.pending("Changing GSCVault status in GSC CoreVoting..."); const gscVaultStatusHash = await gscCoreVoting.changeVaultStatus({ - vault: gscVaultDeployData.address, - isValid: true, + args: { + vault: gscVaultDeployInfo.address, + isValid: true, + }, + options: { + onMined: () => { + signale.success( + "Successfully changed GSCVault status in GSC CoreVoting", + ); + }, + }, }); signale.pending(`GSCVault status tx submitted: ${gscVaultStatusHash}`); - await publicClient.waitForTransactionReceipt({ hash: gscVaultStatusHash }); - signale.success("Successfully changed GSCVault status in GSC CoreVoting"); // ========================================================================= // 7. Lock it down @@ -525,83 +488,57 @@ export default command({ signale.pending("Setting GSC CoreVoting owner to Timelock..."); - const gscCoreVotingOwnerHash = await walletClient.writeContract({ - abi: CoreVoting.abi, - address: gscCoreVotingDeployData.address as Address, - functionName: "setOwner", - args: [timelockDeployData.address], - }); + const gscCoreVotingOwnerHash = await gscCoreVoting.contract.write( + "setOwner", + { + who: timelockDeployInfo.address, + }, + { + onMined: () => { + signale.success("Successfully set GSC CoreVoting owner to Timelock"); + }, + }, + ); signale.pending( `GSC CoreVoting owner tx submitted: ${gscCoreVotingOwnerHash}`, ); - await publicClient.waitForTransactionReceipt({ - hash: gscCoreVotingOwnerHash, - }); - signale.success("Successfully set GSC CoreVoting owner to Timelock"); + signale.pending("Setting CoreVoting owner to Timelock..."); - const coreVotingOwnerHash = await walletClient.writeContract({ - abi: CoreVoting.abi, - address: coreVoting.address as Address, - functionName: "setOwner", - args: [timelockDeployData.address], - }); + const coreVotingOwnerHash = await coreVoting.contract.write( + "setOwner", + { + who: timelockDeployInfo.address, + }, + { + onMined: () => { + signale.success("Successfully set CoreVoting owner to Timelock"); + }, + }, + ); signale.pending(`CoreVoting owner tx submitted: ${coreVotingOwnerHash}`); - await publicClient.waitForTransactionReceipt({ hash: coreVotingOwnerHash }); - signale.success("Successfully set CoreVoting owner to Timelock"); signale.pending("Setting Timelock owner to CoreVoting..."); - const timelockOwnerHash = await walletClient.writeContract({ + const timelockOwnerHash = await council.drift.write({ abi: Timelock.abi, - address: timelockDeployData.address, - functionName: "setOwner", - args: [coreVoting.address], + address: "0x", + fn: "setOwner", + args: { + who: timelockDeployInfo.address, + }, + onMined: () => { + signale.success("Successfully set Timelock owner to CoreVoting"); + }, }); signale.pending(`Timelock owner tx submitted: ${timelockOwnerHash}`); - await publicClient.waitForTransactionReceipt({ hash: timelockOwnerHash }); - signale.success("Successfully set Timelock owner to CoreVoting"); - - // ========================================================================= - // 8. Save the addresses - // ========================================================================= - - const deploymentName = await options.name({ - prompt: "Enter deployment name", - }); - - const outDir = await options.outDir({ - prompt: "Enter output directory", - }); - - const store = getDeploymentStore(deploymentName, chain.id, outDir); - await store.set({ - name: deploymentName, - chainId: chain.id, - timestamp: Date.now(), - deployer: account.address, - contracts: stringifyBigInts(contractInfos), - }); // ========================================================================= - // 9. DONE! + // DONE! // ========================================================================= - console.log("\n"); - signale.success("Council contracts deployed successfully!"); - console.log("\n"); - - console.log(colors.dim(`${"=".repeat(80)}`)); - contractInfos.forEach((contractInfo, i) => { - if (i !== 0) { - console.log(colors.dim(`${"-".repeat(80)}`)); - } - console.log(`${contractInfo.name}: ${contractInfo.address}`); - }); - console.log(colors.dim(`${"=".repeat(80)}`)); - - next(contractInfos); + next(deployer.deployedContracts); }, }); diff --git a/packages/council-cli/src/commands/deploy/gsc-vault.ts b/packages/council-cli/src/commands/deploy/gsc-vault.ts index abc46822..0b2d3d31 100644 --- a/packages/council-cli/src/commands/deploy/gsc-vault.ts +++ b/packages/council-cli/src/commands/deploy/gsc-vault.ts @@ -1,108 +1,53 @@ import { GSCVault } from "@delvtech/council-artifacts/GSCVault"; import { command } from "clide-js"; -import signale from "signale"; -import { WriteOptions } from "src/reusable-options/writeOptions.js"; -import { PrivateKeyAccount, parseUnits } from "viem"; -import { Chain } from "viem/chains"; -import { - DeployedContract, - deployContract, -} from "../../utils/deployContract.js"; +import { parseEther } from "viem"; +import { ownerOption } from "../../options/owner.js"; +import { DeployOptions } from "../deploy.js"; export default command({ description: "Deploy a GSCVault contract", options: { - "core-voting": { - description: "The address of the CoreVoting contract", - type: "string", + c: { + alias: ["core-voting"], + description: "The address of the CoreVoting contract.", + type: "hex", required: true, }, - bound: { + b: { alias: ["voting-power-bound"], - description: "The minimum voting power required to become a member", - type: "string", - required: true, - }, - decimals: { description: - "The decimal precision to use. The bound option will be multiplied by (10 ** decimals). For example, if bound is 100 and decimals is 18, then the result will be 100000000000000000000", - type: "number", - default: 18, - }, - owner: { - description: "The owner of the contract (e.g., a Timelock contract)", + "The minimum voting power required to become a member as a decimal string.", type: "string", + required: true, }, + o: ownerOption, }, handler: async ({ data, options, next }) => { - const { account, chain, rpcUrl } = data as WriteOptions; + const { account, deployer } = data as DeployOptions; const coreVoting = await options.coreVoting({ prompt: "Enter CoreVoting address", }); - const bound = await options.bound({ + const votingPowerBound = await options.votingPowerBound({ prompt: "Enter voting power bound", }); - const decimals = await options.decimals(); - const owner = (await options.owner()) || account.address; - signale.pending("Deploying GSCVault..."); - - const deployData = await deployGSCVault({ - coreVoting, - votingPowerBound: bound, - decimals, - owner, - account, - rpcUrl, - chain, - onSubmitted: (txHash) => { - signale.pending(`GSCVault deployment tx submitted: ${txHash}`); + const deployedContract = deployer.deploy({ + abi: GSCVault.abi, + bytecode: GSCVault.bytecode, + name: "GSCVault", + args: { + _coreVoting: coreVoting, + _votingPowerBound: parseEther(votingPowerBound), + _owner: owner, }, }); - signale.success(`GSCVault deployed @ ${deployData.address}`); - next(deployData); + next(deployedContract); }, }); - -export interface DeployGSCVaultOptions { - coreVoting: string; - votingPowerBound: string; - decimals: number; - owner: string; - account: PrivateKeyAccount; - rpcUrl: string; - chain: Chain; - onSubmitted?: (txHash: string) => void; -} - -export async function deployGSCVault({ - coreVoting, - votingPowerBound, - decimals, - owner, - account, - rpcUrl, - chain, - onSubmitted, -}: DeployGSCVaultOptions): Promise { - return await deployContract({ - abi: GSCVault.abi, - args: [ - coreVoting as `0x${string}`, - parseUnits(votingPowerBound, decimals), - owner as `0x${string}`, - ], - bytecode: GSCVault.bytecode, - account, - rpcUrl, - chain, - onSubmitted, - }); -} diff --git a/packages/council-cli/src/commands/deploy/locking-vault.ts b/packages/council-cli/src/commands/deploy/locking-vault.ts index bca00fc4..8bb90759 100644 --- a/packages/council-cli/src/commands/deploy/locking-vault.ts +++ b/packages/council-cli/src/commands/deploy/locking-vault.ts @@ -1,85 +1,47 @@ import { LockingVault } from "@delvtech/council-artifacts/LockingVault"; import { command } from "clide-js"; -import signale from "signale"; -import { PrivateKeyAccount } from "viem"; -import { Chain } from "viem/chains"; -import { WriteOptions } from "../../reusable-options/writeOptions.js"; -import { - DeployedContract, - deployContract, -} from "../../utils/deployContract.js"; +import { DeployOptions } from "../deploy.js"; export default command({ description: "Deploy a LockingVault contract", options: { - token: { - description: "The address of the ERC20 token contract", - type: "string", + t: { + alias: ["token"], + description: "The address of the ERC20 token contract.", + type: "hex", required: true, }, - lag: { + l: { alias: ["stale-block-lag"], description: - "The number of blocks before the delegation history is forgotten", + "The number of blocks before the delegation history is forgotten.", type: "number", required: true, }, }, handler: async ({ data, options, next }) => { - const { account, chain, rpcUrl } = data as WriteOptions; + const { deployer } = data as DeployOptions; const token = await options.token({ prompt: "Enter token address", }); - const lag = await options.lag({ + const staleBlockLag = await options.staleBlockLag({ prompt: "Enter stale block lag", }); - signale.pending("Deploying LockingVault..."); - - const deployData = await deployLockingVault({ - token, - staleBlockLag: lag, - account, - rpcUrl, - chain, - onSubmitted: (txHash) => { - signale.pending(`LockingVault deployment tx submitted: ${txHash}`); + const deployedContract = await deployer.deploy({ + abi: LockingVault.abi, + bytecode: LockingVault.bytecode, + name: "LockingVault", + args: { + _token: token, + _staleBlockLag: BigInt(staleBlockLag), }, }); - signale.success(`LockingVault deployed @ ${deployData.address}`); - next(deployData); + next(deployedContract); }, }); - -export interface DeployLockingVaultOptions { - token: string; - staleBlockLag: number; - account: PrivateKeyAccount; - rpcUrl: string; - chain: Chain; - onSubmitted?: (txHash: string) => void; -} - -export async function deployLockingVault({ - token, - staleBlockLag, - account, - rpcUrl, - chain, - onSubmitted, -}: DeployLockingVaultOptions): Promise { - return await deployContract({ - abi: LockingVault.abi, - args: [token as `0x${string}`, BigInt(staleBlockLag)], - bytecode: LockingVault.bytecode, - account, - rpcUrl, - chain, - onSubmitted, - }); -} diff --git a/packages/council-cli/src/commands/deploy/mock-erc20.ts b/packages/council-cli/src/commands/deploy/mock-erc20.ts index 9da7c379..524d40cf 100644 --- a/packages/council-cli/src/commands/deploy/mock-erc20.ts +++ b/packages/council-cli/src/commands/deploy/mock-erc20.ts @@ -1,32 +1,29 @@ import { MockERC20 } from "@delvtech/council-artifacts/MockERC20"; import { command } from "clide-js"; -import signale from "signale"; -import { WriteOptions } from "src/reusable-options/writeOptions.js"; -import { PrivateKeyAccount } from "viem"; -import { Chain } from "viem/chains"; -import { - DeployedContract, - deployContract, -} from "../../utils/deployContract.js"; +import { ownerOption } from "../../options/owner.js"; +import { DeployOptions } from "../deploy.js"; export default command({ description: "Deploy a MockERC20 contract for use as a mock voting token", options: { - name: { - description: "The name of the token", + n: { + alias: ["name"], + description: "The name of the token.", type: "string", required: true, }, - symbol: { - description: "The symbol of the token", + s: { + alias: ["symbol"], + description: "The symbol of the token.", type: "string", required: true, }, + o: ownerOption, }, handler: async ({ data, options, next }) => { - const { account, chain, rpcUrl } = data as WriteOptions; + const { account, deployer } = data as DeployOptions; const name = await options.name({ prompt: "Enter token name", @@ -36,48 +33,19 @@ export default command({ prompt: "Enter token symbol", }); - signale.pending("Deploying MockERC20..."); + const owner = await options.owner(); - const deployData = await deployMockERC20({ - tokenName: name, - tokenSymbol: symbol, - account, - rpcUrl, - chain, - onSubmitted: (txHash) => { - signale.pending(`MockERC20 deployment tx submitted: ${txHash}`); + const deployedContract = await deployer.deploy({ + name: "MockERC20", + abi: MockERC20.abi, + bytecode: MockERC20.bytecode, + args: { + name_: name, + symbol_: symbol, + owner_: owner || account.address, }, }); - signale.success(`MockERC20 deployed @ ${deployData.address}`); - next(deployData); + next(deployedContract); }, }); - -export interface DeployMockERC20Options { - tokenName: string; - tokenSymbol: string; - account: PrivateKeyAccount; - rpcUrl: string; - chain: Chain; - onSubmitted?: (txHash: string) => void; -} - -export async function deployMockERC20({ - tokenName, - tokenSymbol, - account, - rpcUrl, - chain, - onSubmitted, -}: DeployMockERC20Options): Promise { - return await deployContract({ - abi: MockERC20.abi, - args: [tokenName, tokenSymbol, account.address], - bytecode: MockERC20.bytecode, - account, - rpcUrl, - chain, - onSubmitted, - }); -} diff --git a/packages/council-cli/src/commands/deploy/optimistic-grants.ts b/packages/council-cli/src/commands/deploy/optimistic-grants.ts index 62aaaba4..dd69b00f 100644 --- a/packages/council-cli/src/commands/deploy/optimistic-grants.ts +++ b/packages/council-cli/src/commands/deploy/optimistic-grants.ts @@ -1,32 +1,25 @@ import { OptimisticGrants } from "@delvtech/council-artifacts/OptimisticGrants"; import { command } from "clide-js"; -import signale from "signale"; -import { WriteOptions } from "src/reusable-options/writeOptions.js"; -import { PrivateKeyAccount } from "viem"; -import { Chain } from "viem/chains"; -import { - DeployedContract, - deployContract, -} from "../../utils/deployContract.js"; +import { ownerOption } from "../../options/owner.js"; +import { DeployOptions } from "../deploy.js"; export default command({ description: "Deploy an OptimisticGrants contract", options: { - token: { - description: "The address of the ERC20 token to distribute", - type: "string", + t: { + alias: ["token"], + description: "The address of the ERC20 token to distribute.", + type: "hex", required: true, }, - governance: { - description: - "The governance contract's address for ACL (e.g., a Timelock contract)", - type: "string", - required: true, + g: { + ...ownerOption, + alias: ["governance", ...ownerOption.alias], }, }, handler: async ({ data, options, next }) => { - const { account, chain, rpcUrl } = data as WriteOptions; + const { account, deployer } = data as DeployOptions; const token = await options.token({ prompt: "Enter token address", @@ -36,48 +29,16 @@ export default command({ prompt: "Enter governance address (e.g., a Timelock contract)", }); - signale.pending("Deploying OptimisticGrants..."); - - const deployData = await deployOptimisticGrants({ - token, - governance, - account, - rpcUrl, - chain, - onSubmitted: (txHash) => { - signale.pending(`OptimisticGrants deployment tx submitted: ${txHash}`); + const deployedContract = await deployer.deploy({ + abi: OptimisticGrants.abi, + bytecode: OptimisticGrants.bytecode, + name: "OptimisticGrants", + args: { + _token: token, + __governance: governance || account.address, }, }); - signale.success(`OptimisticGrants deployed @ ${deployData.address}`); - next(deployData); + next(deployedContract); }, }); - -export interface DeployOptimisticGrantsOptions { - token: string; - governance: string; - account: PrivateKeyAccount; - rpcUrl: string; - chain: Chain; - onSubmitted?: (txHash: string) => void; -} - -export async function deployOptimisticGrants({ - token, - governance, - account, - rpcUrl, - chain, - onSubmitted, -}: DeployOptimisticGrantsOptions): Promise { - return deployContract({ - abi: OptimisticGrants.abi, - args: [token as `0x${string}`, governance as `0x${string}`], - bytecode: OptimisticGrants.bytecode, - account, - rpcUrl, - chain, - onSubmitted, - }); -} diff --git a/packages/council-cli/src/commands/deploy/optimistic-rewards.ts b/packages/council-cli/src/commands/deploy/optimistic-rewards.ts index 9fbb93b3..d78232eb 100644 --- a/packages/council-cli/src/commands/deploy/optimistic-rewards.ts +++ b/packages/council-cli/src/commands/deploy/optimistic-rewards.ts @@ -1,133 +1,82 @@ import { OptimisticRewards } from "@delvtech/council-artifacts/OptimisticRewards"; import { command } from "clide-js"; -import signale from "signale"; -import { PrivateKeyAccount } from "viem"; -import { Chain } from "viem/chains"; -import { WriteOptions } from "../../reusable-options/writeOptions.js"; -import { - DeployedContract, - deployContract, -} from "../../utils/deployContract.js"; +import { ownerOption } from "../../options/owner.js"; +import { DeployOptions } from "../deploy.js"; export default command({ description: "Deploy a OptimisticRewards contract", options: { - owner: { - alias: ["governance"], - description: "The contract owner's address (e.g., a Timelock contract)", - type: "string", - }, - root: { + s: { alias: ["starting-root"], - description: "The starting merkle root", - type: "string", + description: "The starting merkle root.", + type: "hex", required: true, }, - proposer: { - description: "The address that can propose new roots", - type: "string", - }, - revoker: { - alias: ["challenger"], - description: "The address that can remove proposed reward roots", - type: "string", - }, - token: { - description: "The address of the ERC20 token to distribute", - type: "string", + t: { + alias: ["token"], + description: "The address of the ERC20 token to distribute.", + type: "hex", required: true, }, - "locking-vault": { + v: { + alias: ["locking-vault"], description: - "The address of the locking vault contract that will be used when calling Airdrop.claimAndDelegate()", - type: "string", + "The address of the locking vault contract that will be used when calling Airdrop.claimAndDelegate().", + type: "hex", required: true, }, + g: { + ...ownerOption, + alias: ["governance", ...ownerOption.alias], + }, + p: { + alias: ["proposer"], + description: + "The address that can propose new roots. Defaults to governance.", + type: "hex", + }, + r: { + alias: ["revoker"], + description: + "The address that can remove proposed reward roots. Defaults to governance.", + type: "hex", + }, }, handler: async ({ data, options, next }) => { - const { account, chain, rpcUrl } = data as WriteOptions; + const { account, deployer } = data as DeployOptions; - const owner = (await options.owner()) || account.address; - - const root = await options.root({ + const root = await options.startingRoot({ prompt: "Enter starting root", }); - const proposer = (await options.proposer()) || owner; - - const revoker = (await options.revoker()) || owner; + const lockingVault = await options.lockingVault({ + prompt: "Enter locking vault address", + }); const token = await options.token({ prompt: "Enter token address", }); - const lockingVault = await options.lockingVault({ - prompt: "Enter locking vault address", - }); - - signale.pending("Deploying OptimisticRewards..."); + const governance = (await options.governance()) || account.address; + const proposer = (await options.proposer()) || governance; + const revoker = (await options.revoker()) || governance; - const deployData = await deployOptimisticRewards({ - owner, - startingRoot: root, - proposer, - revoker, - token, - lockingVault, - account, - rpcUrl, - chain, - onSubmitted: (txHash) => { - signale.pending(`OptimisticRewards deployment tx submitted: ${txHash}`); + const deployedContract = await deployer.deploy({ + abi: OptimisticRewards.abi, + bytecode: OptimisticRewards.bytecode, + name: "OptimisticRewards", + args: { + _token: token, + _governance: governance, + _lockingVault: lockingVault, + _startingRoot: root, + _proposer: proposer, + _revoker: revoker, }, }); - signale.success(`OptimisticRewards deployed @ ${deployData.address}`); - next(deployData); + next(deployedContract); }, }); - -export interface DeployOptimisticRewardsOptions { - owner: string; - startingRoot: string; - proposer: string; - revoker: string; - token: string; - lockingVault: string; - account: PrivateKeyAccount; - rpcUrl: string; - chain: Chain; - onSubmitted?: (txHash: string) => void; -} - -export async function deployOptimisticRewards({ - owner, - startingRoot, - proposer, - revoker, - token, - lockingVault, - account, - rpcUrl, - chain, - onSubmitted, -}: DeployOptimisticRewardsOptions): Promise { - return deployContract({ - abi: OptimisticRewards.abi, - args: [ - owner as `0x${string}`, - startingRoot as `0x${string}`, - proposer as `0x${string}`, - revoker as `0x${string}`, - token as `0x${string}`, - lockingVault as `0x${string}`, - ], - bytecode: OptimisticRewards.bytecode, - account, - rpcUrl, - chain, - onSubmitted, - }); -} diff --git a/packages/council-cli/src/commands/deploy/simple-proxy.ts b/packages/council-cli/src/commands/deploy/simple-proxy.ts index 2bb28ddd..40867b80 100644 --- a/packages/council-cli/src/commands/deploy/simple-proxy.ts +++ b/packages/council-cli/src/commands/deploy/simple-proxy.ts @@ -1,80 +1,43 @@ import { SimpleProxy } from "@delvtech/council-artifacts/SimpleProxy"; import { command } from "clide-js"; -import signale from "signale"; -import { PrivateKeyAccount } from "viem"; -import { Chain } from "viem/chains"; -import { WriteOptions } from "../../reusable-options/writeOptions.js"; -import { - DeployedContract, - deployContract, -} from "../../utils/deployContract.js"; +import { ownerOption } from "../../options/owner.js"; +import { DeployOptions } from "../deploy.js"; export default command({ description: "Deploy a SimpleProxy contract", options: { - owner: { - describe: "The contract owner's address (e.g., a Timelock contract)", - type: "string", + g: { + ...ownerOption, + alias: ["governance", ...ownerOption.alias], }, - implementation: { - alias: ["first-implementation"], - describe: "The address that calls to the proxy will be forwarded to", - type: "string", + i: { + alias: ["implementation"], + describe: "The address that calls to the proxy will be forwarded to.", + type: "hex", required: true, }, }, handler: async ({ data, options, next }) => { - const { account, chain, rpcUrl } = data as WriteOptions; - const owner = (await options.owner()) || account.address; + const { account, deployer } = data as DeployOptions; const implementation = await options.implementation({ prompt: "Enter implementation address", }); - signale.pending("Deploying SimpleProxy..."); + const governance = (await options.governance()) || account.address; - const deployData = await deploySimpleProxy({ - owner, - implementation, - account, - rpcUrl, - chain, - onSubmitted: (txHash) => { - signale.pending(`SimpleProxy deployment tx submitted: ${txHash}`); + const deployedContract = await deployer.deploy({ + abi: SimpleProxy.abi, + bytecode: SimpleProxy.bytecode, + name: "SimpleProxy", + args: { + _firstImplementation: implementation, + _governance: governance, }, }); - signale.success(`SimpleProxy deployed @ ${deployData.address}`); - return next(deployData); + next(deployedContract); }, }); - -export interface DeploySimpleProxyOptions { - owner: string; - implementation: string; - account: PrivateKeyAccount; - rpcUrl: string; - chain: Chain; - onSubmitted?: (txHash: string) => void; -} - -export async function deploySimpleProxy({ - owner, - implementation, - account, - rpcUrl, - chain, - onSubmitted, -}: DeploySimpleProxyOptions): Promise { - return await deployContract({ - abi: SimpleProxy.abi, - args: [owner as `0x${string}`, implementation as `0x${string}`], - bytecode: SimpleProxy.bytecode, - account, - rpcUrl, - chain, - onSubmitted, - }); -} diff --git a/packages/council-cli/src/commands/deploy/simple.ts b/packages/council-cli/src/commands/deploy/simple.ts index 5f5cc710..00b463ec 100644 --- a/packages/council-cli/src/commands/deploy/simple.ts +++ b/packages/council-cli/src/commands/deploy/simple.ts @@ -1,20 +1,12 @@ -import { ReadWriteCouncil } from "@delvtech/council-viem"; +import { Address } from "@delvtech/drift"; import { command } from "clide-js"; import colors from "colors"; import signale from "signale"; -import { createPublicClient, createWalletClient, http } from "viem"; -import { foundry, hardhat, localhost } from "viem/chains"; -import { - ContractInfo, - DEFAULT_DEPLOYMENTS_DIR, - getDeploymentStore, -} from "../../deploymentStore.js"; -import { freshDeployOption } from "../../reusable-options/deploy/fresh-deploy.js"; -import { WriteOptions } from "../../reusable-options/writeOptions.js"; +import { DeployedContractInfo } from "../../deploy/DeploymentJson.js"; +import { localChainIds, mine } from "../../lib/viem.js"; +import { freshDeployOption } from "../../options/deploy/fresh-deploy.js"; import { DAY_IN_BLOCKS } from "../../utils/constants.js"; -import { DeployedContract } from "../../utils/deployContract.js"; -import { stringifyBigInts } from "../../utils/stringifyBigInts.js"; -import { mine } from "../server/mine.js"; +import { DeployOptions } from "../deploy.js"; import deployCoreVotingCommand from "./core-voting.js"; import deployLockingVaultCommand from "./locking-vault.js"; import deployMockErc20Command from "./mock-erc20.js"; @@ -22,10 +14,10 @@ import deploySimpleProxyCommand from "./simple-proxy.js"; import deployTreasury from "./treasury.js"; const defaults = { - tokenAddress: process.env.VOTING_TOKEN_ADDRESS, + token: process.env.VOTING_TOKEN_ADDRESS, tokenName: process.env.VOTING_TOKEN_NAME || "Mock Voting Token", tokenSymbol: process.env.VOTING_TOKEN_SYMBOL || "MVT", - baseQuorum: process.env.BASE_QUORUM || "1000000", + quorum: process.env.BASE_QUORUM || "1000000", minProposalPower: process.env.MIN_PROPOSAL_POWER || "25000", lockDuration: process.env.LOCK_DURATION ? +process.env.LOCK_DURATION @@ -33,10 +25,8 @@ const defaults = { extraVotingBlocks: process.env.EXTRA_VOTING_BLOCKS ? +process.env.EXTRA_VOTING_BLOCKS : undefined, - treasuryAddress: process.env.TREASURY_ADDRESS, + treasury: process.env.TREASURY_ADDRESS, staleBlockLag: DAY_IN_BLOCKS * 28n, - outDir: DEFAULT_DEPLOYMENTS_DIR, - name: "simple", }; export default command({ @@ -44,92 +34,79 @@ export default command({ "Deploy a simple version of Council which includes 1 CoreVoting contract for general voting with power from a LockingVault deployed behind a SimpleProxy contract. Also deployed will be a Treasury, and if no voting token address is provided, a mock voting token.", options: { - fresh: freshDeployOption, - "token-address": { + f: freshDeployOption, + t: { + alias: ["token"], description: "The address of the token used for voting.", - type: "string", - default: defaults.tokenAddress, + type: "hex", + default: defaults.token, + conflicts: ["token-name", "token-symbol"], }, - "token-name": { + n: { + alias: ["token-name"], description: "The name of the mock token to be deployed for voting if no token address is provided.", type: "string", default: defaults.tokenName, + conflicts: ["token"], }, - "token-symbol": { + s: { + alias: ["token-symbol"], description: "The symbol of the mock token to be deployed for voting if no token address is provided.", type: "string", default: defaults.tokenSymbol, + conflicts: ["token"], }, - "base-quorum": { + q: { + alias: ["quorum"], description: - "The minimum voting power required for a proposal to pass. Will be scaled by 10 ** token.decimals.", + "The minimum voting power required for a proposal to pass as a decimal string.", type: "string", - default: defaults.baseQuorum, + default: defaults.quorum, required: true, }, - "min-proposal-power": { + m: { + alias: ["min-proposal-power"], description: - "The minimum voting power required to create a proposal. Will be scaled by 10 ** token.decimals.", + "The minimum voting power required to create a proposal as a decimal string.", type: "string", default: defaults.minProposalPower, required: true, }, - "lock-duration": { + d: { + alias: ["lock-duration"], description: "The number of blocks a proposal must wait before it can be executed.", type: "number", default: defaults.lockDuration, }, - "extra-voting-blocks": { + b: { + alias: ["extra-voting-blocks"], description: "The number of blocks for which a proposal can still be voted on after it's unlocked.", type: "number", default: defaults.extraVotingBlocks, }, - "treasury-address": { + T: { + alias: ["treasury"], description: "The address of the treasury contract.", - type: "string", - default: defaults.treasuryAddress, + type: "hex", + default: defaults.treasury, }, - "stale-block-lag": { + l: { + alias: ["stale-block-lag"], description: "The number of blocks before the delegation history is forgotten. Voting power can't be used on proposals that are older than the stale block lag.", type: "number", default: Number(defaults.staleBlockLag), required: true, }, - out: { - alias: ["out-dir"], - description: - "The directory to write the contract addresses to; relative to the current working directory.", - type: "string", - default: defaults.outDir, - required: true, - }, - name: { - description: "The name of the deployment.", - type: "string", - default: defaults.name, - }, }, handler: async ({ data, options, fork, next }) => { - const { account, chain, rpcUrl } = data as WriteOptions; + const { deployer, council, chain, publicClient } = data as DeployOptions; - const publicClient = createPublicClient({ - transport: http(rpcUrl), - chain, - }); - const walletClient = createWalletClient({ - account, - transport: http(rpcUrl), - chain, - }); - const council = new ReadWriteCouncil({ publicClient, walletClient }); - - const contractInfos: ContractInfo[] = []; const isFreshDeploy = await options.freshDeploy(); signale.pending("Deploying Council contracts..."); @@ -138,91 +115,59 @@ export default command({ // 1. Voting Token // ========================================================================= - let votingTokenAddress: string | undefined; + let votingTokenAddress: Address | undefined; if (!isFreshDeploy) { - votingTokenAddress = await options.tokenAddress({ + votingTokenAddress = await options.token({ prompt: `Enter voting token address ${colors.dim( "(leave blank to deploy a mock voting token)", )}`, }); } - // Used to scale voting power to match the token's decimals - let decimals = 18; - - // If a voting token address was provided, fetch the name and decimals - if (votingTokenAddress) { - signale.pending("Fetching data from voting token..."); - - const token = council.token(votingTokenAddress as `0x${string}`); - const tokenName = await token.getName(); - decimals = await token.getDecimals(); - - signale.success(`Data successfully fetched from voting token`); - - contractInfos.push({ - name: tokenName, - address: votingTokenAddress, - }); - } - // Deploy a mock voting token if no voting token address was provided if (!votingTokenAddress) { - const tokenName = await options.tokenName({ + const name = await options.tokenName({ prompt: "Enter voting token name", }); - const tokenSymbol = await options.tokenSymbol({ + const symbol = await options.tokenSymbol({ prompt: "Enter voting token symbol", }); - const tokenDeployData: DeployedContract = await fork({ + const { address } = (await fork({ commands: [deployMockErc20Command], optionValues: { - name: tokenName, - symbol: tokenSymbol, + name, + symbol, }, - }); + })) as DeployedContractInfo; - votingTokenAddress = tokenDeployData.address; - - contractInfos.push({ - name: tokenName, - ...tokenDeployData, - }); + votingTokenAddress = address; } // ========================================================================= // 2. CoreVoting // ========================================================================= - const baseQuorum = await options.baseQuorum({ - prompt: "Enter base quorum", + const quorum = await options.quorum({ + prompt: "Enter default quorum", }); const minProposalPower = await options.minProposalPower({ prompt: "Enter minimum proposal power", }); - const coreVotingDeployData: DeployedContract = await fork({ + const coreVotingDeployInfo = (await fork({ commands: [deployCoreVotingCommand], optionValues: { - quorum: baseQuorum, - minPower: minProposalPower, - decimals, + quorum, + minProposalPower, vaults: isFreshDeploy ? [] : undefined, }, - }); + })) as DeployedContractInfo; - contractInfos.push({ - name: "CoreVoting", - ...coreVotingDeployData, - }); - - const coreVoting = council.coreVoting({ - address: coreVotingDeployData.address, - }); + const coreVoting = council.coreVoting(coreVotingDeployInfo.address); const lockDuration = await options.lockDuration(); // Set the CoreVoting lock duration if provided @@ -230,14 +175,19 @@ export default command({ signale.pending(`Setting CoreVoting lock duration to ${lockDuration}...`); const hash = await coreVoting.setLockDuration({ - blocks: BigInt(lockDuration), + args: { + blocks: BigInt(lockDuration), + }, + options: { + onMined: () => { + signale.success( + `Successfully set CoreVoting lock duration to ${lockDuration}`, + ); + }, + }, }); signale.pending(`CoreVoting lock duration tx submitted: ${hash}`); - await publicClient.waitForTransactionReceipt({ hash }); - signale.success( - `Successfully set CoreVoting lock duration to ${lockDuration}`, - ); } const extraVotingBlocks = await options.extraVotingBlocks(); @@ -249,14 +199,19 @@ export default command({ ); const hash = await coreVoting.changeExtraVotingTime({ - extraVoteBlocks: BigInt(extraVotingBlocks), + args: { + extraVoteBlocks: BigInt(extraVotingBlocks), + }, + options: { + onMined: () => { + signale.success( + `Successfully set CoreVoting extra voting time to ${extraVotingBlocks}`, + ); + }, + }, }); signale.pending(`CoreVoting extra voting time tx submitted: ${hash}`); - await publicClient.waitForTransactionReceipt({ hash }); - signale.success( - `Successfully set CoreVoting extra voting time to ${extraVotingBlocks}`, - ); } // ========================================================================= @@ -267,12 +222,12 @@ export default command({ prompt: "Enter stale block lag", }); - const localChainIds: number[] = [hardhat.id, localhost.id, foundry.id]; if (localChainIds.includes(chain.id)) { - const blocksToMine = staleBlockLag * 2; - // Calling queryVotePower on a voting vault that has a stale block lag larger - // than the current block height will result in an error. To avoid this, we - // we fast forward the block height by the stale block lag. + // Calling queryVotePower on a voting vault that has a stale block lag + // larger than the current block height will result in an error. To avoid + // this, we we fast forward the block height. + const blocksToMine = staleBlockLag + 1; + signale.pending( `Fast forwarding block height by ${blocksToMine} blocks...`, ); @@ -287,117 +242,70 @@ export default command({ ); } - const lockingVaultDeployData: DeployedContract = await fork({ + const lockingVaultDeployInfo = (await fork({ commands: [deployLockingVaultCommand], optionValues: { token: votingTokenAddress, staleBlockLag, }, - }); - contractInfos.push({ - name: "LockingVault", - ...lockingVaultDeployData, - }); + })) as DeployedContractInfo; - const lockVaultProxyDeployData: DeployedContract = await fork({ + const lockVaultProxyDeployInfo = (await fork({ commands: [deploySimpleProxyCommand], optionValues: { - owner: coreVotingDeployData.address, - implementation: lockingVaultDeployData.address, + owner: coreVotingDeployInfo.address, + implementation: lockingVaultDeployInfo.address, }, - }); - contractInfos.push({ - name: "LockingVaultProxy", - ...lockVaultProxyDeployData, - }); + })) as DeployedContractInfo; // Approve the vault to be used by the CoreVoting contract signale.pending("Changing LockingVault SimpleProxy status in CoreVoting"); const lockingVaultStatusHash = await coreVoting.changeVaultStatus({ - vault: lockVaultProxyDeployData.address, - isValid: true, + args: { + vault: lockVaultProxyDeployInfo.address, + isValid: true, + }, + options: { + onMined: () => { + signale.success( + "Successfully changed LockingVault SimpleProxy status in CoreVoting", + ); + }, + }, }); signale.pending( `LockingVault SimpleProxy status tx submitted: ${lockingVaultStatusHash}`, ); - await publicClient.waitForTransactionReceipt({ - hash: lockingVaultStatusHash, - }); - signale.success( - "Successfully changed LockingVault SimpleProxy status in CoreVoting", - ); // ========================================================================= // 4. Treasury // ========================================================================= - let treasuryAddress: string | undefined; + let treasury: Address | undefined; if (!isFreshDeploy) { - treasuryAddress = await options.treasuryAddress({ + treasury = await options.treasury({ prompt: `Enter Treasury address ${colors.dim( "(leave blank to deploy a new one)", )}`, }); } - if (!treasuryAddress) { - signale.pending("Deploying Treasury..."); - - const treasuryDeployData: DeployedContract = await fork({ + if (!treasury) { + await fork({ commands: [deployTreasury], optionValues: { - owner: coreVotingDeployData.address, + owner: coreVotingDeployInfo.address, }, }); - - contractInfos.push({ - name: "Treasury", - ...treasuryDeployData, - }); } // ========================================================================= - // 5. Save the addresses - // ========================================================================= - - const deploymentName = await options.name({ - prompt: "Enter deployment name", - }); - - const outDir = await options.outDir({ - prompt: "Enter output directory", - }); - - const store = getDeploymentStore(deploymentName, chain.id, outDir); - - await store.set({ - name: deploymentName, - chainId: chain.id, - timestamp: Date.now(), - deployer: account.address, - contracts: stringifyBigInts(contractInfos), - }); - - // ========================================================================= - // 7. DONE! + // DONE! // ========================================================================= - console.log("\n"); - signale.success("Council contracts deployed successfully!"); - console.log("\n"); - - console.log(colors.dim(`${"=".repeat(80)}`)); - contractInfos.forEach((contractInfo, i) => { - if (i !== 0) { - console.log(colors.dim(`${"-".repeat(80)}`)); - } - console.log(`${contractInfo.name}: ${contractInfo.address}`); - }); - console.log(colors.dim(`${"=".repeat(80)}`)); - - next(contractInfos); + next(deployer.deployedContracts); }, }); diff --git a/packages/council-cli/src/commands/deploy/spender.ts b/packages/council-cli/src/commands/deploy/spender.ts index 85261774..6d69e695 100644 --- a/packages/council-cli/src/commands/deploy/spender.ts +++ b/packages/council-cli/src/commands/deploy/spender.ts @@ -1,146 +1,83 @@ import { Spender } from "@delvtech/council-artifacts/Spender"; import { command } from "clide-js"; -import signale from "signale"; -import { PrivateKeyAccount, parseUnits } from "viem"; -import { Chain } from "viem/chains"; -import { WriteOptions } from "../../reusable-options/writeOptions.js"; -import { - DeployedContract, - deployContract, -} from "../../utils/deployContract.js"; +import { parseUnits } from "viem"; +import { ownerOption } from "../../options/owner.js"; +import { DeployOptions } from "../deploy.js"; export default command({ description: "Deploy a Spender contract", options: { - owner: { - description: "The contract owner's address (e.g., a Timelock contract)", - type: "string", - }, - spender: { - description: "The first address authorized to spend tokens", - type: "string", - }, - token: { - description: "The address of the ERC20 token contract", - type: "string", + t: { + alias: ["token"], + description: "The address of the ERC20 token contract.", + type: "hex", required: true, }, - small: { + s: { alias: ["small-spend-limit"], - description: "The small spend proposal limit", + description: "The small spend proposal limit as a decimal string.", type: "string", required: true, }, - medium: { + m: { alias: ["medium-spend-limit"], - description: "The medium spend proposal limit", + description: "The medium spend proposal limit as a decimal string.", type: "string", required: true, }, - high: { + h: { alias: ["high-spend-limit"], - description: "The high spend proposal limit", + description: "The high spend proposal limit as a decimal string.", type: "string", required: true, }, - decimals: { + o: ownerOption, + S: { + alias: ["spender"], description: - "The decimal precision to use. The limit options will be multiplied by (10 ** decimals). For example, if the small limit is 100 and decimals is 18, then the result will be 100000000000000000000", - type: "number", - default: 18, + "The first address authorized to spend tokens. Defaults to the owner.", + type: "hex", }, }, handler: async ({ data, options, next }) => { - const { account, chain, rpcUrl } = data as WriteOptions; - - const owner = (await options.owner()) || account.address; - - const spender = (await options.spender()) || owner; + const { council, account, deployer } = data as DeployOptions; const token = await options.token({ prompt: "Enter token address", }); - const small = await options.small({ + const small = await options.smallSpendLimit({ prompt: "Enter small spend limit", }); - const medium = await options.medium({ + const medium = await options.mediumSpendLimit({ prompt: "Enter medium spend limit", }); - const high = await options.high({ + const high = await options.highSpendLimit({ prompt: "Enter high spend limit", }); - const decimals = await options.decimals(); - - signale.pending("Deploying Spender..."); + const owner = (await options.owner()) || account.address; + const spender = (await options.spender()) || owner; + const decimals = await council.token(token).getDecimals(); - const deployData = await deploySpender({ - owner, - spender, - token, - smallSpendLimit: small, - mediumSpendLimit: medium, - highSpendLimit: high, - decimals, - account, - rpcUrl, - chain, - onSubmitted: (txHash) => { - signale.pending(`Spender deployment tx submitted: ${txHash}`); + const deployedContract = await deployer.deploy({ + abi: Spender.abi, + bytecode: Spender.bytecode, + name: "Spender", + args: { + _highSpendLimit: parseUnits(high, decimals), + _mediumSpendLimit: parseUnits(medium, decimals), + _smallSpendLimit: parseUnits(small, decimals), + _token: token, + _owner: owner, + _spender: spender, }, }); - signale.success(`Spender deployed @ ${deployData.address}`); - next(deployData); + next(deployedContract); }, }); - -export interface DeploySpenderOptions { - owner: string; - spender: string; - token: string; - smallSpendLimit: string; - mediumSpendLimit: string; - highSpendLimit: string; - decimals: number; - account: PrivateKeyAccount; - rpcUrl: string; - chain: Chain; - onSubmitted?: (txHash: string) => void; -} - -export async function deploySpender({ - owner, - spender, - token, - smallSpendLimit, - mediumSpendLimit, - highSpendLimit, - decimals, - account, - rpcUrl, - chain, - onSubmitted, -}: DeploySpenderOptions): Promise { - return deployContract({ - abi: Spender.abi, - args: [ - owner as `0x${string}`, - spender as `0x${string}`, - token as `0x${string}`, - parseUnits(smallSpendLimit, decimals), - parseUnits(mediumSpendLimit, decimals), - parseUnits(highSpendLimit, decimals), - ], - bytecode: Spender.bytecode, - account, - rpcUrl, - chain, - onSubmitted, - }); -} diff --git a/packages/council-cli/src/commands/deploy/timelock.ts b/packages/council-cli/src/commands/deploy/timelock.ts index ceb3ec11..49a862f0 100644 --- a/packages/council-cli/src/commands/deploy/timelock.ts +++ b/packages/council-cli/src/commands/deploy/timelock.ts @@ -1,94 +1,54 @@ import { Timelock } from "@delvtech/council-artifacts/Timelock"; import { command } from "clide-js"; -import signale from "signale"; -import { WriteOptions } from "src/reusable-options/writeOptions.js"; -import { PrivateKeyAccount } from "viem"; -import { Chain } from "viem/chains"; -import { - DeployedContract, - deployContract, -} from "../../utils/deployContract.js"; +import { ownerOption } from "../../options/owner.js"; +import { DeployOptions } from "../deploy.js"; export default command({ description: "Deploy a Timelock contract", options: { - time: { + t: { alias: ["wait-time"], description: - "The time (in seconds) to wait until a proposal can be executed", + "The time (in seconds) to wait until a proposal can be executed.", type: "number", required: true, }, - owner: { - description: "The contract owner's address (e.g., a CoreVoting contract)", - type: "string", - }, gsc: { - description: "The address of the GSC contract", - type: "string", + description: "The address of the GSC contract.", + type: "hex", required: true, }, + g: { + ...ownerOption, + alias: ["governance", ...ownerOption.alias], + }, }, handler: async ({ data, options, next }) => { - const { account, chain, rpcUrl } = data as WriteOptions; + const { account, deployer } = data as DeployOptions; - const time = await options.time({ + const waitTime = await options.waitTime({ prompt: "Enter wait time (in seconds)", }); - const owner = (await options.owner()) || account.address; - const gsc = await options.gsc({ prompt: "Enter GSC address", }); - signale.pending("Deploying Timelock..."); + const governance = (await options.governance()) || account.address; - const deployData = await deployTimelock({ - waitTime: time, - owner, - gsc, - account, - rpcUrl, - chain, - onSubmitted: (txHash) => { - signale.pending(`Timelock deployment tx submitted: ${txHash}`); + const deployedContract = await deployer.deploy({ + abi: Timelock.abi, + bytecode: Timelock.bytecode, + name: "Timelock", + args: { + _waitTime: BigInt(waitTime), + _gsc: gsc, + _governance: governance, }, }); - signale.success(`Timelock deployed @ ${deployData.address}`); - next(deployData); + next(deployedContract); }, }); - -export interface DeployTimelockOptions { - waitTime: number; - gsc: string; - account: PrivateKeyAccount; - rpcUrl: string; - owner?: string; - chain: Chain; - onSubmitted?: (txHash: string) => void; -} - -export async function deployTimelock({ - waitTime, - gsc, - account, - rpcUrl, - chain, - owner = account.address, - onSubmitted, -}: DeployTimelockOptions): Promise { - return await deployContract({ - abi: Timelock.abi, - args: [BigInt(waitTime), owner as `0x${string}`, gsc as `0x${string}`], - bytecode: Timelock.bytecode, - account, - rpcUrl, - chain, - onSubmitted, - }); -} diff --git a/packages/council-cli/src/commands/deploy/treasury.ts b/packages/council-cli/src/commands/deploy/treasury.ts index e3d51b03..f999b5e1 100644 --- a/packages/council-cli/src/commands/deploy/treasury.ts +++ b/packages/council-cli/src/commands/deploy/treasury.ts @@ -1,69 +1,32 @@ import { Treasury } from "@delvtech/council-artifacts/Treasury"; import { command } from "clide-js"; -import signale from "signale"; -import { PrivateKeyAccount } from "viem"; -import { Chain } from "viem/chains"; -import { WriteOptions } from "../../reusable-options/writeOptions.js"; -import { - DeployedContract, - deployContract, -} from "../../utils/deployContract.js"; +import { ownerOption } from "../../options/owner.js"; +import { DeployOptions } from "../deploy.js"; export default command({ description: "Deploy a Treasury contract", options: { - owner: { - description: "The contract owner's address (e.g., a Timelock contract)", - type: "string", - required: true, + g: { + ...ownerOption, + alias: ["governance", ...ownerOption.alias], }, }, handler: async ({ data, options, next }) => { - const { account, chain, rpcUrl } = data as WriteOptions; + const { account, deployer } = data as DeployOptions; - const owner = (await options.owner()) || account.address; + const governance = (await options.owner()) || account.address; - signale.pending("Deploying Treasury..."); - - const deployData = await deployTreasury({ - owner, - account, - rpcUrl, - chain, - onSubmitted: (txHash) => { - signale.pending(`Treasury deployment tx submitted: ${txHash}`); + const deployedContract = await deployer.deploy({ + abi: Treasury.abi, + bytecode: Treasury.bytecode, + name: "Treasury", + args: { + __governance: governance, }, }); - signale.success(`Treasury deployed @ ${deployData.address}`); - next(deployData); + next(deployedContract); }, }); - -export interface DeployTreasuryOptions { - account: PrivateKeyAccount; - rpcUrl: string; - chain: Chain; - owner?: string; - onSubmitted?: (txHash: string) => void; -} - -export async function deployTreasury({ - account, - rpcUrl, - chain, - owner = account.address, - onSubmitted, -}: DeployTreasuryOptions): Promise { - return await deployContract({ - abi: Treasury.abi, - args: [owner as `0x${string}`], - bytecode: Treasury.bytecode, - account, - rpcUrl, - chain, - onSubmitted, - }); -} diff --git a/packages/council-cli/src/commands/deploy/vesting-vault.ts b/packages/council-cli/src/commands/deploy/vesting-vault.ts index 874dd127..2e0dc4bc 100644 --- a/packages/council-cli/src/commands/deploy/vesting-vault.ts +++ b/packages/council-cli/src/commands/deploy/vesting-vault.ts @@ -1,85 +1,47 @@ import { LockingVault } from "@delvtech/council-artifacts/LockingVault"; import { command } from "clide-js"; -import signale from "signale"; -import { PrivateKeyAccount } from "viem"; -import { Chain } from "viem/chains"; -import { WriteOptions } from "../../reusable-options/writeOptions.js"; -import { - DeployedContract, - deployContract, -} from "../../utils/deployContract.js"; +import { DeployOptions } from "../deploy.js"; export default command({ description: "Deploy a VestingVault contract", options: { - token: { - description: "The address of the ERC20 token contract", - type: "string", + t: { + alias: ["token"], + description: "The address of the ERC20 token contract.", + type: "hex", required: true, }, - lag: { + l: { alias: ["stale-block-lag"], description: - "The number of blocks before the delegation history is forgotten", + "The number of blocks before the delegation history is forgotten.", type: "number", required: true, }, }, handler: async ({ data, options, next }) => { - const { account, chain, rpcUrl } = data as WriteOptions; + const { deployer } = data as DeployOptions; const token = await options.token({ prompt: "Enter token address", }); - const lag = await options.lag({ + const staleBlockLag = await options.staleBlockLag({ prompt: "Enter stale block lag", }); - signale.pending("Deploying VestingVault..."); - - const deployData = await deployVestingVault({ - token, - staleBlockLag: lag, - account, - rpcUrl, - chain, - onSubmitted: (txHash) => { - signale.pending(`VestingVault deployment tx submitted: ${txHash}`); + const deployedContract = await deployer.deploy({ + abi: LockingVault.abi, + bytecode: LockingVault.bytecode, + name: "LockingVault", + args: { + _staleBlockLag: BigInt(staleBlockLag), + _token: token, }, }); - signale.success(`VestingVault deployed @ ${deployData.address}`); - next(deployData); + next(deployedContract); }, }); - -export interface DeployVestingVaultOptions { - token: string; - staleBlockLag: number; - account: PrivateKeyAccount; - rpcUrl: string; - chain: Chain; - onSubmitted?: (txHash: string) => void; -} - -export async function deployVestingVault({ - token, - staleBlockLag, - account, - rpcUrl, - chain, - onSubmitted, -}: DeployVestingVaultOptions): Promise { - return deployContract({ - abi: LockingVault.abi, - args: [token as `0x${string}`, BigInt(staleBlockLag)], - bytecode: LockingVault.bytecode, - account, - rpcUrl, - chain, - onSubmitted, - }); -} diff --git a/packages/council-cli/src/commands/encode/airdrop/reclaim.ts b/packages/council-cli/src/commands/encode/airdrop/reclaim.ts index 71d62943..b3d3dc8e 100644 --- a/packages/council-cli/src/commands/encode/airdrop/reclaim.ts +++ b/packages/council-cli/src/commands/encode/airdrop/reclaim.ts @@ -1,34 +1,32 @@ import { Airdrop } from "@delvtech/council-artifacts/Airdrop"; +import { encodeFunctionData } from "@delvtech/drift"; import { command } from "clide-js"; import signale from "signale"; -import { encodeFunctionData } from "viem"; export default command({ description: "Encode call data for Airdrop.reclaim", options: { - recipient: { + d: { alias: ["destination"], description: "The recipient of the reclaimed funds", - type: "string", + type: "hex", required: true, }, }, handler: async ({ options, next }) => { - const recipient = await options.recipient({ - prompt: "Enter recipient address", + const destination = await options.destination({ + prompt: "Enter destination address", }); - const encoded = encodeReclaim(recipient); + + const encoded = encodeFunctionData({ + abi: Airdrop.abi, + fn: "reclaim", + args: { destination }, + }); + signale.success(encoded); next(encoded); }, }); - -function encodeReclaim(recipient: string) { - return encodeFunctionData({ - abi: Airdrop.abi, - functionName: "reclaim", - args: [recipient as `0x${string}`], - }); -} diff --git a/packages/council-cli/src/commands/encode/authorizable/authorize.ts b/packages/council-cli/src/commands/encode/authorizable/authorize.ts index 8c96f3b4..160881b8 100644 --- a/packages/council-cli/src/commands/encode/authorizable/authorize.ts +++ b/packages/council-cli/src/commands/encode/authorizable/authorize.ts @@ -1,16 +1,16 @@ import { Authorizable } from "@delvtech/council-artifacts/Authorizable"; +import { encodeFunctionData } from "@delvtech/drift"; import { command } from "clide-js"; import signale from "signale"; -import { encodeFunctionData } from "viem"; export default command({ description: "Encode call data for Authorizable.authorize", options: { - address: { - alias: ["who"], + a: { + alias: ["address", "who"], description: "The address to authorize", - type: "string", + type: "hex", required: true, }, }, @@ -20,17 +20,13 @@ export default command({ prompt: "Enter address", }); - const encoded = encodeAuthorize(address); + const encoded = encodeFunctionData({ + abi: Authorizable.abi, + fn: "authorize", + args: { who: address }, + }); signale.success(encoded); next(encoded); }, }); - -export function encodeAuthorize(address: string): string { - return encodeFunctionData({ - abi: Authorizable.abi, - functionName: "authorize", - args: [address as `0x${string}`], - }); -} diff --git a/packages/council-cli/src/commands/encode/authorizable/deauthorize.ts b/packages/council-cli/src/commands/encode/authorizable/deauthorize.ts index 8c9378fb..06906295 100644 --- a/packages/council-cli/src/commands/encode/authorizable/deauthorize.ts +++ b/packages/council-cli/src/commands/encode/authorizable/deauthorize.ts @@ -1,16 +1,16 @@ import { Authorizable } from "@delvtech/council-artifacts/Authorizable"; +import { encodeFunctionData } from "@delvtech/drift"; import { command } from "clide-js"; import signale from "signale"; -import { encodeFunctionData } from "viem"; export default command({ description: "Encode call data for Authorizable.deauthorize", options: { - address: { - alias: ["who"], + a: { + alias: ["address", "who"], description: "The address to remove authorization from", - type: "string", + type: "hex", required: true, }, }, @@ -20,17 +20,13 @@ export default command({ prompt: "Enter address", }); - const encoded = encodeDeauthorize(address); + const encoded = encodeFunctionData({ + abi: Authorizable.abi, + fn: "deauthorize", + args: { who: address }, + }); signale.success(encoded); next(encoded); }, }); - -export function encodeDeauthorize(address: string): string { - return encodeFunctionData({ - abi: Authorizable.abi, - functionName: "deauthorize", - args: [address as `0x${string}`], - }); -} diff --git a/packages/council-cli/src/commands/encode/authorizable/set-owner.ts b/packages/council-cli/src/commands/encode/authorizable/set-owner.ts index b2441deb..9dd33d2d 100644 --- a/packages/council-cli/src/commands/encode/authorizable/set-owner.ts +++ b/packages/council-cli/src/commands/encode/authorizable/set-owner.ts @@ -1,16 +1,16 @@ import { Authorizable } from "@delvtech/council-artifacts/Authorizable"; +import { encodeFunctionData } from "@delvtech/drift"; import { command } from "clide-js"; import signale from "signale"; -import { encodeFunctionData } from "viem"; export default command({ description: "Encode call data for Authorizable.setOwner", options: { - address: { - alias: ["who"], + a: { + alias: ["address", "who"], description: "The address to set as the owner", - type: "string", + type: "hex", required: true, }, }, @@ -20,17 +20,13 @@ export default command({ prompt: "Enter owner address", }); - const encoded = encodeSetOwner(address); + const encoded = encodeFunctionData({ + abi: Authorizable.abi, + fn: "setOwner", + args: { who: address }, + }); signale.success(encoded); next(encoded); }, }); - -export function encodeSetOwner(address: string): string { - return encodeFunctionData({ - abi: Authorizable.abi, - functionName: "setOwner", - args: [address as `0x${string}`], - }); -} diff --git a/packages/council-cli/src/commands/encode/core-voting/change-extra-voting-time.ts b/packages/council-cli/src/commands/encode/core-voting/change-extra-voting-time.ts index 98d3d742..d80fbba8 100644 --- a/packages/council-cli/src/commands/encode/core-voting/change-extra-voting-time.ts +++ b/packages/council-cli/src/commands/encode/core-voting/change-extra-voting-time.ts @@ -1,14 +1,14 @@ import { CoreVoting } from "@delvtech/council-artifacts/CoreVoting"; +import { encodeFunctionData } from "@delvtech/drift"; import { command } from "clide-js"; import signale from "signale"; -import { encodeFunctionData } from "viem"; export default command({ description: "Encode call data for CoreVoting.changeExtraVotingTime", options: { - blocks: { - alias: ["extra-vote-time"], + b: { + alias: ["blocks", "extra-vote-time"], description: "The number of blocks for which a proposal can still be voted on after it's unlocked", type: "number", @@ -17,19 +17,17 @@ export default command({ }, handler: async ({ options, next }) => { - const blocks = await options.blocks({ + const blocks = await options.extraVoteTime({ prompt: "Enter extra voting time (in blocks)", }); - const encoded = encodeChangeExtraVotingTime(blocks); + + const encoded = encodeFunctionData({ + abi: CoreVoting.abi, + fn: "changeExtraVotingTime", + args: { _extraVoteTime: BigInt(blocks) }, + }); + signale.success(encoded); next(encoded); }, }); - -export function encodeChangeExtraVotingTime(duration: number): string { - return encodeFunctionData({ - abi: CoreVoting.abi, - functionName: "changeExtraVotingTime", - args: [BigInt(duration)], - }); -} diff --git a/packages/council-cli/src/commands/encode/core-voting/change-vault-status.ts b/packages/council-cli/src/commands/encode/core-voting/change-vault-status.ts index 30bc611b..76f70a81 100644 --- a/packages/council-cli/src/commands/encode/core-voting/change-vault-status.ts +++ b/packages/council-cli/src/commands/encode/core-voting/change-vault-status.ts @@ -1,19 +1,20 @@ import { CoreVoting } from "@delvtech/council-artifacts/CoreVoting"; +import { encodeFunctionData } from "@delvtech/drift"; import { command } from "clide-js"; import signale from "signale"; -import { encodeFunctionData } from "viem"; export default command({ description: "Encode call data for CoreVoting.changeVaultStatus", options: { - vault: { + v: { + alias: ["vault"], description: "The voting vault's address", - type: "string", + type: "hex", required: true, }, - approved: { - alias: ["is-valid"], + a: { + alias: ["approved", "is-valid"], description: "Whether or not the vault should be approved", type: "boolean", required: true, @@ -25,7 +26,7 @@ export default command({ prompt: "Enter voting vault address", }); - const approved = await options.approved({ + const isValid = await options.isValid({ prompt: { message: "Enter approval status", active: "Approved", @@ -33,19 +34,13 @@ export default command({ }, }); - const encoded = encodeChangeVaultStatus(vault, approved); + const encoded = encodeFunctionData({ + abi: CoreVoting.abi, + fn: "changeVaultStatus", + args: { isValid, vault }, + }); + signale.success(encoded); next(encoded); }, }); - -export function encodeChangeVaultStatus( - vault: string, - approved: boolean, -): string { - return encodeFunctionData({ - abi: CoreVoting.abi, - functionName: "changeVaultStatus", - args: [vault as `0x${string}`, approved], - }); -} diff --git a/packages/council-cli/src/commands/encode/core-voting/set-custom-quorum.ts b/packages/council-cli/src/commands/encode/core-voting/set-custom-quorum.ts index 5b17e394..4f068261 100644 --- a/packages/council-cli/src/commands/encode/core-voting/set-custom-quorum.ts +++ b/packages/council-cli/src/commands/encode/core-voting/set-custom-quorum.ts @@ -1,36 +1,32 @@ import { CoreVoting } from "@delvtech/council-artifacts/CoreVoting"; +import { encodeFunctionData } from "@delvtech/drift"; import { command } from "clide-js"; import signale from "signale"; -import { encodeFunctionData, parseUnits } from "viem"; +import { parseEther } from "viem"; export default command({ description: "Encode call data for CoreVoting.setCustomQuorum", options: { - target: { + t: { + alias: ["target"], description: "The address to set a custom quorum for", - type: "string", + type: "hex", required: true, }, f: { alias: ["function", "selector"], description: "The 4 byte function selector to set a custom quorum for", - type: "string", + type: "hex", required: true, }, - power: { + q: { alias: ["quorum"], description: "A new base quorum for the specific function (e.g. 0x12345678)", type: "string", required: true, }, - decimals: { - description: - "The decimal precision used by the contract. The power option will be multiplied by (10 ** decimals). For example, if power is 100 and decimals is 18, then the result will be 100000000000000000000", - type: "number", - default: 18, - }, }, handler: async ({ options, next }) => { @@ -42,31 +38,21 @@ export default command({ prompt: "Enter 4 byte function selector", }); - const power = await options.power({ + const quorum = await options.quorum({ prompt: "Enter new base quorum", }); - const decimals = await options.decimals(); + const encoded = encodeFunctionData({ + abi: CoreVoting.abi, + fn: "setCustomQuorum", + args: { + target, + selector, + quorum: parseEther(quorum), + }, + }); - const encoded = encodeSetCustomQuorum(target, selector, power, decimals); signale.success(encoded); next(encoded); }, }); - -export function encodeSetCustomQuorum( - target: string, - selector: string, - quorum: string, - decimals: number, -): string { - return encodeFunctionData({ - abi: CoreVoting.abi, - functionName: "setCustomQuorum", - args: [ - target as `0x${string}`, - selector as `0x${string}`, - parseUnits(quorum, decimals), - ], - }); -} diff --git a/packages/council-cli/src/commands/encode/core-voting/set-default-quorum.ts b/packages/council-cli/src/commands/encode/core-voting/set-default-quorum.ts index 1bfa91e8..5505a7f3 100644 --- a/packages/council-cli/src/commands/encode/core-voting/set-default-quorum.ts +++ b/packages/council-cli/src/commands/encode/core-voting/set-default-quorum.ts @@ -1,46 +1,33 @@ import { CoreVoting } from "@delvtech/council-artifacts/CoreVoting"; +import { encodeFunctionData } from "@delvtech/drift"; import { command } from "clide-js"; import signale from "signale"; -import { encodeFunctionData, parseUnits } from "viem"; +import { parseEther } from "viem"; export default command({ description: "Encode call data for CoreVoting.setDefaultQuorum", options: { - power: { + q: { alias: ["quorum"], - description: "The new base quorum", + description: "The new base quorum.", type: "string", required: true, }, - decimals: { - description: - "The decimal precision used by the contract. The quorum option will be multiplied by (10 ** decimals). For example, if quorum is 100 and decimals is 18, then the result will be 100000000000000000000", - type: "number", - default: 18, - }, }, handler: async ({ options, next }) => { - const power = await options.power({ + const quorum = await options.quorum({ prompt: "Enter new base quorum", }); - const decimals = await options.decimals(); + const encoded = encodeFunctionData({ + abi: CoreVoting.abi, + fn: "setDefaultQuorum", + args: { quorum: parseEther(quorum) }, + }); - const encoded = encodeSetDefaultQuorum(power, decimals); signale.success(encoded); next(encoded); }, }); - -export function encodeSetDefaultQuorum( - quorum: string, - decimals: number, -): string { - return encodeFunctionData({ - abi: CoreVoting.abi, - functionName: "setDefaultQuorum", - args: [parseUnits(quorum, decimals)], - }); -} diff --git a/packages/council-cli/src/commands/encode/core-voting/set-lock-duration.ts b/packages/council-cli/src/commands/encode/core-voting/set-lock-duration.ts index 160b261a..db0aaee7 100644 --- a/packages/council-cli/src/commands/encode/core-voting/set-lock-duration.ts +++ b/packages/council-cli/src/commands/encode/core-voting/set-lock-duration.ts @@ -1,16 +1,16 @@ import { CoreVoting } from "@delvtech/council-artifacts/CoreVoting"; +import { encodeFunctionData } from "@delvtech/drift"; import { command } from "clide-js"; import signale from "signale"; -import { encodeFunctionData } from "viem"; export default command({ description: "Encode call data for CoreVoting.setLockDuration", options: { - blocks: { - alias: ["lock-duration"], + b: { + alias: ["blocks", "lock-duration"], description: - "The number of blocks that must pass before a new proposal can be executed", + "The number of blocks that must pass before a new proposal can be executed.", type: "number", required: true, }, @@ -20,16 +20,14 @@ export default command({ const blocks = await options.blocks({ prompt: "Enter new lock duration (in blocks)", }); - const encoded = encodeSetLockDuration(blocks); + + const encoded = encodeFunctionData({ + abi: CoreVoting.abi, + fn: "setLockDuration", + args: { _lockDuration: BigInt(blocks) }, + }); + signale.success(encoded); next(encoded); }, }); - -export function encodeSetLockDuration(duration: number): string { - return encodeFunctionData({ - abi: CoreVoting.abi, - functionName: "setLockDuration", - args: [BigInt(duration)], - }); -} diff --git a/packages/council-cli/src/commands/encode/core-voting/set-min-proposal-power.ts b/packages/council-cli/src/commands/encode/core-voting/set-min-proposal-power.ts index d8d6ee44..816dabf4 100644 --- a/packages/council-cli/src/commands/encode/core-voting/set-min-proposal-power.ts +++ b/packages/council-cli/src/commands/encode/core-voting/set-min-proposal-power.ts @@ -1,24 +1,19 @@ import { CoreVoting } from "@delvtech/council-artifacts/CoreVoting"; +import { encodeFunctionData } from "@delvtech/drift"; import { command } from "clide-js"; import signale from "signale"; -import { encodeFunctionData, parseUnits } from "viem"; +import { parseEther } from "viem"; export default command({ description: "Encode call data for CoreVoting.setMinProposalPower", options: { - power: { - alias: ["min-proposal-power"], - description: "The minimum voting power required to create a proposal", + p: { + alias: ["power", "min-proposal-power"], + description: "The minimum voting power required to create a proposal.", type: "string", required: true, }, - decimals: { - description: - "The decimal precision used by the contract. The power option will be multiplied by (10 ** decimals). For example, if power is 100 and decimals is 18, then the result will be 100000000000000000000", - type: "number", - default: 18, - }, }, handler: async ({ options, next }) => { @@ -26,21 +21,15 @@ export default command({ prompt: "Enter minimum voting power", }); - const decimals = await options.decimals(); + const encoded = encodeFunctionData({ + abi: CoreVoting.abi, + fn: "setMinProposalPower", + args: { + _minProposalPower: parseEther(power), + }, + }); - const encoded = encodeSetMinProposalPower(power, decimals); signale.success(encoded); next(encoded); }, }); - -export function encodeSetMinProposalPower( - power: string, - decimals: number, -): string { - return encodeFunctionData({ - abi: CoreVoting.abi, - functionName: "setMinProposalPower", - args: [parseUnits(power, decimals)], - }); -} diff --git a/packages/council-cli/src/commands/encode/gsc-vault/set-core-voting.ts b/packages/council-cli/src/commands/encode/gsc-vault/set-core-voting.ts index cfeec6b2..68b8c36a 100644 --- a/packages/council-cli/src/commands/encode/gsc-vault/set-core-voting.ts +++ b/packages/council-cli/src/commands/encode/gsc-vault/set-core-voting.ts @@ -1,16 +1,16 @@ import { GSCVault } from "@delvtech/council-artifacts/GSCVault"; +import { encodeFunctionData } from "@delvtech/drift"; import { command } from "clide-js"; import signale from "signale"; -import { encodeFunctionData } from "viem"; export default command({ description: "Encode call data for GSCVault.setCoreVoting", options: { - address: { - alias: ["new-voting"], - description: "The new core voting contract address", - type: "string", + a: { + alias: ["address", "new-voting"], + description: "The new core voting contract address.", + type: "hex", required: true, }, }, @@ -19,16 +19,14 @@ export default command({ const address = await options.address({ prompt: "Enter core voting address", }); - const encoded = encodeSetCoreVoting(address); + + const encoded = encodeFunctionData({ + abi: GSCVault.abi, + fn: "setCoreVoting", + args: { _newVoting: address }, + }); + signale.success(encoded); next(encoded); }, }); - -export function encodeSetCoreVoting(address: string): string { - return encodeFunctionData({ - abi: GSCVault.abi, - functionName: "setCoreVoting", - args: [address as `0x${string}`], - }); -} diff --git a/packages/council-cli/src/commands/encode/gsc-vault/set-idle-duration.ts b/packages/council-cli/src/commands/encode/gsc-vault/set-idle-duration.ts index 42c9a2d2..7db426f9 100644 --- a/packages/council-cli/src/commands/encode/gsc-vault/set-idle-duration.ts +++ b/packages/council-cli/src/commands/encode/gsc-vault/set-idle-duration.ts @@ -1,16 +1,16 @@ import { GSCVault } from "@delvtech/council-artifacts/GSCVault"; +import { encodeFunctionData } from "@delvtech/drift"; import { command } from "clide-js"; import signale from "signale"; -import { encodeFunctionData } from "viem"; export default command({ description: "Encode call data for GSCVault.setIdleDuration", options: { - time: { - alias: ["idle-duration"], + t: { + alias: ["time", "idle-duration"], description: - "The time (in seconds) new members must wait before they can vote", + "The time (in seconds) new members must wait before they can vote.", type: "number", required: true, }, @@ -20,16 +20,14 @@ export default command({ const time = await options.time({ prompt: "Enter new idle time (in seconds)", }); - const encoded = encodeSetIdleDuration(time); + + const encoded = encodeFunctionData({ + abi: GSCVault.abi, + fn: "setIdleDuration", + args: { _idleDuration: BigInt(time) }, + }); + signale.success(encoded); next(encoded); }, }); - -export function encodeSetIdleDuration(time: number): string { - return encodeFunctionData({ - abi: GSCVault.abi, - functionName: "setIdleDuration", - args: [BigInt(time)], - }); -} diff --git a/packages/council-cli/src/commands/encode/gsc-vault/set-vote-power-bound.ts b/packages/council-cli/src/commands/encode/gsc-vault/set-vote-power-bound.ts index f319bea6..43879253 100644 --- a/packages/council-cli/src/commands/encode/gsc-vault/set-vote-power-bound.ts +++ b/packages/council-cli/src/commands/encode/gsc-vault/set-vote-power-bound.ts @@ -1,46 +1,33 @@ import { GSCVault } from "@delvtech/council-artifacts/GSCVault"; +import { encodeFunctionData } from "@delvtech/drift"; import { command } from "clide-js"; import signale from "signale"; -import { encodeFunctionData, parseUnits } from "viem"; +import { parseEther } from "viem"; export default command({ description: "Encode call data for GSCVault.setVotePowerBound", options: { - bound: { - alias: ["power"], - description: "The new required voting power to become a member", + p: { + alias: ["power", "new-bound"], + description: "The new required voting power to become a member.", type: "string", required: true, }, - decimals: { - description: - "The decimal precision used by the contract. The power option will be multiplied by (10 ** decimals). For example, if power is 100 and decimals is 18, then the result will be 100000000000000000000", - type: "number", - default: 18, - }, }, handler: async ({ options, next }) => { - const power = await options.power({ + const newBound = await options.newBound({ prompt: "Enter new voting power bound", }); - const decimals = await options.decimals(); + const encoded = encodeFunctionData({ + abi: GSCVault.abi, + fn: "setVotePowerBound", + args: { _newBound: parseEther(newBound) }, + }); - const encoded = encodeSetVotePowerBound(power, decimals); signale.success(encoded); next(encoded); }, }); - -export function encodeSetVotePowerBound( - power: string, - decimals: number, -): string { - return encodeFunctionData({ - abi: GSCVault.abi, - functionName: "setVotePowerBound", - args: [parseUnits(power, decimals)], - }); -} diff --git a/packages/council-cli/src/commands/encode/locking-vault/change-delegation.ts b/packages/council-cli/src/commands/encode/locking-vault/change-delegation.ts index 848f80e4..b508da05 100644 --- a/packages/council-cli/src/commands/encode/locking-vault/change-delegation.ts +++ b/packages/council-cli/src/commands/encode/locking-vault/change-delegation.ts @@ -1,34 +1,32 @@ import { LockingVault } from "@delvtech/council-artifacts/LockingVault"; +import { encodeFunctionData } from "@delvtech/drift"; import { command } from "clide-js"; import signale from "signale"; -import { encodeFunctionData } from "viem"; export default command({ description: "Encode call data for LockingVault.changeDelegation", options: { - address: { - alias: ["new-delegate"], - description: "The address to delegate to", - type: "string", + a: { + alias: ["address", "new-delegate"], + description: "The address to delegate to.", + type: "hex", required: true, }, }, handler: async ({ options, next }) => { - const address = await options.address({ + const newDelegate = await options.newDelegate({ prompt: "Enter new delegate address", }); - const encoded = encodeChangeDelegation(address); + + const encoded = encodeFunctionData({ + abi: LockingVault.abi, + fn: "changeDelegation", + args: { newDelegate }, + }); + signale.success(encoded); next(encoded); }, }); - -export function encodeChangeDelegation(address: string): string { - return encodeFunctionData({ - abi: LockingVault.abi, - functionName: "changeDelegation", - args: [address as `0x${string}`], - }); -} diff --git a/packages/council-cli/src/commands/encode/locking-vault/deposit.ts b/packages/council-cli/src/commands/encode/locking-vault/deposit.ts index 3358de42..ab906f5e 100644 --- a/packages/council-cli/src/commands/encode/locking-vault/deposit.ts +++ b/packages/council-cli/src/commands/encode/locking-vault/deposit.ts @@ -1,40 +1,43 @@ import { LockingVault } from "@delvtech/council-artifacts/LockingVault"; +import { encodeFunctionData } from "@delvtech/drift"; import { command } from "clide-js"; import signale from "signale"; -import { encodeFunctionData, parseUnits } from "viem"; +import { parseUnits } from "viem"; export default command({ description: "Encode call data for LockingVault.deposit", options: { - account: { - alias: ["funded-account"], - description: "The address to credit this deposit to", - type: "string", + a: { + alias: ["account", "funded-account"], + description: "The address to credit this deposit to.", + type: "hex", required: true, }, - amount: { - description: "The amount of tokens to deposit", + A: { + alias: ["amount"], + description: "The amount of tokens to deposit.", type: "string", required: true, }, - decimals: { + d: { + alias: ["decimals"], description: - "The decimal precision used by the contract. The amount option will be multiplied by (10 ** decimals). For example, if amount is 100 and decimals is 18, then the result will be 100000000000000000000", + "The decimal precision used by the contract. The amount option will be multiplied by (10 ** decimals). For example, if amount is 100 and decimals is 18, then the result will be 100000000000000000000.", type: "number", default: 18, }, - delegate: { - alias: ["first-delegate"], + D: { + alias: ["delegate", "first-delegation"], description: - "The address to delegate the resulting voting power to if the account doesn't already have a delegate", - type: "string", + "The address to delegate the resulting voting power to if the account doesn't already have a delegate.", + type: "hex", required: true, }, }, handler: async ({ options, next }) => { - const account = await options.account({ + const fundedAccount = await options.fundedAccount({ prompt: "Enter account address", }); @@ -44,29 +47,21 @@ export default command({ const decimals = await options.decimals(); - const delegate = await options.delegate({ - prompt: "Enter first delegate address", + const firstDelegation = await options.firstDelegation({ + prompt: "Enter first delegation address", + }); + + const encoded = encodeFunctionData({ + abi: LockingVault.abi, + fn: "deposit", + args: { + fundedAccount, + amount: parseUnits(amount, decimals), + firstDelegation, + }, }); - const encoded = encodeDeposit(account, amount, decimals, delegate); signale.success(encoded); next(encoded); }, }); - -export function encodeDeposit( - account: string, - amount: string, - decimals: number, - delegate: string, -): string { - return encodeFunctionData({ - abi: LockingVault.abi, - functionName: "deposit", - args: [ - account as `0x${string}`, - parseUnits(amount, decimals), - delegate as `0x${string}`, - ], - }); -} diff --git a/packages/council-cli/src/commands/encode/locking-vault/withdraw.ts b/packages/council-cli/src/commands/encode/locking-vault/withdraw.ts index 5a70ef39..68f51d58 100644 --- a/packages/council-cli/src/commands/encode/locking-vault/withdraw.ts +++ b/packages/council-cli/src/commands/encode/locking-vault/withdraw.ts @@ -1,23 +1,21 @@ import { LockingVault } from "@delvtech/council-artifacts/LockingVault"; +import { encodeFunctionData } from "@delvtech/drift"; import { command } from "clide-js"; import signale from "signale"; -import { encodeFunctionData, parseUnits } from "viem"; +import { parseUnits } from "viem"; +import { decimalsOption } from "../../../options/decimals.js"; export default command({ description: "Encode call data for LockingVault.withdraw", options: { - amount: { - description: "The amount of tokens to withdraw", + a: { + alias: ["amount"], + description: "The amount of tokens to withdraw.", type: "string", required: true, }, - decimals: { - description: - "The decimal precision used by the contract. The amount option will be multiplied by (10 ** decimals). For example, if amount is 100 and decimals is 18, then the result will be 100000000000000000000", - type: "number", - default: 18, - }, + d: decimalsOption, }, handler: async ({ options, next }) => { @@ -27,16 +25,13 @@ export default command({ const decimals = await options.decimals(); - const encoded = encodeWithdraw(amount, decimals); + const encoded = encodeFunctionData({ + abi: LockingVault.abi, + fn: "withdraw", + args: { amount: parseUnits(amount, decimals) }, + }); + signale.success(encoded); next(encoded); }, }); - -export function encodeWithdraw(amount: string, decimals: number): string { - return encodeFunctionData({ - abi: LockingVault.abi, - functionName: "withdraw", - args: [parseUnits(amount, decimals)], - }); -} diff --git a/packages/council-cli/src/commands/encode/merkle-rewards/claim-and-delegate.ts b/packages/council-cli/src/commands/encode/merkle-rewards/claim-and-delegate.ts index 04da7b8e..c7d20ac0 100644 --- a/packages/council-cli/src/commands/encode/merkle-rewards/claim-and-delegate.ts +++ b/packages/council-cli/src/commands/encode/merkle-rewards/claim-and-delegate.ts @@ -1,44 +1,44 @@ import { MerkleRewards } from "@delvtech/council-artifacts/MerkleRewards"; +import { encodeFunctionData } from "@delvtech/drift"; import { command } from "clide-js"; import signale from "signale"; -import { encodeFunctionData, parseUnits } from "viem"; +import { decimalsOption } from "../../../options/decimals.js"; +import { parseUnits } from "viem"; export default command({ description: "Encode call data for MerkleRewards.claimAndDelegate", options: { - amount: { - description: "The amount of rewards to claim and delegate", + a: { + alias: ["amount"], + description: "The amount of rewards to claim and delegate.", type: "string", required: true, }, - decimals: { + d: decimalsOption, + D: { + alias: ["delegate"], description: - "The decimal precision used by the contract. The amount option will be multiplied by (10 ** decimals). For example, if amount is 100 and decimals is 18, then the result will be 100000000000000000000", - type: "number", - default: 18, - }, - delegate: { - description: - "The address to delegate the resulting voting power to if the recipient doesn't already have a delegate", - type: "string", + "The address to delegate the resulting voting power to if the recipient doesn't already have a delegate.", + type: "hex", required: true, }, - "total-grant": { - description: "The total grant amount", + g: { + alias: ["total-grant"], + description: "The total grant amount.", type: "string", required: true, }, - proof: { + p: { alias: ["merkle-proof"], - description: "The merkle proof for the claim", - type: "array", + description: "The merkle proof for the claim.", + type: "hexArray", required: true, }, - recipient: { - alias: ["destination"], - description: "The address which will be credited with funds", - type: "string", + r: { + alias: ["recipient", "destination"], + description: "The address which will be credited with funds.", + type: "hex", required: true, }, }, @@ -54,52 +54,34 @@ export default command({ const decimals = await options.decimals(); - const proof = await options.proof({ + const merkleProof = await options.merkleProof({ prompt: "Enter merkle proof", }); - const recipient = await options.recipient({ - prompt: "Enter recipient address", + const destination = await options.destination({ + prompt: "Enter destination address", }); const delegate = await options.delegate({ prompt: { message: "Enter delegate address", - initial: recipient, + initial: destination, }, }); - const encoded = encodeClaimAndDelegate( - amount, - decimals, - delegate, - totalGrant, - proof, - recipient, - ); + const encoded = encodeFunctionData({ + abi: MerkleRewards.abi, + fn: "claimAndDelegate", + args: { + amount: parseUnits(amount, decimals), + delegate, + destination, + merkleProof, + totalGrant: parseUnits(totalGrant, decimals), + }, + }); signale.success(encoded); next(encoded); }, }); - -export function encodeClaimAndDelegate( - amount: string, - decimals: number, - delegate: string, - totalGrant: string, - proof: string[], - recipient: string, -): string { - return encodeFunctionData({ - abi: MerkleRewards.abi, - functionName: "claimAndDelegate", - args: [ - parseUnits(amount, decimals), - delegate as `0x${string}`, - parseUnits(totalGrant, decimals), - proof as `0x${string}`[], - recipient as `0x${string}`, - ], - }); -} diff --git a/packages/council-cli/src/commands/encode/merkle-rewards/claim.ts b/packages/council-cli/src/commands/encode/merkle-rewards/claim.ts index 6593e02a..188bf25c 100644 --- a/packages/council-cli/src/commands/encode/merkle-rewards/claim.ts +++ b/packages/council-cli/src/commands/encode/merkle-rewards/claim.ts @@ -1,38 +1,37 @@ import { MerkleRewards } from "@delvtech/council-artifacts/MerkleRewards"; +import { encodeFunctionData } from "@delvtech/drift"; import { command } from "clide-js"; import signale from "signale"; -import { encodeFunctionData, parseUnits } from "viem"; +import { parseUnits } from "viem"; +import { decimalsOption } from "../../../options/decimals.js"; export default command({ description: "Encode call data for MerkleRewards.claim", options: { - amount: { + a: { + alias: ["amount"], description: "The amount of rewards to claim", type: "string", required: true, }, - decimals: { - description: - "The decimal precision used by the contract. The amount option will be multiplied by (10 ** decimals). For example, if amount is 100 and decimals is 18, then the result will be 100000000000000000000", - type: "number", - default: 18, - }, - "total-grant": { - description: "The total grant amount", + d: decimalsOption, + g: { + alias: ["total-grant"], + description: "The total grant amount.", type: "string", required: true, }, - proof: { + p: { alias: ["merkle-proof"], - description: "The merkle proof for the claim", - type: "array", + description: "The merkle proof for the claim.", + type: "hexArray", required: true, }, - recipient: { - alias: ["destination"], - description: "The address which will be credited with funds", - type: "string", + r: { + alias: ["recipient", "destination"], + description: "The address which will be credited with funds.", + type: "hex", required: true, }, }, @@ -48,36 +47,26 @@ export default command({ const decimals = await options.decimals(); - const proof = await options.proof({ + const merkleProof = await options.merkleProof({ prompt: "Enter merkle proof", }); - const recipient = await options.recipient({ + const destination = await options.destination({ prompt: "Enter recipient address", }); - const encoded = encodeClaim(amount, decimals, totalGrant, proof, recipient); + const encoded = encodeFunctionData({ + abi: MerkleRewards.abi, + fn: "claim", + args: { + amount: parseUnits(amount, decimals), + destination, + merkleProof, + totalGrant: parseUnits(totalGrant, decimals), + }, + }); signale.success(encoded); next(encoded); }, }); - -export function encodeClaim( - amount: string, - decimals: number, - totalGrant: string, - proof: string[], - recipient: string, -): string { - return encodeFunctionData({ - abi: MerkleRewards.abi, - functionName: "claim", - args: [ - parseUnits(amount, decimals), - parseUnits(totalGrant, decimals), - proof as `0x${string}`[], - recipient as `0x${string}`, - ], - }); -} diff --git a/packages/council-cli/src/commands/encode/optimistic-grants/claim.ts b/packages/council-cli/src/commands/encode/optimistic-grants/claim.ts index 8f83545b..95dda536 100644 --- a/packages/council-cli/src/commands/encode/optimistic-grants/claim.ts +++ b/packages/council-cli/src/commands/encode/optimistic-grants/claim.ts @@ -1,34 +1,32 @@ import { OptimisticGrants } from "@delvtech/council-artifacts/OptimisticGrants"; +import { encodeFunctionData } from "@delvtech/drift"; import { command } from "clide-js"; import signale from "signale"; -import { encodeFunctionData } from "viem"; export default command({ description: "Encode call data for OptimisticGrants.claim", options: { - recipient: { - alias: ["destination"], - description: "The address to send the tokens to", - type: "string", + r: { + alias: ["recipient", "destination"], + description: "The address to send the tokens to.", + type: "hex", required: true, }, }, handler: async ({ options, next }) => { - const recipient = await options.recipient({ + const destination = await options.destination({ prompt: "Enter recipient address", }); - const encoded = encodeClaim(recipient); + + const encoded = encodeFunctionData({ + abi: OptimisticGrants.abi, + fn: "claim", + args: { _destination: destination }, + }); + signale.success(encoded); next(encoded); }, }); - -export function encodeClaim(recipient: string): string { - return encodeFunctionData({ - abi: OptimisticGrants.abi, - functionName: "claim", - args: [recipient as `0x${string}`], - }); -} diff --git a/packages/council-cli/src/commands/encode/optimistic-grants/configure-grant.ts b/packages/council-cli/src/commands/encode/optimistic-grants/configure-grant.ts index 15798a8b..9c6258b1 100644 --- a/packages/council-cli/src/commands/encode/optimistic-grants/configure-grant.ts +++ b/packages/council-cli/src/commands/encode/optimistic-grants/configure-grant.ts @@ -1,30 +1,30 @@ import { OptimisticGrants } from "@delvtech/council-artifacts/OptimisticGrants"; +import { encodeFunctionData } from "@delvtech/drift"; import { command } from "clide-js"; import signale from "signale"; -import { encodeFunctionData, parseUnits } from "viem"; +import { parseUnits } from "viem"; +import { decimalsOption } from "../../../options/decimals.js"; export default command({ description: "Encode call data for a OptimisticGrants.configureGrant", options: { - owner: { - description: "The address of the grant owner", - type: "string", + o: { + alias: ["owner"], + description: "The address of the grant owner.", + type: "hex", required: true, }, - amount: { - description: "The amount of tokens to grant", + a: { + alias: ["amount"], + description: "The amount of tokens to grant.", type: "string", required: true, }, - decimals: { - description: - "The decimal precision used by the contract. The amount option will be multiplied by (10 ** decimals). For example, if amount is 100 and decimals is 18, then the result will be 100000000000000000000", - type: "number", - default: 18, - }, - expiration: { - description: "The expiration timestamp (in seconds) of the grant", + d: decimalsOption, + e: { + alias: ["expiration"], + description: "The expiration timestamp (in seconds) of the grant.", type: "number", required: true, }, @@ -45,25 +45,17 @@ export default command({ prompt: "Enter expiration timestamp (in seconds)", }); - const encoded = encodeConfigureGrant(owner, amount, decimals, expiration); + const encoded = encodeFunctionData({ + abi: OptimisticGrants.abi, + fn: "configureGrant", + args: { + _amount: parseUnits(amount, decimals), + _expiration: BigInt(expiration), + _owner: owner, + }, + }); + signale.success(encoded); next(encoded); }, }); - -export function encodeConfigureGrant( - owner: string, - amount: string, - decimals: number, - expiration: number, -): string { - return encodeFunctionData({ - abi: OptimisticGrants.abi, - functionName: "configureGrant", - args: [ - owner as `0x${string}`, - parseUnits(amount, decimals), - BigInt(expiration), - ], - }); -} diff --git a/packages/council-cli/src/commands/encode/optimistic-grants/deposit.ts b/packages/council-cli/src/commands/encode/optimistic-grants/deposit.ts index 01946556..31f475db 100644 --- a/packages/council-cli/src/commands/encode/optimistic-grants/deposit.ts +++ b/packages/council-cli/src/commands/encode/optimistic-grants/deposit.ts @@ -1,23 +1,21 @@ import { OptimisticGrants } from "@delvtech/council-artifacts/OptimisticGrants"; +import { encodeFunctionData } from "@delvtech/drift"; import { command } from "clide-js"; import signale from "signale"; -import { encodeFunctionData, parseUnits } from "viem"; +import { parseUnits } from "viem"; +import { decimalsOption } from "../../../options/decimals.js"; export default command({ description: "Encode call data for OptimisticGrants.deposit", options: { - amount: { - description: "The amount of tokens to deposit", + a: { + alias: ["amount"], + description: "The amount of tokens to deposit.", type: "string", required: true, }, - decimals: { - description: - "The decimal precision used by the contract. The amount option will be multiplied by (10 ** decimals). For example, if amount is 100 and decimals is 18, then the result will be 100000000000000000000", - type: "number", - default: 18, - }, + d: decimalsOption, }, handler: async ({ options, next }) => { @@ -27,16 +25,13 @@ export default command({ const decimals = await options.decimals(); - const encoded = encodeDeposit(amount, decimals); + const encoded = encodeFunctionData({ + abi: OptimisticGrants.abi, + fn: "deposit", + args: { _amount: parseUnits(amount, decimals) }, + }); + signale.success(encoded); next(encoded); }, }); - -export function encodeDeposit(amount: string, decimals: number): string { - return encodeFunctionData({ - abi: OptimisticGrants.abi, - functionName: "deposit", - args: [parseUnits(amount, decimals)], - }); -} diff --git a/packages/council-cli/src/commands/encode/optimistic-grants/withdraw.ts b/packages/council-cli/src/commands/encode/optimistic-grants/withdraw.ts index eb2c51a5..cc8f5c5d 100644 --- a/packages/council-cli/src/commands/encode/optimistic-grants/withdraw.ts +++ b/packages/council-cli/src/commands/encode/optimistic-grants/withdraw.ts @@ -1,26 +1,25 @@ import { OptimisticGrants } from "@delvtech/council-artifacts/OptimisticGrants"; +import { encodeFunctionData } from "@delvtech/drift"; import { command } from "clide-js"; import signale from "signale"; -import { encodeFunctionData, parseUnits } from "viem"; +import { parseUnits } from "viem"; +import { decimalsOption } from "../../../options/decimals.js"; export default command({ description: "Encode call data for OptimisticGrants.withdraw", options: { - amount: { - description: "The amount of tokens to withdraw", + a: { + alias: ["amount"], + description: "The amount of tokens to withdraw.", type: "string", required: true, }, - decimals: { - description: - "The decimal precision used by the contract. The amount option will be multiplied by (10 ** decimals). For example, if amount is 100 and decimals is 18, then the result will be 100000000000000000000", - type: "number", - default: 18, - }, - recipient: { - description: "The address to withdraw to", - type: "string", + d: decimalsOption, + r: { + alias: ["recipient", "destination"], + description: "The address to withdraw to.", + type: "hex", required: true, }, }, @@ -36,20 +35,16 @@ export default command({ prompt: "Enter recipient address", }); - const encoded = encodeDeposit(amount, decimals, recipient); + const encoded = encodeFunctionData({ + abi: OptimisticGrants.abi, + fn: "withdraw", + args: { + _amount: parseUnits(amount, decimals), + _recipient: recipient, + }, + }); + signale.success(encoded); next(encoded); }, }); - -export function encodeDeposit( - amount: string, - decimals: number, - recipient: string, -): string { - return encodeFunctionData({ - abi: OptimisticGrants.abi, - functionName: "withdraw", - args: [parseUnits(amount, decimals), recipient as `0x${string}`], - }); -} diff --git a/packages/council-cli/src/commands/encode/optimistic-rewards/challenge-rewards.ts b/packages/council-cli/src/commands/encode/optimistic-rewards/challenge-rewards.ts index c5a236c5..2127148b 100644 --- a/packages/council-cli/src/commands/encode/optimistic-rewards/challenge-rewards.ts +++ b/packages/council-cli/src/commands/encode/optimistic-rewards/challenge-rewards.ts @@ -1,21 +1,17 @@ import { OptimisticRewards } from "@delvtech/council-artifacts/OptimisticRewards"; +import { encodeFunctionData } from "@delvtech/drift"; import { command } from "clide-js"; import signale from "signale"; -import { encodeFunctionData } from "viem"; export default command({ description: "Encode call data for OptimisticRewards.challengeRewards", handler: async ({ next }) => { - const encoded = encodeChallengeRewards(); + const encoded = encodeFunctionData({ + abi: OptimisticRewards.abi, + fn: "challengeRewards", + }); signale.success(encoded); next(encoded); }, }); - -export function encodeChallengeRewards(): string { - return encodeFunctionData({ - abi: OptimisticRewards.abi, - functionName: "challengeRewards", - }); -} diff --git a/packages/council-cli/src/commands/encode/optimistic-rewards/propose-rewards.ts b/packages/council-cli/src/commands/encode/optimistic-rewards/propose-rewards.ts index a9d40d97..1684ed7a 100644 --- a/packages/council-cli/src/commands/encode/optimistic-rewards/propose-rewards.ts +++ b/packages/council-cli/src/commands/encode/optimistic-rewards/propose-rewards.ts @@ -1,34 +1,32 @@ import { OptimisticRewards } from "@delvtech/council-artifacts/OptimisticRewards"; +import { encodeFunctionData } from "@delvtech/drift"; import { command } from "clide-js"; import signale from "signale"; -import { encodeFunctionData } from "viem"; export default command({ description: "Encode call data for OptimisticRewards.proposeRewards", options: { - root: { - description: "The merkle root of the proposed new rewards", - type: "string", + r: { + alias: ["new-root"], + description: "The merkle root of the proposed new rewards.", + type: "hex", required: true, }, }, handler: async ({ options, next }) => { - const root = await options.root({ + const newRoot = await options.newRoot({ prompt: "Enter rewards merkle root", }); - const encoded = encodeProposeRewards(root); + const encoded = encodeFunctionData({ + abi: OptimisticRewards.abi, + fn: "proposeRewards", + args: { newRoot }, + }); + signale.success(encoded); next(encoded); }, }); - -export function encodeProposeRewards(root: string): string { - return encodeFunctionData({ - abi: OptimisticRewards.abi, - functionName: "proposeRewards", - args: [root as `0x${string}`], - }); -} diff --git a/packages/council-cli/src/commands/encode/optimistic-rewards/set-challenge-period.ts b/packages/council-cli/src/commands/encode/optimistic-rewards/set-challenge-period.ts index 09a47539..754b08ad 100644 --- a/packages/council-cli/src/commands/encode/optimistic-rewards/set-challenge-period.ts +++ b/packages/council-cli/src/commands/encode/optimistic-rewards/set-challenge-period.ts @@ -1,34 +1,32 @@ import { OptimisticRewards } from "@delvtech/council-artifacts/OptimisticRewards"; +import { encodeFunctionData } from "@delvtech/drift"; import { command } from "clide-js"; import signale from "signale"; -import { encodeFunctionData } from "viem"; export default command({ description: "Encode call data for OptimisticRewards.setChallengePeriod", options: { - period: { - description: "The new challenge period (in seconds)", + p: { + alias: ["challenge-period"], + description: "The new challenge period (in seconds).", type: "number", required: true, }, }, handler: async ({ options, next }) => { - const period = await options.period({ + const challengePeriod = await options.challengePeriod({ prompt: "Enter challenge period (in seconds)", }); - const encoded = encodeSetChallengePeriod(period); + const encoded = encodeFunctionData({ + abi: OptimisticRewards.abi, + fn: "setChallengePeriod", + args: { _challengePeriod: BigInt(challengePeriod) }, + }); + signale.success(encoded); next(encoded); }, }); - -export function encodeSetChallengePeriod(period: number): string { - return encodeFunctionData({ - abi: OptimisticRewards.abi, - functionName: "setChallengePeriod", - args: [BigInt(period)], - }); -} diff --git a/packages/council-cli/src/commands/encode/optimistic-rewards/set-proposer.ts b/packages/council-cli/src/commands/encode/optimistic-rewards/set-proposer.ts index 9fbba42f..5d1b84ed 100644 --- a/packages/council-cli/src/commands/encode/optimistic-rewards/set-proposer.ts +++ b/packages/council-cli/src/commands/encode/optimistic-rewards/set-proposer.ts @@ -1,34 +1,32 @@ import { OptimisticRewards } from "@delvtech/council-artifacts/OptimisticRewards"; +import { encodeFunctionData } from "@delvtech/drift"; import { command } from "clide-js"; import signale from "signale"; -import { encodeFunctionData } from "viem"; export default command({ description: "Encode call data for OptimisticRewards.setProposer", options: { - address: { + p: { alias: ["proposer"], - description: "The address of the new proposer", - type: "string", + description: "The address of the new proposer.", + type: "hex", required: true, }, }, handler: async ({ options, next }) => { - const address = await options.address({ + const proposer = await options.proposer({ prompt: "Enter proposer address", }); - const encoded = encodeSetProposer(address); + + const encoded = encodeFunctionData({ + abi: OptimisticRewards.abi, + fn: "setProposer", + args: { _proposer: proposer }, + }); + signale.success(encoded); next(encoded); }, }); - -export function encodeSetProposer(proposerAddress: string): string { - return encodeFunctionData({ - abi: OptimisticRewards.abi, - functionName: "setProposer", - args: [proposerAddress as `0x${string}`], - }); -} diff --git a/packages/council-cli/src/commands/encode/spender/high-spend.ts b/packages/council-cli/src/commands/encode/spender/high-spend.ts index 27b9fe42..4b40afac 100644 --- a/packages/council-cli/src/commands/encode/spender/high-spend.ts +++ b/packages/council-cli/src/commands/encode/spender/high-spend.ts @@ -1,26 +1,25 @@ import { Spender } from "@delvtech/council-artifacts/Spender"; +import { encodeFunctionData } from "@delvtech/drift"; import { command } from "clide-js"; import signale from "signale"; -import { encodeFunctionData, parseUnits } from "viem"; +import { parseUnits } from "viem"; +import { decimalsOption } from "../../../options/decimals.js"; export default command({ description: "Encode call data for a Spender.highSpend", options: { - amount: { - description: "The amount to spend", + a: { + alias: ["amount"], + description: "The amount to spend.", type: "string", required: true, }, - decimals: { - description: - "The decimal precision used by the contract. The amount option will be multiplied by (10 ** decimals). For example, if amount is 100 and decimals is 18, then the result will be 100000000000000000000", - type: "number", - default: 18, - }, - destination: { - description: "The address to send the funds to", - type: "string", + d: decimalsOption, + D: { + alias: ["destination"], + description: "The address to send the funds to.", + type: "hex", required: true, }, }, @@ -36,21 +35,16 @@ export default command({ prompt: "Enter destination address", }); - const encoded = encodeHighSpend(amount, decimals, destination); + const encoded = encodeFunctionData({ + abi: Spender.abi, + fn: "smallSpend", + args: { + amount: parseUnits(amount, decimals), + destination, + }, + }); signale.success(encoded); next(encoded); }, }); - -export function encodeHighSpend( - amount: string, - decimals: number, - destination: string, -): string { - return encodeFunctionData({ - abi: Spender.abi, - functionName: "smallSpend", - args: [parseUnits(amount, decimals), destination as `0x${string}`], - }); -} diff --git a/packages/council-cli/src/commands/encode/spender/medium-spend.ts b/packages/council-cli/src/commands/encode/spender/medium-spend.ts index 2555db1a..bdc7c907 100644 --- a/packages/council-cli/src/commands/encode/spender/medium-spend.ts +++ b/packages/council-cli/src/commands/encode/spender/medium-spend.ts @@ -1,26 +1,25 @@ import { Spender } from "@delvtech/council-artifacts/Spender"; +import { encodeFunctionData } from "@delvtech/drift"; import { command } from "clide-js"; import signale from "signale"; -import { encodeFunctionData, parseUnits } from "viem"; +import { parseUnits } from "viem"; +import { decimalsOption } from "../../../options/decimals.js"; export default command({ description: "Encode call data for a Spender.mediumSpend", options: { - amount: { - description: "The amount to spend", + a: { + alias: ["amount"], + description: "The amount to spend.", type: "string", required: true, }, - decimals: { - description: - "The decimal precision used by the contract. The amount option will be multiplied by (10 ** decimals). For example, if amount is 100 and decimals is 18, then the result will be 100000000000000000000", - type: "number", - default: 18, - }, - destination: { - description: "The address to send the funds to", - type: "string", + d: decimalsOption, + D: { + alias: ["destination"], + description: "The address to send the funds to.", + type: "hex", required: true, }, }, @@ -36,21 +35,16 @@ export default command({ prompt: "Enter destination address", }); - const encoded = encodeMediumSpend(amount, decimals, destination); + const encoded = encodeFunctionData({ + abi: Spender.abi, + fn: "mediumSpend", + args: { + amount: parseUnits(amount, decimals), + destination, + }, + }); signale.success(encoded); next(encoded); }, }); - -export function encodeMediumSpend( - amount: string, - decimals: number, - destination: string, -): string { - return encodeFunctionData({ - abi: Spender.abi, - functionName: "mediumSpend", - args: [parseUnits(amount, decimals), destination as `0x${string}`], - }); -} diff --git a/packages/council-cli/src/commands/encode/spender/remove-token.ts b/packages/council-cli/src/commands/encode/spender/remove-token.ts index 8504bc3e..86545d27 100644 --- a/packages/council-cli/src/commands/encode/spender/remove-token.ts +++ b/packages/council-cli/src/commands/encode/spender/remove-token.ts @@ -1,27 +1,26 @@ import { Spender } from "@delvtech/council-artifacts/Spender"; +import { encodeFunctionData } from "@delvtech/drift"; import { command } from "clide-js"; import signale from "signale"; -import { encodeFunctionData, parseUnits } from "viem"; +import { parseUnits } from "viem"; +import { decimalsOption } from "../../../options/decimals.js"; export default command({ description: "Encode call data for a Spender.removeToken", options: { - amount: { + a: { + alias: ["amount"], description: "The amount of tokens to remove (max uint256 for the full balance)", - type: "string", + type: "hex", required: true, }, - decimals: { - description: - "The decimal precision used by the contract. The amount option will be multiplied by (10 ** decimals). For example, if amount is 100 and decimals is 18, then the result will be 100000000000000000000", - type: "number", - default: 18, - }, - destination: { - description: "The address to send the funds to", - type: "string", + d: decimalsOption, + D: { + alias: ["destination"], + description: "The address to send the funds to.", + type: "hex", required: true, }, }, @@ -37,21 +36,16 @@ export default command({ prompt: "Enter destination address", }); - const encoded = encodeRemoveToken(amount, decimals, destination); + const encoded = encodeFunctionData({ + abi: Spender.abi, + fn: "removeToken", + args: { + amount: parseUnits(amount, decimals), + destination, + }, + }); signale.success(encoded); next(encoded); }, }); - -export function encodeRemoveToken( - amount: string, - decimals: number, - destination: string, -): string { - return encodeFunctionData({ - abi: Spender.abi, - functionName: "removeToken", - args: [parseUnits(amount, decimals), destination as `0x${string}`], - }); -} diff --git a/packages/council-cli/src/commands/encode/spender/set-limits.ts b/packages/council-cli/src/commands/encode/spender/set-limits.ts index 7c679162..a6e01e3f 100644 --- a/packages/council-cli/src/commands/encode/spender/set-limits.ts +++ b/packages/council-cli/src/commands/encode/spender/set-limits.ts @@ -1,7 +1,9 @@ import { Spender } from "@delvtech/council-artifacts/Spender"; +import { encodeFunctionData } from "@delvtech/drift"; import { command } from "clide-js"; import signale from "signale"; -import { encodeFunctionData, parseUnits } from "viem"; +import { parseUnits } from "viem"; +import { decimalsOption } from "../../../options/decimals.js"; export default command({ description: "Encode call data for a Spender.setLimits", @@ -25,12 +27,7 @@ export default command({ type: "string", required: true, }, - decimals: { - description: - "The decimal precision used by the contract. The amount options will be multiplied by (10 ** decimals). For example, if small is 100 and decimals is 18, then the result will be 100000000000000000000", - type: "number", - default: 18, - }, + d: decimalsOption, }, handler: async ({ options, next }) => { @@ -48,28 +45,19 @@ export default command({ const decimals = await options.decimals(); - const encoded = encodeSetLimits(small, medium, high, decimals); + const encoded = encodeFunctionData({ + abi: Spender.abi, + fn: "setLimits", + args: { + limits: [ + parseUnits(small, decimals), + parseUnits(medium, decimals), + parseUnits(high, decimals), + ], + }, + }); signale.success(encoded); next(encoded); }, }); - -export function encodeSetLimits( - small: string, - medium: string, - high: string, - decimals: number, -): string { - return encodeFunctionData({ - abi: Spender.abi, - functionName: "setLimits", - args: [ - [ - parseUnits(small, decimals), - parseUnits(medium, decimals), - parseUnits(high, decimals), - ], - ], - }); -} diff --git a/packages/council-cli/src/commands/encode/spender/small-spend.ts b/packages/council-cli/src/commands/encode/spender/small-spend.ts index b0bf0efc..cd75286e 100644 --- a/packages/council-cli/src/commands/encode/spender/small-spend.ts +++ b/packages/council-cli/src/commands/encode/spender/small-spend.ts @@ -1,26 +1,25 @@ import { Spender } from "@delvtech/council-artifacts/Spender"; +import { encodeFunctionData } from "@delvtech/drift"; import { command } from "clide-js"; import signale from "signale"; -import { encodeFunctionData, parseUnits } from "viem"; +import { parseUnits } from "viem"; +import { decimalsOption } from "../../../options/decimals.js"; export default command({ description: "Encode call data for a Spender.smallSpend", options: { - amount: { - description: "The amount to spend", + a: { + alias: ["amount"], + description: "The amount to spend.", type: "string", required: true, }, - decimals: { - description: - "The decimal precision used by the contract. The amount option will be multiplied by (10 ** decimals). For example, if amount is 100 and decimals is 18, then the result will be 100000000000000000000", - type: "number", - default: 18, - }, - destination: { - description: "The address to send the funds to", - type: "string", + d: decimalsOption, + D: { + alias: ["destination"], + description: "The address to send the funds to.", + type: "hex", required: true, }, }, @@ -36,21 +35,16 @@ export default command({ prompt: "Enter destination address", }); - const encoded = encodeSmallSpend(amount, decimals, destination); + const encoded = encodeFunctionData({ + abi: Spender.abi, + fn: "smallSpend", + args: { + amount: parseUnits(amount, decimals), + destination, + }, + }); signale.success(encoded); next(encoded); }, }); - -export function encodeSmallSpend( - amount: string, - decimals: number, - destination: string, -): string { - return encodeFunctionData({ - abi: Spender.abi, - functionName: "smallSpend", - args: [parseUnits(amount, decimals), destination as `0x${string}`], - }); -} diff --git a/packages/council-cli/src/commands/encode/timelock/execute.ts b/packages/council-cli/src/commands/encode/timelock/execute.ts index 6940d8b4..945f3bbf 100644 --- a/packages/council-cli/src/commands/encode/timelock/execute.ts +++ b/packages/council-cli/src/commands/encode/timelock/execute.ts @@ -1,21 +1,23 @@ import { Timelock } from "@delvtech/council-artifacts/Timelock"; +import { encodeFunctionData } from "@delvtech/drift"; import { command } from "clide-js"; import signale from "signale"; -import { encodeFunctionData } from "viem"; export default command({ description: "Encode call data for Timelock.execute", options: { - targets: { - description: "A list of target addresses the timelock contract will call", - type: "array", + t: { + alias: ["targets"], + description: + "A list of target addresses the timelock contract will call.", + type: "hexArray", required: true, }, - data: { + d: { alias: ["calldatas"], - description: "Encoded call data for each target", - type: "array", + description: "Encoded call data for each target.", + type: "hexArray", required: true, }, }, @@ -29,17 +31,13 @@ export default command({ prompt: "Enter call data for each target", }); - const encoded = encodeExecute(targets, calldatas); + const encoded = encodeFunctionData({ + abi: Timelock.abi, + fn: "execute", + args: { calldatas, targets }, + }); signale.success(encoded); next(encoded); }, }); - -export function encodeExecute(targets: string[], calldatas: string[]): string { - return encodeFunctionData({ - abi: Timelock.abi, - functionName: "execute", - args: [targets as `0x${string}`[], calldatas as `0x${string}`[]], - }); -} diff --git a/packages/council-cli/src/commands/encode/timelock/increase-time.ts b/packages/council-cli/src/commands/encode/timelock/increase-time.ts index 0e68e034..eccdcfa5 100644 --- a/packages/council-cli/src/commands/encode/timelock/increase-time.ts +++ b/packages/council-cli/src/commands/encode/timelock/increase-time.ts @@ -1,18 +1,16 @@ import { Timelock } from "@delvtech/council-artifacts/Timelock"; +import { encodeFunctionData } from "@delvtech/drift"; import { command } from "clide-js"; import signale from "signale"; -import { - callHashOptions, - getCallHash, -} from "src/reusable-options/call-hash.js"; -import { encodeFunctionData } from "viem"; +import { callHashOptions, getCallHash } from "../../../options/call-hash.js"; export default command({ description: "Encode call data for Timelock.increaseTime", options: { - time: { - description: "The amount of time (in seconds) to increase by", + t: { + alias: ["time"], + description: "The amount of time (in seconds) to increase by.", type: "number", required: true, }, @@ -30,20 +28,16 @@ export default command({ options.calldatas, ); - const encoded = encodeIncreaseTime(timeValue.toString(), callHash); + const encoded = encodeFunctionData({ + abi: Timelock.abi, + fn: "increaseTime", + args: { + callHash, + timeValue: BigInt(timeValue), + }, + }); signale.success(encoded); next(encoded); }, }); - -export function encodeIncreaseTime( - timeValue: string, - callHash: string, -): string { - return encodeFunctionData({ - abi: Timelock.abi, - functionName: "increaseTime", - args: [BigInt(timeValue), callHash as `0x${string}`], - }); -} diff --git a/packages/council-cli/src/commands/encode/timelock/register-call.ts b/packages/council-cli/src/commands/encode/timelock/register-call.ts index adcc2b8e..0cd03482 100644 --- a/packages/council-cli/src/commands/encode/timelock/register-call.ts +++ b/packages/council-cli/src/commands/encode/timelock/register-call.ts @@ -1,11 +1,8 @@ import { Timelock } from "@delvtech/council-artifacts/Timelock"; +import { encodeFunctionData } from "@delvtech/drift"; import { command } from "clide-js"; import signale from "signale"; -import { - callHashOptions, - getCallHash, -} from "src/reusable-options/call-hash.js"; -import { encodeFunctionData } from "viem"; +import { callHashOptions, getCallHash } from "../../../options/call-hash.js"; export default command({ description: "Encode call data for Timelock.registerCall", @@ -19,17 +16,13 @@ export default command({ options.calldatas, ); - const encoded = encodeRegisterCall(callHash); + const encoded = encodeFunctionData({ + abi: Timelock.abi, + fn: "registerCall", + args: { callHash }, + }); signale.success(encoded); next(encoded); }, }); - -export function encodeRegisterCall(callHash: string): string { - return encodeFunctionData({ - abi: Timelock.abi, - functionName: "registerCall", - args: [callHash as `0x${string}`], - }); -} diff --git a/packages/council-cli/src/commands/encode/timelock/set-wait-time.ts b/packages/council-cli/src/commands/encode/timelock/set-wait-time.ts index d443a491..088e330d 100644 --- a/packages/council-cli/src/commands/encode/timelock/set-wait-time.ts +++ b/packages/council-cli/src/commands/encode/timelock/set-wait-time.ts @@ -1,13 +1,13 @@ import { Timelock } from "@delvtech/council-artifacts/Timelock"; +import { encodeFunctionData } from "@delvtech/drift"; import { command } from "clide-js"; import signale from "signale"; -import { encodeFunctionData } from "viem"; export default command({ description: "Encode call data for Timelock.setWaitTime", options: { - time: { + t: { alias: ["wait-time"], description: "The new wait time (in seconds)", type: "number", @@ -16,21 +16,17 @@ export default command({ }, handler: async ({ options, next }) => { - const time = await options.time({ + const waitTime = await options.waitTime({ prompt: "Enter new wait time (in seconds)", }); - const encoded = encodeSetWaitTime(time.toString()); + const encoded = encodeFunctionData({ + abi: Timelock.abi, + fn: "setWaitTime", + args: { _waitTime: BigInt(waitTime) }, + }); signale.success(encoded); next(encoded); }, }); - -export function encodeSetWaitTime(waitTime: string): string { - return encodeFunctionData({ - abi: Timelock.abi, - functionName: "setWaitTime", - args: [BigInt(waitTime)], - }); -} diff --git a/packages/council-cli/src/commands/encode/timelock/stop-call.ts b/packages/council-cli/src/commands/encode/timelock/stop-call.ts index 41d34155..78bae98f 100644 --- a/packages/council-cli/src/commands/encode/timelock/stop-call.ts +++ b/packages/council-cli/src/commands/encode/timelock/stop-call.ts @@ -1,11 +1,8 @@ import { Timelock } from "@delvtech/council-artifacts/Timelock"; +import { encodeFunctionData } from "@delvtech/drift"; import { command } from "clide-js"; import signale from "signale"; -import { - callHashOptions, - getCallHash, -} from "src/reusable-options/call-hash.js"; -import { encodeFunctionData } from "viem"; +import { callHashOptions, getCallHash } from "../../../options/call-hash.js"; export default command({ description: "Encode call data for Timelock.stopCall", @@ -19,17 +16,13 @@ export default command({ options.calldatas, ); - const encoded = encodeStopCall(callHash); + const encoded = encodeFunctionData({ + abi: Timelock.abi, + fn: "stopCall", + args: { callHash }, + }); signale.success(encoded); next(encoded); }, }); - -export function encodeStopCall(callHash: string): string { - return encodeFunctionData({ - abi: Timelock.abi, - functionName: "stopCall", - args: [callHash as `0x${string}`], - }); -} diff --git a/packages/council-cli/src/commands/encode/treasury/approve.ts b/packages/council-cli/src/commands/encode/treasury/approve.ts index a9b7808c..001373bd 100644 --- a/packages/council-cli/src/commands/encode/treasury/approve.ts +++ b/packages/council-cli/src/commands/encode/treasury/approve.ts @@ -1,31 +1,31 @@ import { Treasury } from "@delvtech/council-artifacts/Treasury"; +import { encodeFunctionData } from "@delvtech/drift"; import { command } from "clide-js"; import signale from "signale"; -import { encodeFunctionData, parseUnits } from "viem"; +import { parseUnits } from "viem"; +import { decimalsOption } from "../../../options/decimals.js"; export default command({ description: "Encode call data for Treasury.approve", options: { - token: { - description: `The address of the token to approve`, - type: "string", + t: { + alias: ["token"], + description: "The address of the token to approve.", + type: "hex", required: true, }, - amount: { - description: "The amount to approve", + a: { + alias: ["amount"], + description: "The amount to approve.", type: "string", required: true, }, - decimals: { - description: - "The decimal precision used by the contract. The amount option will be multiplied by (10 ** decimals). For example, if amount is 100 and decimals is 18, then the result will be 100000000000000000000", - type: "number", - default: 18, - }, - spender: { - description: "The address to approve", - type: "string", + d: decimalsOption, + s: { + alias: ["spender"], + description: "The address to approve.", + type: "hex", required: true, }, }, @@ -45,26 +45,17 @@ export default command({ prompt: "Enter spender address", }); - const encoded = encodeApprove(token, amount, decimals, spender); + const encoded = encodeFunctionData({ + abi: Treasury.abi, + fn: "approve", + args: { + _amount: parseUnits(amount, decimals), + _spender: spender, + _token: token, + }, + }); signale.success(encoded); next(encoded); }, }); - -export function encodeApprove( - token: string, - amount: string, - decimals: number, - spender: string, -): string { - return encodeFunctionData({ - abi: Treasury.abi, - functionName: "approve", - args: [ - token as `0x${string}`, - spender as `0x${string}`, - parseUnits(amount, decimals), - ], - }); -} diff --git a/packages/council-cli/src/commands/encode/treasury/generic-call.ts b/packages/council-cli/src/commands/encode/treasury/generic-call.ts index a2f1030f..c94259d0 100644 --- a/packages/council-cli/src/commands/encode/treasury/generic-call.ts +++ b/packages/council-cli/src/commands/encode/treasury/generic-call.ts @@ -1,21 +1,22 @@ import { Treasury } from "@delvtech/council-artifacts/Treasury"; +import { encodeFunctionData } from "@delvtech/drift"; import { command } from "clide-js"; import signale from "signale"; -import { encodeFunctionData } from "viem"; export default command({ description: "Encode call data for Treasury.genericCall", options: { - target: { - description: `The address of the target contract`, - type: "string", + t: { + alias: ["target"], + description: `The address of the target contract.`, + type: "hex", required: true, }, - data: { + d: { alias: ["calldata", "call-data"], - description: "The encoded call data", - type: "string", + description: "The encoded call data.", + type: "hex", required: true, }, }, @@ -25,21 +26,20 @@ export default command({ prompt: "Enter target address", }); - const data = await options.data({ + const calldata = await options.calldata({ prompt: "Enter call data", }); - const encoded = encodeGenericCall(target, data); + const encoded = encodeFunctionData({ + abi: Treasury.abi, + fn: "genericCall", + args: { + _callData: calldata, + _target: target, + }, + }); signale.success(encoded); next(encoded); }, }); - -export function encodeGenericCall(target: string, data: string): string { - return encodeFunctionData({ - abi: Treasury.abi, - functionName: "genericCall", - args: [target as `0x${string}`, data as `0x${string}`], - }); -} diff --git a/packages/council-cli/src/commands/encode/treasury/send-funds.ts b/packages/council-cli/src/commands/encode/treasury/send-funds.ts index 68d2cb2a..5c3c32d7 100644 --- a/packages/council-cli/src/commands/encode/treasury/send-funds.ts +++ b/packages/council-cli/src/commands/encode/treasury/send-funds.ts @@ -1,7 +1,9 @@ import { Treasury } from "@delvtech/council-artifacts/Treasury"; +import { encodeFunctionData } from "@delvtech/drift"; import { command } from "clide-js"; import signale from "signale"; -import { encodeFunctionData, parseUnits } from "viem"; +import { parseUnits } from "viem"; +import { decimalsOption } from "../../../options/decimals.js"; const ETH_CONSTANT = "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE"; @@ -9,25 +11,23 @@ export default command({ description: "Encode call data for Treasury.sendFunds", options: { - token: { - description: `The address of token to send (${ETH_CONSTANT} to send ETH)`, - type: "string", + t: { + alias: ["token"], + description: `The address of token to send (${ETH_CONSTANT} to send ETH).`, + type: "hex", required: true, }, - amount: { - description: "The amount to send", + a: { + alias: ["amount"], + description: "The amount to send.", type: "string", required: true, }, - decimals: { - description: - "The decimal precision used by the contract. The amount option will be multiplied by (10 ** decimals). For example, if amount is 100 and decimals is 18, then the result will be 100000000000000000000", - type: "number", - default: 18, - }, - recipient: { - description: "The address to send the funds to", - type: "string", + d: decimalsOption, + r: { + alias: ["recipient"], + description: "The address to send the funds to.", + type: "hex", required: true, }, }, @@ -50,26 +50,17 @@ export default command({ prompt: "Enter recipient address", }); - const encoded = encodeSendFunds(token, amount, decimals, recipient); + const encoded = encodeFunctionData({ + abi: Treasury.abi, + fn: "sendFunds", + args: { + _amount: parseUnits(amount, decimals), + _recipient: recipient, + _token: token, + }, + }); signale.success(encoded); next(encoded); }, }); - -export function encodeSendFunds( - token: string, - amount: string, - decimals: number, - recipient: string, -): string { - return encodeFunctionData({ - abi: Treasury.abi, - functionName: "sendFunds", - args: [ - token as `0x${string}`, - parseUnits(amount, decimals), - recipient as `0x${string}`, - ], - }); -} diff --git a/packages/council-cli/src/commands/encode/vesting-vault/accept-grant.ts b/packages/council-cli/src/commands/encode/vesting-vault/accept-grant.ts index ed8ed110..8552b24e 100644 --- a/packages/council-cli/src/commands/encode/vesting-vault/accept-grant.ts +++ b/packages/council-cli/src/commands/encode/vesting-vault/accept-grant.ts @@ -1,21 +1,18 @@ import { VestingVault } from "@delvtech/council-artifacts/VestingVault"; +import { encodeFunctionData } from "@delvtech/drift"; import { command } from "clide-js"; import signale from "signale"; -import { encodeFunctionData } from "viem"; export default command({ description: "Encode call data for VestingVault.acceptGrant", handler: ({ next }) => { - const encoded = encodeAcceptGrant(); + const encoded = encodeFunctionData({ + abi: VestingVault.abi, + fn: "acceptGrant", + }); + signale.success(encoded); next(encoded); }, }); - -export function encodeAcceptGrant(): string { - return encodeFunctionData({ - abi: VestingVault.abi, - functionName: "acceptGrant", - }); -} diff --git a/packages/council-cli/src/commands/encode/vesting-vault/add-grant-and-delegate.ts b/packages/council-cli/src/commands/encode/vesting-vault/add-grant-and-delegate.ts index 788ca3c3..0e1edb3c 100644 --- a/packages/council-cli/src/commands/encode/vesting-vault/add-grant-and-delegate.ts +++ b/packages/council-cli/src/commands/encode/vesting-vault/add-grant-and-delegate.ts @@ -1,51 +1,53 @@ import { VestingVault } from "@delvtech/council-artifacts/VestingVault"; +import { encodeFunctionData } from "@delvtech/drift"; import { command } from "clide-js"; import signale from "signale"; -import { encodeFunctionData, parseUnits } from "viem"; +import { parseUnits } from "viem"; +import { decimalsOption } from "../../../options/decimals.js"; export default command({ description: "Encode call data for VestingVault.addGrantAndDelegate", options: { - who: { - alias: ["address"], + w: { + alias: ["who", "address"], description: "The grant recipient", - type: "string", + type: "hex", required: true, }, - amount: { - description: "The total grant value", + a: { + alias: ["amount"], + description: "The total grant value.", type: "string", required: true, }, - decimals: { - description: - "The decimal precision used by the contract. The amount option will be multiplied by (10 ** decimals). For example, if amount is 100 and decimals is 18, then the result will be 100000000000000000000", - type: "number", - default: 18, - }, - "start-time": { + d: decimalsOption, + t: { + alias: ["start-time"], description: - "An optional non standard start time (in seconds). If set to zero then the start time will be made the block this is executed in", + "An optional non standard start time (in seconds). If set to zero then the start time will be made the block this is executed in.", type: "number", default: 0, }, - expiration: { + e: { + alias: ["expiration"], description: - "The timestamp (in seconds) when the grant ends and all tokens are unlocked", + "The timestamp (in seconds) when the grant ends and all tokens are unlocked.", type: "number", required: true, }, - cliff: { + c: { + alias: ["cliff"], description: - "The timestamp (in seconds) when the grant begins vesting. No tokens will be unlocked until this timestamp has been reached", + "The timestamp (in seconds) when the grant begins vesting. No tokens will be unlocked until this timestamp has been reached.", type: "number", required: true, }, - delegate: { + D: { + alias: ["delegate", "delegatee"], description: - "The address to delegate the resulting voting power to if the recipient doesn't already have a delegate", - type: "string", + "The address to delegate the resulting voting power to if the recipient doesn't already have a delegate.", + type: "hex", required: true, }, }, @@ -71,54 +73,24 @@ export default command({ prompt: "Enter cliff timestamp (in seconds)", }); - const delegate = await options.delegate({ - prompt: "Enter delegate address", + const delegatee = await options.delegatee({ + prompt: "Enter delegatee address", }); - const encoded = encodeAddGrantAndDelegate({ - who, - amount, - decimals, - startTime, - expiration, - cliff, - delegate, + const encoded = encodeFunctionData({ + abi: VestingVault.abi, + fn: "addGrantAndDelegate", + args: { + _amount: parseUnits(amount, decimals), + _cliff: BigInt(cliff), + _delegatee: delegatee, + _expiration: BigInt(expiration), + _startTime: BigInt(startTime), + _who: who, + }, }); signale.success(encoded); next(encoded); }, }); - -interface EncodeAddGrantAndDelegateOptions { - who: string; - amount: string; - decimals: number; - expiration: number; - cliff: number; - delegate: string; - startTime?: number; -} - -export function encodeAddGrantAndDelegate({ - who, - amount, - decimals, - startTime = 0, - expiration, - cliff, - delegate, -}: EncodeAddGrantAndDelegateOptions): string { - return encodeFunctionData({ - abi: VestingVault.abi, - functionName: "addGrantAndDelegate", - args: [ - who as `0x${string}`, - parseUnits(amount, decimals), - BigInt(startTime), - BigInt(expiration), - BigInt(cliff), - delegate as `0x${string}`, - ], - }); -} diff --git a/packages/council-cli/src/commands/encode/vesting-vault/change-delegation.ts b/packages/council-cli/src/commands/encode/vesting-vault/change-delegation.ts index 1361e6ca..da898330 100644 --- a/packages/council-cli/src/commands/encode/vesting-vault/change-delegation.ts +++ b/packages/council-cli/src/commands/encode/vesting-vault/change-delegation.ts @@ -1,36 +1,32 @@ import { VestingVault } from "@delvtech/council-artifacts/VestingVault"; +import { encodeFunctionData } from "@delvtech/drift"; import { command } from "clide-js"; import signale from "signale"; -import { encodeFunctionData } from "viem"; export default command({ description: "Encode call data for VestingVault.changeDelegation", options: { - address: { - alias: ["new-delegate", "newDelegate"], - description: "The amount of tokens to deposit", - type: "string", + d: { + alias: ["to", "new-delegate"], + description: "The amount of tokens to deposit.", + type: "hex", required: true, }, }, handler: async ({ options, next }) => { - const address = await options.address({ + const to = await options.to({ prompt: "Enter new delegate address", }); - const encoded = encodeChangeDelegation(address); + const encoded = encodeFunctionData({ + abi: VestingVault.abi, + fn: "delegate", + args: { _to: to }, + }); signale.success(encoded); next(encoded); }, }); - -export function encodeChangeDelegation(address: string): string { - return encodeFunctionData({ - abi: VestingVault.abi, - functionName: "delegate", - args: [address as `0x${string}`], - }); -} diff --git a/packages/council-cli/src/commands/encode/vesting-vault/change-unvested-multiplier.ts b/packages/council-cli/src/commands/encode/vesting-vault/change-unvested-multiplier.ts index ef04bbaa..e9a44d69 100644 --- a/packages/council-cli/src/commands/encode/vesting-vault/change-unvested-multiplier.ts +++ b/packages/council-cli/src/commands/encode/vesting-vault/change-unvested-multiplier.ts @@ -1,14 +1,15 @@ import { VestingVault } from "@delvtech/council-artifacts/VestingVault"; +import { encodeFunctionData } from "@delvtech/drift"; import { command } from "clide-js"; import signale from "signale"; -import { encodeFunctionData } from "viem"; export default command({ description: "Encode call data for VestingVault.changeUnvestedMultiplier", options: { - multiplier: { - description: "The new multiplier as a percentage", + m: { + alias: ["multiplier"], + description: "The new multiplier as a percentage.", type: "number", required: true, }, @@ -19,17 +20,13 @@ export default command({ prompt: "Enter new multiplier (%)", }); - const encoded = encodeChangeUnvestedMultiplier(multiplier); + const encoded = encodeFunctionData({ + abi: VestingVault.abi, + fn: "changeUnvestedMultiplier", + args: { _multiplier: BigInt(multiplier) }, + }); signale.success(encoded); next(encoded); }, }); - -export function encodeChangeUnvestedMultiplier(multiplier: number): string { - return encodeFunctionData({ - abi: VestingVault.abi, - functionName: "changeUnvestedMultiplier", - args: [BigInt(multiplier)], - }); -} diff --git a/packages/council-cli/src/commands/encode/vesting-vault/delegate.ts b/packages/council-cli/src/commands/encode/vesting-vault/delegate.ts index 948d40e0..0b840a2a 100644 --- a/packages/council-cli/src/commands/encode/vesting-vault/delegate.ts +++ b/packages/council-cli/src/commands/encode/vesting-vault/delegate.ts @@ -1,36 +1,32 @@ import { VestingVault } from "@delvtech/council-artifacts/VestingVault"; +import { encodeFunctionData } from "@delvtech/drift"; import { command } from "clide-js"; import signale from "signale"; -import { encodeFunctionData } from "viem"; export default command({ description: "Encode call data for VestingVault.delegate", options: { - address: { - alias: ["to"], - description: "The address to delegate to", - type: "string", + t: { + alias: ["to", "address"], + description: "The address to delegate to.", + type: "hex", required: true, }, }, handler: async ({ options, next }) => { - const address = await options.address({ + const to = await options.to({ prompt: "Enter new delegate address", }); - const encoded = encodeDelegate(address); + const encoded = encodeFunctionData({ + abi: VestingVault.abi, + fn: "delegate", + args: { _to: to }, + }); signale.success(encoded); next(encoded); }, }); - -export function encodeDelegate(address: string): string { - return encodeFunctionData({ - abi: VestingVault.abi, - functionName: "delegate", - args: [address as `0x${string}`], - }); -} diff --git a/packages/council-cli/src/commands/encode/vesting-vault/deposit.ts b/packages/council-cli/src/commands/encode/vesting-vault/deposit.ts index aaf848e3..901fa265 100644 --- a/packages/council-cli/src/commands/encode/vesting-vault/deposit.ts +++ b/packages/council-cli/src/commands/encode/vesting-vault/deposit.ts @@ -1,23 +1,21 @@ import { VestingVault } from "@delvtech/council-artifacts/VestingVault"; +import { encodeFunctionData } from "@delvtech/drift"; import { command } from "clide-js"; import signale from "signale"; -import { encodeFunctionData, parseUnits } from "viem"; +import { parseUnits } from "viem"; +import { decimalsOption } from "../../../options/decimals.js"; export default command({ description: "Encode call data for VestingVault.deposit", options: { - amount: { - description: "The amount of tokens to deposit", + a: { + alias: ["amount"], + description: "The amount of tokens to deposit.", type: "string", required: true, }, - decimals: { - description: - "The decimal precision used by the contract. The amount option will be multiplied by (10 ** decimals). For example, if amount is 100 and decimals is 18, then the result will be 100000000000000000000", - type: "number", - default: 18, - }, + d: decimalsOption, }, handler: async ({ options, next }) => { @@ -27,17 +25,13 @@ export default command({ const decimals = await options.decimals(); - const encoded = encodeDeposit(amount, decimals); + const encoded = encodeFunctionData({ + abi: VestingVault.abi, + fn: "deposit", + args: { _amount: parseUnits(amount, decimals) }, + }); signale.success(encoded); next(encoded); }, }); - -export function encodeDeposit(amount: string, decimals: number): string { - return encodeFunctionData({ - abi: VestingVault.abi, - functionName: "deposit", - args: [parseUnits(amount, decimals)], - }); -} diff --git a/packages/council-cli/src/commands/encode/vesting-vault/initialize.ts b/packages/council-cli/src/commands/encode/vesting-vault/initialize.ts index 2adbd0db..1a9c12a5 100644 --- a/packages/council-cli/src/commands/encode/vesting-vault/initialize.ts +++ b/packages/council-cli/src/commands/encode/vesting-vault/initialize.ts @@ -1,21 +1,23 @@ import { VestingVault } from "@delvtech/council-artifacts/VestingVault"; +import { encodeFunctionData } from "@delvtech/drift"; import { command } from "clide-js"; import signale from "signale"; -import { encodeFunctionData } from "viem"; export default command({ description: "Encode call data for VestingVault.initialize", options: { - manager: { - description: "The address that will be able add and remove grants", - type: "string", + m: { + alias: ["manager"], + description: "The address that will be able add and remove grants.", + type: "hex", required: true, }, - timelock: { + t: { + alias: ["timelock"], description: - "The address that will be able to change the unvested multiplier, the manager, and the timelock", - type: "string", + "The address that will be able to change the unvested multiplier, the manager, and the timelock.", + type: "hex", required: true, }, }, @@ -29,17 +31,16 @@ export default command({ prompt: "Enter timelock address", }); - const encoded = encodeInitialize(manager, timelock); + const encoded = encodeFunctionData({ + abi: VestingVault.abi, + fn: "initialize", + args: { + manager_: manager, + timelock_: timelock, + }, + }); signale.success(encoded); next(encoded); }, }); - -export function encodeInitialize(manager: string, timelock: string): string { - return encodeFunctionData({ - abi: VestingVault.abi, - functionName: "initialize", - args: [manager as `0x${string}`, timelock as `0x${string}`], - }); -} diff --git a/packages/council-cli/src/commands/encode/vesting-vault/remove-grant.ts b/packages/council-cli/src/commands/encode/vesting-vault/remove-grant.ts index 4466d6ae..fe592717 100644 --- a/packages/council-cli/src/commands/encode/vesting-vault/remove-grant.ts +++ b/packages/council-cli/src/commands/encode/vesting-vault/remove-grant.ts @@ -1,36 +1,32 @@ import { VestingVault } from "@delvtech/council-artifacts/VestingVault"; +import { encodeFunctionData } from "@delvtech/drift"; import { command } from "clide-js"; import signale from "signale"; -import { encodeFunctionData } from "viem"; export default command({ description: "Encode call data for VestingVault.removeGrant", options: { - address: { - alias: ["who"], - description: "The grant owner", - type: "string", + w: { + alias: ["who", "address"], + description: "The grant owner.", + type: "hex", required: true, }, }, handler: async ({ options, next }) => { const who = await options.who({ - prompt: "Enter owner address", + prompt: "Enter grantee address", }); - const encoded = encodeRemoveGrant(who); + const encoded = encodeFunctionData({ + abi: VestingVault.abi, + fn: "removeGrant", + args: { _who: who }, + }); signale.success(encoded); next(encoded); }, }); - -export function encodeRemoveGrant(who: string): string { - return encodeFunctionData({ - abi: VestingVault.abi, - functionName: "removeGrant", - args: [who as `0x${string}`], - }); -} diff --git a/packages/council-cli/src/commands/encode/vesting-vault/set-manager.ts b/packages/council-cli/src/commands/encode/vesting-vault/set-manager.ts index d133205c..8ffefbe3 100644 --- a/packages/council-cli/src/commands/encode/vesting-vault/set-manager.ts +++ b/packages/council-cli/src/commands/encode/vesting-vault/set-manager.ts @@ -1,36 +1,32 @@ import { VestingVault } from "@delvtech/council-artifacts/VestingVault"; +import { encodeFunctionData } from "@delvtech/drift"; import { command } from "clide-js"; import signale from "signale"; -import { encodeFunctionData } from "viem"; export default command({ description: "Encode call data for VestingVault.setManager", options: { - address: { - alias: ["manager"], - description: "The new manager address", - type: "string", + m: { + alias: ["manager", "address"], + description: "The new manager address.", + type: "hex", required: true, }, }, handler: async ({ options, next }) => { - const address = await options.address({ + const manager = await options.manager({ prompt: "Enter new manager address", }); - const encoded = encodeSetManager(address); + const encoded = encodeFunctionData({ + abi: VestingVault.abi, + fn: "setManager", + args: { manager_: manager }, + }); signale.success(encoded); next(encoded); }, }); - -export function encodeSetManager(address: string): string { - return encodeFunctionData({ - abi: VestingVault.abi, - functionName: "setManager", - args: [address as `0x${string}`], - }); -} diff --git a/packages/council-cli/src/commands/encode/vesting-vault/set-timelock.ts b/packages/council-cli/src/commands/encode/vesting-vault/set-timelock.ts index d3979395..88b3a255 100644 --- a/packages/council-cli/src/commands/encode/vesting-vault/set-timelock.ts +++ b/packages/council-cli/src/commands/encode/vesting-vault/set-timelock.ts @@ -1,36 +1,32 @@ import { VestingVault } from "@delvtech/council-artifacts/VestingVault"; +import { encodeFunctionData } from "@delvtech/drift"; import { command } from "clide-js"; import signale from "signale"; -import { encodeFunctionData } from "viem"; export default command({ description: "Encode call data for VestingVault.setTimelock", options: { - address: { - alias: ["timelock"], - description: "The new timelock address", - type: "string", + t: { + alias: ["timelock", "address"], + description: "The new timelock address.", + type: "hex", required: true, }, }, handler: async ({ options, next }) => { - const address = await options.address({ + const timelock = await options.timelock({ prompt: "Enter new timelock address", }); - const encoded = encodeSetTimelock(address); + const encoded = encodeFunctionData({ + abi: VestingVault.abi, + fn: "setTimelock", + args: { timelock_: timelock }, + }); signale.success(encoded); next(encoded); }, }); - -export function encodeSetTimelock(address: string): string { - return encodeFunctionData({ - abi: VestingVault.abi, - functionName: "setTimelock", - args: [address as `0x${string}`], - }); -} diff --git a/packages/council-cli/src/commands/encode/vesting-vault/update-voting-power.ts b/packages/council-cli/src/commands/encode/vesting-vault/update-voting-power.ts index 00d343e3..0743c255 100644 --- a/packages/council-cli/src/commands/encode/vesting-vault/update-voting-power.ts +++ b/packages/council-cli/src/commands/encode/vesting-vault/update-voting-power.ts @@ -1,16 +1,16 @@ import { VestingVault } from "@delvtech/council-artifacts/VestingVault"; +import { encodeFunctionData } from "@delvtech/drift"; import { command } from "clide-js"; import signale from "signale"; -import { encodeFunctionData } from "viem"; export default command({ description: "Encode call data for VestingVault.updateVotingPower", options: { - address: { - alias: ["who"], - description: "The address to update voting power for", - type: "string", + w: { + alias: ["who", "address"], + description: "The address to update voting power for.", + type: "hex", required: true, }, }, @@ -20,17 +20,13 @@ export default command({ prompt: "Enter voter's address", }); - const encoded = encodeUpdateVotingPower(who); + const encoded = encodeFunctionData({ + abi: VestingVault.abi, + fn: "updateVotingPower", + args: { _who: who }, + }); signale.success(encoded); next(encoded); }, }); - -export function encodeUpdateVotingPower(who: string): string { - return encodeFunctionData({ - abi: VestingVault.abi, - functionName: "updateVotingPower", - args: [who as `0x${string}`], - }); -} diff --git a/packages/council-cli/src/commands/encode/vesting-vault/withdraw.ts b/packages/council-cli/src/commands/encode/vesting-vault/withdraw.ts index 776ec891..2ea9d1cb 100644 --- a/packages/council-cli/src/commands/encode/vesting-vault/withdraw.ts +++ b/packages/council-cli/src/commands/encode/vesting-vault/withdraw.ts @@ -1,26 +1,25 @@ import { VestingVault } from "@delvtech/council-artifacts/VestingVault"; +import { encodeFunctionData } from "@delvtech/drift"; import { command } from "clide-js"; import signale from "signale"; -import { encodeFunctionData, parseUnits } from "viem"; +import { parseUnits } from "viem"; +import { decimalsOption } from "../../../options/decimals.js"; export default command({ description: "Encode call data for VestingVault.withdraw", options: { - amount: { - description: "The amount of tokens to withdraw", + a: { + alias: ["amount"], + description: "The amount of tokens to withdraw.", type: "string", required: true, }, - decimals: { - description: - "The decimal precision used by the contract. The amount option will be multiplied by (10 ** decimals). For example, if amount is 100 and decimals is 18, then the result will be 100000000000000000000", - type: "number", - default: 18, - }, - recipient: { - description: "The address to withdraw to", - type: "string", + d: decimalsOption, + r: { + alias: ["recipient"], + description: "The address to withdraw to.", + type: "hex", required: true, }, }, @@ -39,21 +38,16 @@ export default command({ prompt: "Enter recipient address", }); - const encoded = encodeDeposit(amount, decimals, recipient); + const encoded = encodeFunctionData({ + abi: VestingVault.abi, + fn: "withdraw", + args: { + _amount: parseUnits(amount, decimals), + _recipient: recipient, + }, + }); signale.success(encoded); next(encoded); }, }); - -export function encodeDeposit( - amount: string, - decimals: number, - recipient: string, -): string { - return encodeFunctionData({ - abi: VestingVault.abi, - functionName: "withdraw", - args: [parseUnits(amount, decimals), recipient as `0x${string}`], - }); -} diff --git a/packages/council-cli/src/commands/locking-vault/approve.ts b/packages/council-cli/src/commands/locking-vault/approve.ts index 64501bd3..15ec8c85 100644 --- a/packages/council-cli/src/commands/locking-vault/approve.ts +++ b/packages/council-cli/src/commands/locking-vault/approve.ts @@ -1,41 +1,29 @@ -import { ReadWriteCouncil } from "@delvtech/council-viem"; import { command } from "clide-js"; import signale from "signale"; -import { - createPublicClient, - createWalletClient, - http, - maxUint256, - parseUnits, -} from "viem"; -import { - getWriteOptions, - writeOptions, -} from "../../reusable-options/writeOptions.js"; +import { maxUint256, parseUnits } from "viem"; +import { getWriteOptions, writeOptions } from "../../options/writeOptions.js"; export default command({ description: "Give a spending allowance to a LockingVault contract for the tokens it accepts.", options: { - address: { - describe: "The LockingVault contract address", - type: "string", + a: { + alias: ["address"], + describe: "The LockingVault contract address.", + type: "hex", required: true, }, - amount: { - describe: "The amount of tokens to approve", + A: { + alias: ["amount"], + describe: "The amount of tokens to approve as a decimal string.", type: "string", }, ...writeOptions, }, - handler: async ({ options, context, next }) => { - const { - account: signerAccount, - chain, - rpcUrl, - } = await getWriteOptions(options, context); + handler: async ({ options, client, next }) => { + const { council } = await getWriteOptions(options, client); const address = await options.address({ prompt: "Enter Locking Vault address", @@ -43,28 +31,24 @@ export default command({ const amount = await options.amount(); - const transport = http(rpcUrl); - const publicClient = createPublicClient({ chain, transport }); - const walletClient = createWalletClient({ - transport, - chain, - account: signerAccount, - }); - - const lockingVault = new ReadWriteCouncil({ - publicClient, - walletClient, - }).lockingVault(address as `0x${string}`); - + const lockingVault = council.lockingVault(address); const token = await lockingVault.getToken(); const decimals = await token.getDecimals(); const hash = await token.approve({ - amount: amount !== undefined ? parseUnits(amount, decimals) : maxUint256, - spender: lockingVault.address, + args: { + amount: + amount !== undefined ? parseUnits(amount, decimals) : maxUint256, + spender: lockingVault.address, + }, + options: { + onMined: () => { + signale.success(`Transaction success: ${hash}`); + }, + }, }); - signale.success(hash); + signale.pending(`Transaction submitted: ${hash}`); next(hash); }, }); diff --git a/packages/council-cli/src/commands/locking-vault/deposit.ts b/packages/council-cli/src/commands/locking-vault/deposit.ts index e648636c..0efb5594 100644 --- a/packages/council-cli/src/commands/locking-vault/deposit.ts +++ b/packages/council-cli/src/commands/locking-vault/deposit.ts @@ -1,39 +1,34 @@ -import { ReadWriteCouncil } from "@delvtech/council-viem"; +import { parseFixed } from "@delvtech/fixed-point-wasm"; import { command } from "clide-js"; import signale from "signale"; -import { createPublicClient, createWalletClient, http, parseUnits } from "viem"; -import { - getWriteOptions, - writeOptions, -} from "../../reusable-options/writeOptions.js"; +import { getWriteOptions, writeOptions } from "../../options/writeOptions.js"; export default command({ description: "Deposit tokens into a LockingVault.", options: { - address: { - describe: "The LockingVault contract address", - type: "string", + a: { + alias: ["address"], + describe: "The LockingVault contract address.", + type: "hex", required: true, }, - amount: { - describe: "The amount of tokens to deposit", + A: { + alias: ["amount"], + describe: "The amount of tokens to deposit as a decimal string.", type: "string", required: true, }, - account: { - describe: "The account to credit the deposit to", - type: "string", + c: { + alias: ["account"], + describe: "The account to credit the deposit to.", + type: "hex", }, ...writeOptions, }, - handler: async ({ options, context, next }) => { - const { - account: signerAccount, - chain, - rpcUrl, - } = await getWriteOptions(options, context); + handler: async ({ options, client, next }) => { + const { council } = await getWriteOptions(options, client); const address = await options.address({ prompt: "Enter Locking Vault address", @@ -48,28 +43,23 @@ export default command({ const account = await options.account(); - const transport = http(rpcUrl); - const publicClient = createPublicClient({ chain, transport }); - const walletClient = createWalletClient({ - transport, - chain, - account: signerAccount, - }); - - const lockingVault = new ReadWriteCouncil({ - publicClient, - walletClient, - }).lockingVault(address as `0x${string}`); - + const lockingVault = council.lockingVault(address); const token = await lockingVault.getToken(); const decimals = await token.getDecimals(); const hash = await lockingVault.deposit({ - amount: parseUnits(amount, decimals), - account: account as `0x${string}` | undefined, + args: { + amount: parseFixed(amount, decimals).bigint, + account, + }, + options: { + onMined: () => { + signale.success(`Transaction success: ${hash}`); + }, + }, }); - signale.success(hash); + signale.pending(`Transaction submitted: ${hash}`); next(hash); }, }); diff --git a/packages/council-cli/src/commands/locking-vault/get-balance.ts b/packages/council-cli/src/commands/locking-vault/get-balance.ts index 640845e4..e2a46888 100644 --- a/packages/council-cli/src/commands/locking-vault/get-balance.ts +++ b/packages/council-cli/src/commands/locking-vault/get-balance.ts @@ -1,33 +1,30 @@ -import { ReadCouncil } from "@delvtech/council-viem"; +import { createCouncil } from "@delvtech/council-js"; +import { fixed } from "@delvtech/fixed-point-wasm"; import { command } from "clide-js"; import signale from "signale"; -import { createPublicClient, http } from "viem"; -import { chainOption, getChain } from "../../reusable-options/chain.js"; -import { rpcUrlOption } from "../../reusable-options/rpc-url.js"; +import { rpcUrlOption } from "../../options/rpc-url.js"; export default command({ description: "Get the balance of a given account.", options: { - address: { - description: "The LockingVault contract address", - type: "string", + a: { + alias: ["address"], + description: "The LockingVault contract address.", + type: "hex", required: true, }, - account: { - alias: ["voter"], - description: "The account to get the balance of", - type: "string", + A: { + alias: ["account"], + description: "The account to get the balance of.", + type: "hex", required: true, }, - chain: chainOption, - rpc: rpcUrlOption, + r: rpcUrlOption, }, - handler: async ({ options, context, next }) => { - const chain = await getChain(options.chain, context); - - const rpcUrl = await options.rpc({ + handler: async ({ options, next }) => { + const rpcUrl = await options.rpcUrl({ prompt: "Enter RPC URL", }); @@ -39,17 +36,15 @@ export default command({ prompt: "Enter account to get balance of", }); - const transport = http(rpcUrl); - const publicClient = createPublicClient({ transport, chain }); - - const council = new ReadCouncil({ publicClient }); - const lockingVault = council.lockingVault(address as `0x${string}`); - - const balance = await lockingVault.getDepositedBalance({ - account: account as `0x${string}`, - }); + const lockingVault = createCouncil({ rpcUrl }).lockingVault(address); + const token = await lockingVault.getToken(); + const [balance, decimals] = await Promise.all([ + lockingVault.getBalanceOf(account), + token.getDecimals(), + ]); + const formattedBalance = fixed(balance, decimals).format(); - signale.info(balance); + signale.info(formattedBalance); next(balance); }, }); diff --git a/packages/council-cli/src/commands/locking-vault/get-delegate.ts b/packages/council-cli/src/commands/locking-vault/get-delegate.ts index ae68302a..4d291ff7 100644 --- a/packages/council-cli/src/commands/locking-vault/get-delegate.ts +++ b/packages/council-cli/src/commands/locking-vault/get-delegate.ts @@ -1,33 +1,29 @@ -import { ReadCouncil } from "@delvtech/council-viem"; +import { createCouncil } from "@delvtech/council-js"; import { command } from "clide-js"; import signale from "signale"; -import { createPublicClient, http } from "viem"; -import { chainOption, getChain } from "../../reusable-options/chain.js"; -import { rpcUrlOption } from "../../reusable-options/rpc-url.js"; +import { rpcUrlOption } from "../../options/rpc-url.js"; export default command({ description: "Get the delegate of a given account.", options: { - address: { - description: "The LockingVault contract address", - type: "string", + a: { + alias: ["address"], + description: "The LockingVault contract address.", + type: "hex", required: true, }, - account: { - alias: ["voter"], - description: "The account to get the delegate of", - type: "string", + v: { + alias: ["voter", "account"], + description: "The account to get the delegate of.", + type: "hex", required: true, }, - chain: chainOption, - rpc: rpcUrlOption, + r: rpcUrlOption, }, - handler: async ({ options, context, next }) => { - const chain = await getChain(options.chain, context); - - const rpcUrl = await options.rpc({ + handler: async ({ options, next }) => { + const rpcUrl = await options.rpcUrl({ prompt: "Enter RPC URL", }); @@ -39,17 +35,11 @@ export default command({ prompt: "Enter account to get delegate of", }); - const transport = http(rpcUrl); - const publicClient = createPublicClient({ transport, chain }); - - const council = new ReadCouncil({ publicClient }); - const lockingVault = council.lockingVault(address as `0x${string}`); - - const delegate = await lockingVault.getDelegate({ - account: account as `0x${string}`, - }); + const delegate = await createCouncil({ rpcUrl }) + .lockingVault(address) + .getDelegate(account); - signale.info(delegate.address); + signale.info(delegate); next(delegate); }, }); diff --git a/packages/council-cli/src/commands/locking-vault/get-token.ts b/packages/council-cli/src/commands/locking-vault/get-token.ts index 8798c468..020dfb76 100644 --- a/packages/council-cli/src/commands/locking-vault/get-token.ts +++ b/packages/council-cli/src/commands/locking-vault/get-token.ts @@ -1,27 +1,23 @@ -import { ReadCouncil } from "@delvtech/council-viem"; +import { createCouncil } from "@delvtech/council-js"; import { command } from "clide-js"; import signale from "signale"; -import { createPublicClient, http } from "viem"; -import { chainOption, getChain } from "../../reusable-options/chain.js"; -import { rpcUrlOption } from "../../reusable-options/rpc-url.js"; +import { rpcUrlOption } from "../../options/rpc-url.js"; export default command({ description: "Get the token contract address of a given locking vault.", options: { - address: { + a: { + alias: ["address"], description: "The LockingVault contract address", - type: "string", + type: "hex", required: true, }, - chain: chainOption, - rpc: rpcUrlOption, + r: rpcUrlOption, }, - handler: async ({ options, context, next }) => { - const chain = await getChain(options.chain, context); - - const rpcUrl = await options.rpc({ + handler: async ({ options, next }) => { + const rpcUrl = await options.rpcUrl({ prompt: "Enter RPC URL", }); @@ -29,12 +25,8 @@ export default command({ prompt: "Enter LockingVault contract address", }); - const transport = http(rpcUrl); - const publicClient = createPublicClient({ transport, chain }); - - const council = new ReadCouncil({ publicClient }); - const lockingVault = council.lockingVault(address as `0x${string}`); - + const council = createCouncil({ rpcUrl }); + const lockingVault = council.lockingVault(address); const token = await lockingVault.getToken(); signale.info(token.address); diff --git a/packages/council-cli/src/commands/locking-vault/get-voting-power.ts b/packages/council-cli/src/commands/locking-vault/get-voting-power.ts index 35e8c15b..949f9106 100644 --- a/packages/council-cli/src/commands/locking-vault/get-voting-power.ts +++ b/packages/council-cli/src/commands/locking-vault/get-voting-power.ts @@ -1,33 +1,30 @@ -import { ReadCouncil } from "@delvtech/council-viem"; +import { createCouncil } from "@delvtech/council-js"; +import { fixed } from "@delvtech/fixed-point-wasm"; import { command } from "clide-js"; import signale from "signale"; -import { createPublicClient, http } from "viem"; -import { chainOption, getChain } from "../../reusable-options/chain.js"; -import { rpcUrlOption } from "../../reusable-options/rpc-url.js"; +import { rpcUrlOption } from "../../options/rpc-url.js"; export default command({ description: "Get the voting power of a given account.", options: { - address: { + a: { + alias: ["address"], description: "The LockingVault contract address", - type: "string", + type: "hex", required: true, }, - account: { - alias: ["voter"], + v: { + alias: ["voter", "account"], description: "The account to get the voting power of", - type: "string", + type: "hex", required: true, }, - chain: chainOption, - rpc: rpcUrlOption, + r: rpcUrlOption, }, - handler: async ({ options, context, next }) => { - const chain = await getChain(options.chain, context); - - const rpcUrl = await options.rpc({ + handler: async ({ options, next }) => { + const rpcUrl = await options.rpcUrl({ prompt: "Enter RPC URL", }); @@ -35,21 +32,16 @@ export default command({ prompt: "Enter LockingVault contract address", }); - const account = await options.account({ + const voter = await options.voter({ prompt: "Enter account to get balance of", }); - const transport = http(rpcUrl); - const publicClient = createPublicClient({ transport, chain }); - - const council = new ReadCouncil({ publicClient }); - const lockingVault = council.lockingVault(address as `0x${string}`); - - const power = await lockingVault.getVotingPower({ - account: account as `0x${string}`, - }); + const council = createCouncil({ rpcUrl }); + const lockingVault = council.lockingVault(address); + const power = await lockingVault.getVotingPower({ voter }); + const formattedPower = fixed(power, 18).format(); - signale.info(power); + signale.info(formattedPower); next(power); }, }); diff --git a/packages/council-cli/src/commands/locking-vault/withdraw.ts b/packages/council-cli/src/commands/locking-vault/withdraw.ts index 34fe2f5a..394427d0 100644 --- a/packages/council-cli/src/commands/locking-vault/withdraw.ts +++ b/packages/council-cli/src/commands/locking-vault/withdraw.ts @@ -1,35 +1,29 @@ -import { ReadWriteCouncil } from "@delvtech/council-viem"; +import { parseFixed } from "@delvtech/fixed-point-wasm"; import { command } from "clide-js"; import signale from "signale"; -import { createPublicClient, createWalletClient, http, parseUnits } from "viem"; -import { - getWriteOptions, - writeOptions, -} from "../../reusable-options/writeOptions.js"; +import { getWriteOptions, writeOptions } from "../../options/writeOptions.js"; export default command({ description: "Withdraw tokens from a LockingVault.", options: { - address: { - describe: "The LockingVault contract address", - type: "string", + a: { + alias: ["address"], + describe: "The LockingVault contract address.", + type: "hex", required: true, }, - amount: { - describe: "The amount of tokens to withdraw", + A: { + alias: ["amount"], + describe: "The amount of tokens to withdraw as a decimal string.", type: "string", required: true, }, ...writeOptions, }, - handler: async ({ options, context, next }) => { - const { - account: signerAccount, - chain, - rpcUrl, - } = await getWriteOptions(options, context); + handler: async ({ options, client, next }) => { + const { council } = await getWriteOptions(options, client); const address = await options.address({ prompt: "Enter Locking Vault address", @@ -42,27 +36,22 @@ export default command({ }, }); - const transport = http(rpcUrl); - const publicClient = createPublicClient({ chain, transport }); - const walletClient = createWalletClient({ - transport, - chain, - account: signerAccount, - }); - - const lockingVault = new ReadWriteCouncil({ - publicClient, - walletClient, - }).lockingVault(address as `0x${string}`); - + const lockingVault = council.lockingVault(address); const token = await lockingVault.getToken(); const decimals = await token.getDecimals(); const hash = await lockingVault.withdraw({ - amount: parseUnits(amount, decimals), + args: { + amount: parseFixed(amount, decimals).bigint, + }, + options: { + onMined: () => { + signale.success(`Transaction success: ${hash}`); + }, + }, }); - signale.success(hash); + signale.pending(`Transaction submitted: ${hash}`); next(hash); }, }); diff --git a/packages/council-cli/src/commands/merkle-rewards/create-tree.ts b/packages/council-cli/src/commands/merkle-rewards/create-tree.ts index 1618e800..d5deee9a 100644 --- a/packages/council-cli/src/commands/merkle-rewards/create-tree.ts +++ b/packages/council-cli/src/commands/merkle-rewards/create-tree.ts @@ -13,38 +13,41 @@ import { parseUnits, } from "viem"; import { JsonStore } from "../../utils/config/JsonStore.js"; -import { Schema, validateData } from "../../utils/config/validateData.js"; import { isNotEmptyList } from "../../utils/validation/isNotEmptyList.js"; import { isNumberString } from "../../utils/validation/isNumberString.js"; +import { Schema, validateData } from "../../utils/validation/validateData.js"; export default command({ description: "Create a merkle tree for rewards (e.g., airdrop) from a list of addresses and reward amounts. The output is a JSON file with the merkle root and each leaf by address with it's proof.", options: { - "accounts-path": { + i: { + alias: ["input", "input-path"], description: 'The path to the json file with the addresses and amounts listed as an array of objects with address and amount properties. The amount property is a decimal string that will be scaled based on the decimals option. For example, [{"address": "0x1234...", "amount": "100.5"}, ...].', type: "string", }, - addresses: { + a: { + alias: ["addresses"], description: "A list of recipient addresses to include in the merkle tree.", - type: "array", + type: "hexArray", }, - amounts: { + A: { + alias: ["amounts"], description: "A list of amounts to reward each address. Must be same length as addresses.", type: "array", }, - decimals: { - alias: ["token-decimals"], + d: { + alias: ["decimals", "token-decimals"], description: "The decimal precision used by the token contract. The amounts will be multiplied by (10 ** decimals). For example, if amount is 100 and decimals is 18, then the result will be 100000000000000000000.", type: "number", default: 18, }, - out: { + o: { alias: ["out-dir"], description: "The directory to write the merkle tree info to; relative to the current working directory.", @@ -53,29 +56,29 @@ export default command({ }, handler: async ({ options, next }) => { - const accounts = await getAccounts({ - accountsPathGetter: options.accountsPath, + const leaves = await getLeaves({ + inputsPathGetter: options.inputPath, addressesGetter: options.addresses, amountsGetter: options.amounts, }); const decimals = await options.decimals(); - const merkleTree = getMerkleTree(accounts, decimals); + const merkleTree = createMerkleTree(leaves, decimals); // Sum all the amounts - const amountTotal = accounts.reduce( + const amountTotal = leaves.reduce( (sum, { amount }) => sum + parseUnits(amount, decimals), 0n, ); // Get the total unique addresses - const allAddresses = accounts.map(({ address }) => address); + const allAddresses = leaves.map(({ address }) => address); const uniqueAddresses = new Set(allAddresses); // Create object entries for each account with the address as the key which // is lowercased since object keys are case sensitive. - const accountsEntries = accounts.map(({ address, amount }) => { + const accountsEntries = leaves.map(({ address, amount }) => { const proof = merkleTree.getHexProof( hashAccount({ address, amount }, decimals), ); @@ -122,63 +125,56 @@ export default command({ }); /** - * A requiredOption wrapper for prompting the user for the accounts to create + * A requiredOption wrapper for prompting the user for the leaves to create * the merkle tree from. */ -async function getAccounts({ - accountsPathGetter, +async function getLeaves({ + inputsPathGetter, addressesGetter, amountsGetter, }: { - accountsPathGetter: OptionGetter; - addressesGetter: OptionGetter; + inputsPathGetter: OptionGetter; + addressesGetter: OptionGetter; amountsGetter: OptionGetter; -}): Promise { - let accounts: Account[] = []; +}): Promise { + const leaves: Leaf[] = []; let addresses = await addressesGetter(); let amounts = await amountsGetter(); - // Try to import the accounts from the accounts path if it was passed or - // prompt the user for the accounts path if no options were passed. + // Try to import the leaves from the input path if it was passed or prompt + // the user for the input path if no options were passed. if (!addresses && !amounts) { - const possibleAccountsPath = await accountsPathGetter({ - prompt: `Enter the path to the accounts JSON file ${colors.dim( + const possibleInputPath = await inputsPathGetter({ + prompt: `Enter the path to the leaves JSON file ${colors.dim( "(Leave blank to enter addresses and amounts manually)", )}`, }); - // Import and validate the accounts from the accounts path - if (possibleAccountsPath) { - const fullAccountsPath = path.resolve( - process.cwd(), - possibleAccountsPath, - ); + // Import and validate the leaves from the input path + if (possibleInputPath) { + const fullInputPath = path.resolve(process.cwd(), possibleInputPath); - const { default: importedAccounts } = await import( - fullAccountsPath - ).catch((err) => { - signale.error(err); - throw new Error( - `The accounts file at ${fullAccountsPath} could not be found.`, - ); - }); + const { default: importedLeafs } = await import(fullInputPath).catch( + (err) => { + signale.error(err); + throw new Error( + `The leaves file at ${fullInputPath} could not be found.`, + ); + }, + ); - // Validate the imported accounts - validateData(importedAccounts, accountsScema); + // Validate the imported leaves + validateData(importedLeafs, leavesScema); - // Add the imported accounts to the accounts array - accounts = [...accounts, ...importedAccounts]; + // Add the imported leaves to the leaves array + leaves.push(...importedLeafs); } } - // Add accounts from the addresses and amounts options if they were passed or - // prompt the user for them if accounts is still empty. - if ( - isNotEmptyList(addresses) || - isNotEmptyList(amounts) || - !accounts.length - ) { + // Add leaves from the addresses and amounts options if they were passed or + // prompt the user for them if leaves is still empty. + if (isNotEmptyList(addresses) || isNotEmptyList(amounts) || !leaves.length) { addresses = await addressesGetter({ prompt: { message: "Enter recipient addresses", @@ -234,26 +230,26 @@ async function getAccounts({ ); } - const ensuredAccounts = addresses.map((address, i) => { + const leavesFromOptions = addresses.map((address, i) => { return { - address: address as `0x${string}`, + address, amount: (amounts as `${number}`[])[i], }; }); - // Add the ensured accounts to the accounts array - return [...accounts, ...ensuredAccounts]; + // Add the manually entered leaves to the leaves array + leaves.push(...leavesFromOptions); } - return accounts; + return leaves; } -interface Account { +interface Leaf { address: Address; amount: `${number}`; } -const accountsScema: Schema = { +const leavesScema: Schema = { type: "array", items: { type: "object", @@ -271,11 +267,11 @@ const accountsScema: Schema = { }, }; -function getMerkleTree(accounts: Account[], tokenDecimals: number) { - const leaves = accounts.map((account) => hashAccount(account, tokenDecimals)); +function createMerkleTree(leaves: Leaf[], tokenDecimals: number) { + const hashedLeaves = leaves.map((leaf) => hashAccount(leaf, tokenDecimals)); return new MerkleTree.default( - leaves, + hashedLeaves, (bytes: Hex) => { const packedData = encodePacked(["bytes"], [bytes]); return keccak256(packedData); @@ -287,7 +283,7 @@ function getMerkleTree(accounts: Account[], tokenDecimals: number) { ); } -function hashAccount({ address, amount }: Account, tokenDecimals: number) { +function hashAccount({ address, amount }: Leaf, tokenDecimals: number) { const packedData = encodePacked( ["address", "uint256"], [address, parseUnits(amount, tokenDecimals)], diff --git a/packages/council-cli/src/commands/mock-token/mint.ts b/packages/council-cli/src/commands/mock-token/mint.ts index 902fdb60..ae123a8f 100644 --- a/packages/council-cli/src/commands/mock-token/mint.ts +++ b/packages/council-cli/src/commands/mock-token/mint.ts @@ -1,40 +1,36 @@ -import { ReadWriteMockToken } from "@delvtech/council-viem"; +import { MockERC20 } from "@delvtech/council-artifacts/MockERC20"; import { command } from "clide-js"; import signale from "signale"; -import { createPublicClient, createWalletClient, http, parseUnits } from "viem"; -import { - getWriteOptions, - writeOptions, -} from "../../reusable-options/writeOptions.js"; +import { parseUnits } from "viem"; +import { getWriteOptions, writeOptions } from "../../options/writeOptions.js"; export default command({ description: "Mint tokens", options: { - address: { - describe: "The token contract address", - type: "string", + a: { + alias: ["address"], + describe: "The token contract address.", + type: "hex", required: true, }, - account: { - describe: "The account to mint tokens for", + A: { + alias: ["amount"], + describe: "The amount of tokens to mint.", type: "string", required: true, }, - amount: { - describe: "The amount of tokens to mint", - type: "string", + c: { + alias: ["account"], + describe: "The account to mint tokens for,", + type: "hex", required: true, }, ...writeOptions, }, - handler: async ({ options, context, next }) => { - const { - account: signerAccount, - chain, - rpcUrl, - } = await getWriteOptions(options, context); + handler: async ({ options, client, next }) => { + const { drift } = await getWriteOptions(options, client); const address = await options.address({ prompt: "Enter token contract address", @@ -51,27 +47,26 @@ export default command({ }, }); - const transport = http(rpcUrl); - const publicClient = createPublicClient({ transport, chain }); - const walletClient = createWalletClient({ - transport, - chain, - account: signerAccount, - }); - - const token = new ReadWriteMockToken({ - address: address as `0x${string}`, - publicClient, - walletClient, + const token = drift.contract({ + abi: MockERC20.abi, + address, }); + const decimals = await token.read("decimals"); - const decimals = await token.getDecimals(); - const hash = await token.mint({ - account: account as `0x${string}`, - amount: parseUnits(amount, decimals), - }); + const hash = await token.write( + "mint", + { + account, + amount: parseUnits(amount, decimals), + }, + { + onMined: () => { + signale.success(`Transaction success: ${hash}`); + }, + }, + ); - signale.success(hash); + signale.pending(`Transaction submitted: ${hash}`); next(hash); }, }); diff --git a/packages/council-cli/src/commands/mock-token/set-allowance.ts b/packages/council-cli/src/commands/mock-token/set-allowance.ts index 41482f77..d06ad83e 100644 --- a/packages/council-cli/src/commands/mock-token/set-allowance.ts +++ b/packages/council-cli/src/commands/mock-token/set-allowance.ts @@ -1,46 +1,43 @@ -import { ReadWriteMockToken } from "@delvtech/council-viem"; +import { MockERC20 } from "@delvtech/council-artifacts/MockERC20"; import { command } from "clide-js"; import signale from "signale"; -import { createPublicClient, createWalletClient, http, parseUnits } from "viem"; -import { - getWriteOptions, - writeOptions, -} from "../../reusable-options/writeOptions.js"; +import { parseUnits } from "viem"; +import { getWriteOptions, writeOptions } from "../../options/writeOptions.js"; export default command({ description: "Set an account's token allowance", options: { - address: { - description: "The token contract address", - type: "string", + a: { + alias: ["address"], + description: "The token contract address.", + type: "hex", required: true, }, - owner: { - description: "The address of the token owner", - type: "string", + o: { + alias: ["owner", "source"], + description: "The address of the token owner.", + type: "hex", required: true, }, - spender: { - description: "The address of the token spender", - type: "string", + s: { + alias: ["spender"], + description: "The address of the token spender.", + type: "hex", required: true, }, - allowance: { + A: { + alias: ["allowance"], description: - "The amount of tokens the spender is allowed to spend from the owner's account", + "The amount of tokens the spender is allowed to spend from the owner's account as a decimals string.", type: "string", required: true, }, ...writeOptions, }, - handler: async ({ options, context, next }) => { - const { - account: signerAccount, - chain, - rpcUrl, - } = await getWriteOptions(options, context); + handler: async ({ options, client, next }) => { + const { drift } = await getWriteOptions(options, client); const address = await options.address({ prompt: "Enter token contract address", @@ -62,28 +59,27 @@ export default command({ }, }); - const transport = http(rpcUrl); - const publicClient = createPublicClient({ transport, chain }); - const walletClient = createWalletClient({ - transport, - chain, - account: signerAccount, - }); - - const token = new ReadWriteMockToken({ - address: address as `0x${string}`, - publicClient, - walletClient, + const token = drift.contract({ + abi: MockERC20.abi, + address, }); + const decimals = await token.read("decimals"); - const decimals = await token.getDecimals(); - const hash = await token.setAllowance({ - allowance: parseUnits(allowance, decimals), - spender: spender as `0x${string}`, - owner: owner as `0x${string}`, - }); + const hash = await token.write( + "setAllowance", + { + amount: parseUnits(allowance, decimals), + source: owner, + spender, + }, + { + onMined: () => { + signale.success(`Transaction success: ${hash}`); + }, + }, + ); - signale.success(hash); + signale.pending(`Transaction submitted: ${hash}`); next(hash); }, }); diff --git a/packages/council-cli/src/commands/mock-token/set-balance.ts b/packages/council-cli/src/commands/mock-token/set-balance.ts index 347f40cb..cf4f1fe9 100644 --- a/packages/council-cli/src/commands/mock-token/set-balance.ts +++ b/packages/council-cli/src/commands/mock-token/set-balance.ts @@ -1,40 +1,37 @@ -import { ReadWriteMockToken } from "@delvtech/council-viem"; +import { MockERC20 } from "@delvtech/council-artifacts/MockERC20"; import { command } from "clide-js"; import signale from "signale"; -import { createPublicClient, createWalletClient, http, parseUnits } from "viem"; -import { - getWriteOptions, - writeOptions, -} from "../../reusable-options/writeOptions.js"; +import { parseUnits } from "viem"; +import { getWriteOptions, writeOptions } from "../../options/writeOptions.js"; export default command({ description: "Set an account's token balance", options: { - address: { - description: "The token contract address", - type: "string", + a: { + alias: ["address"], + description: "The token contract address.", + type: "hex", required: true, }, - account: { - description: "The account to set balance for", - type: "string", + c: { + alias: ["account"], + description: "The account to set balance for.", + type: "hex", required: true, }, - balance: { - description: "The new balance (as a decimal string) for the account", + b: { + alias: ["balance"], + description: + "The new balance (as a decimal string) for the account as a decimal string.", type: "string", required: true, }, ...writeOptions, }, - handler: async ({ options, context, next }) => { - const { - account: singerAccount, - chain, - rpcUrl, - } = await getWriteOptions(options, context); + handler: async ({ options, client, next }) => { + const { drift } = await getWriteOptions(options, client); const address = await options.address({ prompt: "Enter token contract address", @@ -51,27 +48,26 @@ export default command({ }, }); - const transport = http(rpcUrl); - const publicClient = createPublicClient({ transport, chain }); - const walletClient = createWalletClient({ - transport, - chain, - account: singerAccount, - }); - - const token = new ReadWriteMockToken({ - address: address as `0x${string}`, - publicClient, - walletClient, + const token = drift.contract({ + abi: MockERC20.abi, + address, }); + const decimals = await token.read("decimals"); - const decimals = await token.getDecimals(); - const hash = await token.setBalance({ - account: account as `0x${string}`, - balance: parseUnits(balance, decimals), - }); + const hash = await token.write( + "setBalance", + { + who: account, + amount: parseUnits(balance, decimals), + }, + { + onMined: () => { + signale.success(`Transaction success: ${hash}`); + }, + }, + ); - signale.success(hash); + signale.pending(`Transaction submitted: ${hash}`); next(hash); }, }); diff --git a/packages/council-cli/src/commands/proposal/create.ts b/packages/council-cli/src/commands/proposal/create.ts index 88cd96e3..5393284e 100644 --- a/packages/council-cli/src/commands/proposal/create.ts +++ b/packages/council-cli/src/commands/proposal/create.ts @@ -1,75 +1,76 @@ -import { Ballot, ReadWriteCouncil } from "@delvtech/council-viem"; +import { Ballot } from "@delvtech/council-js"; import { command } from "clide-js"; import signale from "signale"; -import { createPublicClient, createWalletClient, http } from "viem"; -import { - getWriteOptions, - writeOptions, -} from "../../reusable-options/writeOptions.js"; +import { getWriteOptions, writeOptions } from "../../options/writeOptions.js"; import { DAY_IN_BLOCKS } from "../../utils/constants.js"; export default command({ description: "Create a proposal", options: { - address: { + a: { + alias: ["address"], description: "The voting contract address", - type: "string", + type: "hex", required: true, }, - vaults: { - description: - "The addresses of the approved voting vaults to draw voting power from. This will be used to verify that the signer has enough voting power to create a proposal.", - type: "array", + t: { + alias: ["targets"], + description: "A list of addresses to call.", + type: "hexArray", string: true, required: true, }, - vaultdatas: { - alias: ["vault-data", "extra-vault-data"], - description: "The extra data for each vault", - type: "array", + d: { + alias: ["data", "calldatas"], + description: "Encoded call data for each target.", + type: "hexArray", string: true, + required: true, }, - targets: { - description: "A list of addresses to call.", - type: "array", + v: { + alias: ["vaults"], + description: + "The addresses of the approved voting vaults to draw voting power from. This will be used to verify that the signer has enough voting power to create a proposal.", + type: "hexArray", string: true, required: true, }, - calldatas: { - alias: ["data", "call-data"], - description: "Encoded call data for each target.", - type: "array", + D: { + alias: ["vault-data", "extra-vault-data"], + description: "The extra data for each vault.", + type: "hexArray", string: true, - required: true, }, - "last-call": { + l: { + alias: ["last-call"], description: "The block after which the proposal can no longer be executed.", type: "number", required: true, }, - ballot: { - description: - "The initial vote from the signer's account (yes, no, maybe).", + b: { + alias: ["ballot"], + description: "The initial vote from the signer's account.", type: "string", default: "yes", + choices: ["yes", "no", "maybe"], }, ...writeOptions, }, - handler: async ({ options, context, next }) => { - const { account, chain, rpcUrl } = await getWriteOptions(options, context); + handler: async ({ options, client, next }) => { + const { drift, council } = await getWriteOptions(options, client); const address = await options.address({ prompt: "Enter voting contract address", }); - const vaults = await options.vaults({ + const votingVaults = await options.vaults({ prompt: "Enter voting vault addresses", }); - const vaultdatas = await options.vaultdatas(); + const extraVaultData = await options.extraVaultData(); const targets = await options.targets({ prompt: "Enter target addresses", @@ -80,63 +81,40 @@ export default command({ }); const ballot = await options.ballot({ - prompt: { - message: "Select initial ballot", - type: "select", - choices: [ - { - title: "Yes", - value: "yes", - }, - { - title: "No", - value: "no", - }, - { - title: "Abstain", - value: "maybe", - }, - ], - }, - validate: (value) => { - if (value === "yes" || value === "no" || value === "maybe") { - return true; - } - return false; - }, + prompt: "Select initial ballot", }); - const transport = http(rpcUrl); - const publicClient = createPublicClient({ transport, chain }); - const walletClient = createWalletClient({ transport, chain, account }); - const currentBlock = await publicClient.getBlockNumber(); + const lastCallValue: number | undefined = options.values.lastCall; + const initialCallBlock = + lastCallValue === undefined + ? await drift.getBlockNumber() + : BigInt(lastCallValue); const lastCall = await options.lastCall({ prompt: { message: "Enter the last call block", - initial: String(currentBlock + DAY_IN_BLOCKS * 14n), - validate: (value) => { - return !isNaN(Number(value)); - }, + initial: String(initialCallBlock + DAY_IN_BLOCKS * 14n), + validate: (value) => !isNaN(Number(value)), }, }); - const council = new ReadWriteCouncil({ publicClient, walletClient }); - const coreVoting = council.coreVoting({ - address: address as `0x${string}`, - }); - - const hash = await coreVoting.createProposal({ - ballot: ballot as Ballot, - calldatas: calldatas as `0x${string}`[], - lastCall: BigInt(lastCall), - targets: targets as `0x${string}`[], - vaults: vaults as `0x${string}`[], - extraVaultData: - (vaultdatas as `0x${string}`[] | undefined) || vaults.map(() => "0x"), + const hash = await council.coreVoting(address).createProposal({ + args: { + targets, + calldatas, + votingVaults, + extraVaultData, + ballot: ballot as Ballot, + lastCallBlock: BigInt(lastCall), + }, + options: { + onMined: () => { + signale.success(`Transaction success: ${hash}`); + }, + }, }); - signale.success(hash); + signale.pending(`Transaction submitted: ${hash}`); next(hash); }, }); diff --git a/packages/council-cli/src/commands/proposal/execute.ts b/packages/council-cli/src/commands/proposal/execute.ts index c1b7b51f..e50d7396 100644 --- a/packages/council-cli/src/commands/proposal/execute.ts +++ b/packages/council-cli/src/commands/proposal/execute.ts @@ -1,23 +1,19 @@ -import { ReadWriteCouncil } from "@delvtech/council-viem"; import { command } from "clide-js"; import signale from "signale"; -import { createPublicClient, createWalletClient, http } from "viem"; -import { - getWriteOptions, - writeOptions, -} from "../../reusable-options/writeOptions.js"; +import { getWriteOptions, writeOptions } from "../../options/writeOptions.js"; export default command({ description: "Execute a proposal", options: { - address: { + a: { + alias: ["address"], description: "The voting contract address", - type: "string", + type: "hex", required: true, }, - id: { - alias: ["proposal"], + p: { + alias: ["proposal", "id"], description: "The id of the proposal to execute", type: "number", required: true, @@ -25,8 +21,8 @@ export default command({ ...writeOptions, }, - handler: async ({ options, context, end, next }) => { - const { account, chain, rpcUrl } = await getWriteOptions(options, context); + handler: async ({ options, client, next }) => { + const { council } = await getWriteOptions(options, client); const address = await options.address({ prompt: "Enter voting contract address", @@ -36,24 +32,18 @@ export default command({ prompt: "Enter proposal id", }); - const transport = http(rpcUrl); - const publicClient = createPublicClient({ transport, chain }); - const walletClient = createWalletClient({ transport, chain, account }); - - const council = new ReadWriteCouncil({ publicClient, walletClient }); - const coreVoting = council.coreVoting({ - address: address as `0x${string}`, + const hash = await council.coreVoting(address).executeProposal({ + args: { + proposalId: BigInt(id), + }, + options: { + onMined: () => { + signale.success(`Transaction success: ${hash}`); + }, + }, }); - const proposal = await coreVoting.getProposal({ id: BigInt(id) }); - - if (!proposal) { - signale.error(`Proposal ${id} not found`); - return end(); - } - - const hash = await proposal.execute(); - signale.success(hash); + signale.pending(`Transaction submitted: ${hash}`); next(hash); }, }); diff --git a/packages/council-cli/src/commands/proposal/vote.ts b/packages/council-cli/src/commands/proposal/vote.ts index 969ac663..9b625242 100644 --- a/packages/council-cli/src/commands/proposal/vote.ts +++ b/packages/council-cli/src/commands/proposal/vote.ts @@ -1,41 +1,41 @@ -import { Ballot, ReadWriteCouncil } from "@delvtech/council-viem"; +import { Ballot } from "@delvtech/council-js"; +import { Address, Bytes } from "@delvtech/drift"; import { command } from "clide-js"; import signale from "signale"; -import { createPublicClient, createWalletClient, http } from "viem"; -import { - getWriteOptions, - writeOptions, -} from "../../reusable-options/writeOptions.js"; +import { getWriteOptions, writeOptions } from "../../options/writeOptions.js"; export default command({ description: "Vote on a proposal", options: { - address: { + a: { + alias: ["address"], description: "The voting contract address", - type: "string", + type: "hex", required: true, }, - id: { - alias: ["proposal-id"], - description: "The proposal id", + p: { + alias: ["proposal", "id"], + description: "The id of the proposal", type: "number", required: true, }, - ballot: { - description: - "The initial vote from the signer's account (yes, no, maybe).", + b: { + alias: ["ballot"], + description: "The ballot to cast.", type: "string", default: "yes", + choices: ["yes", "no", "maybe"], }, - vaults: { + v: { + alias: ["vaults"], description: "The addresses of the approved voting vaults to draw voting power from.", type: "array", string: true, required: true, }, - vaultdatas: { + d: { alias: ["vault-data", "extra-vault-data"], description: "The extra data for each vault", type: "array", @@ -44,67 +44,42 @@ export default command({ ...writeOptions, }, - handler: async ({ options, context, next }) => { - const { account, chain, rpcUrl } = await getWriteOptions(options, context); + handler: async ({ options, client, next }) => { + const { drift, council } = await getWriteOptions(options, client); const address = await options.address({ prompt: "Enter voting contract address", }); - const id = await options.id({ + const proposalId = await options.id({ prompt: "Enter proposal id", }); const ballot = await options.ballot({ - prompt: { - message: "Select initial ballot", - type: "select", - choices: [ - { - title: "Yes", - value: "yes", - }, - { - title: "No", - value: "no", - }, - { - title: "Abstain", - value: "maybe", - }, - ], - }, - validate: (value) => { - if (value === "yes" || value === "no" || value === "maybe") { - return true; - } - return false; - }, + prompt: "Select a ballot to cast", }); const vaults = await options.vaults({ prompt: "Enter voting vault addresses", }); - const vaultdatas = await options.vaultdatas(); - - const transport = http(rpcUrl); - const publicClient = createPublicClient({ transport, chain }); - const walletClient = createWalletClient({ transport, chain, account }); + const extraData = await options.extraVaultData(); - const council = new ReadWriteCouncil({ publicClient, walletClient }); - const coreVoting = council.coreVoting({ - address: address as `0x${string}`, - }); - - const propsal = await coreVoting.getProposal({ id: BigInt(id) }); - const hash = await propsal?.vote({ - ballot: ballot as Ballot, - vaults: vaults as `0x${string}`[], - extraVaultData: vaultdatas as `0x${string}`[] | undefined, + const hash = await council.coreVoting(address).vote({ + args: { + ballot: ballot as Ballot, + proposalId: BigInt(proposalId), + vaults: vaults as Address[], + extraVaultData: extraData as Bytes[] | undefined, + }, + options: { + onMined: () => { + signale.success(`Transaction success: ${hash}`); + }, + }, }); - signale.success(hash); + signale.pending(`Transaction submitted: ${hash}`); next(hash); }, }); diff --git a/packages/council-cli/src/commands/server.ts b/packages/council-cli/src/commands/server.ts index c2a82ccb..023d48e4 100644 --- a/packages/council-cli/src/commands/server.ts +++ b/packages/council-cli/src/commands/server.ts @@ -1,7 +1,13 @@ import { command } from "clide-js"; import { execSync } from "node:child_process"; import signale from "signale"; -import { parseUnits } from "viem"; +import { parseEther } from "viem"; +import { configuredChains } from "../lib/viem.js"; + +const DEFAULT_CHAIN = configuredChains.hardhat; +const DEFAULT_RPC_URL = new URL( + configuredChains.hardhat.rpcUrls.default.http[0], +); // This command is only available if the optional hardhat peer dependency is // installed so we import it dynamically to avoid crashing if it's not @@ -13,33 +19,44 @@ const hardhat = await import("hardhat").catch((e) => { }); export default command({ - description: "Start a local ethereum node", + description: "Start a local ethereum node using", isMiddleware: false, options: { - host: { - description: "The host to listen on", + H: { + alias: ["hostname"], + description: "The hostname to use.", type: "string", - default: "127.0.0.1", + default: DEFAULT_RPC_URL.hostname, }, - port: { - description: "The port to listen on", - type: "number", - default: 8545, + f: { + alias: ["fork-url"], + description: "A URL to fork from.", + type: "string", }, - balance: { - description: "The ETH balance to assign to each account", + p: { + alias: ["port"], + description: "The port to listen on.", type: "number", - default: 1_000, + default: +DEFAULT_RPC_URL.port, + }, + b: { + alias: ["balance"], + description: + "The ETH balance to assign to each account as a decimal string.", + type: "string", + default: "1000", }, - "block-time": { - description: "The blockTime in seconds for automatic mining", + t: { + alias: ["block-time"], + description: "The blockTime in seconds for automatic mining.", type: "number", }, - "chain-id": { - description: "The id to use for the local blockchain", + c: { + alias: ["chain-id"], + description: "The id to use for the local blockchain.", type: "number", - default: 1337, + default: DEFAULT_CHAIN.id, }, }, @@ -72,33 +89,40 @@ export default command({ const hre = hardhat.default; - const host = await options.host(); + const hostname = await options.hostname(); const port = await options.port(); const balance = await options.balance(); const blockTime = await options.blockTime(); const chainId = await options.chainId(); + const forkUrl = await options.forkUrl(); - hre.config.networks.hardhat = { - ...hre.config.networks.hardhat, - chainId, - + const networks = hre.config.networks; + networks.hardhat = { + ...networks.hardhat, allowUnlimitedContractSize: true, accounts: { - ...hre.config.networks.hardhat.accounts, - accountsBalance: String(parseUnits(String(balance), 18)), + ...networks.hardhat.accounts, + accountsBalance: String(parseEther(balance)), }, + chainId, + forking: forkUrl + ? { + url: forkUrl, + enabled: true, + } + : undefined, mining: blockTime !== undefined ? { - ...hre.config.networks.hardhat.mining, + ...networks.hardhat.mining, auto: false, interval: blockTime * 1_000, } - : hre.config.networks.hardhat.mining, + : networks.hardhat.mining, }; hre.run("node", { - hostname: host, + hostname, port, }); diff --git a/packages/council-cli/src/commands/server/block-number.ts b/packages/council-cli/src/commands/server/block-number.ts index 6e237f88..85445785 100644 --- a/packages/council-cli/src/commands/server/block-number.ts +++ b/packages/council-cli/src/commands/server/block-number.ts @@ -1,7 +1,7 @@ +import { createDrift } from "@delvtech/drift"; import { command } from "clide-js"; import signale from "signale"; -import { createClient, http } from "viem"; -import { rpcUrlOption } from "../../reusable-options/rpc-url.js"; +import { rpcUrlOption } from "../../options/rpc-url.js"; export default command({ description: "Get the block number of the local blockchain", @@ -15,14 +15,7 @@ export default command({ prompt: "Enter RPC URL", }); - const client = createClient({ - transport: http(rpcUrl), - }); - - const blockNumberHex = await client.request({ - method: "eth_blockNumber", - }); - const blockNumber = BigInt(blockNumberHex); + const blockNumber = await createDrift({ rpcUrl }).getBlockNumber(); signale.info(`Current block number: ${blockNumber}`); next(blockNumber); diff --git a/packages/council-cli/src/commands/server/mine.ts b/packages/council-cli/src/commands/server/mine.ts index 2cb9abe1..f3777d6f 100644 --- a/packages/council-cli/src/commands/server/mine.ts +++ b/packages/council-cli/src/commands/server/mine.ts @@ -1,7 +1,8 @@ import { command } from "clide-js"; import signale from "signale"; -import { Client, createClient, http } from "viem"; -import { rpcUrlOption } from "../../reusable-options/rpc-url.js"; +import { createClient, http } from "viem"; +import { mine } from "../../lib/viem.js"; +import { rpcUrlOption } from "../../options/rpc-url.js"; export default command({ description: "Mine blocks on the local blockchain", @@ -34,21 +35,3 @@ export default command({ next(); }, }); - -interface MineOptions { - blocks: number; - client: Client; -} - -/** - * Mine a given number of blocks on the local testnet - * @param blocks The number of blocks to mine - * @returns The new current block number - */ -export async function mine({ blocks, client }: MineOptions): Promise { - await client.request({ - // @ts-expect-error - This is a hardhat method - method: "hardhat_mine", - params: [`0x${blocks.toString(16)}`], - }); -} diff --git a/packages/council-cli/src/commands/vault/get-voting-power.ts b/packages/council-cli/src/commands/vault/get-voting-power.ts index 5517ebde..eb54bf90 100644 --- a/packages/council-cli/src/commands/vault/get-voting-power.ts +++ b/packages/council-cli/src/commands/vault/get-voting-power.ts @@ -1,33 +1,29 @@ -import { ReadCouncil } from "@delvtech/council-viem"; +import { createCouncil } from "@delvtech/council-js"; import { command } from "clide-js"; import signale from "signale"; -import { createPublicClient, http } from "viem"; -import { chainOption, getChain } from "../../reusable-options/chain.js"; -import { rpcUrlOption } from "../../reusable-options/rpc-url.js"; +import { rpcUrlOption } from "../../options/rpc-url.js"; export default command({ description: "Get the voting power of a given account.", options: { - address: { - description: "The vault contract address", - type: "string", + a: { + alias: ["address"], + description: "The vault contract address.", + type: "hex", required: true, }, - account: { - alias: ["voter"], - description: "The account to get the voting power of", - type: "string", + v: { + alias: ["voter", "account"], + description: "The account to get the voting power of.", + type: "hex", required: true, }, - chain: chainOption, - rpc: rpcUrlOption, + r: rpcUrlOption, }, - handler: async ({ options, context, next }) => { - const chain = await getChain(options.chain, context); - - const rpcUrl = await options.rpc({ + handler: async ({ options, next }) => { + const rpcUrl = await options.rpcUrl({ prompt: "Enter RPC URL", }); @@ -35,19 +31,13 @@ export default command({ prompt: "Enter vault contract address", }); - const account = await options.account({ + const voter = await options.voter({ prompt: "Enter account to get voting power of", }); - const transport = http(rpcUrl); - const publicClient = createPublicClient({ transport, chain }); - - const council = new ReadCouncil({ publicClient }); - const votingVault = council.votingVault(address as `0x${string}`); - - const votingPower = await votingVault.getVotingPower({ - account: account as `0x${string}`, - }); + const votingPower = await createCouncil({ rpcUrl }) + .votingVault(address) + .getVotingPower({ voter }); signale.success(votingPower); next(votingPower); diff --git a/packages/council-cli/src/commands/vesting-vault/get-delegate.ts b/packages/council-cli/src/commands/vesting-vault/get-delegate.ts index ae68302a..3b8fb551 100644 --- a/packages/council-cli/src/commands/vesting-vault/get-delegate.ts +++ b/packages/council-cli/src/commands/vesting-vault/get-delegate.ts @@ -1,33 +1,29 @@ -import { ReadCouncil } from "@delvtech/council-viem"; +import { createCouncil } from "@delvtech/council-js"; import { command } from "clide-js"; import signale from "signale"; -import { createPublicClient, http } from "viem"; -import { chainOption, getChain } from "../../reusable-options/chain.js"; -import { rpcUrlOption } from "../../reusable-options/rpc-url.js"; +import { rpcUrlOption } from "../../options/rpc-url.js"; export default command({ description: "Get the delegate of a given account.", options: { - address: { - description: "The LockingVault contract address", - type: "string", + a: { + alias: ["address"], + description: "The LockingVault contract address.", + type: "hex", required: true, }, - account: { - alias: ["voter"], - description: "The account to get the delegate of", - type: "string", + v: { + alias: ["account", "voter"], + description: "The account to get the delegate of.", + type: "hex", required: true, }, - chain: chainOption, rpc: rpcUrlOption, }, - handler: async ({ options, context, next }) => { - const chain = await getChain(options.chain, context); - - const rpcUrl = await options.rpc({ + handler: async ({ options, next }) => { + const rpcUrl = await options.rpcUrl({ prompt: "Enter RPC URL", }); @@ -35,21 +31,15 @@ export default command({ prompt: "Enter LockingVault contract address", }); - const account = await options.account({ + const account = await options.voter({ prompt: "Enter account to get delegate of", }); - const transport = http(rpcUrl); - const publicClient = createPublicClient({ transport, chain }); - - const council = new ReadCouncil({ publicClient }); - const lockingVault = council.lockingVault(address as `0x${string}`); - - const delegate = await lockingVault.getDelegate({ - account: account as `0x${string}`, - }); + const delegate = await createCouncil({ rpcUrl }) + .vestingVault(address) + .getDelegate(account); - signale.info(delegate.address); + signale.info(delegate); next(delegate); }, }); diff --git a/packages/council-cli/src/commands/vesting-vault/get-token.ts b/packages/council-cli/src/commands/vesting-vault/get-token.ts index 8798c468..48002000 100644 --- a/packages/council-cli/src/commands/vesting-vault/get-token.ts +++ b/packages/council-cli/src/commands/vesting-vault/get-token.ts @@ -1,27 +1,23 @@ -import { ReadCouncil } from "@delvtech/council-viem"; +import { createCouncil } from "@delvtech/council-js"; import { command } from "clide-js"; import signale from "signale"; -import { createPublicClient, http } from "viem"; -import { chainOption, getChain } from "../../reusable-options/chain.js"; -import { rpcUrlOption } from "../../reusable-options/rpc-url.js"; +import { rpcUrlOption } from "../../options/rpc-url.js"; export default command({ description: "Get the token contract address of a given locking vault.", options: { - address: { + a: { + alias: ["address"], description: "The LockingVault contract address", - type: "string", + type: "hex", required: true, }, - chain: chainOption, rpc: rpcUrlOption, }, - handler: async ({ options, context, next }) => { - const chain = await getChain(options.chain, context); - - const rpcUrl = await options.rpc({ + handler: async ({ options, next }) => { + const rpcUrl = await options.rpcUrl({ prompt: "Enter RPC URL", }); @@ -29,13 +25,9 @@ export default command({ prompt: "Enter LockingVault contract address", }); - const transport = http(rpcUrl); - const publicClient = createPublicClient({ transport, chain }); - - const council = new ReadCouncil({ publicClient }); - const lockingVault = council.lockingVault(address as `0x${string}`); - - const token = await lockingVault.getToken(); + const token = await createCouncil({ rpcUrl }) + .vestingVault(address) + .getToken(); signale.info(token.address); next(token); diff --git a/packages/council-cli/src/config.ts b/packages/council-cli/src/config.ts index d97a5e1a..3a86553e 100644 --- a/packages/council-cli/src/config.ts +++ b/packages/council-cli/src/config.ts @@ -1,5 +1,5 @@ +import { getAppRootDir } from "./utils/config/getAppRootDir.js"; import { JsonStore } from "./utils/config/JsonStore.js"; -import { getOSConfigDir } from "./utils/config/getOSConfigDir.js"; const configSettingNames = ["rpc-url"] as const; @@ -7,10 +7,8 @@ export type CouncilCliConfig = Partial< Record<(typeof configSettingNames)[number], string> >; -// TODO: Test if this will work in environments like an AWS Lambda and ensure -// graceful fallbacks if not. export const config = new JsonStore({ - path: getOSConfigDir("council"), + path: getAppRootDir(), name: "cli", defaults: { "rpc-url": process.env.RPC_URL, diff --git a/packages/council-cli/src/council.ts b/packages/council-cli/src/council.ts index d00ea5af..90a1a038 100644 --- a/packages/council-cli/src/council.ts +++ b/packages/council-cli/src/council.ts @@ -1,9 +1,12 @@ #!/usr/bin/env node +import { initSync, wasmBuffer } from "@delvtech/fixed-point-wasm"; import { help, run } from "clide-js"; import { commandMenu } from "clide-plugin-command-menu"; import "dotenv/config"; import signale from "signale"; +initSync(wasmBuffer); + run({ plugins: [ // Help generator with --help and -h options @@ -29,11 +32,15 @@ run({ }, }, - afterParse: async ({ parsedOptions, context }) => { + afterParse: async ({ parsedOptions, context, setParsedOptions }) => { + // Set defaults if --yes is passed if (parsedOptions.yes) { + console.log("Using default option values..."); + const newOptions = { ...parsedOptions }; for (const [key, config] of Object.entries(context.options)) { - (parsedOptions[key] as any) = parsedOptions[key] ?? config.default; + (newOptions[key] as any) ??= config.default; } + setParsedOptions(newOptions); } }, }).catch((error) => { diff --git a/packages/council-cli/src/deploy/Deployer.ts b/packages/council-cli/src/deploy/Deployer.ts new file mode 100644 index 00000000..f5282691 --- /dev/null +++ b/packages/council-cli/src/deploy/Deployer.ts @@ -0,0 +1,128 @@ +import { ConstructorArgs, prepareParamsArray } from "@delvtech/drift"; +import signale from "signale"; +import { + Abi, + Account, + Chain, + Hex, + PublicClient, + Transport, + WalletClient, +} from "viem"; +import { stringifyBigInts } from "../utils/stringifyBigInts.js"; +import { DeployedContractInfo, getDeploymentJson } from "./DeploymentJson.js"; + +export const DEFAULT_DEPLOYMENTS_DIR = + process.env.DEPLOYMENTS_DIR || "./deployments"; + +export interface DeployerOptions { + publicClient: PublicClient; + walletClient: WalletClient; +} + +export class Deployer { + #publicClient: PublicClient; + #walletClient: WalletClient; + #deployedContracts: DeployedContractInfo[] = []; + #savedPaths: Set = new Set(); + + constructor({ publicClient, walletClient }: DeployerOptions) { + this.#publicClient = publicClient; + this.#walletClient = walletClient; + } + + get deployedContracts(): DeployedContractInfo[] { + return this.#deployedContracts; + } + + get savedPaths(): Set { + return this.#savedPaths; + } + + async deploy({ + name, + abi, + args, + bytecode, + onSubmitted, + }: { + name: string; + abi: TAbi; + args: ConstructorArgs; + bytecode: Hex; + onSubmitted?: (txHash: string) => void; + }): Promise { + signale.pending(`Deploying ${name}...`); + + const { params } = prepareParamsArray({ + abi, + kind: "inputs", + type: "constructor", + name: undefined as any, + value: args, + }); + + const hash = await this.#walletClient.deployContract({ + abi, + args: params, + bytecode, + account: this.#walletClient.account, + } as any); + onSubmitted?.(hash); + + signale.pending(`${name} deployment tx submitted: ${hash}`); + + const { contractAddress } = + await this.#publicClient.waitForTransactionReceipt({ + hash, + }); + + if (!contractAddress) { + throw new Error( + `No contract address found in receipt for ${name} deployment tx: ${hash}`, + ); + } + + signale.success(`${name} deployed @ ${contractAddress}`); + + const info: DeployedContractInfo = { + name, + address: contractAddress, + deployTransaction: hash, + deployArgs: stringifyBigInts(params), + bytecode, + }; + + this.#deployedContracts.push(info); + return info; + } + + /** + * Save information about the deployed contracts to a json file. + * @returns The path to the saved deployment information. + */ + save({ + name, + outDir = DEFAULT_DEPLOYMENTS_DIR, + }: { + /** The name of the deployment. */ + name: string; + /** The directory to save the deployment information to. */ + outDir?: string; + }): string { + const chainId = this.#walletClient.chain.id; + const json = getDeploymentJson({ name, chainId, outDir }); + + signale.pending(`Saving deployment info to: ${json.path}`); + + json.set({ + deployer: this.#walletClient.account.address, + contracts: this.#deployedContracts, + }); + + signale.success(`Deployment info saved to: ${json.path}`); + + this.#savedPaths.add(json.path); + return json.path; + } +} diff --git a/packages/council-cli/src/deploymentStore.ts b/packages/council-cli/src/deploy/DeploymentJson.ts similarity index 58% rename from packages/council-cli/src/deploymentStore.ts rename to packages/council-cli/src/deploy/DeploymentJson.ts index 8b81475d..74766aea 100644 --- a/packages/council-cli/src/deploymentStore.ts +++ b/packages/council-cli/src/deploy/DeploymentJson.ts @@ -1,33 +1,24 @@ -import { JsonStore } from "./utils/config/JsonStore.js"; +import { Address, Bytes, HexString } from "@delvtech/drift"; +import { JsonStore } from "../utils/config/JsonStore.js"; -export const DEFAULT_DEPLOYMENTS_DIR = "./deployments"; +export type DeploymentJson = JsonStore; -export interface ContractInfo { - address: string; - name: string; - deploymentTransactionHash?: string; - deploymentArgs?: any[]; -} - -export interface DeploymentInfo { +export function getDeploymentJson({ + name, + chainId, + outDir, +}: { name: string; chainId: number; - timestamp?: number; - deployer?: string; - contracts: ContractInfo[]; -} - -export function getDeploymentStore( - name: string, - chainId: number, - deploymentsDir = DEFAULT_DEPLOYMENTS_DIR, -): JsonStore { + outDir: string; +}): DeploymentJson { return new JsonStore({ - path: deploymentsDir, - name: `${name}-${chainId}`, + path: outDir, + name: `${chainId}-${name}`, defaults: { name, chainId, + deployer: "0x", contracts: [], }, schema: { @@ -37,9 +28,6 @@ export function getDeploymentStore( chainId: { type: "number", }, - timestamp: { - type: "number", - }, deployer: { type: "string", }, @@ -66,3 +54,18 @@ export function getDeploymentStore( }, }); } + +export interface DeploymentInfo { + name: string; + chainId: number; + deployer: Address; + contracts: DeployedContractInfo[]; +} + +export interface DeployedContractInfo { + name: string; + address: Address; + deployTransaction: HexString; + deployArgs: any[]; + bytecode: Bytes; +} diff --git a/packages/council-cli/src/lib/viem.ts b/packages/council-cli/src/lib/viem.ts index fbe5f072..9dd5068c 100644 --- a/packages/council-cli/src/lib/viem.ts +++ b/packages/council-cli/src/lib/viem.ts @@ -1,24 +1,34 @@ +import { Client, Hex } from "viem"; import { + anvil, arbitrum, + base, + gnosis, goerli, - localhost, + hardhat, + linea, mainnet, optimism, polygon, sepolia, } from "viem/chains"; -export const supportedChains = { - [formatChainName(localhost.name)]: localhost, - [formatChainName(mainnet.name)]: mainnet, +export const configuredChains = { + [formatChainName(anvil.name)]: anvil, + [formatChainName(arbitrum.name)]: arbitrum, + [formatChainName(base.name)]: base, + [formatChainName(gnosis.name)]: gnosis, [formatChainName(goerli.name)]: goerli, - [formatChainName(sepolia.name)]: sepolia, + [formatChainName(hardhat.name)]: hardhat, + [formatChainName(linea.name)]: linea, + [formatChainName(mainnet.name)]: mainnet, [formatChainName(optimism.name)]: optimism, - [formatChainName(arbitrum.name)]: arbitrum, [formatChainName(polygon.name)]: polygon, + [formatChainName(sepolia.name)]: sepolia, }; -export type SupportedChain = keyof typeof supportedChains; +type ConfiguredChains = typeof configuredChains; +export type ConfiguredChain = keyof ConfiguredChains; export function formatChainName(name: K): HyphenCase { return name.replace(" ", "-").toLowerCase() as HyphenCase; @@ -29,3 +39,41 @@ export type HyphenCase = T extends `${infer A}${infer B}` ? `${Lowercase}-${HyphenCase>}` : `${Lowercase}${HyphenCase}` : T; + +export const localChainIds: number[] = [hardhat.id, anvil.id]; + +/** + * Mine a given number of blocks on the local testnet + * @param blocks The number of blocks to mine + * @returns The new current block number + */ +export async function mine({ + blocks, + client, +}: { + blocks: number; + client: Client; +}): Promise { + const methodsToTry: any[] = ["hardhat_mine", "anvil_mine"]; + const params: [Hex] = [`0x${blocks.toString(16)}`]; + let success = true; + let error: unknown; + + while (!success && methodsToTry.length) { + await client + .request({ + method: methodsToTry.shift()!, + params, + }) + .then(() => { + success = true; + }) + .catch((e) => { + error ||= e; + }); + } + + if (!success) { + throw error; + } +} diff --git a/packages/council-cli/src/reusable-options/call-hash.ts b/packages/council-cli/src/options/call-hash.ts similarity index 77% rename from packages/council-cli/src/reusable-options/call-hash.ts rename to packages/council-cli/src/options/call-hash.ts index d2d4e6b6..30acf032 100644 --- a/packages/council-cli/src/reusable-options/call-hash.ts +++ b/packages/council-cli/src/options/call-hash.ts @@ -1,30 +1,32 @@ -import { OptionGetter, OptionsConfig } from "clide-js"; +import { Bytes } from "@delvtech/drift"; +import { OptionGetter, options } from "clide-js"; import colors from "colors"; +import { Address, Hash } from "viem"; import { createCallHash } from "../utils/createCallHash.js"; import { isNotEmptyList } from "../utils/validation/isNotEmptyList.js"; -export const callHashOptions = { +export const callHashOptions = options({ "call-hash": { - description: "The hash entry to increase time for", - type: "string", + description: "The hash entry to increase time for.", + type: "hex", }, targets: { description: "A list of addresses to call. This will be used with the `--calldatas` option to create a call hash if one isn't provided via the `--call-hash` option.", - type: "array", + type: "hexArray", }, calldatas: { description: "Encoded call data for each target. This will be used with the `--targets` option to create a call hash if one isn't provided via the `--call-hash` option.", - type: "array", + type: "hexArray", }, -} as const satisfies OptionsConfig; +}); export async function getCallHash( - callHashGetter: OptionGetter, - targetsGetter: OptionGetter, - calldatasGetter: OptionGetter, -): Promise { + callHashGetter: OptionGetter, + targetsGetter: OptionGetter, + calldatasGetter: OptionGetter, +): Promise { let callHash = await callHashGetter(); if (callHash) { return callHash; diff --git a/packages/council-cli/src/options/chain.ts b/packages/council-cli/src/options/chain.ts new file mode 100644 index 00000000..8ca9b1eb --- /dev/null +++ b/packages/council-cli/src/options/chain.ts @@ -0,0 +1,48 @@ +import { Client, option, OptionGetter } from "clide-js"; +import { Chain, defineChain } from "viem"; +import { ConfiguredChain, configuredChains } from "../lib/viem.js"; + +export const chainOption = option({ + alias: ["chain"], + description: "The chain to target.", + type: "string", + required: true, + default: process.env.CHAIN || "localhost", + choices: [...Object.keys(configuredChains), "other"], +}); + +export async function getChain( + chainOptionGetter: OptionGetter, + client = new Client(), +): Promise { + const chosenChain = (await chainOptionGetter({ + prompt: "Select chain", + })) as ConfiguredChain | "other" | `other:${number}`; + + if (chosenChain in configuredChains) { + return configuredChains[chosenChain as ConfiguredChain]; + } + + const id = chosenChain.startsWith("other:") + ? parseInt(chosenChain.split(":")[1]) + : await client.prompt({ + message: "Enter chain ID", + type: "number", + validate: (value) => !!value, + }); + + return defineChain({ + id: id || 0, + name: chosenChain, + network: "other", + nativeCurrency: { + decimals: 18, + name: "Native Currency", + symbol: "VALUE", + }, + rpcUrls: { + default: { http: [] }, + public: { http: [] }, + }, + }); +} diff --git a/packages/council-cli/src/options/decimals.ts b/packages/council-cli/src/options/decimals.ts new file mode 100644 index 00000000..b7619f39 --- /dev/null +++ b/packages/council-cli/src/options/decimals.ts @@ -0,0 +1,9 @@ +import { option } from "clide-js"; + +export const decimalsOption = option({ + alias: ["decimals"], + type: "number", + description: "The decimals to parse decimal string options with.", + default: 18, + required: true, +}); diff --git a/packages/council-cli/src/reusable-options/deploy/fresh-deploy.ts b/packages/council-cli/src/options/deploy/fresh-deploy.ts similarity index 51% rename from packages/council-cli/src/reusable-options/deploy/fresh-deploy.ts rename to packages/council-cli/src/options/deploy/fresh-deploy.ts index aca4e1c3..263b20ab 100644 --- a/packages/council-cli/src/reusable-options/deploy/fresh-deploy.ts +++ b/packages/council-cli/src/options/deploy/fresh-deploy.ts @@ -1,8 +1,8 @@ -import { OptionConfig } from "clide-js"; +import { option } from "clide-js"; -export const freshDeployOption = { +export const freshDeployOption = option({ alias: ["fresh-deploy"], description: "Deploy all contracts from scratch.", type: "boolean", default: false, -} as const satisfies OptionConfig; +}); diff --git a/packages/council-cli/src/options/owner.ts b/packages/council-cli/src/options/owner.ts new file mode 100644 index 00000000..3174bb64 --- /dev/null +++ b/packages/council-cli/src/options/owner.ts @@ -0,0 +1,8 @@ +import { option } from "clide-js"; + +export const ownerOption = option({ + alias: ["owner"], + description: + "The contract owner's address (e.g., a Timelock contract). Defaults to the deployer address.", + type: "hex", +}); diff --git a/packages/council-cli/src/reusable-options/rpc-url.ts b/packages/council-cli/src/options/rpc-url.ts similarity index 54% rename from packages/council-cli/src/reusable-options/rpc-url.ts rename to packages/council-cli/src/options/rpc-url.ts index 051ec984..dfaaaeff 100644 --- a/packages/council-cli/src/reusable-options/rpc-url.ts +++ b/packages/council-cli/src/options/rpc-url.ts @@ -1,9 +1,9 @@ -import { OptionConfig } from "clide-js"; +import { option } from "clide-js"; -export const rpcUrlOption = { - alias: ["rpc", "rpc-url"], +export const rpcUrlOption = option({ + alias: ["rpc-url"], description: "An RPC URL to send the transaction request to", type: "string", required: true, default: process.env.RPC_URL || "http://127.0.0.1:8545", -} as const satisfies OptionConfig; +}); diff --git a/packages/council-cli/src/options/types.ts b/packages/council-cli/src/options/types.ts new file mode 100644 index 00000000..11ba048e --- /dev/null +++ b/packages/council-cli/src/options/types.ts @@ -0,0 +1,8 @@ +import { HexString } from "@delvtech/drift"; + +declare module "clide-js" { + export interface OptionPrimitiveTypeMap { + hex: HexString; + hexArray: HexString[]; + } +} diff --git a/packages/council-cli/src/reusable-options/wallet-key.ts b/packages/council-cli/src/options/wallet-key.ts similarity index 61% rename from packages/council-cli/src/reusable-options/wallet-key.ts rename to packages/council-cli/src/options/wallet-key.ts index 54bd1938..aec51fbf 100644 --- a/packages/council-cli/src/reusable-options/wallet-key.ts +++ b/packages/council-cli/src/options/wallet-key.ts @@ -1,9 +1,9 @@ -import { OptionConfig } from "clide-js"; +import { option } from "clide-js"; -export const walletKeyOption = { +export const walletKeyOption = option({ alias: ["wallet-key"], description: "A wallet key to sign and pay for the transaction", type: "secret", required: true, default: process.env.WALLET_PRIVATE_KEY, -} as const satisfies OptionConfig; +}); diff --git a/packages/council-cli/src/options/writeOptions.ts b/packages/council-cli/src/options/writeOptions.ts new file mode 100644 index 00000000..17ac0b24 --- /dev/null +++ b/packages/council-cli/src/options/writeOptions.ts @@ -0,0 +1,69 @@ +import { createCouncil, ReadWriteCouncil } from "@delvtech/council-js"; +import { createDrift, Drift, ReadWriteAdapter } from "@delvtech/drift"; +import { viemAdapter } from "@delvtech/drift-viem"; +import { Client, options, OptionsGetter } from "clide-js"; +import { + Account, + Chain, + createPublicClient, + createWalletClient, + http, + PrivateKeyAccount, + PublicClient, + Transport, + WalletClient, +} from "viem"; +import { privateKeyToAccount } from "viem/accounts"; +import { chainOption, getChain } from "./chain.js"; +import { rpcUrlOption } from "./rpc-url.js"; +import { walletKeyOption } from "./wallet-key.js"; + +export const writeOptions = options({ + [chainOption.alias[0]]: chainOption, + [rpcUrlOption.alias[0]]: rpcUrlOption, + [walletKeyOption.alias[0]]: walletKeyOption, +}); + +export interface WriteOptions { + chain: Chain; + rpcUrl: string; + account: PrivateKeyAccount; + publicClient: PublicClient; + walletClient: WalletClient; + drift: Drift; + council: ReadWriteCouncil; +} + +export async function getWriteOptions( + optionsGetter: OptionsGetter, + client?: Client, +): Promise { + const chain = await getChain(optionsGetter.chain, client); + + const rpcUrl = await optionsGetter.rpcUrl({ + prompt: "Enter RPC URL", + }); + + const walletKey = await optionsGetter.walletKey({ + prompt: "Enter wallet key", + }); + + const account = privateKeyToAccount(walletKey as `0x${string}`); + const transport = http(rpcUrl); + const publicClient = createPublicClient({ chain, transport }); + const walletClient = createWalletClient({ transport, chain, account }); + const drift = createDrift({ + adapter: viemAdapter({ publicClient, walletClient }), + }); + const council = createCouncil({ drift }); + + return { + chain, + rpcUrl, + account, + publicClient, + walletClient, + drift, + council, + }; +} diff --git a/packages/council-cli/src/reusable-options/chain.ts b/packages/council-cli/src/reusable-options/chain.ts deleted file mode 100644 index 71ad843d..00000000 --- a/packages/council-cli/src/reusable-options/chain.ts +++ /dev/null @@ -1,81 +0,0 @@ -import { Context, OptionConfig, OptionGetter } from "clide-js"; -import { Chain, defineChain } from "viem"; -import { - HyphenCase, - SupportedChain, - formatChainName, - supportedChains, -} from "../lib/viem.js"; - -// TODO: Add a way to register new chains that updates the chain prompt and -// makes it possible to use the custom chain name in environment variables. - -export const chainOption = { - alias: ["chain"], - description: "The chain to target.", - type: "string", - required: true, - default: process.env.CHAIN || "localhost", -} as const satisfies OptionConfig; - -const supportedChainNames = Object.keys(supportedChains); - -export async function getChain( - chainOptionGetter: OptionGetter, - context?: Context, -): Promise { - const choices = supportedChainNames.map((chainName) => { - return { - title: chainName, - value: chainName, - }; - }); - - if (context) { - choices.push({ - title: "other", - value: "other", - }); - } - - const chosenChain = (await chainOptionGetter({ - prompt: { - message: "Select chain", - type: "select", - choices, - }, - })) as SupportedChain | "other" | `other:${number}`; - - if (chosenChain in supportedChains) { - return supportedChains[chosenChain as SupportedChain]; - } - - const id = chosenChain.startsWith("other:") - ? parseInt(chosenChain.split(":")[1]) - : await context?.client.prompt({ - message: "Enter chain ID", - type: "number", - }); - - return defineChain({ - id, - name: chosenChain, - network: "other", - nativeCurrency: { - decimals: 18, - name: "Native Currency", - symbol: "VALUE", - }, - rpcUrls: { - default: { http: [] }, - public: { http: [] }, - }, - }); -} - -/** Derive the correct option value from a Chain object. */ -export function chainToOptionValue( - chain: TChain, -): HyphenCase { - return formatChainName(chain.name) as HyphenCase; -} diff --git a/packages/council-cli/src/reusable-options/writeOptions.ts b/packages/council-cli/src/reusable-options/writeOptions.ts deleted file mode 100644 index 5a42556f..00000000 --- a/packages/council-cli/src/reusable-options/writeOptions.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { Context, OptionsConfig, OptionsGetter } from "clide-js"; -import { Chain, PrivateKeyAccount } from "viem"; -import { privateKeyToAccount } from "viem/accounts"; -import { chainOption, getChain } from "./chain.js"; -import { rpcUrlOption } from "./rpc-url.js"; -import { walletKeyOption } from "./wallet-key.js"; - -export const writeOptions = { - chain: chainOption, - rpc: rpcUrlOption, - wallet: walletKeyOption, -} as const satisfies OptionsConfig; - -export interface WriteOptions { - chain: Chain; - rpcUrl: string; - account: PrivateKeyAccount; - walletKey: `0x${string}`; -} - -export async function getWriteOptions( - optionsGetter: OptionsGetter, - context?: Context, -): Promise { - const chain = await getChain(optionsGetter.chain, context); - - const rpcUrl = await optionsGetter.rpc({ - prompt: "Enter RPC URL", - }); - - const walletKey = await optionsGetter.wallet({ - prompt: "Enter wallet key", - }); - - const account = privateKeyToAccount(walletKey as `0x${string}`); - - return { - chain, - rpcUrl, - account, - walletKey: walletKey as `0x${string}`, - }; -} diff --git a/packages/council-cli/src/utils/config/JsonStore.ts b/packages/council-cli/src/utils/config/JsonStore.ts index 714e14e2..646415b6 100644 --- a/packages/council-cli/src/utils/config/JsonStore.ts +++ b/packages/council-cli/src/utils/config/JsonStore.ts @@ -1,44 +1,31 @@ -import ajv, { ValidateFunction } from "ajv"; +import ajv, { type ValidateFunction } from "ajv"; import type { JSONSchema } from "json-schema-typed"; -import fs from "node:fs"; -import path from "node:path"; -import { OptionalKeys, RequiredKeys } from "../types.js"; - -fs.promises; +import { mkdirSync, readFileSync, rmSync, writeFileSync } from "node:fs"; +import { dirname, resolve } from "node:path"; +import type { IfElse, IsNever, OptionalKey, RequiredKey } from "../types.js"; const Ajv = ajv.default; /** * An object of JSONSchemas based on `T` */ -export type Schema = { +export type JsonStoreSchema> = { [K in keyof T]-?: JSONSchema; }; -/** - * Options that change depending on whether `T` includes required fields - */ -export type DynamicJSONStoreOptions = - RequiredKeys extends never - ? { - /** - * The default values the JSON will be created with and will reset to - */ - defaults?: T; - } - : { - /** - * The default values the JSON will be created with and will reset to - */ - defaults: T; - }; +type DefaultsOption = { + /** + * The default values the JSON will be created with and will reset to + */ + defaults?: T; +}; /** * Options for the `JSONStore` class */ export type JsonStoreOptions> = { /** - * The path where the JSON will be saved *excluding the filename* + * The path where the JSON will be saved; *excluding the filename* */ path: string; @@ -47,13 +34,19 @@ export type JsonStoreOptions> = { */ name: string; - schema?: Schema; -} & DynamicJSONStoreOptions; + /** + * A schema to validate the JSON against + * @see {@link https://ajv.js.org/json-schema.html} + */ + schema?: JsonStoreSchema; +} & IfElse< + IsNever>, + DefaultsOption, + Required> +>; /** - * A custom JSON store since all the good ones require ESM :( - * - * Use a JSON file to persist key-value data + * Use a JSON file to persist key-value data. */ export class JsonStore> { /** @@ -66,53 +59,64 @@ export class JsonStore> { */ readonly defaults: JsonStoreOptions["defaults"]; + readonly schema?: JsonStoreSchema; + /** * Ensures the JSON matches the schema if provided */ - private readonly _validator?: ValidateFunction; + #validator?: ValidateFunction; /** * Use a JSON file to persist key-value data */ - constructor(options: JsonStoreOptions) { - const filename = `${removeJsonExtension(options.name)}.json`; - this.path = path.resolve(process.cwd(), options.path, filename); + constructor({ name, path, defaults, schema }: JsonStoreOptions) { + if (!name.endsWith(".json")) name += ".json"; + this.path = resolve(process.cwd(), path, name); - if (options.schema) { + if (schema) { + this.schema = schema; const ajv = new Ajv({ allErrors: true, useDefaults: true }); const storeSchema: JSONSchema = { type: "object", - properties: options.schema, + properties: schema, additionalProperties: false, }; - this._validator = ajv.compile(storeSchema); + this.#validator = ajv.compile(storeSchema); } - this.defaults = options.defaults || ({} as T); + this.defaults = defaults || ({} as T); } /** * Get the store as an object */ - get data(): T { + data(): T { + let raw: string; let data: T; try { - const raw = fs.readFileSync(this.path, "utf8"); - // TODO: handle parse error + raw = readFileSync(this.path, "utf8"); + } catch (err) { + this.reset(); + return this.defaults as T; + } + + try { data = JSON.parse(raw); } catch (err) { - data = this.defaults as T; - this._save(data); - return data; + const backupPath = `${this.path}.bak`; + writeFileSync(backupPath, raw); + this.reset(); + console.error( + `Failed to parse JSON from ${this.path}. The file has been backed up at ${backupPath} and the store has been reset.`, + ); + return this.defaults as T; } - this._validate(data); + this.validate(data); return data; - - // { 'rpc-url': undefined } } /** @@ -120,7 +124,7 @@ export class JsonStore> { */ rm(): void { try { - fs.rmSync(this.path); + rmSync(this.path); } catch (_) {} } @@ -132,7 +136,7 @@ export class JsonStore> { set(values: Partial): void; set(key: K, value: T[K]): void; set(keyOrValues: K | Partial, value?: T[K]): void { - const data = this.data; + const data = this.data(); if (typeof keyOrValues !== "object" && value) { validateSerializable(keyOrValues.toString(), value); @@ -144,7 +148,7 @@ export class JsonStore> { Object.assign(data, keyOrValues); } - this._save(data); + this.save(data); } /** @@ -153,7 +157,7 @@ export class JsonStore> { * @returns The value of `store[key]` */ get(key: K): T[K] { - return this.data[key]; + return this.data()[key]; } /** @@ -161,9 +165,8 @@ export class JsonStore> { * @param keys - The keys to look for * @returns True if all keys exists, false otherwise */ - // TODO: consider deleting because of the smart types has(...keys: (keyof T)[]): boolean { - const data = this.data; + const data = this.data(); let hasAllKeys = true; @@ -181,8 +184,8 @@ export class JsonStore> { * @param keys - The keys of the entries to delete * @returns True if all entries were deleted, false otherwise */ - delete(...keys: OptionalKeys[]): boolean { - const data = this.data; + delete(...keys: OptionalKey[]): boolean { + const data = this.data(); let didDeleteSome = false; let didDeleteAll = true; @@ -197,7 +200,7 @@ export class JsonStore> { } if (didDeleteSome) { - this._save(data); + this.save(data); } return didDeleteAll; @@ -206,26 +209,23 @@ export class JsonStore> { /** * Reset config to defaults */ - reset(): void { - this._save(this.defaults as T); + reset() { + this.save(this.defaults as T); + return this.defaults; } /** * Throw an error if the data doesn't match the schema * @param data - The data to validate against the schema */ - private _validate(data: T | unknown): void { - if (!this._validator) { - return; - } + private validate(data: T | unknown) { + if (!this.#validator) return; - const valid = this._validator(data); + const valid = this.#validator(data); - if (valid || !this._validator.errors) { - return; - } + if (valid || !this.#validator.errors) return; - const errors = this._validator.errors.map( + const errors = this.#validator.errors.map( ({ instancePath, message = "", params }) => { if (params.additionalProperty) { return `property \`${params.additionalProperty}\` not allowed`; @@ -240,30 +240,21 @@ export class JsonStore> { * Save the store as JSON * @param data - The store data */ - private _save(data: T): true { - this._validate(data); + private save(data: T) { + this.validate(data); const json = JSON.stringify(data, null, 2); - fs.mkdirSync(path.dirname(this.path), { recursive: true }); + mkdirSync(dirname(this.path), { recursive: true }); - fs.writeFileSync(this.path, json, { + writeFileSync(this.path, json, { encoding: "utf8", flag: "w", }); - - return true; } } -/** - * Remove `.json` from the end of a filename - * @param file - The full filename - * @returns The filename without the `.json` extension - */ -function removeJsonExtension(filename: string): string { - return filename.replace(/\.json$/, ""); -} +const invalidTypes = ["undefined", "function", "symbol", "bigint"]; /** * Throw an error if a value is not JSON serializable @@ -271,10 +262,9 @@ function removeJsonExtension(filename: string): string { * @param value - The value to validate */ function validateSerializable(key: string, value: unknown) { - const type = typeof value; - if (["undefined", "function", "symbol", "bigint"].includes(typeof value)) { + if (value === null || invalidTypes.includes(typeof value)) { throw new TypeError( - `Failed to set value of type \`${type}\` for key \`${key}\`. Values must be JSON serializable.`, + `Failed to set value of type \`${typeof value}\` for key \`${key}\`. Values must be JSON serializable.`, ); } } diff --git a/packages/council-cli/src/utils/config/getAppRootDir.ts b/packages/council-cli/src/utils/config/getAppRootDir.ts new file mode 100644 index 00000000..4e0ec440 --- /dev/null +++ b/packages/council-cli/src/utils/config/getAppRootDir.ts @@ -0,0 +1,23 @@ +import { readdirSync } from "node:fs"; +import { dirname } from "node:path"; + +/** + * Get the path to the nearest app root directory based on the presence of a + * `package.json` file. + * @param currentDirectory - The directory to start searching from. Defaults to + * the current working directory. + */ +export function getAppRootDir( + rootDir = "/", + currentDirectory = process.cwd(), +): string { + if (currentDirectory === rootDir) { + throw new Error("Could not find an app root directory."); + } + const dirItems = readdirSync(currentDirectory); + if (!dirItems.includes("package.json")) { + const parentDir = dirname(currentDirectory); + return getAppRootDir(parentDir); + } + return currentDirectory; +} diff --git a/packages/council-cli/src/utils/config/getOSConfigDir.ts b/packages/council-cli/src/utils/config/getOSConfigDir.ts deleted file mode 100644 index d4380d55..00000000 --- a/packages/council-cli/src/utils/config/getOSConfigDir.ts +++ /dev/null @@ -1,39 +0,0 @@ -import os from "node:os"; -import path from "node:path"; - -/** - * Get the path to an app specific config directory based on operating system - * standards. - * @param projectName - * @returns - */ -export function getOSConfigDir(projectName: string): string { - const homeDir = os.homedir(); - const platform = os.platform(); - - let configDir: string; - - if (platform === "win32") { - // Windows - // https://learn.microsoft.com/en-us/windows/apps/design/app-settings/store-and-retrieve-app-data - // https://learn.microsoft.com/en-us/windows/uwp/get-started/fileio-learning-track#app-folders - // https://learn.microsoft.com/en-us/windows/deployment/usmt/usmt-recognized-environment-variables#variables-that-are-recognized-only-in-the-user-context - /* eslint-disable-next-line turbo/no-undeclared-env-vars */ - configDir = process.env.APPDATA || path.join(homeDir, "AppData", "Roaming"); - } else if (platform === "darwin") { - // macOS - // https://apple.fandom.com/wiki/Preferences_folder - // https://developer.apple.com/library/archive/documentation/FileManagement/Conceptual/FileSystemProgrammingGuide/MacOSXDirectories/MacOSXDirectories.html - // https://apple.fandom.com/wiki/Application_Support_folder - configDir = path.join(homeDir, "Library", "Application Support'"); - } else { - // Linux and others - // https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html - // https://how-to.fandom.com/wiki/Guide_to_linux_configuration_files - /* eslint-disable-next-line turbo/no-undeclared-env-vars */ - configDir = process.env.XDG_CONFIG_HOME || path.join(homeDir, ".config"); - } - - // `-nodejs` suffix used to reduce likelihood of conflicts. - return path.join(configDir, `${projectName}-nodejs`); -} diff --git a/packages/council-cli/src/utils/createCallHash.ts b/packages/council-cli/src/utils/createCallHash.ts index b22979b8..05965e39 100644 --- a/packages/council-cli/src/utils/createCallHash.ts +++ b/packages/council-cli/src/utils/createCallHash.ts @@ -1,6 +1,7 @@ import { Address, encodeAbiParameters, + Hash, Hex, keccak256, parseAbiParameters, @@ -12,7 +13,7 @@ import { export function createCallHash( targets: string[], callDatas: BytesLike[], -): string { +): Hash { const encoded = encodeAbiParameters( parseAbiParameters("address[], bytes[]"), [targets as Address[], callDatas as Hex[]], diff --git a/packages/council-cli/src/utils/defaultOptionValues.ts b/packages/council-cli/src/utils/defaultOptionValues.ts deleted file mode 100644 index 1db261c7..00000000 --- a/packages/council-cli/src/utils/defaultOptionValues.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { OptionValues, OptionsConfig } from "clide-js"; - -export default function defaultOptionValues( - optionsConfig: OptionsConfig, -): OptionValues { - return Object.fromEntries( - Object.entries(optionsConfig).map(([key, config]) => { - return [key, config.default]; - }), - ) as OptionValues; -} diff --git a/packages/council-cli/src/utils/deployContract.ts b/packages/council-cli/src/utils/deployContract.ts deleted file mode 100644 index ce1c05ac..00000000 --- a/packages/council-cli/src/utils/deployContract.ts +++ /dev/null @@ -1,71 +0,0 @@ -import { - Abi, - Chain, - createPublicClient, - createWalletClient, - DeployContractParameters, - Hex, - http, - PrivateKeyAccount, -} from "viem"; - -interface DeployContractOptions { - abi: TAbi; - args: DeployContractParameters["args"]; - bytecode: Hex; - account: PrivateKeyAccount; - rpcUrl: string; - chain: Chain; - onSubmitted?: (txHash: string) => void; -} - -export async function deployContract({ - abi, - args, - bytecode, - account, - rpcUrl, - chain, - onSubmitted, -}: DeployContractOptions): Promise { - const publicClient = createPublicClient({ - transport: http(rpcUrl), - chain, - }); - - const walletClient = createWalletClient({ - account, - transport: http(rpcUrl), - chain, - }); - - const hash = await walletClient.deployContract({ - abi, - account, - args, - bytecode, - } as any); - onSubmitted?.(hash); - - const { contractAddress } = await publicClient.waitForTransactionReceipt({ - hash, - }); - - if (!contractAddress) { - throw new Error( - `Contract address not found in deployment receipt for tx, ${hash}`, - ); - } - - return { - address: contractAddress, - hash, - deploymentArgs: args as any[], - }; -} - -export type DeployedContract = { - address: `0x${string}`; - hash: `0x${string}`; - deploymentArgs: any[]; -}; diff --git a/packages/council-cli/src/utils/types.ts b/packages/council-cli/src/utils/types.ts index 4e985abc..5ee71d8c 100644 --- a/packages/council-cli/src/utils/types.ts +++ b/packages/council-cli/src/utils/types.ts @@ -1,13 +1,21 @@ +export type IsNever = [T] extends [never] ? true : false; + +export type IfElse< + TCondition extends boolean, + TTrue, + TFalse, +> = TCondition extends true ? TTrue : TFalse; + /** * Get a union of all required keys on `T` */ -export type RequiredKeys = { +export type RequiredKey = { [K in keyof T]-?: undefined extends T[K] ? never : K; }[keyof T]; /** * Get a union of all options keys on `T` */ -export type OptionalKeys = { +export type OptionalKey = { [K in keyof T]-?: undefined extends T[K] ? K : never; }[keyof T]; diff --git a/packages/council-cli/src/utils/config/validateData.ts b/packages/council-cli/src/utils/validation/validateData.ts similarity index 100% rename from packages/council-cli/src/utils/config/validateData.ts rename to packages/council-cli/src/utils/validation/validateData.ts diff --git a/packages/council-cli/tsconfig.json b/packages/council-cli/tsconfig.json index 5e787536..87c93bce 100644 --- a/packages/council-cli/tsconfig.json +++ b/packages/council-cli/tsconfig.json @@ -6,10 +6,10 @@ "compilerOptions": { "outDir": "dist", "rootDir": "src", - "baseUrl": ".", - // "module": "NodeNext", - // "moduleResolution": "NodeNext", - // "target": "ESNext", + // "baseUrl": ".", + "module": "NodeNext", + "moduleResolution": "NodeNext", + "target": "ESNext", "allowSyntheticDefaultImports": true, // important to import JSON files from @delvtech/council-artifacts @@ -20,12 +20,9 @@ "declarationMap": false, "lib": ["es2023"], - "module": "node16", - "target": "es2022", "strict": true, "esModuleInterop": true, "skipLibCheck": true, - "forceConsistentCasingInFileNames": true, - "moduleResolution": "node16", - }, + "forceConsistentCasingInFileNames": true + } } diff --git a/turbo.json b/turbo.json index 1bf650b9..5f96366a 100644 --- a/turbo.json +++ b/turbo.json @@ -21,46 +21,13 @@ "NEXT_PUBLIC_WALLET_CONNECT_PROJECT_ID" ] }, - "council-sdk-starter#build": { + "@delvtech/council-js#build": { "dependsOn": ["^build"], - "outputs": ["dist/**"], - "env": ["PROVIDER_URI", "WALLET_PRIVATE_KEY", "NODE_ENV"] - }, - "@council/sdk#build": { - "dependsOn": ["^build"], - "outputs": ["dist/**"], - "env": ["PROVIDER_URI", "EXAMPLE_WALLET_PRIVATE_KEY", "NODE_ENV"] - }, - "@council/cli": { - "env": [ - "RPC_URL", - "WALLET_PRIVATE_KEY", - "CHAIN", - "VOTING_TOKEN_ADDRESS", - "VOTING_TOKEN_DECIMALS", - "VOTING_TOKEN_NAME", - "VOTING_TOKEN_SYMBOL", - "BASE_QUORUM", - "MIN_PROPOSAL_POWER", - "LOCK_DURATION", - "EXTRA_VOTING_BLOCKS", - "TIMELOCK_WAIT_TIME", - "TREASURY_ADDRESS", - "STALE_BLOCK_LAG", - "GSC_QUORUM", - "GSC_LOCK_DURATION", - "GSC_EXTRA_VOTING_BLOCKS", - "GSC_VOTING_POWER_BOUND", - "GSC_IDLE_DURATION" - ] + "outputs": ["dist/**"] }, - "@council/cli#build": { + "@delvtech/council-cli#build": { "dependsOn": ["^build"], - "outputs": ["dist/**"], - "env": ["NODE_ENV"] - }, - "@delvtech/council-viem": { - "env": ["TEST_RPC_URL"] + "outputs": ["dist/**"] }, "lint": { "dependsOn": ["^build"], diff --git a/yarn.lock b/yarn.lock index c7e1811c..bbd4f3ad 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4197,10 +4197,10 @@ cli-truncate@^4.0.0: slice-ansi "^5.0.0" string-width "^7.0.0" -clide-js@^0.2.11: - version "0.2.11" - resolved "https://registry.yarnpkg.com/clide-js/-/clide-js-0.2.11.tgz#82978d9e37f41bc879071c22d408229268b00afb" - integrity sha512-z/P0mnePzuw9mUGCeBGFzkBlJ5eCgETUGAbYWqDEtCZd+r8+niqUOZ+vTJs+PfkUmNShtRtUQKZnhIiTAj5XUA== +clide-js@^0.2.13: + version "0.2.13" + resolved "https://registry.yarnpkg.com/clide-js/-/clide-js-0.2.13.tgz#2d7e42a2aa6c37d712648754919416c29c625d2f" + integrity sha512-wPEwwTk4KZMtI/JG4kXao3J6RNiji8B9oxtt3Q+ruVc6kffLd0lqnZnl3cK1KaZ1oanwCPUfcaaXUW/IhB+kdA== dependencies: "@types/prompts" "^2.4.9" cliui "^8.0.1" @@ -10601,10 +10601,10 @@ viem@^2.1.1: ox "0.6.7" ws "8.18.0" -viem@^2.23.6: - version "2.23.6" - resolved "https://registry.yarnpkg.com/viem/-/viem-2.23.6.tgz#05d9b49cc0b5130707ecdcd1b5c141f72b68606c" - integrity sha512-+yUeK8rktbGFQaLIvY4Tki22HUjian9Z4eKGAUT72RF9bcfkYgK8CJZz9P83tgoeLpiTyX3xcBM4xJZrJyKmsA== +viem@^2.23.7: + version "2.23.7" + resolved "https://registry.yarnpkg.com/viem/-/viem-2.23.7.tgz#6955206c36e9f4ba7fc65790167699178de697a7" + integrity sha512-Gbyz0uE3biWDPxECrEyzILWPsnIgDREgfRMuLSWHSSnM6ktefSC/lqQNImnxESdDEixa8/6EWXjmf2H6L9VV0A== dependencies: "@noble/curves" "1.8.1" "@noble/hashes" "1.7.1" From 6f406294525b889b295145b4553c021026a49e94 Mon Sep 17 00:00:00 2001 From: Ryan Goree Date: Fri, 7 Mar 2025 17:47:57 -0600 Subject: [PATCH 134/146] Update sandbox --- apps/sandbox/.env.example | 4 +- apps/sandbox/README.md | 52 +++++-------------- apps/sandbox/package.json | 9 ++-- apps/sandbox/src/client.ts | 4 +- apps/sandbox/src/sandbox.ts | 6 +-- apps/sandbox/src/scripts/changeVaultStatus.ts | 11 ++-- apps/sandbox/src/scripts/createProposal.ts | 34 ++++++------ apps/sandbox/src/scripts/executeProposal.ts | 16 +++--- apps/sandbox/src/scripts/getGscMembers.ts | 41 +++++++++------ .../sandbox/src/scripts/getProposalResults.ts | 28 +++++++--- apps/sandbox/src/scripts/setLockDuration.ts | 10 ++-- 11 files changed, 111 insertions(+), 104 deletions(-) diff --git a/apps/sandbox/.env.example b/apps/sandbox/.env.example index 884bbeb7..b4a7ea2d 100644 --- a/apps/sandbox/.env.example +++ b/apps/sandbox/.env.example @@ -1,2 +1,2 @@ -RPC_URL= -WALLET_PRIVATE_KEY= +RPC_URL=http://127.0.0.1:8545 +WALLET_PRIVATE_KEY=0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 # Hardhat/Anvil account #0 \ No newline at end of file diff --git a/apps/sandbox/README.md b/apps/sandbox/README.md index 2f3b2d62..e9a76229 100644 --- a/apps/sandbox/README.md +++ b/apps/sandbox/README.md @@ -1,56 +1,28 @@ -# council-sdk-starter +# Council Kit Sandbox -A reference project with example scripts using the council sdk. - -- [Installation](#installation) -- [Getting started](#getting-started) - - [Environment](#environment) - - [Starting](#starting) - - [Get Proposal Results](#get-proposal-results) - - [Get GSC Members](#get-gsc-members) - - [Create a Proposal](#create-a-proposal) - - [Building](#building) - -## Installation - -The Council SDK isn't currently available as a stand alone package but can be installed within the council monorepo. - -1. Clone the council-monorepo. -2. Add `"@council/sdk": "*"` to the app or package's package.json. -3. Run install: `yarn`. +A sandbox to try out [Council Kit packages](../../packages). ## Getting started ### Environment -Create your own `.env`. An example template is included in the project in `.env.example`. Provide an RPC url and a private key to sign and pay for transactions. +Create your own `.env` using [`.env.example`](.env.example) for reference. -### Starting +### Running -Multiple example scripts are included in [`src/scripts`](src/scripts). Each one has a corresponding npm script to run it. - -#### Get Proposal Results - -``` -yarn workspace council-sdk-start getProposalResults -``` +Edit the code in [`src/sandbox.ts`](src/sandbox.ts) then run: -#### Get GSC Members +```bash +yarn workspace sandbox dev +# or to run on save: +yarn workspace sandbox watch ``` -yarn workspace council-sdk-start getGSCMembers -``` - -#### Create a Proposal -_Caution! this will require paying gas._ - -``` -yarn workspace council-sdk-start createProposal -``` +Example scripts can be found in [`src/scripts`](src/scripts). Each one has a corresponding [package.json](package.json) script to run it. -### Building +For example: ```bash -yarn workspace council-sdk-starter build +yarn workspace sandbox getProposalResults ``` diff --git a/apps/sandbox/package.json b/apps/sandbox/package.json index 3cd88a72..1ce45f3b 100644 --- a/apps/sandbox/package.json +++ b/apps/sandbox/package.json @@ -8,19 +8,20 @@ "scripts": { "dev": "tsx -r dotenv/config src/sandbox.ts", "watch": "tsx -r dotenv/config --watch src/sandbox.ts", + "changeVaultStatus": "tsx -r dotenv/config src/scripts/changeVaultStatus.ts", "createProposal": "tsx -r dotenv/config src/scripts/createProposal.ts", "executeProposal": "tsx -r dotenv/config src/scripts/executeProposal.ts", - "setLockDuration": "tsx -r dotenv/config src/scripts/setLockDuration.ts", - "changeVaultStatus": "tsx -r dotenv/config src/scripts/changeVaultStatus.ts", - "getGSCMembers": "tsx -r dotenv/config ./src/scripts/getGSCMembers.ts", + "getGscMembers": "tsx -r dotenv/config src/scripts/getGscMembers.ts", "getProposalResults": "tsx -r dotenv/config src/scripts/getProposalResults.ts", + "setLockDuration": "tsx -r dotenv/config src/scripts/setLockDuration.ts", "typecheck": "tsc --noEmit" }, "dependencies": { "@delvtech/drift": "^0.6.0", "@delvtech/drift-viem": "^0.6.0", + "@delvtech/fixed-point-wasm": "^0.0.7", "@delvtech/council-js": "^0.0.0", - "viem": "^2.23.6" + "viem": "^2.23.7" }, "devDependencies": { "@types/node": "^22.13.1", diff --git a/apps/sandbox/src/client.ts b/apps/sandbox/src/client.ts index 42a1955b..3bcbc989 100644 --- a/apps/sandbox/src/client.ts +++ b/apps/sandbox/src/client.ts @@ -1,5 +1,6 @@ import { createCouncil } from "@delvtech/council-js"; import { viemAdapter } from "@delvtech/drift-viem"; +import { initSync, wasmBuffer } from "@delvtech/fixed-point-wasm"; import { createPublicClient, createWalletClient, @@ -10,10 +11,11 @@ import { } from "viem"; import { privateKeyToAccount } from "viem/accounts"; +initSync(wasmBuffer); + export const publicClient: PublicClient = createPublicClient({ transport: http(process.env.RPC_URL), }); - export let walletClient: WalletClient | undefined; if (process.env.WALLET_PRIVATE_KEY) { diff --git a/apps/sandbox/src/sandbox.ts b/apps/sandbox/src/sandbox.ts index af055043..d08060eb 100644 --- a/apps/sandbox/src/sandbox.ts +++ b/apps/sandbox/src/sandbox.ts @@ -16,9 +16,5 @@ const votingPower = await vestingVault.getVotingPower({ block: currentBlock, extraData: "0x", }); -console.log(votingPower); -const decoded = vestingVault.contract.decodeFunctionData( - "0xe91f32350000000000000000000000003e3ede36ae478082c07e353d4fc36831100acf8700000000000000000000000000000000000000000000000000000000014f637d00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", -); -console.log(decoded); +console.log(votingPower); diff --git a/apps/sandbox/src/scripts/changeVaultStatus.ts b/apps/sandbox/src/scripts/changeVaultStatus.ts index 3f5af6a8..bfbc61ef 100644 --- a/apps/sandbox/src/scripts/changeVaultStatus.ts +++ b/apps/sandbox/src/scripts/changeVaultStatus.ts @@ -1,5 +1,5 @@ import { ReadWriteCouncil } from "@delvtech/council-js"; -import { council, publicClient } from "src/client"; +import { council } from "src/client"; if (!(council instanceof ReadWriteCouncil)) { throw new Error("Missing WALLET_PRIVATE_KEY environment variable."); @@ -12,10 +12,13 @@ const hash = await coreVoting.changeVaultStatus({ vault: "0x", // <-- replace address isValid: true, }, + options: { + onMined: (receipt) => { + console.log("Transaction receipt:", receipt); + }, + }, }); -console.log("Transaction submitted:", hash); -const receipt = await publicClient.waitForTransactionReceipt({ hash }); -console.log("Transaction receipt:", receipt); +console.log("Transaction submitted:", hash); process.exit(); diff --git a/apps/sandbox/src/scripts/createProposal.ts b/apps/sandbox/src/scripts/createProposal.ts index b9e665d7..8b44322b 100644 --- a/apps/sandbox/src/scripts/createProposal.ts +++ b/apps/sandbox/src/scripts/createProposal.ts @@ -2,8 +2,8 @@ import { ReadWriteCouncil } from "@delvtech/council-js"; import { council, publicClient, walletClient } from "src/client"; import type { Address } from "viem"; -// approx 90 days in blocks assuming 12 seconds a block -const FOURTEEN_DAYS_IN_BLOCKS = (14n * 24n * 60n * 60n) / 12n; +const DAY_SECONDS = 24n * 60n * 60n; +const DAY_BLOCKS = DAY_SECONDS / 12n; // Assuming 12s block time if (!(council instanceof ReadWriteCouncil)) { throw new Error("Missing WALLET_PRIVATE_KEY environment variable."); @@ -33,26 +33,30 @@ const targets = [coreVoting.address]; // The data to send in the contract calls const calldatas = [ - coreVoting.contract.encodeFunctionData("setDefaultQuorum", { - quorum: 100n, - }), + coreVoting.contract.encodeFunctionData("setDefaultQuorum", { quorum: 100n }), ]; const currentBlock = await publicClient.getBlockNumber(); -// the block number after which the proposal can no longer be executed -const lastCallBlock = currentBlock + FOURTEEN_DAYS_IN_BLOCKS; - -// the ballot to cast for the first vote -const ballot = "yes"; - const hash = await coreVoting.createProposal({ - args: { ballot, calldatas, lastCallBlock, targets, votingVaults }, + args: { + targets, + calldatas, + votingVaults, + + // the ballot to cast for the first vote + ballot: "yes", + + // the block number after which the proposal can no longer be executed + lastCallBlock: currentBlock + 14n * DAY_BLOCKS, + }, + options: { + onMined: (receipt) => { + console.log("Transaction receipt:", receipt); + }, + }, }); console.log("Transaction submitted:", hash); -const receipt = await publicClient.waitForTransactionReceipt({ hash }); -console.log("Transaction receipt:", receipt); - process.exit(); diff --git a/apps/sandbox/src/scripts/executeProposal.ts b/apps/sandbox/src/scripts/executeProposal.ts index 444f5c73..397dfbaf 100644 --- a/apps/sandbox/src/scripts/executeProposal.ts +++ b/apps/sandbox/src/scripts/executeProposal.ts @@ -1,5 +1,5 @@ import { ReadWriteCouncil } from "@delvtech/council-js"; -import { council, publicClient } from "src/client"; +import { council } from "src/client"; if (!(council instanceof ReadWriteCouncil)) { throw new Error("Missing WALLET_PRIVATE_KEY environment variable."); @@ -11,13 +11,17 @@ const coreVoting = council.coreVoting("0x"); // <-- replace with the CoreVoting const hash = await coreVoting.executeProposal({ args: { proposalId: 0n, // <-- replace with the proposal ID - targets: ["0x"], // <-- replace with the contract addresses - calldatas: ["0x"], // <-- replace with the execution calldata + + // These will be fetched from the creation transaction if not provided. + // targets: ["0x"], // <-- replace with the contract addresses (optional) + // calldatas: ["0x"], // <-- replace with the execution calldata (optional) + }, + options: { + onMined: (receipt) => { + console.log("Transaction receipt:", receipt); + }, }, }); console.log("Transaction submitted:", hash); -const receipt = await publicClient.waitForTransactionReceipt({ hash }); -console.log("Transaction receipt:", receipt); - process.exit(); diff --git a/apps/sandbox/src/scripts/getGscMembers.ts b/apps/sandbox/src/scripts/getGscMembers.ts index 422a37e9..a6d5c9d6 100644 --- a/apps/sandbox/src/scripts/getGscMembers.ts +++ b/apps/sandbox/src/scripts/getGscMembers.ts @@ -1,3 +1,4 @@ +import { fixed } from "@delvtech/fixed-point-wasm"; import { council } from "src/client"; const gscVault = council.gscVault("0x"); // <-- replace address @@ -6,23 +7,29 @@ const gscVault = council.gscVault("0x"); // <-- replace address const members = await gscVault.getMembers(); // create an array of member stat objects -const memberStats = []; -for (const member of members) { - console.log("fetching", member); - - // get the voting vaults that were used to prove the member meets the - // minimum voting power requirement - const qualifyingVaults = await gscVault.getMemberVaults(member); - const votingPowers = await Promise.all( - qualifyingVaults.map((vault) => vault.getVotingPower({ voter: member })), - ); - - memberStats.push({ - address: member, - joinDate: await gscVault.getJoinDate(member), - votingPower: votingPowers.reduce((a, b) => a + b, 0n), - }); -} +const memberStats = await Promise.all( + members.map(async (member) => { + console.log("fetching", member); + + const [joinDate, qualifyingVaults] = await Promise.all([ + gscVault.getJoinDate(member), + gscVault.getMemberVaults(member), + ]); + + // get the voting vaults that were used to prove the member meets the + // minimum voting power requirement + const votingPowers = await Promise.all( + qualifyingVaults.map((vault) => vault.getVotingPower({ voter: member })), + ); + const totalVotingPower = votingPowers.reduce((a, b) => a + b, 0n); + + return { + member, + joinDate, + votingPower: fixed(totalVotingPower).format(), + }; + }), +); console.table(memberStats); diff --git a/apps/sandbox/src/scripts/getProposalResults.ts b/apps/sandbox/src/scripts/getProposalResults.ts index 42496296..992123ef 100644 --- a/apps/sandbox/src/scripts/getProposalResults.ts +++ b/apps/sandbox/src/scripts/getProposalResults.ts @@ -1,4 +1,4 @@ -import type { VoteResults } from "@delvtech/council-js"; +import { fixed } from "@delvtech/fixed-point-wasm"; import { council } from "src/client"; const coreVoting = council.coreVoting("0x"); // <-- replace address @@ -7,11 +7,27 @@ const coreVoting = council.coreVoting("0x"); // <-- replace address const proposals = await coreVoting.getProposalCreations(); // get results for all proposals and key them by id in a new object -const resultsByProposalId: Record = {}; -for (const { proposalId } of proposals) { - resultsByProposalId[Number(proposalId)] = - await coreVoting.getProposalVotingPower(proposalId); -} +const resultsByProposalId: { + [proposalId: number]: { + yes: string; + no: string; + maybe: string; + total: string; + }; +} = {}; + +await Promise.all( + proposals.map(async ({ proposalId }) => { + const results = await coreVoting.getProposalVotingPower(proposalId); + + resultsByProposalId[Number(proposalId)] = { + yes: fixed(results.yes).format(), + no: fixed(results.no).format(), + maybe: fixed(results.maybe).format(), + total: fixed(results.total).format(), + }; + }), +); console.table(resultsByProposalId); diff --git a/apps/sandbox/src/scripts/setLockDuration.ts b/apps/sandbox/src/scripts/setLockDuration.ts index 4e3525a7..6cfa2ab4 100644 --- a/apps/sandbox/src/scripts/setLockDuration.ts +++ b/apps/sandbox/src/scripts/setLockDuration.ts @@ -1,5 +1,5 @@ import { ReadWriteCouncil } from "@delvtech/council-js"; -import { council, publicClient } from "src/client"; +import { council } from "src/client"; if (!(council instanceof ReadWriteCouncil)) { throw new Error("Missing WALLET_PRIVATE_KEY environment variable."); @@ -11,11 +11,13 @@ const hash = await coreVoting.setLockDuration({ args: { blocks: 0n, // <-- replace with the number of blocks to lock }, + options: { + onMined: (receipt) => { + console.log("Transaction receipt:", receipt); + }, + }, }); console.log("Transaction submitted:", hash); -const receipt = await publicClient.waitForTransactionReceipt({ hash }); -console.log("Transaction receipt:", receipt); - process.exit(); From 6c540cc2ce955f2db3e150b05894a8825eefc1d7 Mon Sep 17 00:00:00 2001 From: Ryan Goree Date: Fri, 7 Mar 2025 17:48:19 -0600 Subject: [PATCH 135/146] More UI progress --- .../src/ui/airdrop/ConfirmClaimStep.tsx | 2 +- .../src/ui/airdrop/ConfirmDepositStep.tsx | 2 +- .../src/ui/airdrop/DepositOrClaimStep.tsx | 2 +- .../src/ui/airdrop/hooks/useClaimAirdrop.ts | 2 +- .../hooks/useClaimAndDelegateAirdrop.ts | 2 +- .../hooks/useClaimableAirdropAmount.ts | 2 +- .../ui/base/sorting/SortDirectionStatus.tsx | 23 --------------- apps/council-ui/src/ui/base/sorting/types.ts | 1 - .../src/ui/base/tables/SortableGridTable.tsx | 29 ++++++++++++++++--- .../src/ui/config/useCouncilConfig.ts | 2 +- .../src/ui/contract/{hooks => }/useWrite.ts | 2 +- .../src/ui/council/useReadCouncil.ts | 2 +- .../src/ui/council/useReadWriteCouncil.ts | 2 +- .../src/ui/ens/AdddressWithEtherscan.tsx | 2 +- .../ui/ens/{hooks => }/useBulkEnsRecords.ts | 2 +- .../{hooks => }/useSupportedChainId.ts | 0 .../{hooks => }/useWrongNetworkEffect.tsx | 2 +- .../ProposalStatsRow/ProposalStatsRow.tsx | 2 +- .../src/ui/proposals/hooks/useProposal.ts | 2 +- .../ui/proposals/hooks/useProposalCreation.ts | 2 +- .../src/ui/push/usePushSubscribe.ts | 2 +- .../src/ui/router/{hooks => }/useParams.ts | 0 .../ui/router/{hooks => }/useRouterSteps.ts | 0 .../ui/token/{hooks => }/useTokenSymbol.ts | 2 +- .../FrozenLockingVaultDetails.tsx | 2 +- .../genericVault/GenericVaultDetails.tsx | 2 +- .../ui/vaults/gscVault/GscVaultDetails.tsx | 2 +- .../vaults/gscVault/GscVaultPreviewCard.tsx | 2 +- .../vaults/gscVault/GscVaultProfileCard.tsx | 2 +- .../ui/vaults/gscVault/hooks/useGscStatus.ts | 2 +- .../ui/vaults/gscVault/hooks/useJoinGsc.ts | 2 +- .../vaults/gscVault/hooks/useKickGscMember.ts | 2 +- .../ui/vaults/hooks/useDelegatesByVault.ts | 2 +- .../ui/vaults/hooks/useVaultVotingPower.ts | 2 +- .../src/ui/vaults/hooks/useVotingPower.ts | 2 +- .../lockingVault/LockingVaultDetails.tsx | 2 +- .../lockingVault/LockingVaultStatsRow.tsx | 2 +- .../lockingVault/LockingVaultsProfileCard.tsx | 2 +- .../vaults/lockingVault/hooks/useApprove.ts | 2 +- .../lockingVault/hooks/useChangeDelegate.ts | 2 +- .../vaults/lockingVault/hooks/useDeposit.ts | 2 +- .../vaults/lockingVault/hooks/useWithdraw.ts | 2 +- .../vestingVault/VestingVaultDetails.tsx | 2 +- .../vestingVault/VestingVaultProfileCard.tsx | 2 +- .../vestingVault/VestingVaultStatsRow.tsx | 2 +- .../vestingVault/hooks/useChangeDelegate.ts | 2 +- .../vestingVault/hooks/useClaimGrant.ts | 2 +- .../src/ui/voters/VoterVaultsList.tsx | 2 +- .../src/ui/voters/VotersListCompact.tsx | 2 +- .../src/ui/voting/hooks/useSubmitVote.ts | 2 +- .../council-ui/src/ui/voting/hooks/useVote.ts | 2 +- 51 files changed, 70 insertions(+), 73 deletions(-) delete mode 100644 apps/council-ui/src/ui/base/sorting/SortDirectionStatus.tsx delete mode 100644 apps/council-ui/src/ui/base/sorting/types.ts rename apps/council-ui/src/ui/contract/{hooks => }/useWrite.ts (96%) rename apps/council-ui/src/ui/ens/{hooks => }/useBulkEnsRecords.ts (88%) rename apps/council-ui/src/ui/network/{hooks => }/useSupportedChainId.ts (100%) rename apps/council-ui/src/ui/network/{hooks => }/useWrongNetworkEffect.tsx (93%) rename apps/council-ui/src/ui/router/{hooks => }/useParams.ts (100%) rename apps/council-ui/src/ui/router/{hooks => }/useRouterSteps.ts (100%) rename apps/council-ui/src/ui/token/{hooks => }/useTokenSymbol.ts (89%) diff --git a/apps/council-ui/src/ui/airdrop/ConfirmClaimStep.tsx b/apps/council-ui/src/ui/airdrop/ConfirmClaimStep.tsx index acfd9286..ef0a8434 100644 --- a/apps/council-ui/src/ui/airdrop/ConfirmClaimStep.tsx +++ b/apps/council-ui/src/ui/airdrop/ConfirmClaimStep.tsx @@ -3,7 +3,7 @@ import { ReactElement } from "react"; import Skeleton from "react-loading-skeleton"; import { formatBalance } from "src/ui/base/formatting/formatBalance"; import { useDisplayName } from "src/ui/base/formatting/useDisplayName"; -import { useTokenSymbol } from "src/ui/token/hooks/useTokenSymbol"; +import { useTokenSymbol } from "src/ui/token/useTokenSymbol"; import { useAirdropToken } from "./hooks/useAirdropToken"; import { useClaimableAirdropAmount } from "./hooks/useClaimableAirdropAmount"; diff --git a/apps/council-ui/src/ui/airdrop/ConfirmDepositStep.tsx b/apps/council-ui/src/ui/airdrop/ConfirmDepositStep.tsx index c2232393..2cae15ac 100644 --- a/apps/council-ui/src/ui/airdrop/ConfirmDepositStep.tsx +++ b/apps/council-ui/src/ui/airdrop/ConfirmDepositStep.tsx @@ -3,7 +3,7 @@ import { ReactElement } from "react"; import Skeleton from "react-loading-skeleton"; import { formatBalance } from "src/ui/base/formatting/formatBalance"; import { useDisplayName } from "src/ui/base/formatting/useDisplayName"; -import { useTokenSymbol } from "src/ui/token/hooks/useTokenSymbol"; +import { useTokenSymbol } from "src/ui/token/useTokenSymbol"; import { useAirdropToken } from "./hooks/useAirdropToken"; import { useClaimableAirdropAmount } from "./hooks/useClaimableAirdropAmount"; diff --git a/apps/council-ui/src/ui/airdrop/DepositOrClaimStep.tsx b/apps/council-ui/src/ui/airdrop/DepositOrClaimStep.tsx index 0acb9543..c34f8dc0 100644 --- a/apps/council-ui/src/ui/airdrop/DepositOrClaimStep.tsx +++ b/apps/council-ui/src/ui/airdrop/DepositOrClaimStep.tsx @@ -5,7 +5,7 @@ import { useAirdropToken } from "src/ui/airdrop/hooks/useAirdropToken"; import { useClaimableAirdropAmount } from "src/ui/airdrop/hooks/useClaimableAirdropAmount"; import { formatBalance } from "src/ui/base/formatting/formatBalance"; import { AirdropIcon } from "src/ui/base/svg/24/AirdropIcon"; -import { useTokenSymbol } from "src/ui/token/hooks/useTokenSymbol"; +import { useTokenSymbol } from "src/ui/token/useTokenSymbol"; interface DepositOrClaimStepProps { onDeposit: (() => void) | undefined; diff --git a/apps/council-ui/src/ui/airdrop/hooks/useClaimAirdrop.ts b/apps/council-ui/src/ui/airdrop/hooks/useClaimAirdrop.ts index 94accdc0..cfcf0270 100644 --- a/apps/council-ui/src/ui/airdrop/hooks/useClaimAirdrop.ts +++ b/apps/council-ui/src/ui/airdrop/hooks/useClaimAirdrop.ts @@ -1,6 +1,6 @@ import { MutationStatus } from "@tanstack/react-query"; import { useReadWriteAirdrop } from "src/ui/airdrop/hooks/useReadWriteAirdrop"; -import { useWrite } from "src/ui/contract/hooks/useWrite"; +import { useWrite } from "src/ui/contract/useWrite"; import { useAirdropData } from "./useAirdropData"; import { useClaimableAirdropAmount } from "./useClaimableAirdropAmount"; diff --git a/apps/council-ui/src/ui/airdrop/hooks/useClaimAndDelegateAirdrop.ts b/apps/council-ui/src/ui/airdrop/hooks/useClaimAndDelegateAirdrop.ts index 25118f8d..3db511e8 100644 --- a/apps/council-ui/src/ui/airdrop/hooks/useClaimAndDelegateAirdrop.ts +++ b/apps/council-ui/src/ui/airdrop/hooks/useClaimAndDelegateAirdrop.ts @@ -1,6 +1,6 @@ import { MutationStatus } from "@tanstack/react-query"; import { useReadWriteAirdrop } from "src/ui/airdrop/hooks/useReadWriteAirdrop"; -import { useWrite } from "src/ui/contract/hooks/useWrite"; +import { useWrite } from "src/ui/contract/useWrite"; import { useAirdropData } from "./useAirdropData"; import { useClaimableAirdropAmount } from "./useClaimableAirdropAmount"; diff --git a/apps/council-ui/src/ui/airdrop/hooks/useClaimableAirdropAmount.ts b/apps/council-ui/src/ui/airdrop/hooks/useClaimableAirdropAmount.ts index abc908a9..19171c74 100644 --- a/apps/council-ui/src/ui/airdrop/hooks/useClaimableAirdropAmount.ts +++ b/apps/council-ui/src/ui/airdrop/hooks/useClaimableAirdropAmount.ts @@ -1,8 +1,8 @@ import { useQuery } from "@tanstack/react-query"; import { SupportedChainId } from "src/config/council.config"; import { useCouncilConfig } from "src/ui/config/useCouncilConfig"; -import { useSupportedChainId } from "src/ui/network/hooks/useSupportedChainId"; import { useReadCouncil } from "src/ui/council/useReadCouncil"; +import { useSupportedChainId } from "src/ui/network/useSupportedChainId"; import { useAccount } from "wagmi"; import { useAirdropData } from "./useAirdropData"; diff --git a/apps/council-ui/src/ui/base/sorting/SortDirectionStatus.tsx b/apps/council-ui/src/ui/base/sorting/SortDirectionStatus.tsx deleted file mode 100644 index 8b714136..00000000 --- a/apps/council-ui/src/ui/base/sorting/SortDirectionStatus.tsx +++ /dev/null @@ -1,23 +0,0 @@ -import { - ChevronDoubleDownIcon, - ChevronDoubleUpIcon, -} from "@heroicons/react/20/solid"; -import { ReactElement } from "react"; -import { SortDirection } from "./types"; - -interface SortDirectionStatusProps { - direction: SortDirection | undefined; -} - -export function SortDirectionStatus({ - direction, -}: SortDirectionStatusProps): ReactElement | null { - switch (direction) { - case "ASC": - return ; - case "DESC": - return ; - default: - return null; - } -} diff --git a/apps/council-ui/src/ui/base/sorting/types.ts b/apps/council-ui/src/ui/base/sorting/types.ts deleted file mode 100644 index 7838fa90..00000000 --- a/apps/council-ui/src/ui/base/sorting/types.ts +++ /dev/null @@ -1 +0,0 @@ -export type SortDirection = "ASC" | "DESC" | undefined; diff --git a/apps/council-ui/src/ui/base/tables/SortableGridTable.tsx b/apps/council-ui/src/ui/base/tables/SortableGridTable.tsx index 188c3bf7..fa7c91f2 100644 --- a/apps/council-ui/src/ui/base/tables/SortableGridTable.tsx +++ b/apps/council-ui/src/ui/base/tables/SortableGridTable.tsx @@ -1,7 +1,9 @@ +import { + ChevronDoubleDownIcon, + ChevronDoubleUpIcon, +} from "@heroicons/react/20/solid"; import classNames from "classnames"; import { ReactElement, ReactNode, useState } from "react"; -import { SortDirectionStatus } from "src/ui/base/sorting/SortDirectionStatus"; -import { SortDirection } from "src/ui/base/sorting/types"; import { GridTableHeader } from "src/ui/base/tables/GridTableHeader"; import { GridTableRow } from "src/ui/base/tables/GridTableRow"; import { GridTableRowLink } from "src/ui/base/tables/GridTableRowLink"; @@ -101,7 +103,7 @@ export function SortableGridTable({ return ( + } + /> + ) : ( + unlockDate && + status === "active" && ( + + ) )} - {lastCallAtDate && status !== "executed" && ( + {lastCallDate && !["unknown", "failed", "executed"].includes(status) && ( )} diff --git a/apps/council-ui/src/ui/proposals/hooks/useExecuteProposal.ts b/apps/council-ui/src/ui/proposals/hooks/useExecuteProposal.ts new file mode 100644 index 00000000..4c60c006 --- /dev/null +++ b/apps/council-ui/src/ui/proposals/hooks/useExecuteProposal.ts @@ -0,0 +1,32 @@ +import { Address } from "@delvtech/drift"; +import { SupportedChainId } from "src/config/council.config"; +import { useWrite } from "src/ui/contract/useWrite"; +import { useReadWriteCouncil } from "src/ui/council/useReadWriteCouncil"; + +export interface useExecuteProposalOptions { + votingContract: Address; + proposalId: bigint; + chainId?: SupportedChainId; +} + +export function useExecuteProposal({ + votingContract, + proposalId, + chainId, +}: useExecuteProposalOptions) { + const council = useReadWriteCouncil({ chainId }); + const enabled = !!council; + + return useWrite({ + pendingMessage: "Executing proposal...", + successMessage: "Proposal executed!", + errorMessage: "Failed to execute proposal.", + writeFn: enabled + ? async () => { + return council.coreVoting(votingContract).executeProposal({ + args: { proposalId }, + }); + } + : undefined, + }); +}