From 7fff2cd5bc91db5612dc101c3232eb1f39e66b7a Mon Sep 17 00:00:00 2001 From: Domen Grabec Date: Mon, 23 Mar 2026 17:52:47 +0100 Subject: [PATCH 01/62] add the KMS connector module --- contracts/README.md | 23 +- contracts/package.json | 3 +- contracts/pnpm-lock.yaml | 1041 +++++++++++++++++++++------ contracts/tasks/tasks.js | 63 +- contracts/utils/signers.js | 15 +- contracts/utils/signersNoHardhat.js | 83 +++ 6 files changed, 1019 insertions(+), 209 deletions(-) diff --git a/contracts/README.md b/contracts/README.md index 46d76988d5..10d6e44781 100644 --- a/contracts/README.md +++ b/contracts/README.md @@ -246,8 +246,9 @@ If enabled, the gas usage will be output in a table after the tests have execute When using Hardhat tasks, there are a few options for specifying the wallet to send transactions from. 1. Primary key -2. Impersonate -3. Defender Relayer +2. AWS KMS signer +3. Impersonate +4. Defender Relayer ### Primary Key @@ -262,6 +263,24 @@ unset DEPLOYER_PK unset GOVERNOR_PK ``` +### AWS KMS Signer + +Hardhat tasks can sign transactions with AWS KMS when both `AWS_ACCESS_KEY_ID` and +`AWS_SECRET_ACCESS_KEY` are set. + +The default `relayer-id` is `origin-relayer-production-evm`. Some tasks can be mapped +to different defaults in code, and a user-provided task parameter always wins: + +``` +npx hardhat --network --relayer-id +``` + +The relayer resolution precedence is: + +1. `--relayer-id` +2. task-name based override map +3. global default (`origin-relayer-production-evm`) + ### Impersonate If using a fork test or node, you can impersonate any externally owned account or contract. Export `IMPERSONATE` with the address of the account you want to impersonate. The account will be funded with some Ether. For example diff --git a/contracts/package.json b/contracts/package.json index 12218c1866..340080f863 100644 --- a/contracts/package.json +++ b/contracts/package.json @@ -72,7 +72,7 @@ "author": "Origin Protocol Inc ", "license": "MIT", "devDependencies": { - "@aws-sdk/client-kms": "3.598.0", + "@aws-sdk/client-kms": "^3.675.0", "@aws-sdk/client-s3": "3.600.0", "@chainsafe/persistent-merkle-tree": "^1.2.1", "@layerzerolabs/oft-evm": "3.1.4", @@ -84,6 +84,7 @@ "@openzeppelin/contracts": "4.4.2", "@openzeppelin/defender-sdk": "2.7.0", "@openzeppelin/hardhat-upgrades": "1.27.0", + "@lastdotnet/purrikey": "^1.0.0", "@rigidity/bls-signatures": "2.0.5", "@rollup/plugin-commonjs": "29.0.0", "@rollup/plugin-json": "6.1.0", diff --git a/contracts/pnpm-lock.yaml b/contracts/pnpm-lock.yaml index 595331675f..9bf65e12c2 100644 --- a/contracts/pnpm-lock.yaml +++ b/contracts/pnpm-lock.yaml @@ -52,14 +52,17 @@ importers: version: 1.39.1 devDependencies: '@aws-sdk/client-kms': - specifier: 3.598.0 - version: 3.598.0 + specifier: ^3.675.0 + version: 3.1013.0 '@aws-sdk/client-s3': specifier: 3.600.0 version: 3.600.0 '@chainsafe/persistent-merkle-tree': specifier: ^1.2.1 version: 1.2.1 + '@lastdotnet/purrikey': + specifier: ^1.0.0 + version: 1.0.0(ethers@5.7.2(bufferutil@4.1.0)(utf-8-validate@5.0.10)) '@layerzerolabs/oft-evm': specifier: 3.1.4 version: 3.1.4(c88efacc9580dc620f57bdff8a2cf4a7) @@ -236,9 +239,9 @@ packages: '@aws-crypto/util@5.2.0': resolution: {integrity: sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==} - '@aws-sdk/client-kms@3.598.0': - resolution: {integrity: sha512-rTvtEMeS4p3NlA0oxSgpl4N9sg2fuJ23nbpMU1vIk8fo0+i8/72BfE5Z0vWknv3u1lvgh+umKOv8g0iyOaGPfw==} - engines: {node: '>=16.0.0'} + '@aws-sdk/client-kms@3.1013.0': + resolution: {integrity: sha512-cDrwc6s7RLcRDR990383FdgpvkpjWhTrD1YyNYo1xZMmtgZ3aghAq2HBhs3adlxToXxEWmGCZn4HWcwPi+CjoQ==} + engines: {node: '>=20.0.0'} '@aws-sdk/client-lambda@3.958.0': resolution: {integrity: sha512-gwEqpDkgPLbFfewQkRRgnqn9iCfnd5BUVFUZpUoyq8DxzPmNn/lEVMkBaNCqwIXx07jd46+qd1neWBrH2UYi2Q==} @@ -248,10 +251,6 @@ packages: resolution: {integrity: sha512-iYoKbJTputbf+ubkX6gSK/y/4uJEBRaXZ18jykLdBQ8UJuGrk2gqvV8h7OlGAhToCeysmmMqM0vDWyLt6lP8nw==} engines: {node: '>=16.0.0'} - '@aws-sdk/client-sso-oidc@3.598.0': - resolution: {integrity: sha512-jfdH1pAO9Tt8Nkta/JJLoUnwl7jaRdxToQTJfUtE+o3+0JP5sA4LfC2rBkJSWcU5BdAA+kyOs5Lv776DlN04Vg==} - engines: {node: '>=16.0.0'} - '@aws-sdk/client-sso-oidc@3.600.0': resolution: {integrity: sha512-7+I8RWURGfzvChyNQSyj5/tKrqRbzRl7H+BnTOf/4Vsw1nFOi5ROhlhD4X/Y0QCTacxnaoNcIrqnY7uGGvVRzw==} engines: {node: '>=16.0.0'} @@ -264,10 +263,6 @@ packages: resolution: {integrity: sha512-6qNCIeaMzKzfqasy2nNRuYnMuaMebCcCPP4J2CVGkA8QYMbIVKPlkn9bpB20Vxe6H/r3jtCCLQaOJjVTx/6dXg==} engines: {node: '>=18.0.0'} - '@aws-sdk/client-sts@3.598.0': - resolution: {integrity: sha512-bXhz/cHL0iB9UH9IFtMaJJf4F8mV+HzncETCRFzZ9SyUMt5rP9j8A7VZknqGYSx/6mI8SsB1XJQkWSbhn6FiSQ==} - engines: {node: '>=16.0.0'} - '@aws-sdk/client-sts@3.600.0': resolution: {integrity: sha512-KQG97B7LvTtTiGmjlrG1LRAY8wUvCQzrmZVV5bjrJ/1oXAU7DITYwVbSJeX9NWg6hDuSk0VE3MFwIXS2SvfLIA==} engines: {node: '>=16.0.0'} @@ -280,6 +275,10 @@ packages: resolution: {integrity: sha512-DrZgDnF1lQZv75a52nFWs6MExihJF2GZB6ETZRqr6jMwhrk2kbJPUtvgbifwcL7AYmVqHQDJBrR/MqkwwFCpiw==} engines: {node: '>=18.0.0'} + '@aws-sdk/core@3.973.22': + resolution: {integrity: sha512-lY6g5L95jBNgOUitUhfV2N/W+i08jHEl3xuLODYSQH5Sf50V+LkVYBSyZRLtv2RyuXZXiV7yQ+acpswK1tlrOA==} + engines: {node: '>=20.0.0'} + '@aws-sdk/credential-provider-env@3.598.0': resolution: {integrity: sha512-vi1khgn7yXzLCcgSIzQrrtd2ilUM0dWodxj3PQ6BLfP0O+q1imO3hG1nq7DVyJtq7rFHs6+9N8G4mYvTkxby2w==} engines: {node: '>=16.0.0'} @@ -288,6 +287,10 @@ packages: resolution: {integrity: sha512-475mkhGaWCr+Z52fOOVb/q2VHuNvqEDixlYIkeaO6xJ6t9qR0wpLt4hOQaR6zR1wfZV0SlE7d8RErdYq/PByog==} engines: {node: '>=18.0.0'} + '@aws-sdk/credential-provider-env@3.972.20': + resolution: {integrity: sha512-vI0QN96DFx3g9AunfOWF3CS4cMkqFiR/WM/FyP9QHr5rZ2dKPkYwP3tCgAOvGuu9CXI7dC1vU2FVUuZ+tfpNvQ==} + engines: {node: '>=20.0.0'} + '@aws-sdk/credential-provider-http@3.598.0': resolution: {integrity: sha512-N7cIafi4HVlQvEgvZSo1G4T9qb/JMLGMdBsDCT5XkeJrF0aptQWzTFH0jIdZcLrMYvzPcuEyO3yCBe6cy/ba0g==} engines: {node: '>=16.0.0'} @@ -296,6 +299,10 @@ packages: resolution: {integrity: sha512-8dS55QHRxXgJlHkEYaCGZIhieCs9NU1HU1BcqQ4RfUdSsfRdxxktqUKgCnBnOOn0oD3PPA8cQOCAVgIyRb3Rfw==} engines: {node: '>=18.0.0'} + '@aws-sdk/credential-provider-http@3.972.22': + resolution: {integrity: sha512-aS/81smalpe7XDnuQfOq4LIPuaV2PRKU2aMTrHcqO5BD4HwO5kESOHNcec2AYfBtLtIDqgF6RXisgBnfK/jt0w==} + engines: {node: '>=20.0.0'} + '@aws-sdk/credential-provider-ini@3.598.0': resolution: {integrity: sha512-/ppcIVUbRwDIwJDoYfp90X3+AuJo2mvE52Y1t2VSrvUovYn6N4v95/vXj6LS8CNDhz2jvEJYmu+0cTMHdhI6eA==} engines: {node: '>=16.0.0'} @@ -306,13 +313,17 @@ packages: resolution: {integrity: sha512-u7twvZa1/6GWmPBZs6DbjlegCoNzNjBsMS/6fvh5quByYrcJr/uLd8YEr7S3UIq4kR/gSnHqcae7y2nL2bqZdg==} engines: {node: '>=18.0.0'} + '@aws-sdk/credential-provider-ini@3.972.22': + resolution: {integrity: sha512-rpF8fBT0LllMDp78s62aL2A/8MaccjyJ0ORzqu+ZADeECLSrrCWIeeXsuRam+pxiAMkI1uIyDZJmgLGdadkPXw==} + engines: {node: '>=20.0.0'} + '@aws-sdk/credential-provider-login@3.958.0': resolution: {integrity: sha512-sDwtDnBSszUIbzbOORGh5gmXGl9aK25+BHb4gb1aVlqB+nNL2+IUEJA62+CE55lXSH8qXF90paivjK8tOHTwPA==} engines: {node: '>=18.0.0'} - '@aws-sdk/credential-provider-node@3.598.0': - resolution: {integrity: sha512-sXTlqL5I/awlF9Dg2MQ17SfrEaABVnsj2mf4jF5qQrIRhfbvQOIYdEqdy8Rn1AWlJMz/N450SGzc0XJ5owxxqw==} - engines: {node: '>=16.0.0'} + '@aws-sdk/credential-provider-login@3.972.22': + resolution: {integrity: sha512-u33CO9zeNznlVSg9tWTCRYxaGkqr1ufU6qeClpmzAabXZa8RZxQoVXxL5T53oZJFzQYj+FImORCSsi7H7B77gQ==} + engines: {node: '>=20.0.0'} '@aws-sdk/credential-provider-node@3.600.0': resolution: {integrity: sha512-1pC7MPMYD45J7yFjA90SxpR0yaSvy+yZiq23aXhAPZLYgJBAxHLu0s0mDCk/piWGPh8+UGur5K0bVdx4B1D5hw==} @@ -322,6 +333,10 @@ packages: resolution: {integrity: sha512-vdoZbNG2dt66I7EpN3fKCzi6fp9xjIiwEA/vVVgqO4wXCGw8rKPIdDUus4e13VvTr330uQs2W0UNg/7AgtquEQ==} engines: {node: '>=18.0.0'} + '@aws-sdk/credential-provider-node@3.972.23': + resolution: {integrity: sha512-U8tyLbLOZItuVWTH0ay9gWo4xMqZwqQbg1oMzdU4FQSkTpqXemm4X0uoKBR6llqAStgBp30ziKFJHTA43l4qMw==} + engines: {node: '>=20.0.0'} + '@aws-sdk/credential-provider-process@3.598.0': resolution: {integrity: sha512-rM707XbLW8huMk722AgjVyxu2tMZee++fNA8TJVNgs1Ma02Wx6bBrfIvlyK0rCcIRb0WdQYP6fe3Xhiu4e8IBA==} engines: {node: '>=16.0.0'} @@ -330,6 +345,10 @@ packages: resolution: {integrity: sha512-/KIz9kadwbeLy6SKvT79W81Y+hb/8LMDyeloA2zhouE28hmne+hLn0wNCQXAAupFFlYOAtZR2NTBs7HBAReJlg==} engines: {node: '>=18.0.0'} + '@aws-sdk/credential-provider-process@3.972.20': + resolution: {integrity: sha512-QRfk7GbA4/HDRjhP3QYR6QBr/QKreVoOzvvlRHnOuGgYJkeoPgPY3LAI1kK1ZMgZ4hH9KiGp757/ntol+INAig==} + engines: {node: '>=20.0.0'} + '@aws-sdk/credential-provider-sso@3.598.0': resolution: {integrity: sha512-5InwUmrAuqQdOOgxTccRayMMkSmekdLk6s+az9tmikq0QFAHUCtofI+/fllMXSR9iL6JbGYi1940+EUmS4pHJA==} engines: {node: '>=16.0.0'} @@ -338,6 +357,10 @@ packages: resolution: {integrity: sha512-CBYHJ5ufp8HC4q+o7IJejCUctJXWaksgpmoFpXerbjAso7/Fg7LLUu9inXVOxlHKLlvYekDXjIUBXDJS2WYdgg==} engines: {node: '>=18.0.0'} + '@aws-sdk/credential-provider-sso@3.972.22': + resolution: {integrity: sha512-4vqlSaUbBj4aNPVKfB6yXuIQ2Z2mvLfIGba2OzzF6zUkN437/PGWsxBU2F8QPSFHti6seckvyCXidU3H+R8NvQ==} + engines: {node: '>=20.0.0'} + '@aws-sdk/credential-provider-web-identity@3.598.0': resolution: {integrity: sha512-GV5GdiMbz5Tz9JO4NJtRoFXjW0GPEujA0j+5J/B723rTN+REHthJu48HdBKouHGhdzkDWkkh1bu52V02Wprw8w==} engines: {node: '>=16.0.0'} @@ -348,6 +371,10 @@ packages: resolution: {integrity: sha512-dgnvwjMq5Y66WozzUzxNkCFap+umHUtqMMKlr8z/vl9NYMLem/WUbWNpFFOVFWquXikc+ewtpBMR4KEDXfZ+KA==} engines: {node: '>=18.0.0'} + '@aws-sdk/credential-provider-web-identity@3.972.22': + resolution: {integrity: sha512-/wN1CYg2rVLhW8/jLxMWacQrkpaynnL+4j/Z+e6X1PfoE6NiC0BeOw3i0JmtZrKun85wNV5GmspvuWJihfeeUw==} + engines: {node: '>=20.0.0'} + '@aws-sdk/middleware-bucket-endpoint@3.598.0': resolution: {integrity: sha512-PM7BcFfGUSkmkT6+LU9TyJiB4S8yI7dfuKQDwK5ZR3P7MKaK4Uj4yyDiv0oe5xvkF6+O2+rShj+eh8YuWkOZ/Q==} engines: {node: '>=16.0.0'} @@ -368,6 +395,10 @@ packages: resolution: {integrity: sha512-BBgKawVyfQZglEkNTuBBdC3azlyqNXsvvN4jPkWAiNYcY0x1BasaJFl+7u/HisfULstryweJq/dAvIZIxzlZaA==} engines: {node: '>=18.0.0'} + '@aws-sdk/middleware-host-header@3.972.8': + resolution: {integrity: sha512-wAr2REfKsqoKQ+OkNqvOShnBoh+nkPurDKW7uAeVSu6kUECnWlSJiPvnoqxGlfousEY/v9LfS9sNc46hjSYDIQ==} + engines: {node: '>=20.0.0'} + '@aws-sdk/middleware-location-constraint@3.598.0': resolution: {integrity: sha512-8oybQxN3F1ISOMULk7JKJz5DuAm5hCUcxMW9noWShbxTJuStNvuHf/WLUzXrf8oSITyYzIHPtf8VPlKR7I3orQ==} engines: {node: '>=16.0.0'} @@ -380,6 +411,10 @@ packages: resolution: {integrity: sha512-w1qfKrSKHf9b5a8O76yQ1t69u6NWuBjr5kBX+jRWFx/5mu6RLpqERXRpVJxfosbep7k3B+DSB5tZMZ82GKcJtQ==} engines: {node: '>=18.0.0'} + '@aws-sdk/middleware-logger@3.972.8': + resolution: {integrity: sha512-CWl5UCM57WUFaFi5kB7IBY1UmOeLvNZAZ2/OZ5l20ldiJ3TiIz1pC65gYj8X0BCPWkeR1E32mpsCk1L1I4n+lA==} + engines: {node: '>=20.0.0'} + '@aws-sdk/middleware-recursion-detection@3.598.0': resolution: {integrity: sha512-vjT9BeFY9FeN0f8hm2l6F53tI0N5bUq6RcDkQXKNabXBnQxKptJRad6oP2X5y3FoVfBLOuDkQgiC2940GIPxtQ==} engines: {node: '>=16.0.0'} @@ -388,6 +423,10 @@ packages: resolution: {integrity: sha512-D2H/WoxhAZNYX+IjkKTdOhOkWQaK0jjJrDBj56hKjU5c9ltQiaX/1PqJ4dfjHntEshJfu0w+E6XJ+/6A6ILBBA==} engines: {node: '>=18.0.0'} + '@aws-sdk/middleware-recursion-detection@3.972.8': + resolution: {integrity: sha512-BnnvYs2ZEpdlmZ2PNlV2ZyQ8j8AEkMTjN79y/YA475ER1ByFYrkVR85qmhni8oeTaJcDqbx364wDpitDAA/wCA==} + engines: {node: '>=20.0.0'} + '@aws-sdk/middleware-sdk-s3@3.598.0': resolution: {integrity: sha512-5AGtLAh9wyK6ANPYfaKTqJY1IFJyePIxsEbxa7zS6REheAqyVmgJFaGu3oQ5XlxfGr5Uq59tFTRkyx26G1HkHA==} engines: {node: '>=16.0.0'} @@ -408,10 +447,18 @@ packages: resolution: {integrity: sha512-50vcHu96XakQnIvlKJ1UoltrFODjsq2KvtTgHiPFteUS884lQnK5VC/8xd1Msz/1ONpLMzdCVproCQqhDTtMPQ==} engines: {node: '>=18.0.0'} + '@aws-sdk/middleware-user-agent@3.972.23': + resolution: {integrity: sha512-HQu8QoqGZZTvg0Spl9H39QTsSMFwgu+8yz/QGKndXFLk9FZMiCiIgBCVlTVKMDvVbgqIzD9ig+/HmXsIL2Rb+g==} + engines: {node: '>=20.0.0'} + '@aws-sdk/nested-clients@3.958.0': resolution: {integrity: sha512-/KuCcS8b5TpQXkYOrPLYytrgxBhv81+5pChkOlhegbeHttjM69pyUpQVJqyfDM/A7wPLnDrzCAnk4zaAOkY0Nw==} engines: {node: '>=18.0.0'} + '@aws-sdk/nested-clients@3.996.12': + resolution: {integrity: sha512-KLdQGJPSm98uLINolQ0Tol8OAbk7g0Y7zplHJ1K83vbMIH13aoCvR6Tho66xueW4l4aZlEgVGLWBnD8ifUMsGQ==} + engines: {node: '>=20.0.0'} + '@aws-sdk/region-config-resolver@3.598.0': resolution: {integrity: sha512-oYXhmTokSav4ytmWleCr3rs/1nyvZW/S0tdi6X7u+dLNL5Jee+uMxWGzgOrWK6wrQOzucLVjS4E/wA11Kv2GTw==} engines: {node: '>=16.0.0'} @@ -420,10 +467,18 @@ packages: resolution: {integrity: sha512-V8iY3blh8l2iaOqXWW88HbkY5jDoWjH56jonprG/cpyqqCnprvpMUZWPWYJoI8rHRf2bqzZeql1slxG6EnKI7A==} engines: {node: '>=18.0.0'} + '@aws-sdk/region-config-resolver@3.972.8': + resolution: {integrity: sha512-1eD4uhTDeambO/PNIDVG19A6+v4NdD7xzwLHDutHsUqz0B+i661MwQB2eYO4/crcCvCiQG4SRm1k81k54FEIvw==} + engines: {node: '>=20.0.0'} + '@aws-sdk/signature-v4-multi-region@3.598.0': resolution: {integrity: sha512-1r/EyTrO1gSa1FirnR8V7mabr7gk+l+HkyTI0fcTSr8ucB7gmYyW6WjkY8JCz13VYHFK62usCEDS7yoJoJOzTA==} engines: {node: '>=16.0.0'} + '@aws-sdk/token-providers@3.1013.0': + resolution: {integrity: sha512-IL1c54UvbuERrs9oLm5rvkzMciwhhpn1FL0SlC3XUMoLlFhdBsWJgQKK8O5fsQLxbFVqjbjFx9OBkrn44X9PHw==} + engines: {node: '>=20.0.0'} + '@aws-sdk/token-providers@3.598.0': resolution: {integrity: sha512-TKY1EVdHVBnZqpyxyTHdpZpa1tUpb6nxVeRNn1zWG8QB5MvH4ALLd/jR+gtmWDNQbIG4cVuBOZFVL8hIYicKTA==} engines: {node: '>=16.0.0'} @@ -442,6 +497,10 @@ packages: resolution: {integrity: sha512-wzWC2Nrt859ABk6UCAVY/WYEbAd7FjkdrQL6m24+tfmWYDNRByTJ9uOgU/kw9zqLCAwb//CPvrJdhqjTznWXAg==} engines: {node: '>=18.0.0'} + '@aws-sdk/types@3.973.6': + resolution: {integrity: sha512-Atfcy4E++beKtwJHiDln2Nby8W/mam64opFPTiHEqgsthqeydFS1pY+OUlN1ouNOmf8ArPU/6cDS65anOP3KQw==} + engines: {node: '>=20.0.0'} + '@aws-sdk/util-arn-parser@3.568.0': resolution: {integrity: sha512-XUKJWWo+KOB7fbnPP0+g/o5Ulku/X53t7i/h+sPHr5xxYTJJ9CYnbToo95mzxe7xWvkLrsNtJ8L+MnNn9INs2w==} engines: {node: '>=16.0.0'} @@ -454,6 +513,10 @@ packages: resolution: {integrity: sha512-xwF9K24mZSxcxKS3UKQFeX/dPYkEps9wF1b+MGON7EvnbcucrJGyQyK1v1xFPn1aqXkBTFi+SZaMRx5E5YCVFw==} engines: {node: '>=18.0.0'} + '@aws-sdk/util-endpoints@3.996.5': + resolution: {integrity: sha512-Uh93L5sXFNbyR5sEPMzUU8tJ++Ku97EY4udmC01nB8Zu+xfBPwpIwJ6F7snqQeq8h2pf+8SGN5/NoytfKgYPIw==} + engines: {node: '>=20.0.0'} + '@aws-sdk/util-locate-window@3.957.0': resolution: {integrity: sha512-nhmgKHnNV9K+i9daumaIz8JTLsIIML9PE/HUks5liyrjUzenjW/aHoc7WJ9/Td/gPZtayxFnXQSJRb/fDlBuJw==} engines: {node: '>=18.0.0'} @@ -464,6 +527,9 @@ packages: '@aws-sdk/util-user-agent-browser@3.957.0': resolution: {integrity: sha512-exueuwxef0lUJRnGaVkNSC674eAiWU07ORhxBnevFFZEKisln+09Qrtw823iyv5I1N8T+wKfh95xvtWQrNKNQw==} + '@aws-sdk/util-user-agent-browser@3.972.8': + resolution: {integrity: sha512-B3KGXJviV2u6Cdw2SDY2aDhoJkVfY/Q/Trwk2CMSkikE1Oi6gRzxhvhIfiRpHfmIsAhV4EA54TVEX8K6CbHbkA==} + '@aws-sdk/util-user-agent-node@3.598.0': resolution: {integrity: sha512-oyWGcOlfTdzkC6SVplyr0AGh54IMrDxbhg5RxJ5P+V4BKfcDoDcZV9xenUk9NsOi9MuUjxMumb9UJGkDhM1m0A==} engines: {node: '>=16.0.0'} @@ -482,6 +548,15 @@ packages: aws-crt: optional: true + '@aws-sdk/util-user-agent-node@3.973.9': + resolution: {integrity: sha512-jeFqqp8KD/P5O+qeKxyGeu7WEVIZFNprnkaDjGmBOjwxYwafCBhpxTgV1TlW6L8e76Vh/siNylNmN/OmSIFBUQ==} + engines: {node: '>=20.0.0'} + peerDependencies: + aws-crt: '>=1.0.0' + peerDependenciesMeta: + aws-crt: + optional: true + '@aws-sdk/util-utf8-browser@3.259.0': resolution: {integrity: sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==} @@ -493,6 +568,10 @@ packages: resolution: {integrity: sha512-Ai5iiQqS8kJ5PjzMhWcLKN0G2yasAkvpnPlq2EnqlIMdB48HsizElt62qcktdxp4neRMyGkFq4NzgmDbXnhRiA==} engines: {node: '>=18.0.0'} + '@aws-sdk/xml-builder@3.972.14': + resolution: {integrity: sha512-G/Yd8Bnnyh8QrqLf8jWJbixEnScUFW24e/wOBGYdw1Cl4r80KX/DvHyM2GVZ2vTp7J4gTEr8IXJlTadA8+UfuQ==} + engines: {node: '>=20.0.0'} + '@aws/lambda-invoke-store@0.2.2': resolution: {integrity: sha512-C0NBLsIqzDIae8HFw9YIrIBsbc0xTiOtt7fAukGPnqQ/+zZNaq+4jhuccltK0QuWHBnNm/a6kLIRA6GFiM10eg==} engines: {node: '>=18.0.0'} @@ -1086,6 +1165,12 @@ packages: '@jridgewell/sourcemap-codec@1.5.5': resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} + '@lastdotnet/purrikey@1.0.0': + resolution: {integrity: sha512-Y9ycl83T1ZrLSFZYT6V/QMFZjwc4fB+/WjuQygLAVSZAJNAaEtSRm9l4lMKazV/AE30qC/uKzyY9s/zoAtNx8w==} + engines: {node: '>=14.0.0'} + peerDependencies: + ethers: ^5.7.2 + '@layerzerolabs/devtools@0.4.10': resolution: {integrity: sha512-Y9kjUQuyNfm9Vs07+Mk0+KkqHPwHN2cLSzKhe5Tp+52R7d4fI5zsn33IaJsqqGWxSDL1sKq7gFMTdtglTdsA8A==} peerDependencies: @@ -1650,6 +1735,10 @@ packages: resolution: {integrity: sha512-yiW0WI30zj8ZKoSYNx90no7ugVn3khlyH/z5W8qtKBtVE6awRALbhSG+2SAHA1r6bO/6M9utxYKVZ3PCJ1rWxw==} engines: {node: '>=16.0.0'} + '@smithy/abort-controller@4.2.12': + resolution: {integrity: sha512-xolrFw6b+2iYGl6EcOL7IJY71vvyZ0DJ3mcKtpykqPe2uscwtzDZJa1uVQXyP7w9Dd+kGwYnPbMsJrGISKiY/Q==} + engines: {node: '>=18.0.0'} + '@smithy/abort-controller@4.2.7': resolution: {integrity: sha512-rzMY6CaKx2qxrbYbqjXWS0plqEy7LOdKHS0bg4ixJ6aoGDPNUcLWk/FRNuCILh7GKLG9TFUXYYeQQldMBBwuyw==} engines: {node: '>=18.0.0'} @@ -1664,6 +1753,10 @@ packages: resolution: {integrity: sha512-Gr/qwzyPaTL1tZcq8WQyHhTZREER5R1Wytmz4WnVGL4onA3dNk6Btll55c8Vr58pLdvWZmtG8oZxJTw3t3q7Jg==} engines: {node: '>=16.0.0'} + '@smithy/config-resolver@4.4.13': + resolution: {integrity: sha512-iIzMC5NmOUP6WL6o8iPBjFhUhBZ9pPjpUpQYWMUFQqKyXXzOftbfK8zcQCz/jFV1Psmf05BK5ypx4K2r4Tnwdg==} + engines: {node: '>=18.0.0'} + '@smithy/config-resolver@4.4.5': resolution: {integrity: sha512-HAGoUAFYsUkoSckuKbCPayECeMim8pOu+yLy1zOxt1sifzEbrsRpYa+mKcMdiHKMeiqOibyPG0sFJnmaV/OGEg==} engines: {node: '>=18.0.0'} @@ -1676,10 +1769,18 @@ packages: resolution: {integrity: sha512-WsSHCPq/neD5G/MkK4csLI5Y5Pkd9c1NMfpYEKeghSGaD4Ja1qLIohRQf2D5c1Uy5aXp76DeKHkzWZ9KAlHroQ==} engines: {node: '>=18.0.0'} + '@smithy/core@3.23.12': + resolution: {integrity: sha512-o9VycsYNtgC+Dy3I0yrwCqv9CWicDnke0L7EVOrZtJpjb2t0EjaEofmMrYc0T1Kn3yk32zm6cspxF9u9Bj7e5w==} + engines: {node: '>=18.0.0'} + '@smithy/credential-provider-imds@3.2.8': resolution: {integrity: sha512-ZCY2yD0BY+K9iMXkkbnjo+08T2h8/34oHd0Jmh6BZUSZwaaGlGCyBT/3wnS7u7Xl33/EEfN4B6nQr3Gx5bYxgw==} engines: {node: '>=16.0.0'} + '@smithy/credential-provider-imds@4.2.12': + resolution: {integrity: sha512-cr2lR792vNZcYMriSIj+Um3x9KWrjcu98kn234xA6reOAFMmbRpQMOv8KPgEmLLtx3eldU6c5wALKFqNOhugmg==} + engines: {node: '>=18.0.0'} + '@smithy/credential-provider-imds@4.2.7': resolution: {integrity: sha512-CmduWdCiILCRNbQWFR0OcZlUPVtyE49Sr8yYL0rZQ4D/wKxiNzBNS/YHemvnbkIWj623fplgkexUd/c9CAKdoA==} engines: {node: '>=18.0.0'} @@ -1729,6 +1830,10 @@ packages: '@smithy/fetch-http-handler@4.1.3': resolution: {integrity: sha512-6SxNltSncI8s689nvnzZQc/dPXcpHQ34KUj6gR/HBroytKOd/isMG3gJF/zBE1TBmTT18TXyzhg3O3SOOqGEhA==} + '@smithy/fetch-http-handler@5.3.15': + resolution: {integrity: sha512-T4jFU5N/yiIfrtrsb9uOQn7RdELdM/7HbyLNr6uO/mpkj1ctiVs7CihVr51w4LyQlXWDpXFn4BElf1WmQvZu/A==} + engines: {node: '>=18.0.0'} + '@smithy/fetch-http-handler@5.3.8': resolution: {integrity: sha512-h/Fi+o7mti4n8wx1SR6UHWLaakwHRx29sizvp8OOm7iqwKGFneT06GCSFhml6Bha5BT6ot5pj3CYZnCHhGC2Rg==} engines: {node: '>=18.0.0'} @@ -1740,6 +1845,10 @@ packages: resolution: {integrity: sha512-emP23rwYyZhQBvklqTtwetkQlqbNYirDiEEwXl2v0GYWMnCzxst7ZaRAnWuy28njp5kAH54lvkdG37MblZzaHA==} engines: {node: '>=16.0.0'} + '@smithy/hash-node@4.2.12': + resolution: {integrity: sha512-QhBYbGrbxTkZ43QoTPrK72DoYviDeg6YKDrHTMJbbC+A0sml3kSjzFtXP7BtbyJnXojLfTQldGdUR0RGD8dA3w==} + engines: {node: '>=18.0.0'} + '@smithy/hash-node@4.2.7': resolution: {integrity: sha512-PU/JWLTBCV1c8FtB8tEFnY4eV1tSfBc7bDBADHfn1K+uRbPgSJ9jnJp0hyjiFN2PMdPzxsf1Fdu0eo9fJ760Xw==} engines: {node: '>=18.0.0'} @@ -1751,6 +1860,10 @@ packages: '@smithy/invalid-dependency@3.0.11': resolution: {integrity: sha512-NuQmVPEJjUX6c+UELyVz8kUx8Q539EDeNwbRyu4IIF8MeV7hUtq1FB3SHVyki2u++5XLMFqngeMKk7ccspnNyQ==} + '@smithy/invalid-dependency@4.2.12': + resolution: {integrity: sha512-/4F1zb7Z8LOu1PalTdESFHR0RbPwHd3FcaG1sI3UEIriQTWakysgJr65lc1jj6QY5ye7aFsisajotH6UhWfm/g==} + engines: {node: '>=18.0.0'} + '@smithy/invalid-dependency@4.2.7': resolution: {integrity: sha512-ncvgCr9a15nPlkhIUx3CU4d7E7WEuVJOV7fS7nnK2hLtPK9tYRBkMHQbhXU1VvvKeBm/O0x26OEoBq+ngFpOEQ==} engines: {node: '>=18.0.0'} @@ -1767,6 +1880,10 @@ packages: resolution: {integrity: sha512-DZZZBvC7sjcYh4MazJSGiWMI2L7E0oCiRHREDzIxi/M2LY79/21iXt6aPLHge82wi5LsuRF5A06Ds3+0mlh6CQ==} engines: {node: '>=18.0.0'} + '@smithy/is-array-buffer@4.2.2': + resolution: {integrity: sha512-n6rQ4N8Jj4YTQO3YFrlgZuwKodf4zUFs7EJIWH86pSCWBaAtAGBFfCM7Wx6D2bBJ2xqFNxGBSrUWswT3M0VJow==} + engines: {node: '>=18.0.0'} + '@smithy/md5-js@3.0.11': resolution: {integrity: sha512-3NM0L3i2Zm4bbgG6Ymi9NBcxXhryi3uE8fIfHJZIOfZVxOkGdjdgjR9A06SFIZCfnEIWKXZdm6Yq5/aPXFFhsQ==} @@ -1774,6 +1891,10 @@ packages: resolution: {integrity: sha512-zfMhzojhFpIX3P5ug7jxTjfUcIPcGjcQYzB9t+rv0g1TX7B0QdwONW+ATouaLoD7h7LOw/ZlXfkq4xJ/g2TrIw==} engines: {node: '>=16.0.0'} + '@smithy/middleware-content-length@4.2.12': + resolution: {integrity: sha512-YE58Yz+cvFInWI/wOTrB+DbvUVz/pLn5mC5MvOV4fdRUc6qGwygyngcucRQjAhiCEbmfLOXX0gntSIcgMvAjmA==} + engines: {node: '>=18.0.0'} + '@smithy/middleware-content-length@4.2.7': resolution: {integrity: sha512-GszfBfCcvt7kIbJ41LuNa5f0wvQCHhnGx/aDaZJCCT05Ld6x6U2s0xsc/0mBFONBZjQJp2U/0uSJ178OXOwbhg==} engines: {node: '>=18.0.0'} @@ -1786,6 +1907,10 @@ packages: resolution: {integrity: sha512-gpLspUAoe6f1M6H0u4cVuFzxZBrsGZmjx2O9SigurTx4PbntYa4AJ+o0G0oGm1L2oSX6oBhcGHwrfJHup2JnJg==} engines: {node: '>=18.0.0'} + '@smithy/middleware-endpoint@4.4.27': + resolution: {integrity: sha512-T3TFfUgXQlpcg+UdzcAISdZpj4Z+XECZ/cefgA6wLBd6V4lRi0svN2hBouN/be9dXQ31X4sLWz3fAQDf+nt6BA==} + engines: {node: '>=18.0.0'} + '@smithy/middleware-retry@3.0.34': resolution: {integrity: sha512-yVRr/AAtPZlUvwEkrq7S3x7Z8/xCd97m2hLDaqdz6ucP2RKHsBjEqaUA2ebNv2SsZoPEi+ZD0dZbOB1u37tGCA==} engines: {node: '>=16.0.0'} @@ -1794,10 +1919,18 @@ packages: resolution: {integrity: sha512-MqbXK6Y9uq17h+4r0ogu/sBT6V/rdV+5NvYL7ZV444BKfQygYe8wAhDrVXagVebN6w2RE0Fm245l69mOsPGZzg==} engines: {node: '>=18.0.0'} + '@smithy/middleware-retry@4.4.44': + resolution: {integrity: sha512-Y1Rav7m5CFRPQyM4CI0koD/bXjyjJu3EQxZZhtLGD88WIrBrQ7kqXM96ncd6rYnojwOo/u9MXu57JrEvu/nLrA==} + engines: {node: '>=18.0.0'} + '@smithy/middleware-serde@3.0.11': resolution: {integrity: sha512-KzPAeySp/fOoQA82TpnwItvX8BBURecpx6ZMu75EZDkAcnPtO6vf7q4aH5QHs/F1s3/snQaSFbbUMcFFZ086Mw==} engines: {node: '>=16.0.0'} + '@smithy/middleware-serde@4.2.15': + resolution: {integrity: sha512-ExYhcltZSli0pgAKOpQQe1DLFBLryeZ22605y/YS+mQpdNWekum9Ujb/jMKfJKgjtz1AZldtwA/wCYuKJgjjlg==} + engines: {node: '>=18.0.0'} + '@smithy/middleware-serde@4.2.8': resolution: {integrity: sha512-8rDGYen5m5+NV9eHv9ry0sqm2gI6W7mc1VSFMtn6Igo25S507/HaOX9LTHAS2/J32VXD0xSzrY0H5FJtOMS4/w==} engines: {node: '>=18.0.0'} @@ -1806,6 +1939,10 @@ packages: resolution: {integrity: sha512-1HGo9a6/ikgOMrTrWL/WiN9N8GSVYpuRQO5kjstAq4CvV59bjqnh7TbdXGQ4vxLD3xlSjfBjq5t1SOELePsLnA==} engines: {node: '>=16.0.0'} + '@smithy/middleware-stack@4.2.12': + resolution: {integrity: sha512-kruC5gRHwsCOuyCd4ouQxYjgRAym2uDlCvQ5acuMtRrcdfg7mFBg6blaxcJ09STpt3ziEkis6bhg1uwrWU7txw==} + engines: {node: '>=18.0.0'} + '@smithy/middleware-stack@4.2.7': resolution: {integrity: sha512-bsOT0rJ+HHlZd9crHoS37mt8qRRN/h9jRve1SXUhVbkRzu0QaNYZp1i1jha4n098tsvROjcwfLlfvcFuJSXEsw==} engines: {node: '>=18.0.0'} @@ -1814,6 +1951,10 @@ packages: resolution: {integrity: sha512-O9LVEu5J/u/FuNlZs+L7Ikn3lz7VB9hb0GtPT9MQeiBmtK8RSY3ULmsZgXhe6VAlgTw0YO+paQx4p8xdbs43vQ==} engines: {node: '>=16.0.0'} + '@smithy/node-config-provider@4.3.12': + resolution: {integrity: sha512-tr2oKX2xMcO+rBOjobSwVAkV05SIfUKz8iI53rzxEmgW3GOOPOv0UioSDk+J8OpRQnpnhsO3Af6IEBabQBVmiw==} + engines: {node: '>=18.0.0'} + '@smithy/node-config-provider@4.3.7': resolution: {integrity: sha512-7r58wq8sdOcrwWe+klL9y3bc4GW1gnlfnFOuL7CXa7UzfhzhxKuzNdtqgzmTV+53lEp9NXh5hY/S4UgjLOzPfw==} engines: {node: '>=18.0.0'} @@ -1826,10 +1967,18 @@ packages: resolution: {integrity: sha512-NELpdmBOO6EpZtWgQiHjoShs1kmweaiNuETUpuup+cmm/xJYjT4eUjfhrXRP4jCOaAsS3c3yPsP3B+K+/fyPCQ==} engines: {node: '>=18.0.0'} + '@smithy/node-http-handler@4.5.0': + resolution: {integrity: sha512-Rnq9vQWiR1+/I6NZZMNzJHV6pZYyEHt2ZnuV3MG8z2NNenC4i/8Kzttz7CjZiHSmsN5frhXhg17z3Zqjjhmz1A==} + engines: {node: '>=18.0.0'} + '@smithy/property-provider@3.1.11': resolution: {integrity: sha512-I/+TMc4XTQ3QAjXfOcUWbSS073oOEAxgx4aZy8jHaf8JQnRkq2SZWw8+PfDtBvLUjcGMdxl+YwtzWe6i5uhL/A==} engines: {node: '>=16.0.0'} + '@smithy/property-provider@4.2.12': + resolution: {integrity: sha512-jqve46eYU1v7pZ5BM+fmkbq3DerkSluPr5EhvOcHxygxzD05ByDRppRwRPPpFrsFo5yDtCYLKu+kreHKVrvc7A==} + engines: {node: '>=18.0.0'} + '@smithy/property-provider@4.2.7': resolution: {integrity: sha512-jmNYKe9MGGPoSl/D7JDDs1C8b3dC8f/w78LbaVfoTtWy4xAd5dfjaFG9c9PWPihY4ggMQNQSMtzU77CNgAJwmA==} engines: {node: '>=18.0.0'} @@ -1838,6 +1987,10 @@ packages: resolution: {integrity: sha512-hmgIAVyxw1LySOwkgMIUN0kjN8TG9Nc85LJeEmEE/cNEe2rkHDUWhnJf2gxcSRFLWsyqWsrZGw40ROjUogg+Iw==} engines: {node: '>=16.0.0'} + '@smithy/protocol-http@5.3.12': + resolution: {integrity: sha512-fit0GZK9I1xoRlR4jXmbLhoN0OdEpa96ul8M65XdmXnxXkuMxM0Y8HDT0Fh0Xb4I85MBvBClOzgSrV1X2s1Hxw==} + engines: {node: '>=18.0.0'} + '@smithy/protocol-http@5.3.7': resolution: {integrity: sha512-1r07pb994I20dD/c2seaZhoCuNYm0rWrvBxhCQ70brNh11M5Ml2ew6qJVo0lclB3jMIXirD4s2XRXRe7QEi0xA==} engines: {node: '>=18.0.0'} @@ -1846,6 +1999,10 @@ packages: resolution: {integrity: sha512-u+5HV/9uJaeLj5XTb6+IEF/dokWWkEqJ0XiaRRogyREmKGUgZnNecLucADLdauWFKUNbQfulHFEZEdjwEBjXRg==} engines: {node: '>=16.0.0'} + '@smithy/querystring-builder@4.2.12': + resolution: {integrity: sha512-6wTZjGABQufekycfDGMEB84BgtdOE/rCVTov+EDXQ8NHKTUNIp/j27IliwP7tjIU9LR+sSzyGBOXjeEtVgzCHg==} + engines: {node: '>=18.0.0'} + '@smithy/querystring-builder@4.2.7': resolution: {integrity: sha512-eKONSywHZxK4tBxe2lXEysh8wbBdvDWiA+RIuaxZSgCMmA0zMgoDpGLJhnyj+c0leOQprVnXOmcB4m+W9Rw7sg==} engines: {node: '>=18.0.0'} @@ -1854,6 +2011,10 @@ packages: resolution: {integrity: sha512-Je3kFvCsFMnso1ilPwA7GtlbPaTixa3WwC+K21kmMZHsBEOZYQaqxcMqeFFoU7/slFjKDIpiiPydvdJm8Q/MCw==} engines: {node: '>=16.0.0'} + '@smithy/querystring-parser@4.2.12': + resolution: {integrity: sha512-P2OdvrgiAKpkPNKlKUtWbNZKB1XjPxM086NeVhK+W+wI46pIKdWBe5QyXvhUm3MEcyS/rkLvY8rZzyUdmyDZBw==} + engines: {node: '>=18.0.0'} + '@smithy/querystring-parser@4.2.7': resolution: {integrity: sha512-3X5ZvzUHmlSTHAXFlswrS6EGt8fMSIxX/c3Rm1Pni3+wYWB6cjGocmRIoqcQF9nU5OgGmL0u7l9m44tSUpfj9w==} engines: {node: '>=18.0.0'} @@ -1862,6 +2023,10 @@ packages: resolution: {integrity: sha512-QnYDPkyewrJzCyaeI2Rmp7pDwbUETe+hU8ADkXmgNusO1bgHBH7ovXJiYmba8t0fNfJx75fE8dlM6SEmZxheog==} engines: {node: '>=16.0.0'} + '@smithy/service-error-classification@4.2.12': + resolution: {integrity: sha512-LlP29oSQN0Tw0b6D0Xo6BIikBswuIiGYbRACy5ujw/JgWSzTdYj46U83ssf6Ux0GyNJVivs2uReU8pt7Eu9okQ==} + engines: {node: '>=18.0.0'} + '@smithy/service-error-classification@4.2.7': resolution: {integrity: sha512-YB7oCbukqEb2Dlh3340/8g8vNGbs/QsNNRms+gv3N2AtZz9/1vSBx6/6tpwQpZMEJFs7Uq8h4mmOn48ZZ72MkA==} engines: {node: '>=18.0.0'} @@ -1874,10 +2039,18 @@ packages: resolution: {integrity: sha512-M7iUUff/KwfNunmrgtqBfvZSzh3bmFgv/j/t1Y1dQ+8dNo34br1cqVEqy6v0mYEgi0DkGO7Xig0AnuOaEGVlcg==} engines: {node: '>=18.0.0'} + '@smithy/shared-ini-file-loader@4.4.7': + resolution: {integrity: sha512-HrOKWsUb+otTeo1HxVWeEb99t5ER1XrBi/xka2Wv6NVmTbuCUC1dvlrksdvxFtODLBjsC+PHK+fuy2x/7Ynyiw==} + engines: {node: '>=18.0.0'} + '@smithy/signature-v4@3.1.2': resolution: {integrity: sha512-3BcPylEsYtD0esM4Hoyml/+s7WP2LFhcM3J2AGdcL2vx9O60TtfpDOL72gjb4lU8NeRPeKAwR77YNyyGvMbuEA==} engines: {node: '>=16.0.0'} + '@smithy/signature-v4@5.3.12': + resolution: {integrity: sha512-B/FBwO3MVOL00DaRSXfXfa/TRXRheagt/q5A2NM13u7q+sHS59EOVGQNfG7DkmVtdQm5m3vOosoKAXSqn/OEgw==} + engines: {node: '>=18.0.0'} + '@smithy/signature-v4@5.3.7': resolution: {integrity: sha512-9oNUlqBlFZFOSdxgImA6X5GFuzE7V2H7VG/7E70cdLhidFbdtvxxt81EHgykGK5vq5D3FafH//X+Oy31j3CKOg==} engines: {node: '>=18.0.0'} @@ -1890,6 +2063,10 @@ packages: resolution: {integrity: sha512-D5z79xQWpgrGpAHb054Fn2CCTQZpog7JELbVQ6XAvXs5MNKWf28U9gzSBlJkOyMl9LA1TZEjRtwvGXfP0Sl90g==} engines: {node: '>=18.0.0'} + '@smithy/smithy-client@4.12.7': + resolution: {integrity: sha512-q3gqnwml60G44FECaEEsdQMplYhDMZYCtYhMCzadCnRnnHIobZJjegmdoUo6ieLQlPUzvrMdIJUpx6DoPmzANQ==} + engines: {node: '>=18.0.0'} + '@smithy/types@3.7.2': resolution: {integrity: sha512-bNwBYYmN8Eh9RyjS1p2gW6MIhSO2rl7X9QeLM8iTdcGRP+eDiIWDt66c9IysCc22gefKszZv+ubV9qZc7hdESg==} engines: {node: '>=16.0.0'} @@ -1898,9 +2075,17 @@ packages: resolution: {integrity: sha512-mlrmL0DRDVe3mNrjTcVcZEgkFmufITfUAPBEA+AHYiIeYyJebso/He1qLbP3PssRe22KUzLRpQSdBPbXdgZ2VA==} engines: {node: '>=18.0.0'} + '@smithy/types@4.13.1': + resolution: {integrity: sha512-787F3yzE2UiJIQ+wYW1CVg2odHjmaWLGksnKQHUrK/lYZSEcy1msuLVvxaR/sI2/aDe9U+TBuLsXnr3vod1g0g==} + engines: {node: '>=18.0.0'} + '@smithy/url-parser@3.0.11': resolution: {integrity: sha512-TmlqXkSk8ZPhfc+SQutjmFr5FjC0av3GZP4B/10caK1SbRwe/v+Wzu/R6xEKxoNqL+8nY18s1byiy6HqPG37Aw==} + '@smithy/url-parser@4.2.12': + resolution: {integrity: sha512-wOPKPEpso+doCZGIlr+e1lVI6+9VAKfL4kZWFgzVgGWY2hZxshNKod4l2LXS3PRC9otH/JRSjtEHqQ/7eLciRA==} + engines: {node: '>=18.0.0'} + '@smithy/url-parser@4.2.7': resolution: {integrity: sha512-/RLtVsRV4uY3qPWhBDsjwahAtt3x2IsMGnP5W1b2VZIe+qgCqkLxI1UOHDZp1Q1QSOrdOR32MF3Ph2JfWT1VHg==} engines: {node: '>=18.0.0'} @@ -1913,6 +2098,10 @@ packages: resolution: {integrity: sha512-GkXZ59JfyxsIwNTWFnjmFEI8kZpRNIBfxKjv09+nkAWPt/4aGaEWMM04m4sxgNVWkbt2MdSvE3KF/PfX4nFedQ==} engines: {node: '>=18.0.0'} + '@smithy/util-base64@4.3.2': + resolution: {integrity: sha512-XRH6b0H/5A3SgblmMa5ErXQ2XKhfbQB+Fm/oyLZ2O2kCUrwgg55bU0RekmzAhuwOjA9qdN5VU2BprOvGGUkOOQ==} + engines: {node: '>=18.0.0'} + '@smithy/util-body-length-browser@3.0.0': resolution: {integrity: sha512-cbjJs2A1mLYmqmyVl80uoLTJhAcfzMOyPgjwAYusWKMdLeNtzmMz9YxNl3/jRLoxSS3wkqkf0jwNdtXWtyEBaQ==} @@ -1920,6 +2109,10 @@ packages: resolution: {integrity: sha512-Fkoh/I76szMKJnBXWPdFkQJl2r9SjPt3cMzLdOB6eJ4Pnpas8hVoWPYemX/peO0yrrvldgCUVJqOAjUrOLjbxg==} engines: {node: '>=18.0.0'} + '@smithy/util-body-length-browser@4.2.2': + resolution: {integrity: sha512-JKCrLNOup3OOgmzeaKQwi4ZCTWlYR5H4Gm1r2uTMVBXoemo1UEghk5vtMi1xSu2ymgKVGW631e2fp9/R610ZjQ==} + engines: {node: '>=18.0.0'} + '@smithy/util-body-length-node@3.0.0': resolution: {integrity: sha512-Tj7pZ4bUloNUP6PzwhN7K386tmSmEET9QtQg0TgdNOnxhZvCssHji+oZTUIuzxECRfG8rdm2PMw2WCFs6eIYkA==} engines: {node: '>=16.0.0'} @@ -1928,6 +2121,10 @@ packages: resolution: {integrity: sha512-h53dz/pISVrVrfxV1iqXlx5pRg3V2YWFcSQyPyXZRrZoZj4R4DeWRDo1a7dd3CPTcFi3kE+98tuNyD2axyZReA==} engines: {node: '>=18.0.0'} + '@smithy/util-body-length-node@4.2.3': + resolution: {integrity: sha512-ZkJGvqBzMHVHE7r/hcuCxlTY8pQr1kMtdsVPs7ex4mMU+EAbcXppfo5NmyxMYi2XU49eqaz56j2gsk4dHHPG/g==} + engines: {node: '>=18.0.0'} + '@smithy/util-buffer-from@2.2.0': resolution: {integrity: sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==} engines: {node: '>=14.0.0'} @@ -1940,6 +2137,10 @@ packages: resolution: {integrity: sha512-kAY9hTKulTNevM2nlRtxAG2FQ3B2OR6QIrPY3zE5LqJy1oxzmgBGsHLWTcNhWXKchgA0WHW+mZkQrng/pgcCew==} engines: {node: '>=18.0.0'} + '@smithy/util-buffer-from@4.2.2': + resolution: {integrity: sha512-FDXD7cvUoFWwN6vtQfEta540Y/YBe5JneK3SoZg9bThSoOAC/eGeYEua6RkBgKjGa/sz6Y+DuBZj3+YEY21y4Q==} + engines: {node: '>=18.0.0'} + '@smithy/util-config-provider@3.0.0': resolution: {integrity: sha512-pbjk4s0fwq3Di/ANL+rCvJMKM5bzAQdE5S/6RL5NXgMExFAi6UgQMPOm5yPaIWPpr+EOXKXRonJ3FoxKf4mCJQ==} engines: {node: '>=16.0.0'} @@ -1948,6 +2149,10 @@ packages: resolution: {integrity: sha512-YEjpl6XJ36FTKmD+kRJJWYvrHeUvm5ykaUS5xK+6oXffQPHeEM4/nXlZPe+Wu0lsgRUcNZiliYNh/y7q9c2y6Q==} engines: {node: '>=18.0.0'} + '@smithy/util-config-provider@4.2.2': + resolution: {integrity: sha512-dWU03V3XUprJwaUIFVv4iOnS1FC9HnMHDfUrlNDSh4315v0cWyaIErP8KiqGVbf5z+JupoVpNM7ZB3jFiTejvQ==} + engines: {node: '>=18.0.0'} + '@smithy/util-defaults-mode-browser@3.0.34': resolution: {integrity: sha512-FumjjF631lR521cX+svMLBj3SwSDh9VdtyynTYDAiBDEf8YPP5xORNXKQ9j0105o5+ARAGnOOP/RqSl40uXddA==} engines: {node: '>= 10.0.0'} @@ -1956,6 +2161,10 @@ packages: resolution: {integrity: sha512-/eiSP3mzY3TsvUOYMeL4EqUX6fgUOj2eUOU4rMMgVbq67TiRLyxT7Xsjxq0bW3OwuzK009qOwF0L2OgJqperAQ==} engines: {node: '>=18.0.0'} + '@smithy/util-defaults-mode-browser@4.3.43': + resolution: {integrity: sha512-Qd/0wCKMaXxev/z00TvNzGCH2jlKKKxXP1aDxB6oKwSQthe3Og2dMhSayGCnsma1bK/kQX1+X7SMP99t6FgiiQ==} + engines: {node: '>=18.0.0'} + '@smithy/util-defaults-mode-node@3.0.34': resolution: {integrity: sha512-vN6aHfzW9dVVzkI0wcZoUXvfjkl4CSbM9nE//08lmUMyf00S75uuCpTrqF9uD4bD9eldIXlt53colrlwKAT8Gw==} engines: {node: '>= 10.0.0'} @@ -1964,6 +2173,10 @@ packages: resolution: {integrity: sha512-3a4+4mhf6VycEJyHIQLypRbiwG6aJvbQAeRAVXydMmfweEPnLLabRbdyo/Pjw8Rew9vjsh5WCdhmDaHkQnhhhA==} engines: {node: '>=18.0.0'} + '@smithy/util-defaults-mode-node@4.2.47': + resolution: {integrity: sha512-qSRbYp1EQ7th+sPFuVcVO05AE0QH635hycdEXlpzIahqHHf2Fyd/Zl+8v0XYMJ3cgDVPa0lkMefU7oNUjAP+DQ==} + engines: {node: '>=18.0.0'} + '@smithy/util-endpoints@2.1.7': resolution: {integrity: sha512-tSfcqKcN/Oo2STEYCABVuKgJ76nyyr6skGl9t15hs+YaiU06sgMkN7QYjo0BbVw+KT26zok3IzbdSOksQ4YzVw==} engines: {node: '>=16.0.0'} @@ -1972,6 +2185,10 @@ packages: resolution: {integrity: sha512-s4ILhyAvVqhMDYREeTS68R43B1V5aenV5q/V1QpRQJkCXib5BPRo4s7uNdzGtIKxaPHCfU/8YkvPAEvTpxgspg==} engines: {node: '>=18.0.0'} + '@smithy/util-endpoints@3.3.3': + resolution: {integrity: sha512-VACQVe50j0HZPjpwWcjyT51KUQ4AnsvEaQ2lKHOSL4mNLD0G9BjEniQ+yCt1qqfKfiAHRAts26ud7hBjamrwig==} + engines: {node: '>=18.0.0'} + '@smithy/util-hex-encoding@3.0.0': resolution: {integrity: sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ==} engines: {node: '>=16.0.0'} @@ -1980,10 +2197,18 @@ packages: resolution: {integrity: sha512-CCQBwJIvXMLKxVbO88IukazJD9a4kQ9ZN7/UMGBjBcJYvatpWk+9g870El4cB8/EJxfe+k+y0GmR9CAzkF+Nbw==} engines: {node: '>=18.0.0'} + '@smithy/util-hex-encoding@4.2.2': + resolution: {integrity: sha512-Qcz3W5vuHK4sLQdyT93k/rfrUwdJ8/HZ+nMUOyGdpeGA1Wxt65zYwi3oEl9kOM+RswvYq90fzkNDahPS8K0OIg==} + engines: {node: '>=18.0.0'} + '@smithy/util-middleware@3.0.11': resolution: {integrity: sha512-dWpyc1e1R6VoXrwLoLDd57U1z6CwNSdkM69Ie4+6uYh2GC7Vg51Qtan7ITzczuVpqezdDTKJGJB95fFvvjU/ow==} engines: {node: '>=16.0.0'} + '@smithy/util-middleware@4.2.12': + resolution: {integrity: sha512-Er805uFUOvgc0l8nv0e0su0VFISoxhJ/AwOn3gL2NWNY2LUEldP5WtVcRYSQBcjg0y9NfG8JYrCJaYDpupBHJQ==} + engines: {node: '>=18.0.0'} + '@smithy/util-middleware@4.2.7': resolution: {integrity: sha512-i1IkpbOae6NvIKsEeLLM9/2q4X+M90KV3oCFgWQI4q0Qz+yUZvsr+gZPdAEAtFhWQhAHpTsJO8DRJPuwVyln+w==} engines: {node: '>=18.0.0'} @@ -1992,6 +2217,10 @@ packages: resolution: {integrity: sha512-hJUC6W7A3DQgaee3Hp9ZFcOxVDZzmBIRBPlUAk8/fSOEl7pE/aX7Dci0JycNOnm9Mfr0KV2XjIlUOcGWXQUdVQ==} engines: {node: '>=16.0.0'} + '@smithy/util-retry@4.2.12': + resolution: {integrity: sha512-1zopLDUEOwumjcHdJ1mwBHddubYF8GMQvstVCLC54Y46rqoHwlIU+8ZzUeaBcD+WCJHyDGSeZ2ml9YSe9aqcoQ==} + engines: {node: '>=18.0.0'} + '@smithy/util-retry@4.2.7': resolution: {integrity: sha512-SvDdsQyF5CIASa4EYVT02LukPHVzAgUA4kMAuZ97QJc2BpAqZfA4PINB8/KOoCXEw9tsuv/jQjMeaHFvxdLNGg==} engines: {node: '>=18.0.0'} @@ -2000,6 +2229,10 @@ packages: resolution: {integrity: sha512-SGhGBG/KupieJvJSZp/rfHHka8BFgj56eek9px4pp7lZbOF+fRiVr4U7A3y3zJD8uGhxq32C5D96HxsTC9BckQ==} engines: {node: '>=16.0.0'} + '@smithy/util-stream@4.5.20': + resolution: {integrity: sha512-4yXLm5n/B5SRBR2p8cZ90Sbv4zL4NKsgxdzCzp/83cXw2KxLEumt5p+GAVyRNZgQOSrzXn9ARpO0lUe8XSlSDw==} + engines: {node: '>=18.0.0'} + '@smithy/util-stream@4.5.8': resolution: {integrity: sha512-ZnnBhTapjM0YPGUSmOs0Mcg/Gg87k503qG4zU2v/+Js2Gu+daKOJMeqcQns8ajepY8tgzzfYxl6kQyZKml6O2w==} engines: {node: '>=18.0.0'} @@ -2012,6 +2245,10 @@ packages: resolution: {integrity: sha512-igZpCKV9+E/Mzrpq6YacdTQ0qTiLm85gD6N/IrmyDvQFA4UnU3d5g3m8tMT/6zG/vVkWSU+VxeUyGonL62DuxA==} engines: {node: '>=18.0.0'} + '@smithy/util-uri-escape@4.2.2': + resolution: {integrity: sha512-2kAStBlvq+lTXHyAZYfJRb/DfS3rsinLiwb+69SstC9Vb0s9vNWkRwpnj918Pfi85mzi42sOqdV72OLxWAISnw==} + engines: {node: '>=18.0.0'} + '@smithy/util-utf8@2.3.0': resolution: {integrity: sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==} engines: {node: '>=14.0.0'} @@ -2024,6 +2261,10 @@ packages: resolution: {integrity: sha512-zBPfuzoI8xyBtR2P6WQj63Rz8i3AmfAaJLuNG8dWsfvPe8lO4aCPYLn879mEgHndZH1zQ2oXmG8O1GGzzaoZiw==} engines: {node: '>=18.0.0'} + '@smithy/util-utf8@4.2.2': + resolution: {integrity: sha512-75MeYpjdWRe8M5E3AW0O4Cx3UadweS+cwdXjwYGBW5h/gxxnbeZ877sLPX/ZJA9GVTlL/qG0dXP29JWFCD1Ayw==} + engines: {node: '>=18.0.0'} + '@smithy/util-waiter@3.2.0': resolution: {integrity: sha512-PpjSboaDUE6yl+1qlg3Si57++e84oXdWGbuFUSAciXsVfEZJJJupR2Nb0QuXHiunt2vGR+1PTizOMvnUPaG2Qg==} engines: {node: '>=16.0.0'} @@ -2036,6 +2277,10 @@ packages: resolution: {integrity: sha512-4aUIteuyxtBUhVdiQqcDhKFitwfd9hqoSDYY2KRXiWtgoWJ9Bmise+KfEPDiVHWeJepvF8xJO9/9+WDIciMFFw==} engines: {node: '>=18.0.0'} + '@smithy/uuid@1.1.2': + resolution: {integrity: sha512-O/IEdcCUKkubz60tFbGA7ceITTAJsty+lBjNoorP4Z6XRqaFb/OjQjZODophEcuq68nKm6/0r+6/lLQ+XVpk8g==} + engines: {node: '>=18.0.0'} + '@so-ric/colorspace@1.1.6': resolution: {integrity: sha512-/KiKkpHNOBgkFJwu9sh48LkHSMYGyuTcSFK/qMBdnOAlrRJzRSXAOFB5qwzaVQuDl8wAvHVMkaASQDReTahxuw==} @@ -3424,6 +3669,9 @@ packages: fast-uri@3.1.0: resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==} + fast-xml-builder@1.1.4: + resolution: {integrity: sha512-f2jhpN4Eccy0/Uz9csxh3Nu6q4ErKxf0XIsasomfOihuSUa3/xw6w8dnOtCDgEItQFJG8KyXPzQXzcODDrrbOg==} + fast-xml-parser@4.2.5: resolution: {integrity: sha512-B9/wizE4WngqQftFPmdaMYlXoJlJOYxGQOanC77fq9k8+Z0v5dDSVh+3glErdIROP//s/jgb7ZuxKfB8nVyo0g==} hasBin: true @@ -3432,6 +3680,10 @@ packages: resolution: {integrity: sha512-pfX9uG9Ki0yekDHx2SiuRIyFdyAr1kMIMitPvb0YBo8SUfKvia7w7FIyd/l6av85pFYRhZscS75MwMnbvY+hcQ==} hasBin: true + fast-xml-parser@5.5.6: + resolution: {integrity: sha512-3+fdZyBRVg29n4rXP0joHthhcHdPUHaIC16cuyyd1iLsuaO6Vea36MPrxgAzbZna8lhvZeRL8Bc9GP56/J9xEw==} + hasBin: true + fastq@1.20.1: resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==} @@ -3660,20 +3912,22 @@ packages: glob@10.5.0: resolution: {integrity: sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==} + deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me hasBin: true glob@11.1.0: resolution: {integrity: sha512-vuNwKSaKiqm7g0THUBu2x7ckSs3XJLXE+2ssL7/MfTGPLLcrJQ/4Uq1CjPTtO5cCIiRxqvN6Twy1qOwhL0Xjcw==} engines: {node: 20 || >=22} + deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me hasBin: true glob@5.0.15: resolution: {integrity: sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA==} - deprecated: Glob versions prior to v9 are no longer supported + deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me glob@7.1.7: resolution: {integrity: sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==} - deprecated: Glob versions prior to v9 are no longer supported + deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me glob@7.2.0: resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==} @@ -3681,7 +3935,7 @@ packages: glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - deprecated: Glob versions prior to v9 are no longer supported + deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me glob@8.1.0: resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} @@ -4755,6 +5009,10 @@ packages: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} + path-expression-matcher@1.2.0: + resolution: {integrity: sha512-DwmPWeFn+tq7TiyJ2CxezCAirXjFxvaiD03npak3cRjlP9+OjTmSy1EpIrEbh+l6JgUundniloMLDQ/6VTdhLQ==} + engines: {node: '>=14.0.0'} + path-is-absolute@1.0.1: resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} engines: {node: '>=0.10.0'} @@ -6162,13 +6420,13 @@ snapshots: '@aws-crypto/crc32@5.2.0': dependencies: '@aws-crypto/util': 5.2.0 - '@aws-sdk/types': 3.598.0 + '@aws-sdk/types': 3.957.0 tslib: 2.8.1 '@aws-crypto/crc32c@5.2.0': dependencies: '@aws-crypto/util': 5.2.0 - '@aws-sdk/types': 3.598.0 + '@aws-sdk/types': 3.957.0 tslib: 2.8.1 '@aws-crypto/sha1-browser@5.2.0': @@ -6185,7 +6443,7 @@ snapshots: '@aws-crypto/sha256-js': 5.2.0 '@aws-crypto/supports-web-crypto': 5.2.0 '@aws-crypto/util': 5.2.0 - '@aws-sdk/types': 3.598.0 + '@aws-sdk/types': 3.973.6 '@aws-sdk/util-locate-window': 3.957.0 '@smithy/util-utf8': 2.3.0 tslib: 2.8.1 @@ -6199,7 +6457,7 @@ snapshots: '@aws-crypto/sha256-js@5.2.0': dependencies: '@aws-crypto/util': 5.2.0 - '@aws-sdk/types': 3.598.0 + '@aws-sdk/types': 3.973.6 tslib: 2.8.1 '@aws-crypto/supports-web-crypto@5.2.0': @@ -6214,52 +6472,50 @@ snapshots: '@aws-crypto/util@5.2.0': dependencies: - '@aws-sdk/types': 3.598.0 + '@aws-sdk/types': 3.957.0 '@smithy/util-utf8': 2.3.0 tslib: 2.8.1 - '@aws-sdk/client-kms@3.598.0': + '@aws-sdk/client-kms@3.1013.0': dependencies: '@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/client-sso-oidc': 3.598.0(@aws-sdk/client-sts@3.598.0) - '@aws-sdk/client-sts': 3.598.0 - '@aws-sdk/core': 3.598.0 - '@aws-sdk/credential-provider-node': 3.598.0(@aws-sdk/client-sso-oidc@3.598.0)(@aws-sdk/client-sts@3.598.0) - '@aws-sdk/middleware-host-header': 3.598.0 - '@aws-sdk/middleware-logger': 3.598.0 - '@aws-sdk/middleware-recursion-detection': 3.598.0 - '@aws-sdk/middleware-user-agent': 3.598.0 - '@aws-sdk/region-config-resolver': 3.598.0 - '@aws-sdk/types': 3.598.0 - '@aws-sdk/util-endpoints': 3.598.0 - '@aws-sdk/util-user-agent-browser': 3.598.0 - '@aws-sdk/util-user-agent-node': 3.598.0 - '@smithy/config-resolver': 3.0.13 - '@smithy/core': 2.5.7 - '@smithy/fetch-http-handler': 3.2.9 - '@smithy/hash-node': 3.0.11 - '@smithy/invalid-dependency': 3.0.11 - '@smithy/middleware-content-length': 3.0.13 - '@smithy/middleware-endpoint': 3.2.8 - '@smithy/middleware-retry': 3.0.34 - '@smithy/middleware-serde': 3.0.11 - '@smithy/middleware-stack': 3.0.11 - '@smithy/node-config-provider': 3.1.12 - '@smithy/node-http-handler': 3.3.3 - '@smithy/protocol-http': 4.1.8 - '@smithy/smithy-client': 3.7.0 - '@smithy/types': 3.7.2 - '@smithy/url-parser': 3.0.11 - '@smithy/util-base64': 3.0.0 - '@smithy/util-body-length-browser': 3.0.0 - '@smithy/util-body-length-node': 3.0.0 - '@smithy/util-defaults-mode-browser': 3.0.34 - '@smithy/util-defaults-mode-node': 3.0.34 - '@smithy/util-endpoints': 2.1.7 - '@smithy/util-middleware': 3.0.11 - '@smithy/util-retry': 3.0.11 - '@smithy/util-utf8': 3.0.0 + '@aws-sdk/core': 3.973.22 + '@aws-sdk/credential-provider-node': 3.972.23 + '@aws-sdk/middleware-host-header': 3.972.8 + '@aws-sdk/middleware-logger': 3.972.8 + '@aws-sdk/middleware-recursion-detection': 3.972.8 + '@aws-sdk/middleware-user-agent': 3.972.23 + '@aws-sdk/region-config-resolver': 3.972.8 + '@aws-sdk/types': 3.973.6 + '@aws-sdk/util-endpoints': 3.996.5 + '@aws-sdk/util-user-agent-browser': 3.972.8 + '@aws-sdk/util-user-agent-node': 3.973.9 + '@smithy/config-resolver': 4.4.13 + '@smithy/core': 3.23.12 + '@smithy/fetch-http-handler': 5.3.15 + '@smithy/hash-node': 4.2.12 + '@smithy/invalid-dependency': 4.2.12 + '@smithy/middleware-content-length': 4.2.12 + '@smithy/middleware-endpoint': 4.4.27 + '@smithy/middleware-retry': 4.4.44 + '@smithy/middleware-serde': 4.2.15 + '@smithy/middleware-stack': 4.2.12 + '@smithy/node-config-provider': 4.3.12 + '@smithy/node-http-handler': 4.5.0 + '@smithy/protocol-http': 5.3.12 + '@smithy/smithy-client': 4.12.7 + '@smithy/types': 4.13.1 + '@smithy/url-parser': 4.2.12 + '@smithy/util-base64': 4.3.2 + '@smithy/util-body-length-browser': 4.2.2 + '@smithy/util-body-length-node': 4.2.3 + '@smithy/util-defaults-mode-browser': 4.3.43 + '@smithy/util-defaults-mode-node': 4.2.47 + '@smithy/util-endpoints': 3.3.3 + '@smithy/util-middleware': 4.2.12 + '@smithy/util-retry': 4.2.12 + '@smithy/util-utf8': 4.2.2 tslib: 2.8.1 transitivePeerDependencies: - aws-crt @@ -6376,52 +6632,6 @@ snapshots: transitivePeerDependencies: - aws-crt - '@aws-sdk/client-sso-oidc@3.598.0(@aws-sdk/client-sts@3.598.0)': - dependencies: - '@aws-crypto/sha256-browser': 5.2.0 - '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/client-sts': 3.598.0 - '@aws-sdk/core': 3.598.0 - '@aws-sdk/credential-provider-node': 3.598.0(@aws-sdk/client-sso-oidc@3.598.0)(@aws-sdk/client-sts@3.598.0) - '@aws-sdk/middleware-host-header': 3.598.0 - '@aws-sdk/middleware-logger': 3.598.0 - '@aws-sdk/middleware-recursion-detection': 3.598.0 - '@aws-sdk/middleware-user-agent': 3.598.0 - '@aws-sdk/region-config-resolver': 3.598.0 - '@aws-sdk/types': 3.598.0 - '@aws-sdk/util-endpoints': 3.598.0 - '@aws-sdk/util-user-agent-browser': 3.598.0 - '@aws-sdk/util-user-agent-node': 3.598.0 - '@smithy/config-resolver': 3.0.13 - '@smithy/core': 2.5.7 - '@smithy/fetch-http-handler': 3.2.9 - '@smithy/hash-node': 3.0.11 - '@smithy/invalid-dependency': 3.0.11 - '@smithy/middleware-content-length': 3.0.13 - '@smithy/middleware-endpoint': 3.2.8 - '@smithy/middleware-retry': 3.0.34 - '@smithy/middleware-serde': 3.0.11 - '@smithy/middleware-stack': 3.0.11 - '@smithy/node-config-provider': 3.1.12 - '@smithy/node-http-handler': 3.3.3 - '@smithy/protocol-http': 4.1.8 - '@smithy/smithy-client': 3.7.0 - '@smithy/types': 3.7.2 - '@smithy/url-parser': 3.0.11 - '@smithy/util-base64': 3.0.0 - '@smithy/util-body-length-browser': 3.0.0 - '@smithy/util-body-length-node': 3.0.0 - '@smithy/util-defaults-mode-browser': 3.0.34 - '@smithy/util-defaults-mode-node': 3.0.34 - '@smithy/util-endpoints': 2.1.7 - '@smithy/util-middleware': 3.0.11 - '@smithy/util-retry': 3.0.11 - '@smithy/util-utf8': 3.0.0 - tslib: 2.8.1 - transitivePeerDependencies: - - '@aws-sdk/client-sts' - - aws-crt - '@aws-sdk/client-sso-oidc@3.600.0': dependencies: '@aws-crypto/sha256-browser': 5.2.0 @@ -6553,51 +6763,6 @@ snapshots: transitivePeerDependencies: - aws-crt - '@aws-sdk/client-sts@3.598.0': - dependencies: - '@aws-crypto/sha256-browser': 5.2.0 - '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/client-sso-oidc': 3.598.0(@aws-sdk/client-sts@3.598.0) - '@aws-sdk/core': 3.598.0 - '@aws-sdk/credential-provider-node': 3.598.0(@aws-sdk/client-sso-oidc@3.598.0)(@aws-sdk/client-sts@3.598.0) - '@aws-sdk/middleware-host-header': 3.598.0 - '@aws-sdk/middleware-logger': 3.598.0 - '@aws-sdk/middleware-recursion-detection': 3.598.0 - '@aws-sdk/middleware-user-agent': 3.598.0 - '@aws-sdk/region-config-resolver': 3.598.0 - '@aws-sdk/types': 3.598.0 - '@aws-sdk/util-endpoints': 3.598.0 - '@aws-sdk/util-user-agent-browser': 3.598.0 - '@aws-sdk/util-user-agent-node': 3.598.0 - '@smithy/config-resolver': 3.0.13 - '@smithy/core': 2.5.7 - '@smithy/fetch-http-handler': 3.2.9 - '@smithy/hash-node': 3.0.11 - '@smithy/invalid-dependency': 3.0.11 - '@smithy/middleware-content-length': 3.0.13 - '@smithy/middleware-endpoint': 3.2.8 - '@smithy/middleware-retry': 3.0.34 - '@smithy/middleware-serde': 3.0.11 - '@smithy/middleware-stack': 3.0.11 - '@smithy/node-config-provider': 3.1.12 - '@smithy/node-http-handler': 3.3.3 - '@smithy/protocol-http': 4.1.8 - '@smithy/smithy-client': 3.7.0 - '@smithy/types': 3.7.2 - '@smithy/url-parser': 3.0.11 - '@smithy/util-base64': 3.0.0 - '@smithy/util-body-length-browser': 3.0.0 - '@smithy/util-body-length-node': 3.0.0 - '@smithy/util-defaults-mode-browser': 3.0.34 - '@smithy/util-defaults-mode-node': 3.0.34 - '@smithy/util-endpoints': 2.1.7 - '@smithy/util-middleware': 3.0.11 - '@smithy/util-retry': 3.0.11 - '@smithy/util-utf8': 3.0.0 - tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt - '@aws-sdk/client-sts@3.600.0(@aws-sdk/client-sso-oidc@3.600.0)': dependencies: '@aws-crypto/sha256-browser': 5.2.0 @@ -6670,6 +6835,22 @@ snapshots: '@smithy/util-utf8': 4.2.0 tslib: 2.8.1 + '@aws-sdk/core@3.973.22': + dependencies: + '@aws-sdk/types': 3.973.6 + '@aws-sdk/xml-builder': 3.972.14 + '@smithy/core': 3.23.12 + '@smithy/node-config-provider': 4.3.12 + '@smithy/property-provider': 4.2.12 + '@smithy/protocol-http': 5.3.12 + '@smithy/signature-v4': 5.3.12 + '@smithy/smithy-client': 4.12.7 + '@smithy/types': 4.13.1 + '@smithy/util-base64': 4.3.2 + '@smithy/util-middleware': 4.2.12 + '@smithy/util-utf8': 4.2.2 + tslib: 2.8.1 + '@aws-sdk/credential-provider-env@3.598.0': dependencies: '@aws-sdk/types': 3.598.0 @@ -6685,6 +6866,14 @@ snapshots: '@smithy/types': 4.11.0 tslib: 2.8.1 + '@aws-sdk/credential-provider-env@3.972.20': + dependencies: + '@aws-sdk/core': 3.973.22 + '@aws-sdk/types': 3.973.6 + '@smithy/property-provider': 4.2.12 + '@smithy/types': 4.13.1 + tslib: 2.8.1 + '@aws-sdk/credential-provider-http@3.598.0': dependencies: '@aws-sdk/types': 3.598.0 @@ -6710,23 +6899,18 @@ snapshots: '@smithy/util-stream': 4.5.8 tslib: 2.8.1 - '@aws-sdk/credential-provider-ini@3.598.0(@aws-sdk/client-sso-oidc@3.598.0)(@aws-sdk/client-sts@3.598.0)': + '@aws-sdk/credential-provider-http@3.972.22': dependencies: - '@aws-sdk/client-sts': 3.598.0 - '@aws-sdk/credential-provider-env': 3.598.0 - '@aws-sdk/credential-provider-http': 3.598.0 - '@aws-sdk/credential-provider-process': 3.598.0 - '@aws-sdk/credential-provider-sso': 3.598.0(@aws-sdk/client-sso-oidc@3.598.0) - '@aws-sdk/credential-provider-web-identity': 3.598.0(@aws-sdk/client-sts@3.598.0) - '@aws-sdk/types': 3.598.0 - '@smithy/credential-provider-imds': 3.2.8 - '@smithy/property-provider': 3.1.11 - '@smithy/shared-ini-file-loader': 3.1.12 - '@smithy/types': 3.7.2 + '@aws-sdk/core': 3.973.22 + '@aws-sdk/types': 3.973.6 + '@smithy/fetch-http-handler': 5.3.15 + '@smithy/node-http-handler': 4.5.0 + '@smithy/property-provider': 4.2.12 + '@smithy/protocol-http': 5.3.12 + '@smithy/smithy-client': 4.12.7 + '@smithy/types': 4.13.1 + '@smithy/util-stream': 4.5.20 tslib: 2.8.1 - transitivePeerDependencies: - - '@aws-sdk/client-sso-oidc' - - aws-crt '@aws-sdk/credential-provider-ini@3.598.0(@aws-sdk/client-sso-oidc@3.600.0)(@aws-sdk/client-sts@3.600.0)': dependencies: @@ -6765,6 +6949,25 @@ snapshots: transitivePeerDependencies: - aws-crt + '@aws-sdk/credential-provider-ini@3.972.22': + dependencies: + '@aws-sdk/core': 3.973.22 + '@aws-sdk/credential-provider-env': 3.972.20 + '@aws-sdk/credential-provider-http': 3.972.22 + '@aws-sdk/credential-provider-login': 3.972.22 + '@aws-sdk/credential-provider-process': 3.972.20 + '@aws-sdk/credential-provider-sso': 3.972.22 + '@aws-sdk/credential-provider-web-identity': 3.972.22 + '@aws-sdk/nested-clients': 3.996.12 + '@aws-sdk/types': 3.973.6 + '@smithy/credential-provider-imds': 4.2.12 + '@smithy/property-provider': 4.2.12 + '@smithy/shared-ini-file-loader': 4.4.7 + '@smithy/types': 4.13.1 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + '@aws-sdk/credential-provider-login@3.958.0': dependencies: '@aws-sdk/core': 3.957.0 @@ -6778,23 +6981,17 @@ snapshots: transitivePeerDependencies: - aws-crt - '@aws-sdk/credential-provider-node@3.598.0(@aws-sdk/client-sso-oidc@3.598.0)(@aws-sdk/client-sts@3.598.0)': + '@aws-sdk/credential-provider-login@3.972.22': dependencies: - '@aws-sdk/credential-provider-env': 3.598.0 - '@aws-sdk/credential-provider-http': 3.598.0 - '@aws-sdk/credential-provider-ini': 3.598.0(@aws-sdk/client-sso-oidc@3.598.0)(@aws-sdk/client-sts@3.598.0) - '@aws-sdk/credential-provider-process': 3.598.0 - '@aws-sdk/credential-provider-sso': 3.598.0(@aws-sdk/client-sso-oidc@3.598.0) - '@aws-sdk/credential-provider-web-identity': 3.598.0(@aws-sdk/client-sts@3.598.0) - '@aws-sdk/types': 3.598.0 - '@smithy/credential-provider-imds': 3.2.8 - '@smithy/property-provider': 3.1.11 - '@smithy/shared-ini-file-loader': 3.1.12 - '@smithy/types': 3.7.2 + '@aws-sdk/core': 3.973.22 + '@aws-sdk/nested-clients': 3.996.12 + '@aws-sdk/types': 3.973.6 + '@smithy/property-provider': 4.2.12 + '@smithy/protocol-http': 5.3.12 + '@smithy/shared-ini-file-loader': 4.4.7 + '@smithy/types': 4.13.1 tslib: 2.8.1 transitivePeerDependencies: - - '@aws-sdk/client-sso-oidc' - - '@aws-sdk/client-sts' - aws-crt '@aws-sdk/credential-provider-node@3.600.0(@aws-sdk/client-sso-oidc@3.600.0)(@aws-sdk/client-sts@3.600.0)': @@ -6833,6 +7030,23 @@ snapshots: transitivePeerDependencies: - aws-crt + '@aws-sdk/credential-provider-node@3.972.23': + dependencies: + '@aws-sdk/credential-provider-env': 3.972.20 + '@aws-sdk/credential-provider-http': 3.972.22 + '@aws-sdk/credential-provider-ini': 3.972.22 + '@aws-sdk/credential-provider-process': 3.972.20 + '@aws-sdk/credential-provider-sso': 3.972.22 + '@aws-sdk/credential-provider-web-identity': 3.972.22 + '@aws-sdk/types': 3.973.6 + '@smithy/credential-provider-imds': 4.2.12 + '@smithy/property-provider': 4.2.12 + '@smithy/shared-ini-file-loader': 4.4.7 + '@smithy/types': 4.13.1 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + '@aws-sdk/credential-provider-process@3.598.0': dependencies: '@aws-sdk/types': 3.598.0 @@ -6850,18 +7064,14 @@ snapshots: '@smithy/types': 4.11.0 tslib: 2.8.1 - '@aws-sdk/credential-provider-sso@3.598.0(@aws-sdk/client-sso-oidc@3.598.0)': + '@aws-sdk/credential-provider-process@3.972.20': dependencies: - '@aws-sdk/client-sso': 3.598.0 - '@aws-sdk/token-providers': 3.598.0(@aws-sdk/client-sso-oidc@3.598.0) - '@aws-sdk/types': 3.598.0 - '@smithy/property-provider': 3.1.11 - '@smithy/shared-ini-file-loader': 3.1.12 - '@smithy/types': 3.7.2 + '@aws-sdk/core': 3.973.22 + '@aws-sdk/types': 3.973.6 + '@smithy/property-provider': 4.2.12 + '@smithy/shared-ini-file-loader': 4.4.7 + '@smithy/types': 4.13.1 tslib: 2.8.1 - transitivePeerDependencies: - - '@aws-sdk/client-sso-oidc' - - aws-crt '@aws-sdk/credential-provider-sso@3.598.0(@aws-sdk/client-sso-oidc@3.600.0)': dependencies: @@ -6889,13 +7099,18 @@ snapshots: transitivePeerDependencies: - aws-crt - '@aws-sdk/credential-provider-web-identity@3.598.0(@aws-sdk/client-sts@3.598.0)': + '@aws-sdk/credential-provider-sso@3.972.22': dependencies: - '@aws-sdk/client-sts': 3.598.0 - '@aws-sdk/types': 3.598.0 - '@smithy/property-provider': 3.1.11 - '@smithy/types': 3.7.2 + '@aws-sdk/core': 3.973.22 + '@aws-sdk/nested-clients': 3.996.12 + '@aws-sdk/token-providers': 3.1013.0 + '@aws-sdk/types': 3.973.6 + '@smithy/property-provider': 4.2.12 + '@smithy/shared-ini-file-loader': 4.4.7 + '@smithy/types': 4.13.1 tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt '@aws-sdk/credential-provider-web-identity@3.598.0(@aws-sdk/client-sts@3.600.0)': dependencies: @@ -6917,6 +7132,18 @@ snapshots: transitivePeerDependencies: - aws-crt + '@aws-sdk/credential-provider-web-identity@3.972.22': + dependencies: + '@aws-sdk/core': 3.973.22 + '@aws-sdk/nested-clients': 3.996.12 + '@aws-sdk/types': 3.973.6 + '@smithy/property-provider': 4.2.12 + '@smithy/shared-ini-file-loader': 4.4.7 + '@smithy/types': 4.13.1 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + '@aws-sdk/middleware-bucket-endpoint@3.598.0': dependencies: '@aws-sdk/types': 3.598.0 @@ -6959,6 +7186,13 @@ snapshots: '@smithy/types': 4.11.0 tslib: 2.8.1 + '@aws-sdk/middleware-host-header@3.972.8': + dependencies: + '@aws-sdk/types': 3.973.6 + '@smithy/protocol-http': 5.3.12 + '@smithy/types': 4.13.1 + tslib: 2.8.1 + '@aws-sdk/middleware-location-constraint@3.598.0': dependencies: '@aws-sdk/types': 3.598.0 @@ -6977,6 +7211,12 @@ snapshots: '@smithy/types': 4.11.0 tslib: 2.8.1 + '@aws-sdk/middleware-logger@3.972.8': + dependencies: + '@aws-sdk/types': 3.973.6 + '@smithy/types': 4.13.1 + tslib: 2.8.1 + '@aws-sdk/middleware-recursion-detection@3.598.0': dependencies: '@aws-sdk/types': 3.598.0 @@ -6992,6 +7232,14 @@ snapshots: '@smithy/types': 4.11.0 tslib: 2.8.1 + '@aws-sdk/middleware-recursion-detection@3.972.8': + dependencies: + '@aws-sdk/types': 3.973.6 + '@aws/lambda-invoke-store': 0.2.2 + '@smithy/protocol-http': 5.3.12 + '@smithy/types': 4.13.1 + tslib: 2.8.1 + '@aws-sdk/middleware-sdk-s3@3.598.0': dependencies: '@aws-sdk/types': 3.598.0 @@ -7038,6 +7286,17 @@ snapshots: '@smithy/types': 4.11.0 tslib: 2.8.1 + '@aws-sdk/middleware-user-agent@3.972.23': + dependencies: + '@aws-sdk/core': 3.973.22 + '@aws-sdk/types': 3.973.6 + '@aws-sdk/util-endpoints': 3.996.5 + '@smithy/core': 3.23.12 + '@smithy/protocol-http': 5.3.12 + '@smithy/types': 4.13.1 + '@smithy/util-retry': 4.2.12 + tslib: 2.8.1 + '@aws-sdk/nested-clients@3.958.0': dependencies: '@aws-crypto/sha256-browser': 5.2.0 @@ -7081,6 +7340,49 @@ snapshots: transitivePeerDependencies: - aws-crt + '@aws-sdk/nested-clients@3.996.12': + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/core': 3.973.22 + '@aws-sdk/middleware-host-header': 3.972.8 + '@aws-sdk/middleware-logger': 3.972.8 + '@aws-sdk/middleware-recursion-detection': 3.972.8 + '@aws-sdk/middleware-user-agent': 3.972.23 + '@aws-sdk/region-config-resolver': 3.972.8 + '@aws-sdk/types': 3.973.6 + '@aws-sdk/util-endpoints': 3.996.5 + '@aws-sdk/util-user-agent-browser': 3.972.8 + '@aws-sdk/util-user-agent-node': 3.973.9 + '@smithy/config-resolver': 4.4.13 + '@smithy/core': 3.23.12 + '@smithy/fetch-http-handler': 5.3.15 + '@smithy/hash-node': 4.2.12 + '@smithy/invalid-dependency': 4.2.12 + '@smithy/middleware-content-length': 4.2.12 + '@smithy/middleware-endpoint': 4.4.27 + '@smithy/middleware-retry': 4.4.44 + '@smithy/middleware-serde': 4.2.15 + '@smithy/middleware-stack': 4.2.12 + '@smithy/node-config-provider': 4.3.12 + '@smithy/node-http-handler': 4.5.0 + '@smithy/protocol-http': 5.3.12 + '@smithy/smithy-client': 4.12.7 + '@smithy/types': 4.13.1 + '@smithy/url-parser': 4.2.12 + '@smithy/util-base64': 4.3.2 + '@smithy/util-body-length-browser': 4.2.2 + '@smithy/util-body-length-node': 4.2.3 + '@smithy/util-defaults-mode-browser': 4.3.43 + '@smithy/util-defaults-mode-node': 4.2.47 + '@smithy/util-endpoints': 3.3.3 + '@smithy/util-middleware': 4.2.12 + '@smithy/util-retry': 4.2.12 + '@smithy/util-utf8': 4.2.2 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + '@aws-sdk/region-config-resolver@3.598.0': dependencies: '@aws-sdk/types': 3.598.0 @@ -7098,6 +7400,14 @@ snapshots: '@smithy/types': 4.11.0 tslib: 2.8.1 + '@aws-sdk/region-config-resolver@3.972.8': + dependencies: + '@aws-sdk/types': 3.973.6 + '@smithy/config-resolver': 4.4.13 + '@smithy/node-config-provider': 4.3.12 + '@smithy/types': 4.13.1 + tslib: 2.8.1 + '@aws-sdk/signature-v4-multi-region@3.598.0': dependencies: '@aws-sdk/middleware-sdk-s3': 3.598.0 @@ -7107,14 +7417,17 @@ snapshots: '@smithy/types': 3.7.2 tslib: 2.8.1 - '@aws-sdk/token-providers@3.598.0(@aws-sdk/client-sso-oidc@3.598.0)': + '@aws-sdk/token-providers@3.1013.0': dependencies: - '@aws-sdk/client-sso-oidc': 3.598.0(@aws-sdk/client-sts@3.598.0) - '@aws-sdk/types': 3.598.0 - '@smithy/property-provider': 3.1.11 - '@smithy/shared-ini-file-loader': 3.1.12 - '@smithy/types': 3.7.2 + '@aws-sdk/core': 3.973.22 + '@aws-sdk/nested-clients': 3.996.12 + '@aws-sdk/types': 3.973.6 + '@smithy/property-provider': 4.2.12 + '@smithy/shared-ini-file-loader': 4.4.7 + '@smithy/types': 4.13.1 tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt '@aws-sdk/token-providers@3.598.0(@aws-sdk/client-sso-oidc@3.600.0)': dependencies: @@ -7147,6 +7460,11 @@ snapshots: '@smithy/types': 4.11.0 tslib: 2.8.1 + '@aws-sdk/types@3.973.6': + dependencies: + '@smithy/types': 4.13.1 + tslib: 2.8.1 + '@aws-sdk/util-arn-parser@3.568.0': dependencies: tslib: 2.8.1 @@ -7166,6 +7484,14 @@ snapshots: '@smithy/util-endpoints': 3.2.7 tslib: 2.8.1 + '@aws-sdk/util-endpoints@3.996.5': + dependencies: + '@aws-sdk/types': 3.973.6 + '@smithy/types': 4.13.1 + '@smithy/url-parser': 4.2.12 + '@smithy/util-endpoints': 3.3.3 + tslib: 2.8.1 + '@aws-sdk/util-locate-window@3.957.0': dependencies: tslib: 2.8.1 @@ -7184,6 +7510,13 @@ snapshots: bowser: 2.13.1 tslib: 2.8.1 + '@aws-sdk/util-user-agent-browser@3.972.8': + dependencies: + '@aws-sdk/types': 3.973.6 + '@smithy/types': 4.13.1 + bowser: 2.13.1 + tslib: 2.8.1 + '@aws-sdk/util-user-agent-node@3.598.0': dependencies: '@aws-sdk/types': 3.598.0 @@ -7199,6 +7532,15 @@ snapshots: '@smithy/types': 4.11.0 tslib: 2.8.1 + '@aws-sdk/util-user-agent-node@3.973.9': + dependencies: + '@aws-sdk/middleware-user-agent': 3.972.23 + '@aws-sdk/types': 3.973.6 + '@smithy/node-config-provider': 4.3.12 + '@smithy/types': 4.13.1 + '@smithy/util-config-provider': 4.2.2 + tslib: 2.8.1 + '@aws-sdk/util-utf8-browser@3.259.0': dependencies: tslib: 2.8.1 @@ -7214,6 +7556,12 @@ snapshots: fast-xml-parser: 5.2.5 tslib: 2.8.1 + '@aws-sdk/xml-builder@3.972.14': + dependencies: + '@smithy/types': 4.13.1 + fast-xml-parser: 5.5.6 + tslib: 2.8.1 + '@aws/lambda-invoke-store@0.2.2': {} '@axelar-network/axelar-gmp-sdk-solidity@5.10.0': {} @@ -8206,6 +8554,18 @@ snapshots: '@jridgewell/sourcemap-codec@1.5.5': {} + '@lastdotnet/purrikey@1.0.0(ethers@5.7.2(bufferutil@4.1.0)(utf-8-validate@5.0.10))': + dependencies: + '@aws-sdk/client-kms': 3.1013.0 + '@ethersproject/bytes': 5.8.0 + '@ethersproject/keccak256': 5.8.0 + '@ethersproject/properties': 5.8.0 + '@ethersproject/rlp': 5.8.0 + ethers: 5.7.2(bufferutil@4.1.0)(utf-8-validate@5.0.10) + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + '@layerzerolabs/devtools@0.4.10(@ethersproject/bytes@5.8.0)(@layerzerolabs/io-devtools@0.1.17(zod@3.25.76))(@layerzerolabs/lz-definitions@3.0.151)(zod@3.25.76)': dependencies: '@ethersproject/bytes': 5.8.0 @@ -8958,6 +9318,11 @@ snapshots: '@smithy/types': 3.7.2 tslib: 2.8.1 + '@smithy/abort-controller@4.2.12': + dependencies: + '@smithy/types': 4.13.1 + tslib: 2.8.1 + '@smithy/abort-controller@4.2.7': dependencies: '@smithy/types': 4.11.0 @@ -8980,6 +9345,15 @@ snapshots: '@smithy/util-middleware': 3.0.11 tslib: 2.8.1 + '@smithy/config-resolver@4.4.13': + dependencies: + '@smithy/node-config-provider': 4.3.12 + '@smithy/types': 4.13.1 + '@smithy/util-config-provider': 4.2.2 + '@smithy/util-endpoints': 3.3.3 + '@smithy/util-middleware': 4.2.12 + tslib: 2.8.1 + '@smithy/config-resolver@4.4.5': dependencies: '@smithy/node-config-provider': 4.3.7 @@ -9013,6 +9387,19 @@ snapshots: '@smithy/uuid': 1.1.0 tslib: 2.8.1 + '@smithy/core@3.23.12': + dependencies: + '@smithy/protocol-http': 5.3.12 + '@smithy/types': 4.13.1 + '@smithy/url-parser': 4.2.12 + '@smithy/util-base64': 4.3.2 + '@smithy/util-body-length-browser': 4.2.2 + '@smithy/util-middleware': 4.2.12 + '@smithy/util-stream': 4.5.20 + '@smithy/util-utf8': 4.2.2 + '@smithy/uuid': 1.1.2 + tslib: 2.8.1 + '@smithy/credential-provider-imds@3.2.8': dependencies: '@smithy/node-config-provider': 3.1.12 @@ -9021,6 +9408,14 @@ snapshots: '@smithy/url-parser': 3.0.11 tslib: 2.8.1 + '@smithy/credential-provider-imds@4.2.12': + dependencies: + '@smithy/node-config-provider': 4.3.12 + '@smithy/property-provider': 4.2.12 + '@smithy/types': 4.13.1 + '@smithy/url-parser': 4.2.12 + tslib: 2.8.1 + '@smithy/credential-provider-imds@4.2.7': dependencies: '@smithy/node-config-provider': 4.3.7 @@ -9105,6 +9500,14 @@ snapshots: '@smithy/util-base64': 3.0.0 tslib: 2.8.1 + '@smithy/fetch-http-handler@5.3.15': + dependencies: + '@smithy/protocol-http': 5.3.12 + '@smithy/querystring-builder': 4.2.12 + '@smithy/types': 4.13.1 + '@smithy/util-base64': 4.3.2 + tslib: 2.8.1 + '@smithy/fetch-http-handler@5.3.8': dependencies: '@smithy/protocol-http': 5.3.7 @@ -9127,6 +9530,13 @@ snapshots: '@smithy/util-utf8': 3.0.0 tslib: 2.8.1 + '@smithy/hash-node@4.2.12': + dependencies: + '@smithy/types': 4.13.1 + '@smithy/util-buffer-from': 4.2.2 + '@smithy/util-utf8': 4.2.2 + tslib: 2.8.1 + '@smithy/hash-node@4.2.7': dependencies: '@smithy/types': 4.11.0 @@ -9145,6 +9555,11 @@ snapshots: '@smithy/types': 3.7.2 tslib: 2.8.1 + '@smithy/invalid-dependency@4.2.12': + dependencies: + '@smithy/types': 4.13.1 + tslib: 2.8.1 + '@smithy/invalid-dependency@4.2.7': dependencies: '@smithy/types': 4.11.0 @@ -9162,6 +9577,10 @@ snapshots: dependencies: tslib: 2.8.1 + '@smithy/is-array-buffer@4.2.2': + dependencies: + tslib: 2.8.1 + '@smithy/md5-js@3.0.11': dependencies: '@smithy/types': 3.7.2 @@ -9174,6 +9593,12 @@ snapshots: '@smithy/types': 3.7.2 tslib: 2.8.1 + '@smithy/middleware-content-length@4.2.12': + dependencies: + '@smithy/protocol-http': 5.3.12 + '@smithy/types': 4.13.1 + tslib: 2.8.1 + '@smithy/middleware-content-length@4.2.7': dependencies: '@smithy/protocol-http': 5.3.7 @@ -9202,6 +9627,17 @@ snapshots: '@smithy/util-middleware': 4.2.7 tslib: 2.8.1 + '@smithy/middleware-endpoint@4.4.27': + dependencies: + '@smithy/core': 3.23.12 + '@smithy/middleware-serde': 4.2.15 + '@smithy/node-config-provider': 4.3.12 + '@smithy/shared-ini-file-loader': 4.4.7 + '@smithy/types': 4.13.1 + '@smithy/url-parser': 4.2.12 + '@smithy/util-middleware': 4.2.12 + tslib: 2.8.1 + '@smithy/middleware-retry@3.0.34': dependencies: '@smithy/node-config-provider': 3.1.12 @@ -9226,11 +9662,30 @@ snapshots: '@smithy/uuid': 1.1.0 tslib: 2.8.1 + '@smithy/middleware-retry@4.4.44': + dependencies: + '@smithy/node-config-provider': 4.3.12 + '@smithy/protocol-http': 5.3.12 + '@smithy/service-error-classification': 4.2.12 + '@smithy/smithy-client': 4.12.7 + '@smithy/types': 4.13.1 + '@smithy/util-middleware': 4.2.12 + '@smithy/util-retry': 4.2.12 + '@smithy/uuid': 1.1.2 + tslib: 2.8.1 + '@smithy/middleware-serde@3.0.11': dependencies: '@smithy/types': 3.7.2 tslib: 2.8.1 + '@smithy/middleware-serde@4.2.15': + dependencies: + '@smithy/core': 3.23.12 + '@smithy/protocol-http': 5.3.12 + '@smithy/types': 4.13.1 + tslib: 2.8.1 + '@smithy/middleware-serde@4.2.8': dependencies: '@smithy/protocol-http': 5.3.7 @@ -9242,6 +9697,11 @@ snapshots: '@smithy/types': 3.7.2 tslib: 2.8.1 + '@smithy/middleware-stack@4.2.12': + dependencies: + '@smithy/types': 4.13.1 + tslib: 2.8.1 + '@smithy/middleware-stack@4.2.7': dependencies: '@smithy/types': 4.11.0 @@ -9254,6 +9714,13 @@ snapshots: '@smithy/types': 3.7.2 tslib: 2.8.1 + '@smithy/node-config-provider@4.3.12': + dependencies: + '@smithy/property-provider': 4.2.12 + '@smithy/shared-ini-file-loader': 4.4.7 + '@smithy/types': 4.13.1 + tslib: 2.8.1 + '@smithy/node-config-provider@4.3.7': dependencies: '@smithy/property-provider': 4.2.7 @@ -9277,11 +9744,24 @@ snapshots: '@smithy/types': 4.11.0 tslib: 2.8.1 + '@smithy/node-http-handler@4.5.0': + dependencies: + '@smithy/abort-controller': 4.2.12 + '@smithy/protocol-http': 5.3.12 + '@smithy/querystring-builder': 4.2.12 + '@smithy/types': 4.13.1 + tslib: 2.8.1 + '@smithy/property-provider@3.1.11': dependencies: '@smithy/types': 3.7.2 tslib: 2.8.1 + '@smithy/property-provider@4.2.12': + dependencies: + '@smithy/types': 4.13.1 + tslib: 2.8.1 + '@smithy/property-provider@4.2.7': dependencies: '@smithy/types': 4.11.0 @@ -9292,6 +9772,11 @@ snapshots: '@smithy/types': 3.7.2 tslib: 2.8.1 + '@smithy/protocol-http@5.3.12': + dependencies: + '@smithy/types': 4.13.1 + tslib: 2.8.1 + '@smithy/protocol-http@5.3.7': dependencies: '@smithy/types': 4.11.0 @@ -9303,6 +9788,12 @@ snapshots: '@smithy/util-uri-escape': 3.0.0 tslib: 2.8.1 + '@smithy/querystring-builder@4.2.12': + dependencies: + '@smithy/types': 4.13.1 + '@smithy/util-uri-escape': 4.2.2 + tslib: 2.8.1 + '@smithy/querystring-builder@4.2.7': dependencies: '@smithy/types': 4.11.0 @@ -9314,6 +9805,11 @@ snapshots: '@smithy/types': 3.7.2 tslib: 2.8.1 + '@smithy/querystring-parser@4.2.12': + dependencies: + '@smithy/types': 4.13.1 + tslib: 2.8.1 + '@smithy/querystring-parser@4.2.7': dependencies: '@smithy/types': 4.11.0 @@ -9323,6 +9819,10 @@ snapshots: dependencies: '@smithy/types': 3.7.2 + '@smithy/service-error-classification@4.2.12': + dependencies: + '@smithy/types': 4.13.1 + '@smithy/service-error-classification@4.2.7': dependencies: '@smithy/types': 4.11.0 @@ -9337,6 +9837,11 @@ snapshots: '@smithy/types': 4.11.0 tslib: 2.8.1 + '@smithy/shared-ini-file-loader@4.4.7': + dependencies: + '@smithy/types': 4.13.1 + tslib: 2.8.1 + '@smithy/signature-v4@3.1.2': dependencies: '@smithy/is-array-buffer': 3.0.0 @@ -9347,6 +9852,17 @@ snapshots: '@smithy/util-utf8': 3.0.0 tslib: 2.8.1 + '@smithy/signature-v4@5.3.12': + dependencies: + '@smithy/is-array-buffer': 4.2.2 + '@smithy/protocol-http': 5.3.12 + '@smithy/types': 4.13.1 + '@smithy/util-hex-encoding': 4.2.2 + '@smithy/util-middleware': 4.2.12 + '@smithy/util-uri-escape': 4.2.2 + '@smithy/util-utf8': 4.2.2 + tslib: 2.8.1 + '@smithy/signature-v4@5.3.7': dependencies: '@smithy/is-array-buffer': 4.2.0 @@ -9378,6 +9894,16 @@ snapshots: '@smithy/util-stream': 4.5.8 tslib: 2.8.1 + '@smithy/smithy-client@4.12.7': + dependencies: + '@smithy/core': 3.23.12 + '@smithy/middleware-endpoint': 4.4.27 + '@smithy/middleware-stack': 4.2.12 + '@smithy/protocol-http': 5.3.12 + '@smithy/types': 4.13.1 + '@smithy/util-stream': 4.5.20 + tslib: 2.8.1 + '@smithy/types@3.7.2': dependencies: tslib: 2.8.1 @@ -9386,12 +9912,22 @@ snapshots: dependencies: tslib: 2.8.1 + '@smithy/types@4.13.1': + dependencies: + tslib: 2.8.1 + '@smithy/url-parser@3.0.11': dependencies: '@smithy/querystring-parser': 3.0.11 '@smithy/types': 3.7.2 tslib: 2.8.1 + '@smithy/url-parser@4.2.12': + dependencies: + '@smithy/querystring-parser': 4.2.12 + '@smithy/types': 4.13.1 + tslib: 2.8.1 + '@smithy/url-parser@4.2.7': dependencies: '@smithy/querystring-parser': 4.2.7 @@ -9410,6 +9946,12 @@ snapshots: '@smithy/util-utf8': 4.2.0 tslib: 2.8.1 + '@smithy/util-base64@4.3.2': + dependencies: + '@smithy/util-buffer-from': 4.2.2 + '@smithy/util-utf8': 4.2.2 + tslib: 2.8.1 + '@smithy/util-body-length-browser@3.0.0': dependencies: tslib: 2.8.1 @@ -9418,6 +9960,10 @@ snapshots: dependencies: tslib: 2.8.1 + '@smithy/util-body-length-browser@4.2.2': + dependencies: + tslib: 2.8.1 + '@smithy/util-body-length-node@3.0.0': dependencies: tslib: 2.8.1 @@ -9426,6 +9972,10 @@ snapshots: dependencies: tslib: 2.8.1 + '@smithy/util-body-length-node@4.2.3': + dependencies: + tslib: 2.8.1 + '@smithy/util-buffer-from@2.2.0': dependencies: '@smithy/is-array-buffer': 2.2.0 @@ -9441,6 +9991,11 @@ snapshots: '@smithy/is-array-buffer': 4.2.0 tslib: 2.8.1 + '@smithy/util-buffer-from@4.2.2': + dependencies: + '@smithy/is-array-buffer': 4.2.2 + tslib: 2.8.1 + '@smithy/util-config-provider@3.0.0': dependencies: tslib: 2.8.1 @@ -9449,6 +10004,10 @@ snapshots: dependencies: tslib: 2.8.1 + '@smithy/util-config-provider@4.2.2': + dependencies: + tslib: 2.8.1 + '@smithy/util-defaults-mode-browser@3.0.34': dependencies: '@smithy/property-provider': 3.1.11 @@ -9464,6 +10023,13 @@ snapshots: '@smithy/types': 4.11.0 tslib: 2.8.1 + '@smithy/util-defaults-mode-browser@4.3.43': + dependencies: + '@smithy/property-provider': 4.2.12 + '@smithy/smithy-client': 4.12.7 + '@smithy/types': 4.13.1 + tslib: 2.8.1 + '@smithy/util-defaults-mode-node@3.0.34': dependencies: '@smithy/config-resolver': 3.0.13 @@ -9484,6 +10050,16 @@ snapshots: '@smithy/types': 4.11.0 tslib: 2.8.1 + '@smithy/util-defaults-mode-node@4.2.47': + dependencies: + '@smithy/config-resolver': 4.4.13 + '@smithy/credential-provider-imds': 4.2.12 + '@smithy/node-config-provider': 4.3.12 + '@smithy/property-provider': 4.2.12 + '@smithy/smithy-client': 4.12.7 + '@smithy/types': 4.13.1 + tslib: 2.8.1 + '@smithy/util-endpoints@2.1.7': dependencies: '@smithy/node-config-provider': 3.1.12 @@ -9496,6 +10072,12 @@ snapshots: '@smithy/types': 4.11.0 tslib: 2.8.1 + '@smithy/util-endpoints@3.3.3': + dependencies: + '@smithy/node-config-provider': 4.3.12 + '@smithy/types': 4.13.1 + tslib: 2.8.1 + '@smithy/util-hex-encoding@3.0.0': dependencies: tslib: 2.8.1 @@ -9504,11 +10086,20 @@ snapshots: dependencies: tslib: 2.8.1 + '@smithy/util-hex-encoding@4.2.2': + dependencies: + tslib: 2.8.1 + '@smithy/util-middleware@3.0.11': dependencies: '@smithy/types': 3.7.2 tslib: 2.8.1 + '@smithy/util-middleware@4.2.12': + dependencies: + '@smithy/types': 4.13.1 + tslib: 2.8.1 + '@smithy/util-middleware@4.2.7': dependencies: '@smithy/types': 4.11.0 @@ -9520,6 +10111,12 @@ snapshots: '@smithy/types': 3.7.2 tslib: 2.8.1 + '@smithy/util-retry@4.2.12': + dependencies: + '@smithy/service-error-classification': 4.2.12 + '@smithy/types': 4.13.1 + tslib: 2.8.1 + '@smithy/util-retry@4.2.7': dependencies: '@smithy/service-error-classification': 4.2.7 @@ -9537,6 +10134,17 @@ snapshots: '@smithy/util-utf8': 3.0.0 tslib: 2.8.1 + '@smithy/util-stream@4.5.20': + dependencies: + '@smithy/fetch-http-handler': 5.3.15 + '@smithy/node-http-handler': 4.5.0 + '@smithy/types': 4.13.1 + '@smithy/util-base64': 4.3.2 + '@smithy/util-buffer-from': 4.2.2 + '@smithy/util-hex-encoding': 4.2.2 + '@smithy/util-utf8': 4.2.2 + tslib: 2.8.1 + '@smithy/util-stream@4.5.8': dependencies: '@smithy/fetch-http-handler': 5.3.8 @@ -9556,6 +10164,10 @@ snapshots: dependencies: tslib: 2.8.1 + '@smithy/util-uri-escape@4.2.2': + dependencies: + tslib: 2.8.1 + '@smithy/util-utf8@2.3.0': dependencies: '@smithy/util-buffer-from': 2.2.0 @@ -9571,6 +10183,11 @@ snapshots: '@smithy/util-buffer-from': 4.2.0 tslib: 2.8.1 + '@smithy/util-utf8@4.2.2': + dependencies: + '@smithy/util-buffer-from': 4.2.2 + tslib: 2.8.1 + '@smithy/util-waiter@3.2.0': dependencies: '@smithy/abort-controller': 3.1.9 @@ -9587,6 +10204,10 @@ snapshots: dependencies: tslib: 2.8.1 + '@smithy/uuid@1.1.2': + dependencies: + tslib: 2.8.1 + '@so-ric/colorspace@1.1.6': dependencies: color: 5.0.3 @@ -11246,6 +11867,10 @@ snapshots: fast-uri@3.1.0: {} + fast-xml-builder@1.1.4: + dependencies: + path-expression-matcher: 1.2.0 + fast-xml-parser@4.2.5: dependencies: strnum: 1.1.2 @@ -11254,6 +11879,12 @@ snapshots: dependencies: strnum: 2.1.2 + fast-xml-parser@5.5.6: + dependencies: + fast-xml-builder: 1.1.4 + path-expression-matcher: 1.2.0 + strnum: 2.1.2 + fastq@1.20.1: dependencies: reusify: 1.1.0 @@ -12712,6 +13343,8 @@ snapshots: path-exists@4.0.0: {} + path-expression-matcher@1.2.0: {} + path-is-absolute@1.0.1: {} path-is-inside@1.0.2: {} diff --git a/contracts/tasks/tasks.js b/contracts/tasks/tasks.js index 3200613423..89c9e2461a 100644 --- a/contracts/tasks/tasks.js +++ b/contracts/tasks/tasks.js @@ -1,4 +1,8 @@ -const { subtask, task, types } = require("hardhat/config"); +const { + subtask: baseSubtask, + task: baseTask, + types, +} = require("hardhat/config"); const { env } = require("./env"); const { setActionVars, updateAction } = require("./defender"); const { execute, executeOnFork, proposal, governors } = require("./governance"); @@ -152,8 +156,65 @@ const { const { processCctpBridgeTransactions } = require("./crossChain"); const { keyValueStoreLocalClient } = require("../utils/defender"); const { configuration } = require("../utils/cctp"); +const { + withTaskSignerContext, + DEFAULT_KMS_RELAYER_ID, +} = require("../utils/signersNoHardhat"); const log = require("../utils/logger")("tasks"); +const RELAYER_ID_PARAM = "relayerId"; + +const withTaskContext = (taskName, action) => { + return async (taskArgs, hre, runSuper) => { + return withTaskSignerContext( + { + relayerId: taskArgs?.[RELAYER_ID_PARAM], + taskName, + }, + async () => action(taskArgs, hre, runSuper) + ); + }; +}; + +const decorateTaskDefinition = (definition, taskName) => { + const originalSetAction = definition.setAction.bind(definition); + definition.setAction = (action) => { + return originalSetAction(withTaskContext(taskName, action)); + }; + + if (definition.paramDefinitions?.[RELAYER_ID_PARAM] === undefined) { + definition.addOptionalParam( + RELAYER_ID_PARAM, + "KMS relayer id. Defaults to task map override or origin-relayer-production-evm", + DEFAULT_KMS_RELAYER_ID, + types.string + ); + } + return definition; +}; + +const buildTask = (factory) => (name, descriptionOrAction, maybeAction) => { + let description = descriptionOrAction; + let action = maybeAction; + + if (typeof descriptionOrAction === "function" && action === undefined) { + action = descriptionOrAction; + description = undefined; + } + + const definition = + description === undefined ? factory(name) : factory(name, description); + const decorated = decorateTaskDefinition(definition, name); + + if (action) { + decorated.setAction(action); + } + + return decorated; +}; + +const task = buildTask(baseTask); +const subtask = buildTask(baseSubtask); // Environment tasks. task("env", "Check env vars are properly set for a Mainnet deployment", env); diff --git a/contracts/utils/signers.js b/contracts/utils/signers.js index 412ee879fe..e98c2c3074 100644 --- a/contracts/utils/signers.js +++ b/contracts/utils/signers.js @@ -1,7 +1,12 @@ const { Wallet } = require("ethers"); const { parseEther } = require("ethers/lib/utils"); const hhHelpers = require("@nomicfoundation/hardhat-network-helpers"); -const { getDefenderSigner } = require("./signersNoHardhat"); +const { + getDefenderSigner, + getKmsAddress, + getKmsSigner, + hasAwsKmsCredentials, +} = require("./signersNoHardhat"); const { ethereumAddress, privateKey } = require("./regex"); const log = require("./logger")("utils:signers"); @@ -9,6 +14,7 @@ const log = require("./logger")("utils:signers"); /** * Signer factory that gets a signer for a hardhat test or task * If address is passed, use that address as signer. + * If AWS IAM KMS credentials are set, use a KMS-backed signer. * If DEPLOYER_PK or GOVERNOR_PK is set, use that private key as signer. * If a fork and IMPERSONATE is set, impersonate that account. * else get the first signer from the hardhat node. @@ -22,6 +28,13 @@ async function getSigner(address = undefined) { } return await hre.ethers.provider.getSigner(address); } + + if (hasAwsKmsCredentials()) { + const address = await getKmsAddress({ provider: hre.ethers.provider }); + log(`Using KMS signer ${address}`); + return await getKmsSigner(hre); + } + const pk = process.env.DEPLOYER_PK || process.env.GOVERNOR_PK; if (pk) { if (!pk.match(privateKey)) { diff --git a/contracts/utils/signersNoHardhat.js b/contracts/utils/signersNoHardhat.js index f55752502f..8269f372d1 100644 --- a/contracts/utils/signersNoHardhat.js +++ b/contracts/utils/signersNoHardhat.js @@ -1,7 +1,85 @@ const ethers = require("ethers"); +const { DirectKmsTransactionSigner } = require("@lastdotnet/purrikey"); const { Defender } = require("@openzeppelin/defender-sdk"); const log = require("./logger")("utils:signers"); +// origin-relayer-production-evm +const DEFAULT_KMS_RELAYER_ID = "mrk-248128595151466bb7f7b9a56501a98f"; +const AWS_KMS_REGION = "us-east-1"; + +// Task specific relayer overrides. +const TASK_KMS_RELAYER_ID_OVERRIDES = {}; + +let signerContext = { + relayerId: undefined, + taskName: undefined, +}; + +const hasAwsKmsCredentials = () => { + return !!process.env.AWS_ACCESS_KEY_ID && !!process.env.AWS_SECRET_ACCESS_KEY; +}; + +const resolveKmsRelayerId = (context = signerContext) => { + if (context.relayerId) { + return context.relayerId; + } + if ( + context.taskName && + TASK_KMS_RELAYER_ID_OVERRIDES[context.taskName] !== undefined + ) { + return TASK_KMS_RELAYER_ID_OVERRIDES[context.taskName]; + } + return DEFAULT_KMS_RELAYER_ID; +}; + +const withTaskSignerContext = async (context, fn) => { + const previousContext = signerContext; + signerContext = { + ...previousContext, + ...context, + }; + try { + return await fn(); + } finally { + signerContext = previousContext; + } +}; + +const getKmsSigner = async (hre) => { + const relayerId = resolveKmsRelayerId(); + return new DirectKmsTransactionSigner( + relayerId, + hre.ethers.provider, + AWS_KMS_REGION + ); +}; + +/** + * Resolve the Ethereum address for a KMS key. + * If relayerId is not provided, task context / defaults are used. + * @param {object} params + * @param {string} params.relayerId optional explicit relayer id / kms key id + * @param {string} params.taskName optional task name for task-map resolution + * @param {object} params.provider optional ethers provider for signer construction + * @returns {Promise} ethereum address + */ +const getKmsAddress = async ({ relayerId, taskName, provider } = {}) => { + const keyId = resolveKmsRelayerId({ + ...signerContext, + relayerId, + taskName, + }); + const signer = new DirectKmsTransactionSigner( + keyId, + provider || ethers.getDefaultProvider(), + AWS_KMS_REGION + ); + const address = await signer.getAddress(); + + log(`Resolved KMS Ethereum address ${address} from relayer-id "${keyId}"`); + return address; +}; + const getDefenderSigner = async () => { const speed = process.env.SPEED || "fastest"; if (!["safeLow", "average", "fast", "fastest"].includes(speed)) { @@ -44,4 +122,9 @@ const getDefenderSigner = async () => { module.exports = { getDefenderSigner, + getKmsSigner, + getKmsAddress, + hasAwsKmsCredentials, + withTaskSignerContext, + DEFAULT_KMS_RELAYER_ID, }; From 9e0eea506e98bb1fb89d20fc9e7c27767247c7d1 Mon Sep 17 00:00:00 2001 From: Christopher Jacobs Date: Wed, 25 Mar 2026 17:35:07 -0700 Subject: [PATCH 02/62] ai review/plan --- TYPESCRIPT_MIGRATION.md | 124 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 124 insertions(+) create mode 100644 TYPESCRIPT_MIGRATION.md diff --git a/TYPESCRIPT_MIGRATION.md b/TYPESCRIPT_MIGRATION.md new file mode 100644 index 0000000000..810ffc7714 --- /dev/null +++ b/TYPESCRIPT_MIGRATION.md @@ -0,0 +1,124 @@ +# TypeScript Migration Plan + +This document outlines the plan for incrementally migrating JavaScript files in `contracts/` to TypeScript. + +## Current State + +- **~311 JS files**, **~66K lines of code** in `contracts/` +- No TypeScript infrastructure (no `tsconfig.json`, no `.ts` files, no type definitions) +- All CommonJS (`require`/`module.exports`) +- Heavy use of Hardhat globals (`ethers`, `deployments`, `getNamedAccounts`) + +## Scope by Category + + +| Category | Files | LOC | Migration Difficulty | +| ---------------- | ----- | ------- | -------------------- | +| Defender Actions | 13 | ~780 | Low | +| Utils | 36 | ~7,050 | Low-Medium | +| Config | 4 | ~600 | Low | +| Deploy Scripts | 121 | ~7,300 | Medium | +| Tasks | 35 | ~10,000 | Medium | +| Tests | 87 | ~38,900 | High | + + +## Strategy + +Use `allowJs: true` in `tsconfig.json` so existing JS continues to work. Migrate files incrementally — no big bang required. The codebase can remain mixed JS/TS indefinitely. + +CommonJS module format is retained (`require`/`module.exports`). TypeScript will be configured to emit CommonJS output, so migrated files stay compatible with non-migrated ones. + +## Phase 1 — Foundation + Defender Actions (~1 day) + +**Goal:** Establish TypeScript infrastructure and migrate the highest-priority files. + +### Setup + +- Add `tsconfig.json` with `allowJs: true`, targeting ES2020, CommonJS output +- Install dependencies: `typescript`, `ts-node`, `@types/node` +- Update `hardhat.config.js` → `hardhat.config.ts` (Hardhat natively supports this) +- Update rollup config (`scripts/defender-actions/rollup.config.cjs`) to handle `.ts` input + +### Defender Actions (13 files, ~780 LOC) + +Located in `scripts/defender-actions/`. These are small, isolated async handler functions for OpenZeppelin Defender automation. Average ~60 LOC each. + +Files to migrate: + +- `doAccounting.js` (91 LOC) +- `registerValidators.js` (96 LOC) +- `stakeValidators.js` (88 LOC) +- `harvest.js` (77 LOC) +- `crossChainRelay.js` (~72 LOC) +- `crossChainRelayHyperEVM.js` (~72 LOC) +- Remaining smaller utilities (21-42 LOC each) + +Work involved: + +1. Rename `.js` → `.ts` +2. Add types to function parameters and return values +3. Type ethers contract interactions +4. Verify rollup bundling still works + +## Phase 2 — Utils (~2-3 days) + +**Goal:** Type the shared foundation that all other code depends on. + +Located in `utils/`. Key files: + +- `addresses.js` (32KB) — Master address registry. Strong candidate for types: network-keyed maps of contract addresses +- `deploy.js` (44KB) — Core deployment helpers (`deployWithConfirmation`, `withConfirmation`) +- `validator.js` (25KB) — Validator management +- `beacon.js` (14KB) — Beacon-related utilities +- `deploy-l2.js` (14KB) — L2-specific deployment logic +- `hardhat-helpers.js` (7.9KB) — Hardhat utilities +- Remaining ~30 smaller utility files + +Benefits: + +- `addresses.js` gets compile-time validation of network/contract name lookups +- Shared helper function signatures become self-documenting +- Downstream code (deploy scripts, tasks) gets better IDE support even before migration + +## Phase 3 — Deploy Scripts & Tasks (1-2 weeks, or ongoing) + +**Goal:** Migrate operational scripts as they are touched. + +### Deploy Scripts (121 files, ~7,300 LOC) + +Located in `deploy/` with network-specific subdirectories (mainnet, base, sonic, plume, hoodi, arbitrum, holesky, hyperevm). All follow `hardhat-deploy` conventions. + +Note: `hardhat-deploy` has limited TypeScript type definitions. Custom type helpers may be needed for the deploy function signature and `DeploymentsExtension`. + +### Tasks (35 files, ~10,000 LOC) + +Located in `tasks/`. Hardhat `task()` API with ethers contract interactions. + +Key files by size: `tasks.js` (2,753 LOC), `beacon.js` (1,137 LOC), `validatorCompound.js` (888 LOC). + +Both categories can be migrated file-by-file. No need to do them all at once. + +## Phase 4 — Tests (ongoing, as files are touched) + +**Goal:** Migrate test infrastructure first, then individual test files over time. + +Located in `test/`. By far the largest category at ~39K LOC across 87 files. + +Recommended order: + +1. Fixture files (`_fixture.js`, `_fixture-base.js`, `_fixture-sonic.js`) — these are imported by everything +2. Helper files (`helpers.js`, `_hot-deploy.js`) +3. Behavioral test suites (`test/behaviour/`) — shared across strategies +4. Individual test files as they are modified + +Dependencies: `chai`, `ethereum-waffle`, `ethers`, `hardhat`. All have TypeScript type definitions available. + +## Key Considerations + +- **ethers v5 has built-in types** — contract calls, signers, and BigNumber operations all benefit from TS +- **Hardhat has native TS support** — config, tasks, and scripts can all be `.ts` without extra setup beyond `ts-node` +- `**hardhat-deploy` typing is limited** — may need custom `.d.ts` declarations for deploy function patterns +- **Rollup bundling** for defender actions needs a TypeScript plugin (e.g., `@rollup/plugin-typescript`) +- **No ESM migration required** — TS can emit CommonJS, keeping compatibility with existing code +- **Prettier and ESLint** need updates: add `@typescript-eslint/parser` and `@typescript-eslint/eslint-plugin` + From 35c1b9a9c55feee956a06628103e170de474c88f Mon Sep 17 00:00:00 2001 From: Domen Grabec Date: Thu, 26 Mar 2026 23:01:25 +0100 Subject: [PATCH 03/62] supply cron configuration as a json file --- contracts/cron/cron-jobs.json | 52 ++++++++++++++++++ contracts/dockerfile | 12 +---- contracts/scripts/cron-entrypoint.sh | 9 ++++ contracts/scripts/render-crontab.js | 80 ++++++++++++++++++++++++++++ 4 files changed, 143 insertions(+), 10 deletions(-) create mode 100644 contracts/cron/cron-jobs.json create mode 100644 contracts/scripts/cron-entrypoint.sh create mode 100644 contracts/scripts/render-crontab.js diff --git a/contracts/cron/cron-jobs.json b/contracts/cron/cron-jobs.json new file mode 100644 index 0000000000..2c5f4ecec9 --- /dev/null +++ b/contracts/cron/cron-jobs.json @@ -0,0 +1,52 @@ +{ + "jobs": [ + { + "name": "hourly_snap_balances", + "schedule": "0 * * * *", + "enabled": true, + "command": "cd /app && pnpm hardhat snapBalances --network ${HARDHAT_NETWORK:-mainnet}" + }, + { + "name": "hourly_verify_balances", + "schedule": "8 * * * *", + "enabled": true, + "command": "cd /app && pnpm hardhat verifyBalances --network ${HARDHAT_NETWORK:-mainnet}" + }, + { + "name": "hourly_verify_deposits", + "schedule": "10 * * * *", + "enabled": true, + "command": "cd /app && pnpm hardhat verifyDeposits --network ${HARDHAT_NETWORK:-mainnet}" + }, + { + "name": "hourly_auto_validator_deposits", + "schedule": "12 * * * *", + "enabled": true, + "command": "cd /app && pnpm hardhat autoValidatorDeposits --network ${HARDHAT_NETWORK:-mainnet}" + }, + { + "name": "hourly_auto_validator_withdrawals", + "schedule": "14 * * * *", + "enabled": true, + "command": "cd /app && pnpm hardhat autoValidatorWithdrawals --network ${HARDHAT_NETWORK:-mainnet}" + }, + { + "name": "daily_rebase_mainnet_oeth", + "schedule": "0 0 * * *", + "enabled": true, + "command": "cd /app && pnpm hardhat rebase --network mainnet --symbol OETH" + }, + { + "name": "daily_rebase_mainnet_ousd", + "schedule": "10 0 * * *", + "enabled": true, + "command": "cd /app && pnpm hardhat rebase --network mainnet --symbol OUSD" + }, + { + "name": "daily_rebase_base_oeth", + "schedule": "20 0 * * *", + "enabled": true, + "command": "cd /app && pnpm hardhat rebase --network base --symbol OETH" + } + ] +} diff --git a/contracts/dockerfile b/contracts/dockerfile index c1cc49c2dd..3497444265 100644 --- a/contracts/dockerfile +++ b/contracts/dockerfile @@ -52,14 +52,6 @@ ENV PROVIDER_URL="" \ DEFENDER_API_SECRET="" \ HARDHAT_NETWORK="" -# Cron configuration for supercronic. -# Each Hardhat task runs with a 7 minute offset, ensuring sequential execution. -RUN cat <<'EOF' > /etc/cronjob -0 * * * * cd /app && pnpm hardhat snapBalances --network ${HARDHAT_NETWORK:-mainnet} -8 * * * * cd /app && pnpm hardhat verifyBalances --network ${HARDHAT_NETWORK:-mainnet} -10 * * * * cd /app && pnpm hardhat verifyDeposits --network ${HARDHAT_NETWORK:-mainnet} -12 * * * * cd /app && pnpm hardhat autoValidatorDeposits --network ${HARDHAT_NETWORK:-mainnet} -14 * * * * cd /app && pnpm hardhat autoValidatorWithdrawals --network ${HARDHAT_NETWORK:-mainnet} -EOF +RUN chmod +x /app/scripts/cron-entrypoint.sh -ENTRYPOINT ["supercronic", "/etc/cronjob"] +ENTRYPOINT ["/app/scripts/cron-entrypoint.sh"] diff --git a/contracts/scripts/cron-entrypoint.sh b/contracts/scripts/cron-entrypoint.sh new file mode 100644 index 0000000000..66bae1fc84 --- /dev/null +++ b/contracts/scripts/cron-entrypoint.sh @@ -0,0 +1,9 @@ +#!/bin/sh +set -eu + +node /app/scripts/render-crontab.js + +echo "[cron-entrypoint] Generated /etc/cronjob:" +cat /etc/cronjob + +exec supercronic /etc/cronjob diff --git a/contracts/scripts/render-crontab.js b/contracts/scripts/render-crontab.js new file mode 100644 index 0000000000..577e0de976 --- /dev/null +++ b/contracts/scripts/render-crontab.js @@ -0,0 +1,80 @@ +#!/usr/bin/env node + +const fs = require("node:fs"); +const path = require("node:path"); + +const configPath = process.env.CRON_CONFIG_PATH || "/app/cron/cron-jobs.json"; +const outputPath = process.env.CRON_OUTPUT_PATH || "/etc/cronjob"; + +const fail = (message) => { + console.error(`[render-crontab] ${message}`); + process.exit(1); +}; + +const isNonEmptyString = (value) => + typeof value === "string" && value.trim().length > 0; + +const hasFiveCronFields = (value) => + isNonEmptyString(value) && value.trim().split(/\s+/).length === 5; + +const validateJob = (job, index, names) => { + if (!job || typeof job !== "object" || Array.isArray(job)) { + fail(`jobs[${index}] must be an object`); + } + if (!isNonEmptyString(job.name)) { + fail(`jobs[${index}].name must be a non-empty string`); + } + if (names.has(job.name)) { + fail(`duplicate job name "${job.name}"`); + } + names.add(job.name); + if (!hasFiveCronFields(job.schedule)) { + fail(`jobs[${index}].schedule must be a valid 5-field cron expression`); + } + if (typeof job.enabled !== "boolean") { + fail(`jobs[${index}].enabled must be a boolean`); + } + if (!isNonEmptyString(job.command)) { + fail(`jobs[${index}].command must be a non-empty string`); + } +}; + +const main = () => { + let parsed; + try { + const raw = fs.readFileSync(configPath, "utf8"); + parsed = JSON.parse(raw); + } catch (error) { + fail(`failed to read or parse config "${configPath}": ${error.message}`); + } + + if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) { + fail("config root must be an object"); + } + if (!Array.isArray(parsed.jobs)) { + fail('config must include a "jobs" array'); + } + + const names = new Set(); + parsed.jobs.forEach((job, index) => validateJob(job, index, names)); + + const enabledJobs = parsed.jobs.filter((job) => job.enabled); + if (enabledJobs.length === 0) { + fail("config has zero enabled jobs"); + } + + const lines = []; + for (const job of enabledJobs) { + lines.push(`# ${job.name}`); + lines.push(`${job.schedule} ${job.command}`); + } + + fs.mkdirSync(path.dirname(outputPath), { recursive: true }); + fs.writeFileSync(outputPath, `${lines.join("\n")}\n`, "utf8"); + + console.log( + `[render-crontab] wrote ${enabledJobs.length} enabled jobs to ${outputPath}` + ); +}; + +main(); From 0bca2c0c9f9777f0c79051ad3f8678de3d110b95 Mon Sep 17 00:00:00 2001 From: Domen Grabec Date: Fri, 27 Mar 2026 00:03:12 +0100 Subject: [PATCH 04/62] trigger cron-jobs via http request. Query the job result via HTTP --- contracts/cron/cron-jobs.json | 10 +- contracts/scripts/cron-entrypoint.sh | 7 +- contracts/scripts/cron-supervisor.js | 346 +++++++++++++++++++++++++++ contracts/scripts/render-crontab.js | 79 ++++-- 4 files changed, 409 insertions(+), 33 deletions(-) create mode 100644 contracts/scripts/cron-supervisor.js diff --git a/contracts/cron/cron-jobs.json b/contracts/cron/cron-jobs.json index 2c5f4ecec9..a586808ce7 100644 --- a/contracts/cron/cron-jobs.json +++ b/contracts/cron/cron-jobs.json @@ -3,31 +3,31 @@ { "name": "hourly_snap_balances", "schedule": "0 * * * *", - "enabled": true, + "enabled": false, "command": "cd /app && pnpm hardhat snapBalances --network ${HARDHAT_NETWORK:-mainnet}" }, { "name": "hourly_verify_balances", "schedule": "8 * * * *", - "enabled": true, + "enabled": false, "command": "cd /app && pnpm hardhat verifyBalances --network ${HARDHAT_NETWORK:-mainnet}" }, { "name": "hourly_verify_deposits", "schedule": "10 * * * *", - "enabled": true, + "enabled": false, "command": "cd /app && pnpm hardhat verifyDeposits --network ${HARDHAT_NETWORK:-mainnet}" }, { "name": "hourly_auto_validator_deposits", "schedule": "12 * * * *", - "enabled": true, + "enabled": false, "command": "cd /app && pnpm hardhat autoValidatorDeposits --network ${HARDHAT_NETWORK:-mainnet}" }, { "name": "hourly_auto_validator_withdrawals", "schedule": "14 * * * *", - "enabled": true, + "enabled": false, "command": "cd /app && pnpm hardhat autoValidatorWithdrawals --network ${HARDHAT_NETWORK:-mainnet}" }, { diff --git a/contracts/scripts/cron-entrypoint.sh b/contracts/scripts/cron-entrypoint.sh index 66bae1fc84..da993efaca 100644 --- a/contracts/scripts/cron-entrypoint.sh +++ b/contracts/scripts/cron-entrypoint.sh @@ -1,9 +1,4 @@ #!/bin/sh set -eu -node /app/scripts/render-crontab.js - -echo "[cron-entrypoint] Generated /etc/cronjob:" -cat /etc/cronjob - -exec supercronic /etc/cronjob +exec node /app/scripts/cron-supervisor.js diff --git a/contracts/scripts/cron-supervisor.js b/contracts/scripts/cron-supervisor.js new file mode 100644 index 0000000000..57776abfe7 --- /dev/null +++ b/contracts/scripts/cron-supervisor.js @@ -0,0 +1,346 @@ +#!/usr/bin/env node + +const fs = require("node:fs"); +const http = require("node:http"); +const { spawn } = require("node:child_process"); +const { randomUUID, timingSafeEqual } = require("node:crypto"); +const { renderCrontab } = require("./render-crontab"); + +const host = process.env.HOST || "0.0.0.0"; +const port = Number.parseInt(process.env.PORT || "8080", 10); +const cronConfigPath = + process.env.CRON_CONFIG_PATH || "/app/cron/cron-jobs.json"; +const cronOutputPath = process.env.CRON_OUTPUT_PATH || "/etc/cronjob"; +const supercronicBin = process.env.SUPERCRONIC_BIN || "supercronic"; +const runHistoryLimit = Number.parseInt( + process.env.ACTION_RUN_HISTORY_LIMIT || "500", + 10 +); +const actionApiToken = process.env.ACTION_API_BEARER_TOKEN; +const configuredActionWorkdir = process.env.ACTION_WORKDIR || "/app"; + +if (!Number.isInteger(port) || port < 1 || port > 65535) { + console.error(`[cron-supervisor] Invalid PORT value "${process.env.PORT}"`); + process.exit(1); +} +if (!actionApiToken || actionApiToken.trim().length === 0) { + console.error( + "[cron-supervisor] ACTION_API_BEARER_TOKEN must be set and non-empty" + ); + process.exit(1); +} +if (!Number.isInteger(runHistoryLimit) || runHistoryLimit < 1) { + console.error( + `[cron-supervisor] Invalid ACTION_RUN_HISTORY_LIMIT value "${process.env.ACTION_RUN_HISTORY_LIMIT}"` + ); + process.exit(1); +} + +const nowIso = () => new Date().toISOString(); +const actionWorkdir = fs.existsSync(configuredActionWorkdir) + ? configuredActionWorkdir + : process.cwd(); + +if (!fs.existsSync(configuredActionWorkdir)) { + console.warn( + `[cron-supervisor] ACTION_WORKDIR "${configuredActionWorkdir}" does not exist, using "${actionWorkdir}" instead` + ); +} + +const json = (res, statusCode, payload, extraHeaders = {}) => { + res.writeHead(statusCode, { + "Content-Type": "application/json", + ...extraHeaders, + }); + res.end(JSON.stringify(payload)); +}; + +const expectedTokenBuffer = Buffer.from(actionApiToken); +const isAuthorized = (headerValue) => { + if (typeof headerValue !== "string") { + return false; + } + const prefix = "Bearer "; + if (!headerValue.startsWith(prefix)) { + return false; + } + const provided = headerValue.slice(prefix.length).trim(); + const providedBuffer = Buffer.from(provided); + if (providedBuffer.length !== expectedTokenBuffer.length) { + return false; + } + return timingSafeEqual(providedBuffer, expectedTokenBuffer); +}; + +const runStore = new Map(); +const runOrder = []; +const storeRun = (run) => { + runStore.set(run.runId, run); + runOrder.push(run.runId); + while (runOrder.length > runHistoryLimit) { + const removedRunId = runOrder.shift(); + runStore.delete(removedRunId); + } +}; + +let renderedConfig; +let enabledJobs; +try { + const renderResult = renderCrontab({ + configPath: cronConfigPath, + outputPath: cronOutputPath, + }); + renderedConfig = renderResult.config; + enabledJobs = renderResult.enabledJobs; +} catch (error) { + console.error(`[cron-supervisor] ${error.message}`); + process.exit(1); +} + +console.log( + `[cron-supervisor] Generated ${enabledJobs.length} enabled cron jobs at ${cronOutputPath}` +); +console.log("[cron-supervisor] Generated /etc/cronjob:"); +console.log(fs.readFileSync(cronOutputPath, "utf8")); + +const jobsByName = new Map( + renderedConfig.jobs.map((job) => { + return [job.name, job]; + }) +); + +const runAction = (action, run) => { + run.status = "running"; + run.startedAt = nowIso(); + run.command = action.command; + + console.log( + `[cron-supervisor] Starting run ${run.runId} for action "${action.name}"` + ); + + const child = spawn("/bin/sh", ["-lc", action.command], { + cwd: actionWorkdir, + env: process.env, + stdio: "inherit", + }); + run.pid = child.pid ?? null; + + child.on("error", (error) => { + run.status = "failed"; + run.finishedAt = nowIso(); + run.exitCode = null; + run.signal = null; + run.error = error.message; + console.error( + `[cron-supervisor] Run ${run.runId} failed to start: ${error.message}` + ); + }); + + child.on("exit", (code, signal) => { + run.finishedAt = nowIso(); + run.exitCode = code; + run.signal = signal; + run.status = code === 0 ? "succeeded" : "failed"; + + console.log( + `[cron-supervisor] Run ${run.runId} for "${action.name}" finished with status=${run.status}, code=${code}, signal=${signal}` + ); + }); +}; + +const triggerAction = (actionName) => { + const action = jobsByName.get(actionName); + if (!action) { + return undefined; + } + + const run = { + runId: randomUUID(), + action: action.name, + schedule: action.schedule, + enabled: action.enabled, + status: "queued", + queuedAt: nowIso(), + startedAt: nowIso(), + finishedAt: null, + exitCode: null, + signal: null, + pid: null, + }; + + storeRun(run); + setImmediate(() => runAction(action, run)); + + return run; +}; + +let supercronic = spawn(supercronicBin, [cronOutputPath], { + env: process.env, + stdio: "inherit", +}); +let supercronicAlive = true; + +supercronic.on("error", (error) => { + console.error(`[cron-supervisor] supercronic start error: ${error.message}`); + process.exit(1); +}); + +let shuttingDown = false; +let serverClosed = false; +let supercronicClosed = false; +const maybeExit = () => { + if (shuttingDown && serverClosed && supercronicClosed) { + process.exit(0); + } +}; + +supercronic.on("exit", (code, signal) => { + supercronicAlive = false; + supercronicClosed = true; + if (!shuttingDown) { + console.error( + `[cron-supervisor] supercronic exited unexpectedly (code=${code}, signal=${signal})` + ); + process.exit(typeof code === "number" ? code : 1); + } + maybeExit(); +}); + +const server = http.createServer((req, res) => { + const method = req.method || "GET"; + const forwardedProto = req.headers["x-forwarded-proto"]; + const proto = + typeof forwardedProto === "string" && forwardedProto.length > 0 + ? forwardedProto.split(",")[0].trim() + : "http"; + const reqHost = req.headers.host || `${host}:${port}`; + const origin = `${proto}://${reqHost}`; + const requestUrl = new URL(req.url || "/", origin); + + if (method === "GET" && requestUrl.pathname === "/healthz") { + json(res, 200, { + status: "ok", + api: "up", + supercronic: { + running: supercronicAlive, + pid: supercronic.pid ?? null, + }, + }); + return; + } + + if (requestUrl.pathname.startsWith("/api/v1/")) { + if (!isAuthorized(req.headers.authorization)) { + json(res, 401, { error: "Unauthorized" }); + return; + } + } + + if (method === "GET" && requestUrl.pathname === "/api/v1/actions") { + json(res, 200, { + actions: renderedConfig.jobs.map((job) => ({ + name: job.name, + schedule: job.schedule, + enabled: job.enabled, + })), + }); + return; + } + + const runTriggerMatch = requestUrl.pathname.match( + /^\/api\/v1\/actions\/([^/]+)\/runs$/ + ); + if (method === "POST" && runTriggerMatch) { + const actionName = decodeURIComponent(runTriggerMatch[1]); + const run = triggerAction(actionName); + if (!run) { + json(res, 404, { error: `Unknown action "${actionName}"` }); + return; + } + + const statusUrl = `${origin}/api/v1/runs/${encodeURIComponent(run.runId)}`; + json( + res, + 202, + { + runId: run.runId, + action: run.action, + status: run.status, + statusUrl, + startedAt: run.startedAt, + }, + { Location: statusUrl } + ); + return; + } + + const runStatusMatch = requestUrl.pathname.match( + /^\/api\/v1\/runs\/([^/]+)$/ + ); + if (method === "GET" && runStatusMatch) { + const runId = decodeURIComponent(runStatusMatch[1]); + const run = runStore.get(runId); + if (!run) { + json(res, 404, { error: `Run "${runId}" not found` }); + return; + } + + json(res, 200, { + runId: run.runId, + action: run.action, + status: run.status, + startedAt: run.startedAt, + finishedAt: run.finishedAt, + exitCode: run.exitCode, + signal: run.signal, + }); + return; + } + + if (requestUrl.pathname.startsWith("/api/v1/")) { + json(res, 404, { error: "Not found" }); + return; + } + + json(res, 404, { error: "Not found" }); +}); + +server.on("error", (error) => { + console.error(`[cron-supervisor] HTTP server error: ${error.message}`); + process.exit(1); +}); + +server.on("close", () => { + serverClosed = true; + maybeExit(); +}); + +const shutdown = (signal) => { + if (shuttingDown) { + return; + } + shuttingDown = true; + + console.log(`[cron-supervisor] Shutting down (signal=${signal})`); + server.close(); + + if (supercronicAlive && supercronic.exitCode === null) { + supercronic.kill("SIGTERM"); + setTimeout(() => { + if (supercronic.exitCode === null) { + supercronic.kill("SIGKILL"); + } + }, 10_000).unref(); + } + + setTimeout(() => { + process.exit(0); + }, 12_000).unref(); +}; + +process.on("SIGTERM", () => shutdown("SIGTERM")); +process.on("SIGINT", () => shutdown("SIGINT")); + +server.listen(port, host, () => { + console.log(`[cron-supervisor] API listening on ${host}:${port}`); +}); diff --git a/contracts/scripts/render-crontab.js b/contracts/scripts/render-crontab.js index 577e0de976..3bc3630144 100644 --- a/contracts/scripts/render-crontab.js +++ b/contracts/scripts/render-crontab.js @@ -3,13 +3,11 @@ const fs = require("node:fs"); const path = require("node:path"); -const configPath = process.env.CRON_CONFIG_PATH || "/app/cron/cron-jobs.json"; -const outputPath = process.env.CRON_OUTPUT_PATH || "/etc/cronjob"; +const DEFAULT_CONFIG_PATH = + process.env.CRON_CONFIG_PATH || "/app/cron/cron-jobs.json"; +const DEFAULT_OUTPUT_PATH = process.env.CRON_OUTPUT_PATH || "/etc/cronjob"; -const fail = (message) => { - console.error(`[render-crontab] ${message}`); - process.exit(1); -}; +class RenderCrontabError extends Error {} const isNonEmptyString = (value) => typeof value === "string" && value.trim().length > 0; @@ -19,48 +17,63 @@ const hasFiveCronFields = (value) => const validateJob = (job, index, names) => { if (!job || typeof job !== "object" || Array.isArray(job)) { - fail(`jobs[${index}] must be an object`); + throw new RenderCrontabError(`jobs[${index}] must be an object`); } if (!isNonEmptyString(job.name)) { - fail(`jobs[${index}].name must be a non-empty string`); + throw new RenderCrontabError( + `jobs[${index}].name must be a non-empty string` + ); } if (names.has(job.name)) { - fail(`duplicate job name "${job.name}"`); + throw new RenderCrontabError(`duplicate job name "${job.name}"`); } names.add(job.name); if (!hasFiveCronFields(job.schedule)) { - fail(`jobs[${index}].schedule must be a valid 5-field cron expression`); + throw new RenderCrontabError( + `jobs[${index}].schedule must be a valid 5-field cron expression` + ); } if (typeof job.enabled !== "boolean") { - fail(`jobs[${index}].enabled must be a boolean`); + throw new RenderCrontabError(`jobs[${index}].enabled must be a boolean`); } if (!isNonEmptyString(job.command)) { - fail(`jobs[${index}].command must be a non-empty string`); + throw new RenderCrontabError( + `jobs[${index}].command must be a non-empty string` + ); } }; -const main = () => { +const loadCronConfig = (configPath = DEFAULT_CONFIG_PATH) => { let parsed; try { const raw = fs.readFileSync(configPath, "utf8"); parsed = JSON.parse(raw); } catch (error) { - fail(`failed to read or parse config "${configPath}": ${error.message}`); + throw new RenderCrontabError( + `failed to read or parse config "${configPath}": ${error.message}` + ); } if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) { - fail("config root must be an object"); + throw new RenderCrontabError("config root must be an object"); } if (!Array.isArray(parsed.jobs)) { - fail('config must include a "jobs" array'); + throw new RenderCrontabError('config must include a "jobs" array'); } const names = new Set(); parsed.jobs.forEach((job, index) => validateJob(job, index, names)); + return parsed; +}; - const enabledJobs = parsed.jobs.filter((job) => job.enabled); +const renderCrontab = ({ + configPath = DEFAULT_CONFIG_PATH, + outputPath = DEFAULT_OUTPUT_PATH, +} = {}) => { + const config = loadCronConfig(configPath); + const enabledJobs = config.jobs.filter((job) => job.enabled); if (enabledJobs.length === 0) { - fail("config has zero enabled jobs"); + throw new RenderCrontabError("config has zero enabled jobs"); } const lines = []; @@ -72,9 +85,31 @@ const main = () => { fs.mkdirSync(path.dirname(outputPath), { recursive: true }); fs.writeFileSync(outputPath, `${lines.join("\n")}\n`, "utf8"); - console.log( - `[render-crontab] wrote ${enabledJobs.length} enabled jobs to ${outputPath}` - ); + return { + config, + enabledJobs, + outputPath, + }; }; -main(); +const main = () => { + try { + const result = renderCrontab(); + console.log( + `[render-crontab] wrote ${result.enabledJobs.length} enabled jobs to ${result.outputPath}` + ); + } catch (error) { + console.error(`[render-crontab] ${error.message}`); + process.exit(1); + } +}; + +if (require.main === module) { + main(); +} + +module.exports = { + RenderCrontabError, + loadCronConfig, + renderCrontab, +}; From 9db5c23c69deb4984af14e5dc9f5abb3e8ffd1ff Mon Sep 17 00:00:00 2001 From: Christopher Jacobs Date: Thu, 26 Mar 2026 17:19:25 -0700 Subject: [PATCH 05/62] move actions --- .../claimBribes.js => tasks/actions/claimBribes.ts} | 0 .../crossChainRelay.js => tasks/actions/crossChainRelay.ts} | 0 .../actions/crossChainRelayHyperEVM.ts} | 0 .../doAccounting.js => tasks/actions/doAccounting.ts} | 0 .../defender-actions/harvest.js => tasks/actions/harvest.ts} | 0 .../manageBribeOnSonic.js => tasks/actions/manageBribeOnSonic.ts} | 0 .../manageBribes.js => tasks/actions/manageBribes.ts} | 0 .../manageMerklBribes.js => tasks/actions/manageMerklBribes.ts} | 0 .../managePassThrough.js => tasks/actions/managePassThrough.ts} | 0 .../registerValidators.js => tasks/actions/registerValidators.ts} | 0 .../actions/sonicClaimWithdrawals.ts} | 0 .../actions/sonicRequestWithdrawal.ts} | 0 .../stakeValidators.js => tasks/actions/stakeValidators.ts} | 0 13 files changed, 0 insertions(+), 0 deletions(-) rename contracts/{scripts/defender-actions/claimBribes.js => tasks/actions/claimBribes.ts} (100%) rename contracts/{scripts/defender-actions/crossChainRelay.js => tasks/actions/crossChainRelay.ts} (100%) rename contracts/{scripts/defender-actions/crossChainRelayHyperEVM.js => tasks/actions/crossChainRelayHyperEVM.ts} (100%) rename contracts/{scripts/defender-actions/doAccounting.js => tasks/actions/doAccounting.ts} (100%) rename contracts/{scripts/defender-actions/harvest.js => tasks/actions/harvest.ts} (100%) rename contracts/{scripts/defender-actions/manageBribeOnSonic.js => tasks/actions/manageBribeOnSonic.ts} (100%) rename contracts/{scripts/defender-actions/manageBribes.js => tasks/actions/manageBribes.ts} (100%) rename contracts/{scripts/defender-actions/manageMerklBribes.js => tasks/actions/manageMerklBribes.ts} (100%) rename contracts/{scripts/defender-actions/managePassThrough.js => tasks/actions/managePassThrough.ts} (100%) rename contracts/{scripts/defender-actions/registerValidators.js => tasks/actions/registerValidators.ts} (100%) rename contracts/{scripts/defender-actions/sonicClaimWithdrawals.js => tasks/actions/sonicClaimWithdrawals.ts} (100%) rename contracts/{scripts/defender-actions/sonicRequestWithdrawal.js => tasks/actions/sonicRequestWithdrawal.ts} (100%) rename contracts/{scripts/defender-actions/stakeValidators.js => tasks/actions/stakeValidators.ts} (100%) diff --git a/contracts/scripts/defender-actions/claimBribes.js b/contracts/tasks/actions/claimBribes.ts similarity index 100% rename from contracts/scripts/defender-actions/claimBribes.js rename to contracts/tasks/actions/claimBribes.ts diff --git a/contracts/scripts/defender-actions/crossChainRelay.js b/contracts/tasks/actions/crossChainRelay.ts similarity index 100% rename from contracts/scripts/defender-actions/crossChainRelay.js rename to contracts/tasks/actions/crossChainRelay.ts diff --git a/contracts/scripts/defender-actions/crossChainRelayHyperEVM.js b/contracts/tasks/actions/crossChainRelayHyperEVM.ts similarity index 100% rename from contracts/scripts/defender-actions/crossChainRelayHyperEVM.js rename to contracts/tasks/actions/crossChainRelayHyperEVM.ts diff --git a/contracts/scripts/defender-actions/doAccounting.js b/contracts/tasks/actions/doAccounting.ts similarity index 100% rename from contracts/scripts/defender-actions/doAccounting.js rename to contracts/tasks/actions/doAccounting.ts diff --git a/contracts/scripts/defender-actions/harvest.js b/contracts/tasks/actions/harvest.ts similarity index 100% rename from contracts/scripts/defender-actions/harvest.js rename to contracts/tasks/actions/harvest.ts diff --git a/contracts/scripts/defender-actions/manageBribeOnSonic.js b/contracts/tasks/actions/manageBribeOnSonic.ts similarity index 100% rename from contracts/scripts/defender-actions/manageBribeOnSonic.js rename to contracts/tasks/actions/manageBribeOnSonic.ts diff --git a/contracts/scripts/defender-actions/manageBribes.js b/contracts/tasks/actions/manageBribes.ts similarity index 100% rename from contracts/scripts/defender-actions/manageBribes.js rename to contracts/tasks/actions/manageBribes.ts diff --git a/contracts/scripts/defender-actions/manageMerklBribes.js b/contracts/tasks/actions/manageMerklBribes.ts similarity index 100% rename from contracts/scripts/defender-actions/manageMerklBribes.js rename to contracts/tasks/actions/manageMerklBribes.ts diff --git a/contracts/scripts/defender-actions/managePassThrough.js b/contracts/tasks/actions/managePassThrough.ts similarity index 100% rename from contracts/scripts/defender-actions/managePassThrough.js rename to contracts/tasks/actions/managePassThrough.ts diff --git a/contracts/scripts/defender-actions/registerValidators.js b/contracts/tasks/actions/registerValidators.ts similarity index 100% rename from contracts/scripts/defender-actions/registerValidators.js rename to contracts/tasks/actions/registerValidators.ts diff --git a/contracts/scripts/defender-actions/sonicClaimWithdrawals.js b/contracts/tasks/actions/sonicClaimWithdrawals.ts similarity index 100% rename from contracts/scripts/defender-actions/sonicClaimWithdrawals.js rename to contracts/tasks/actions/sonicClaimWithdrawals.ts diff --git a/contracts/scripts/defender-actions/sonicRequestWithdrawal.js b/contracts/tasks/actions/sonicRequestWithdrawal.ts similarity index 100% rename from contracts/scripts/defender-actions/sonicRequestWithdrawal.js rename to contracts/tasks/actions/sonicRequestWithdrawal.ts diff --git a/contracts/scripts/defender-actions/stakeValidators.js b/contracts/tasks/actions/stakeValidators.ts similarity index 100% rename from contracts/scripts/defender-actions/stakeValidators.js rename to contracts/tasks/actions/stakeValidators.ts From d1bb61ab2990ce5b220fde17c3fda64ba8c1f087 Mon Sep 17 00:00:00 2001 From: Christopher Jacobs Date: Thu, 26 Mar 2026 17:32:19 -0700 Subject: [PATCH 06/62] convert to ts --- contracts/biome.json | 29 + contracts/hardhat.config.js | 25 + contracts/package.json | 12 +- contracts/pnpm-lock.yaml | 389 +- contracts/tasks/actions/claimBribes.ts | 97 +- contracts/tasks/actions/crossChainRelay.ts | 64 +- .../tasks/actions/crossChainRelayHyperEVM.ts | 64 +- contracts/tasks/actions/doAccounting.ts | 156 +- contracts/tasks/actions/harvest.ts | 58 +- contracts/tasks/actions/manageBribeOnSonic.ts | 34 +- contracts/tasks/actions/manageBribes.ts | 72 +- contracts/tasks/actions/manageMerklBribes.ts | 53 +- contracts/tasks/actions/managePassThrough.ts | 29 +- contracts/tasks/actions/registerValidators.ts | 187 +- .../tasks/actions/sonicClaimWithdrawals.ts | 33 +- .../tasks/actions/sonicRequestWithdrawal.ts | 54 +- contracts/tasks/actions/stakeValidators.ts | 148 +- contracts/tasks/lib/addresses.ts | 18 + contracts/tasks/lib/client.ts | 71 + contracts/tasks/lib/env.ts | 15 + contracts/tasks/lib/logger.ts | 17 + contracts/tasks/lib/signer.ts | 217 + contracts/tasks/lib/store.ts | 54 + contracts/tasks/lib/transaction.ts | 32 + contracts/tasks/tasks.js | 219 - contracts/tsconfig.json | 17 + contracts/yarn.lock | 12090 ++++++++++++++++ 27 files changed, 13418 insertions(+), 836 deletions(-) create mode 100644 contracts/biome.json create mode 100644 contracts/tasks/lib/addresses.ts create mode 100644 contracts/tasks/lib/client.ts create mode 100644 contracts/tasks/lib/env.ts create mode 100644 contracts/tasks/lib/logger.ts create mode 100644 contracts/tasks/lib/signer.ts create mode 100644 contracts/tasks/lib/store.ts create mode 100644 contracts/tasks/lib/transaction.ts create mode 100644 contracts/tsconfig.json create mode 100644 contracts/yarn.lock diff --git a/contracts/biome.json b/contracts/biome.json new file mode 100644 index 0000000000..1eb9d2b309 --- /dev/null +++ b/contracts/biome.json @@ -0,0 +1,29 @@ +{ + "$schema": "https://biomejs.dev/schemas/2.4.9/schema.json", + "files": { + "includes": ["tasks/actions/**/*.ts", "tasks/lib/**/*.ts"] + }, + "formatter": { + "indentStyle": "space", + "indentWidth": 2, + "lineWidth": 100 + }, + "javascript": { + "formatter": { + "quoteStyle": "double", + "semicolons": "always", + "trailingCommas": "all" + } + }, + "linter": { + "rules": { + "recommended": true, + "style": { + "noNonNullAssertion": "off" + }, + "suspicious": { + "noExplicitAny": "off" + } + } + } +} diff --git a/contracts/hardhat.config.js b/contracts/hardhat.config.js index 5cd3adc4d1..ce57746655 100644 --- a/contracts/hardhat.config.js +++ b/contracts/hardhat.config.js @@ -1,3 +1,15 @@ +require("ts-node").register({ + transpileOnly: true, + compilerOptions: { + module: "CommonJS", + target: "ES2020", + esModuleInterop: true, + allowSyntheticDefaultImports: true, + resolveJsonModule: true, + strict: false, + }, +}); + const ethers = require("ethers"); const { task } = require("hardhat/config"); const { @@ -50,6 +62,19 @@ require("solidity-coverage"); require("@openzeppelin/hardhat-upgrades"); require("./tasks/tasks"); + +// Auto-load TypeScript action files — each self-registers as a hardhat task +const fs = require("fs"); +const path = require("path"); +const actionsDir = path.join(__dirname, "tasks", "actions"); +if (fs.existsSync(actionsDir)) { + for (const file of fs.readdirSync(actionsDir).sort()) { + if (file.endsWith(".ts")) { + require(path.join(actionsDir, file)); + } + } +} + const { accounts } = require("./tasks/account"); const addresses = require("./utils/addresses.js"); diff --git a/contracts/package.json b/contracts/package.json index 340080f863..aebf5a82d9 100644 --- a/contracts/package.json +++ b/contracts/package.json @@ -33,10 +33,13 @@ "lint": "yarn run lint:js && yarn run lint:sol", "lint:js": "eslint \"test/**/*.js\" \"tasks/**/*.js\" \"deploy/**/*.js\"", "lint:sol": "solhint \"contracts/**/*.sol\"", + "lint:ts": "biome check tasks/actions/ tasks/lib/", "prettier": "yarn run prettier:js && yarn run prettier:sol", "prettier:check": "prettier -c \"*.js\" \"deploy/**/*.js\" \"scripts/**/*.js\" \"scripts/**/*.js\" \"tasks/**/*.js\" \"test/**/*.js\" \"utils/**/*.js\"", "prettier:js": "prettier --write \"*.js\" \"deploy/**/*.js\" \"scripts/**/*.js\" \"scripts/**/*.js\" \"tasks/**/*.js\" \"test/**/*.js\" \"utils/**/*.js\"", "prettier:sol": "prettier --write --plugin=prettier-plugin-solidity \"contracts/**/*.sol\"", + "prettier:ts": "biome format --write tasks/actions/ tasks/lib/", + "typecheck": "tsc --noEmit", "test": "rm -rf deployments/hardhat && IS_TEST=true npx hardhat test", "test:base": "rm -rf deployments/hardhat && UNIT_TESTS_NETWORK=base IS_TEST=true npx hardhat test", "test:sonic": "rm -rf deployments/hardhat && UNIT_TESTS_NETWORK=sonic IS_TEST=true npx hardhat test", @@ -72,6 +75,7 @@ "author": "Origin Protocol Inc ", "license": "MIT", "devDependencies": { + "@biomejs/biome": "^2.4.9", "@aws-sdk/client-kms": "^3.675.0", "@aws-sdk/client-s3": "3.600.0", "@chainsafe/persistent-merkle-tree": "^1.2.1", @@ -119,9 +123,13 @@ "solidity-bytes-utils": "0.8.4", "solidity-coverage": "0.8.14", "ssv-keys": "1.1.0", - "ssv-scanner": "github:bloxapp/ssv-scanner#v1.0.5", + "ssv-scanner": "github:ssvlabs/ssv-scanner#v1.0.5", "sync-fetch": "0.5.2", - "uuid": "9.0.1" + "ts-node": "^10.9.2", + "typescript": "^5.7.0", + "uuid": "9.0.1", + "viem": "^2.27.0", + "winston": "^3.19.0" }, "husky": { "hooks": { diff --git a/contracts/pnpm-lock.yaml b/contracts/pnpm-lock.yaml index 9bf65e12c2..5ac22be2e3 100644 --- a/contracts/pnpm-lock.yaml +++ b/contracts/pnpm-lock.yaml @@ -57,6 +57,9 @@ importers: '@aws-sdk/client-s3': specifier: 3.600.0 version: 3.600.0 + '@biomejs/biome': + specifier: ^2.4.9 + version: 2.4.9 '@chainsafe/persistent-merkle-tree': specifier: ^1.2.1 version: 1.2.1 @@ -68,19 +71,19 @@ importers: version: 3.1.4(c88efacc9580dc620f57bdff8a2cf4a7) '@nomicfoundation/hardhat-network-helpers': specifier: 1.0.9 - version: 1.0.9(hardhat@2.26.2(bufferutil@4.1.0)(typescript@4.9.5)(utf-8-validate@5.0.10)) + version: 1.0.9(hardhat@2.26.2(bufferutil@4.1.0)(ts-node@10.9.2(@types/node@25.0.3)(typescript@5.9.3))(typescript@5.9.3)(utf-8-validate@5.0.10)) '@nomicfoundation/hardhat-verify': specifier: 2.1.1 - version: 2.1.1(hardhat@2.26.2(bufferutil@4.1.0)(typescript@4.9.5)(utf-8-validate@5.0.10)) + version: 2.1.1(hardhat@2.26.2(bufferutil@4.1.0)(ts-node@10.9.2(@types/node@25.0.3)(typescript@5.9.3))(typescript@5.9.3)(utf-8-validate@5.0.10)) '@nomiclabs/hardhat-ethers': specifier: 2.2.3 - version: 2.2.3(ethers@5.7.2(bufferutil@4.1.0)(utf-8-validate@5.0.10))(hardhat@2.26.2(bufferutil@4.1.0)(typescript@4.9.5)(utf-8-validate@5.0.10)) + version: 2.2.3(ethers@5.7.2(bufferutil@4.1.0)(utf-8-validate@5.0.10))(hardhat@2.26.2(bufferutil@4.1.0)(ts-node@10.9.2(@types/node@25.0.3)(typescript@5.9.3))(typescript@5.9.3)(utf-8-validate@5.0.10)) '@nomiclabs/hardhat-solhint': specifier: 2.0.1 - version: 2.0.1(hardhat@2.26.2(bufferutil@4.1.0)(typescript@4.9.5)(utf-8-validate@5.0.10)) + version: 2.0.1(hardhat@2.26.2(bufferutil@4.1.0)(ts-node@10.9.2(@types/node@25.0.3)(typescript@5.9.3))(typescript@5.9.3)(utf-8-validate@5.0.10)) '@nomiclabs/hardhat-waffle': specifier: 2.0.6 - version: 2.0.6(@nomiclabs/hardhat-ethers@2.2.3(ethers@5.7.2(bufferutil@4.1.0)(utf-8-validate@5.0.10))(hardhat@2.26.2(bufferutil@4.1.0)(typescript@4.9.5)(utf-8-validate@5.0.10)))(@types/sinon-chai@3.2.12)(ethereum-waffle@4.0.10(@ensdomains/ens@0.4.5)(@ensdomains/resolver@0.2.4)(@ethersproject/abi@5.8.0)(@ethersproject/providers@5.8.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(debug@4.3.4)(ethers@5.7.2(bufferutil@4.1.0)(utf-8-validate@5.0.10))(typescript@4.9.5))(ethers@5.7.2(bufferutil@4.1.0)(utf-8-validate@5.0.10))(hardhat@2.26.2(bufferutil@4.1.0)(typescript@4.9.5)(utf-8-validate@5.0.10)) + version: 2.0.6(@nomiclabs/hardhat-ethers@2.2.3(ethers@5.7.2(bufferutil@4.1.0)(utf-8-validate@5.0.10))(hardhat@2.26.2(bufferutil@4.1.0)(ts-node@10.9.2(@types/node@25.0.3)(typescript@5.9.3))(typescript@5.9.3)(utf-8-validate@5.0.10)))(@types/sinon-chai@3.2.12)(ethereum-waffle@4.0.10(@ensdomains/ens@0.4.5)(@ensdomains/resolver@0.2.4)(@ethersproject/abi@5.8.0)(@ethersproject/providers@5.8.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(debug@4.3.4)(ethers@5.7.2(bufferutil@4.1.0)(utf-8-validate@5.0.10))(typescript@5.9.3))(ethers@5.7.2(bufferutil@4.1.0)(utf-8-validate@5.0.10))(hardhat@2.26.2(bufferutil@4.1.0)(ts-node@10.9.2(@types/node@25.0.3)(typescript@5.9.3))(typescript@5.9.3)(utf-8-validate@5.0.10)) '@openzeppelin/contracts': specifier: 4.4.2 version: 4.4.2 @@ -89,7 +92,7 @@ importers: version: 2.7.0(bufferutil@4.1.0)(debug@4.3.4)(utf-8-validate@5.0.10)(web3-core@1.10.4)(web3-utils@1.10.4)(web3@1.10.4(bufferutil@4.1.0)(utf-8-validate@5.0.10)) '@openzeppelin/hardhat-upgrades': specifier: 1.27.0 - version: 1.27.0(@nomiclabs/hardhat-ethers@2.2.3(ethers@5.7.2(bufferutil@4.1.0)(utf-8-validate@5.0.10))(hardhat@2.26.2(bufferutil@4.1.0)(typescript@4.9.5)(utf-8-validate@5.0.10)))(@nomiclabs/hardhat-etherscan@3.1.8(hardhat@2.26.2(bufferutil@4.1.0)(typescript@4.9.5)(utf-8-validate@5.0.10)))(ethers@5.7.2(bufferutil@4.1.0)(utf-8-validate@5.0.10))(hardhat@2.26.2(bufferutil@4.1.0)(typescript@4.9.5)(utf-8-validate@5.0.10)) + version: 1.27.0(@nomiclabs/hardhat-ethers@2.2.3(ethers@5.7.2(bufferutil@4.1.0)(utf-8-validate@5.0.10))(hardhat@2.26.2(bufferutil@4.1.0)(ts-node@10.9.2(@types/node@25.0.3)(typescript@5.9.3))(typescript@5.9.3)(utf-8-validate@5.0.10)))(@nomiclabs/hardhat-etherscan@3.1.8(hardhat@2.26.2(bufferutil@4.1.0)(ts-node@10.9.2(@types/node@25.0.3)(typescript@5.9.3))(typescript@5.9.3)(utf-8-validate@5.0.10)))(ethers@5.7.2(bufferutil@4.1.0)(utf-8-validate@5.0.10))(hardhat@2.26.2(bufferutil@4.1.0)(ts-node@10.9.2(@types/node@25.0.3)(typescript@5.9.3))(typescript@5.9.3)(utf-8-validate@5.0.10)) '@rigidity/bls-signatures': specifier: 2.0.5 version: 2.0.5 @@ -128,28 +131,28 @@ importers: version: 3.3.0 ethereum-waffle: specifier: 4.0.10 - version: 4.0.10(@ensdomains/ens@0.4.5)(@ensdomains/resolver@0.2.4)(@ethersproject/abi@5.8.0)(@ethersproject/providers@5.8.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(debug@4.3.4)(ethers@5.7.2(bufferutil@4.1.0)(utf-8-validate@5.0.10))(typescript@4.9.5) + version: 4.0.10(@ensdomains/ens@0.4.5)(@ensdomains/resolver@0.2.4)(@ethersproject/abi@5.8.0)(@ethersproject/providers@5.8.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(debug@4.3.4)(ethers@5.7.2(bufferutil@4.1.0)(utf-8-validate@5.0.10))(typescript@5.9.3) ethers: specifier: 5.7.2 version: 5.7.2(bufferutil@4.1.0)(utf-8-validate@5.0.10) hardhat: specifier: 2.26.2 - version: 2.26.2(bufferutil@4.1.0)(typescript@4.9.5)(utf-8-validate@5.0.10) + version: 2.26.2(bufferutil@4.1.0)(ts-node@10.9.2(@types/node@25.0.3)(typescript@5.9.3))(typescript@5.9.3)(utf-8-validate@5.0.10) hardhat-contract-sizer: specifier: 2.10.0 - version: 2.10.0(hardhat@2.26.2(bufferutil@4.1.0)(typescript@4.9.5)(utf-8-validate@5.0.10)) + version: 2.10.0(hardhat@2.26.2(bufferutil@4.1.0)(ts-node@10.9.2(@types/node@25.0.3)(typescript@5.9.3))(typescript@5.9.3)(utf-8-validate@5.0.10)) hardhat-deploy: specifier: 0.11.30 version: 0.11.30(bufferutil@4.1.0)(utf-8-validate@5.0.10) hardhat-deploy-ethers: specifier: 0.3.0-beta.13 - version: 0.3.0-beta.13(ethers@5.7.2(bufferutil@4.1.0)(utf-8-validate@5.0.10))(hardhat@2.26.2(bufferutil@4.1.0)(typescript@4.9.5)(utf-8-validate@5.0.10)) + version: 0.3.0-beta.13(ethers@5.7.2(bufferutil@4.1.0)(utf-8-validate@5.0.10))(hardhat@2.26.2(bufferutil@4.1.0)(ts-node@10.9.2(@types/node@25.0.3)(typescript@5.9.3))(typescript@5.9.3)(utf-8-validate@5.0.10)) hardhat-gas-reporter: specifier: 2.3.0 - version: 2.3.0(bufferutil@4.1.0)(debug@4.3.4)(hardhat@2.26.2(bufferutil@4.1.0)(typescript@4.9.5)(utf-8-validate@5.0.10))(typescript@4.9.5)(utf-8-validate@5.0.10)(zod@3.25.76) + version: 2.3.0(bufferutil@4.1.0)(debug@4.3.4)(hardhat@2.26.2(bufferutil@4.1.0)(ts-node@10.9.2(@types/node@25.0.3)(typescript@5.9.3))(typescript@5.9.3)(utf-8-validate@5.0.10))(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) hardhat-tracer: specifier: 3.2.1 - version: 3.2.1(bufferutil@4.1.0)(chai@4.3.7)(hardhat@2.26.2(bufferutil@4.1.0)(typescript@4.9.5)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10) + version: 3.2.1(bufferutil@4.1.0)(chai@4.3.7)(hardhat@2.26.2(bufferutil@4.1.0)(ts-node@10.9.2(@types/node@25.0.3)(typescript@5.9.3))(typescript@5.9.3)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10) husky: specifier: 7.0.4 version: 7.0.4 @@ -179,7 +182,7 @@ importers: version: 0.8.6(debug@4.3.4) solhint: specifier: 3.4.1 - version: 3.4.1(typescript@4.9.5) + version: 3.4.1(typescript@5.9.3) solidifier: specifier: 2.2.3 version: 2.2.3 @@ -188,19 +191,31 @@ importers: version: 0.8.4 solidity-coverage: specifier: 0.8.14 - version: 0.8.14(hardhat@2.26.2(bufferutil@4.1.0)(typescript@4.9.5)(utf-8-validate@5.0.10)) + version: 0.8.14(hardhat@2.26.2(bufferutil@4.1.0)(ts-node@10.9.2(@types/node@25.0.3)(typescript@5.9.3))(typescript@5.9.3)(utf-8-validate@5.0.10)) ssv-keys: specifier: 1.1.0 version: 1.1.0(bufferutil@4.1.0)(utf-8-validate@5.0.10) ssv-scanner: specifier: github:bloxapp/ssv-scanner#v1.0.5 - version: git+https://git@github.com:bloxapp/ssv-scanner.git#45068c93b3de84495f6cfad2767787c91d98aa8f(bufferutil@4.1.0)(utf-8-validate@5.0.10) + version: git+https://github.com/bloxapp/ssv-scanner.git#45068c93b3de84495f6cfad2767787c91d98aa8f(bufferutil@4.1.0)(utf-8-validate@5.0.10) sync-fetch: specifier: 0.5.2 version: 0.5.2 + ts-node: + specifier: ^10.9.2 + version: 10.9.2(@types/node@25.0.3)(typescript@5.9.3) + typescript: + specifier: ^5.7.0 + version: 5.9.3 uuid: specifier: 9.0.1 version: 9.0.1 + viem: + specifier: ^2.27.0 + version: 2.43.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + winston: + specifier: ^3.19.0 + version: 3.19.0 packages: @@ -588,6 +603,59 @@ packages: resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} engines: {node: '>=6.9.0'} + '@biomejs/biome@2.4.9': + resolution: {integrity: sha512-wvZW92FrwitTcacvCBT8xdAbfbxWfDLwjYMmU3djjqQTh7Ni4ZdiWIT/x5VcZ+RQuxiKzIOzi5D+dcyJDFZMsA==} + engines: {node: '>=14.21.3'} + hasBin: true + + '@biomejs/cli-darwin-arm64@2.4.9': + resolution: {integrity: sha512-d5G8Gf2RpH5pYwiHLPA+UpG3G9TLQu4WM+VK6sfL7K68AmhcEQ9r+nkj/DvR/GYhYox6twsHUtmWWWIKfcfQQA==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [darwin] + + '@biomejs/cli-darwin-x64@2.4.9': + resolution: {integrity: sha512-LNCLNgqDMG7BLdc3a8aY/dwKPK7+R8/JXJoXjCvZh2gx8KseqBdFDKbhrr7HCWF8SzNhbTaALhTBoh/I6rf9lA==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [darwin] + + '@biomejs/cli-linux-arm64-musl@2.4.9': + resolution: {integrity: sha512-8RCww5xnPn2wpK4L/QDGDOW0dq80uVWfppPxHIUg6mOs9B6gRmqPp32h1Ls3T8GnW8Wo5A8u7vpTwz4fExN+sw==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [linux] + + '@biomejs/cli-linux-arm64@2.4.9': + resolution: {integrity: sha512-4adnkAUi6K4C/emPRgYznMOcLlUqZdXWM6aIui4VP4LraE764g6Q4YguygnAUoxKjKIXIWPteKMgRbN0wsgwcg==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [linux] + + '@biomejs/cli-linux-x64-musl@2.4.9': + resolution: {integrity: sha512-5TD+WS9v5vzXKzjetF0hgoaNFHMcpQeBUwKKVi3JbG1e9UCrFuUK3Gt185fyTzvRdwYkJJEMqglRPjmesmVv4A==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [linux] + + '@biomejs/cli-linux-x64@2.4.9': + resolution: {integrity: sha512-L10na7POF0Ks/cgLFNF1ZvIe+X4onLkTi5oP9hY+Rh60Q+7fWzKDDCeGyiHUFf1nGIa9dQOOUPGe2MyYg8nMSQ==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [linux] + + '@biomejs/cli-win32-arm64@2.4.9': + resolution: {integrity: sha512-aDZr0RBC3sMGJOU10BvG7eZIlWLK/i51HRIfScE2lVhfts2dQTreowLiJJd+UYg/tHKxS470IbzpuKmd0MiD6g==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [win32] + + '@biomejs/cli-win32-x64@2.4.9': + resolution: {integrity: sha512-NS4g/2G9SoQ4ktKtz31pvyc/rmgzlcIDCGU/zWbmHJAqx6gcRj2gj5Q/guXhoWTzCUaQZDIqiCQXHS7BcGYc0w==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [win32] + '@bytecodealliance/preview2-shim@0.17.0': resolution: {integrity: sha512-JorcEwe4ud0x5BS/Ar2aQWOQoFzjq/7jcnxYXCvSMh0oRm0dQXzOA+hqLDBnOMks1LLBA7dmiLLsEBl09Yd6iQ==} @@ -819,6 +887,10 @@ packages: resolution: {integrity: sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==} engines: {node: '>=0.1.90'} + '@cspotcode/source-map-support@0.8.1': + resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} + engines: {node: '>=12'} + '@dabh/diagnostics@2.0.8': resolution: {integrity: sha512-R4MSXTVnuMzGD7bzHdW2ZhhdPC/igELENcq5IjEverBvq5hn1SXCWcsi6eSsdWP0/Ur+SItRRjAktmdoX/8R/Q==} @@ -1162,9 +1234,16 @@ packages: resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + '@jridgewell/sourcemap-codec@1.5.5': resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} + '@jridgewell/trace-mapping@0.3.9': + resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + '@lastdotnet/purrikey@1.0.0': resolution: {integrity: sha512-Y9ycl83T1ZrLSFZYT6V/QMFZjwc4fB+/WjuQygLAVSZAJNAaEtSRm9l4lMKazV/AE30qC/uKzyY9s/zoAtNx8w==} engines: {node: '>=14.0.0'} @@ -2315,6 +2394,18 @@ packages: resolution: {integrity: sha512-bdM5cEGCOhDSwminryHJbRmXc1x7dPKg6Pqns3qyTwFlxsqUgxE29lsERS3PlIW1HTjoIGMUqsk1zQQwST1Yxw==} engines: {node: '>= 10.0.0'} + '@tsconfig/node10@1.0.12': + resolution: {integrity: sha512-UCYBaeFvM11aU2y3YPZ//O5Rhj+xKyzy7mvcIoAjASbigy8mHMryP5cK7dgjlz2hWxh1g5pLw084E0a/wlUSFQ==} + + '@tsconfig/node12@1.0.11': + resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} + + '@tsconfig/node14@1.0.3': + resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} + + '@tsconfig/node16@1.0.4': + resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} + '@typechain/ethers-v5@10.2.1': resolution: {integrity: sha512-n3tQmCZjRE6IU4h6lqUGiQ1j866n5MTCBJreNEHHVWXa2u9GJTaeYyU1/k+1qLutkyw+sS6VAN+AbeiTqsxd/A==} peerDependencies: @@ -2486,6 +2577,10 @@ packages: peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + acorn-walk@8.3.5: + resolution: {integrity: sha512-HEHNfbars9v4pgpW6SO1KSPkfoS0xVOM/9UzkJltjlsHZmJasxg8aXkuZa7SMf8vKGIBhpUsPluQSqhJFCqebw==} + engines: {node: '>=0.4.0'} + acorn@6.4.2: resolution: {integrity: sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==} engines: {node: '>=0.4.0'} @@ -2599,6 +2694,9 @@ packages: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} + arg@4.1.3: + resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} + argparse@1.0.10: resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} @@ -3164,6 +3262,9 @@ packages: create-hmac@1.1.7: resolution: {integrity: sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==} + create-require@1.1.1: + resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} + cross-fetch@4.1.0: resolution: {integrity: sha512-uKm5PU+MHTootlWEY+mZ4vvXoCn4fLQxT9dSc1sXVMSFkINTJVN8cAQROpwcKm8bJ/c7rgZVIBWzH5T78sNZZw==} @@ -4589,6 +4690,9 @@ packages: magic-string@0.30.21: resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} + make-error@1.3.6: + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + markdown-table@2.0.0: resolution: {integrity: sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==} @@ -5142,8 +5246,8 @@ packages: resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} engines: {node: '>= 6'} - prompts@git+https://git@github.com:meshin-blox/prompts.git#a22bdac044f6b32ba67adb4eacc2e58322512a2d: - resolution: {commit: a22bdac044f6b32ba67adb4eacc2e58322512a2d, repo: git@github.com:meshin-blox/prompts.git, type: git} + prompts@git+https://github.com/meshin-blox/prompts.git#a22bdac044f6b32ba67adb4eacc2e58322512a2d: + resolution: {commit: a22bdac044f6b32ba67adb4eacc2e58322512a2d, repo: https://github.com/meshin-blox/prompts.git, type: git} version: 2.4.2 engines: {node: '>= 6'} @@ -5612,8 +5716,8 @@ packages: engines: {node: '>=12'} hasBin: true - ssv-scanner@git+https://git@github.com:bloxapp/ssv-scanner.git#45068c93b3de84495f6cfad2767787c91d98aa8f: - resolution: {commit: 45068c93b3de84495f6cfad2767787c91d98aa8f, repo: git@github.com:bloxapp/ssv-scanner.git, type: git} + ssv-scanner@git+https://github.com/bloxapp/ssv-scanner.git#45068c93b3de84495f6cfad2767787c91d98aa8f: + resolution: {commit: 45068c93b3de84495f6cfad2767787c91d98aa8f, repo: https://github.com/bloxapp/ssv-scanner.git, type: git} version: 1.0.4 engines: {node: '>=18'} hasBin: true @@ -5818,6 +5922,20 @@ packages: peerDependencies: typescript: '>=3.7.0' + ts-node@10.9.2: + resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} + hasBin: true + peerDependencies: + '@swc/core': '>=1.2.50' + '@swc/wasm': '>=1.2.50' + '@types/node': '*' + typescript: '>=2.7' + peerDependenciesMeta: + '@swc/core': + optional: true + '@swc/wasm': + optional: true + tslib@1.14.1: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} @@ -5903,6 +6021,11 @@ packages: engines: {node: '>=4.2.0'} hasBin: true + typescript@5.9.3: + resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} + engines: {node: '>=14.17'} + hasBin: true + typical@4.0.0: resolution: {integrity: sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==} engines: {node: '>=8'} @@ -6000,6 +6123,9 @@ packages: resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} hasBin: true + v8-compile-cache-lib@3.0.1: + resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} + validate-npm-package-license@3.0.4: resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} @@ -6398,6 +6524,10 @@ packages: yargs@4.8.1: resolution: {integrity: sha512-LqodLrnIDM3IFT+Hf/5sxBnEGECrfdC1uIbgZeJmESCSo4HoCAaKEus8MylXHAkdacGc0ye+Qa+dpkuom8uVYA==} + yn@3.1.1: + resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} + engines: {node: '>=6'} + yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} @@ -7574,6 +7704,41 @@ snapshots: '@babel/helper-validator-identifier@7.28.5': {} + '@biomejs/biome@2.4.9': + optionalDependencies: + '@biomejs/cli-darwin-arm64': 2.4.9 + '@biomejs/cli-darwin-x64': 2.4.9 + '@biomejs/cli-linux-arm64': 2.4.9 + '@biomejs/cli-linux-arm64-musl': 2.4.9 + '@biomejs/cli-linux-x64': 2.4.9 + '@biomejs/cli-linux-x64-musl': 2.4.9 + '@biomejs/cli-win32-arm64': 2.4.9 + '@biomejs/cli-win32-x64': 2.4.9 + + '@biomejs/cli-darwin-arm64@2.4.9': + optional: true + + '@biomejs/cli-darwin-x64@2.4.9': + optional: true + + '@biomejs/cli-linux-arm64-musl@2.4.9': + optional: true + + '@biomejs/cli-linux-arm64@2.4.9': + optional: true + + '@biomejs/cli-linux-x64-musl@2.4.9': + optional: true + + '@biomejs/cli-linux-x64@2.4.9': + optional: true + + '@biomejs/cli-win32-arm64@2.4.9': + optional: true + + '@biomejs/cli-win32-x64@2.4.9': + optional: true + '@bytecodealliance/preview2-shim@0.17.0': {} '@chainlink/contracts-ccip@1.2.1(bufferutil@4.1.0)(ethers@5.7.2(bufferutil@4.1.0)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10)': @@ -7750,6 +7915,10 @@ snapshots: '@colors/colors@1.6.0': {} + '@cspotcode/source-map-support@0.8.1': + dependencies: + '@jridgewell/trace-mapping': 0.3.9 + '@dabh/diagnostics@2.0.8': dependencies: '@so-ric/colorspace': 1.1.6 @@ -7832,18 +8001,18 @@ snapshots: - '@ensdomains/resolver' - supports-color - '@ethereum-waffle/compiler@4.0.3(@ethersproject/abi@5.8.0)(@ethersproject/providers@5.8.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(ethers@5.7.2(bufferutil@4.1.0)(utf-8-validate@5.0.10))(solc@0.8.15(debug@4.3.4))(typechain@8.3.2(typescript@4.9.5))(typescript@4.9.5)': + '@ethereum-waffle/compiler@4.0.3(@ethersproject/abi@5.8.0)(@ethersproject/providers@5.8.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(ethers@5.7.2(bufferutil@4.1.0)(utf-8-validate@5.0.10))(solc@0.8.15(debug@4.3.4))(typechain@8.3.2(typescript@5.9.3))(typescript@5.9.3)': dependencies: '@resolver-engine/imports': 0.3.3 '@resolver-engine/imports-fs': 0.3.3 - '@typechain/ethers-v5': 10.2.1(@ethersproject/abi@5.8.0)(@ethersproject/providers@5.8.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(ethers@5.7.2(bufferutil@4.1.0)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@4.9.5))(typescript@4.9.5) + '@typechain/ethers-v5': 10.2.1(@ethersproject/abi@5.8.0)(@ethersproject/providers@5.8.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(ethers@5.7.2(bufferutil@4.1.0)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.9.3))(typescript@5.9.3) '@types/mkdirp': 0.5.2 '@types/node-fetch': 2.6.13 ethers: 5.7.2(bufferutil@4.1.0)(utf-8-validate@5.0.10) mkdirp: 0.5.6 node-fetch: 2.7.0 solc: 0.8.15(debug@4.3.4) - typechain: 8.3.2(typescript@4.9.5) + typechain: 8.3.2(typescript@5.9.3) transitivePeerDependencies: - '@ethersproject/abi' - '@ethersproject/providers' @@ -8552,8 +8721,15 @@ snapshots: wrap-ansi: 8.1.0 wrap-ansi-cjs: wrap-ansi@7.0.0 + '@jridgewell/resolve-uri@3.1.2': {} + '@jridgewell/sourcemap-codec@1.5.5': {} + '@jridgewell/trace-mapping@0.3.9': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.5 + '@lastdotnet/purrikey@1.0.0(ethers@5.7.2(bufferutil@4.1.0)(utf-8-validate@5.0.10))': dependencies: '@aws-sdk/client-kms': 3.1013.0 @@ -8762,18 +8938,18 @@ snapshots: '@nomicfoundation/edr-linux-x64-musl': 0.11.3 '@nomicfoundation/edr-win32-x64-msvc': 0.11.3 - '@nomicfoundation/hardhat-network-helpers@1.0.9(hardhat@2.26.2(bufferutil@4.1.0)(typescript@4.9.5)(utf-8-validate@5.0.10))': + '@nomicfoundation/hardhat-network-helpers@1.0.9(hardhat@2.26.2(bufferutil@4.1.0)(ts-node@10.9.2(@types/node@25.0.3)(typescript@5.9.3))(typescript@5.9.3)(utf-8-validate@5.0.10))': dependencies: ethereumjs-util: 7.1.5 - hardhat: 2.26.2(bufferutil@4.1.0)(typescript@4.9.5)(utf-8-validate@5.0.10) + hardhat: 2.26.2(bufferutil@4.1.0)(ts-node@10.9.2(@types/node@25.0.3)(typescript@5.9.3))(typescript@5.9.3)(utf-8-validate@5.0.10) - '@nomicfoundation/hardhat-verify@2.1.1(hardhat@2.26.2(bufferutil@4.1.0)(typescript@4.9.5)(utf-8-validate@5.0.10))': + '@nomicfoundation/hardhat-verify@2.1.1(hardhat@2.26.2(bufferutil@4.1.0)(ts-node@10.9.2(@types/node@25.0.3)(typescript@5.9.3))(typescript@5.9.3)(utf-8-validate@5.0.10))': dependencies: '@ethersproject/abi': 5.8.0 '@ethersproject/address': 5.8.0 cbor: 8.1.0 debug: 4.3.4(supports-color@8.1.1) - hardhat: 2.26.2(bufferutil@4.1.0)(typescript@4.9.5)(utf-8-validate@5.0.10) + hardhat: 2.26.2(bufferutil@4.1.0)(ts-node@10.9.2(@types/node@25.0.3)(typescript@5.9.3))(typescript@5.9.3)(utf-8-validate@5.0.10) lodash.clonedeep: 4.5.0 picocolors: 1.1.1 semver: 6.3.1 @@ -8817,12 +8993,12 @@ snapshots: '@nomicfoundation/solidity-analyzer-linux-x64-musl': 0.1.2 '@nomicfoundation/solidity-analyzer-win32-x64-msvc': 0.1.2 - '@nomiclabs/hardhat-ethers@2.2.3(ethers@5.7.2(bufferutil@4.1.0)(utf-8-validate@5.0.10))(hardhat@2.26.2(bufferutil@4.1.0)(typescript@4.9.5)(utf-8-validate@5.0.10))': + '@nomiclabs/hardhat-ethers@2.2.3(ethers@5.7.2(bufferutil@4.1.0)(utf-8-validate@5.0.10))(hardhat@2.26.2(bufferutil@4.1.0)(ts-node@10.9.2(@types/node@25.0.3)(typescript@5.9.3))(typescript@5.9.3)(utf-8-validate@5.0.10))': dependencies: ethers: 5.7.2(bufferutil@4.1.0)(utf-8-validate@5.0.10) - hardhat: 2.26.2(bufferutil@4.1.0)(typescript@4.9.5)(utf-8-validate@5.0.10) + hardhat: 2.26.2(bufferutil@4.1.0)(ts-node@10.9.2(@types/node@25.0.3)(typescript@5.9.3))(typescript@5.9.3)(utf-8-validate@5.0.10) - '@nomiclabs/hardhat-etherscan@3.1.8(hardhat@2.26.2(bufferutil@4.1.0)(typescript@4.9.5)(utf-8-validate@5.0.10))': + '@nomiclabs/hardhat-etherscan@3.1.8(hardhat@2.26.2(bufferutil@4.1.0)(ts-node@10.9.2(@types/node@25.0.3)(typescript@5.9.3))(typescript@5.9.3)(utf-8-validate@5.0.10))': dependencies: '@ethersproject/abi': 5.8.0 '@ethersproject/address': 5.8.0 @@ -8830,7 +9006,7 @@ snapshots: chalk: 2.4.2 debug: 4.3.4(supports-color@8.1.1) fs-extra: 7.0.1 - hardhat: 2.26.2(bufferutil@4.1.0)(typescript@4.9.5)(utf-8-validate@5.0.10) + hardhat: 2.26.2(bufferutil@4.1.0)(ts-node@10.9.2(@types/node@25.0.3)(typescript@5.9.3))(typescript@5.9.3)(utf-8-validate@5.0.10) lodash: 4.17.21 semver: 6.3.1 table: 6.9.0 @@ -8838,20 +9014,20 @@ snapshots: transitivePeerDependencies: - supports-color - '@nomiclabs/hardhat-solhint@2.0.1(hardhat@2.26.2(bufferutil@4.1.0)(typescript@4.9.5)(utf-8-validate@5.0.10))': + '@nomiclabs/hardhat-solhint@2.0.1(hardhat@2.26.2(bufferutil@4.1.0)(ts-node@10.9.2(@types/node@25.0.3)(typescript@5.9.3))(typescript@5.9.3)(utf-8-validate@5.0.10))': dependencies: - hardhat: 2.26.2(bufferutil@4.1.0)(typescript@4.9.5)(utf-8-validate@5.0.10) + hardhat: 2.26.2(bufferutil@4.1.0)(ts-node@10.9.2(@types/node@25.0.3)(typescript@5.9.3))(typescript@5.9.3)(utf-8-validate@5.0.10) solhint: 2.3.1 transitivePeerDependencies: - supports-color - '@nomiclabs/hardhat-waffle@2.0.6(@nomiclabs/hardhat-ethers@2.2.3(ethers@5.7.2(bufferutil@4.1.0)(utf-8-validate@5.0.10))(hardhat@2.26.2(bufferutil@4.1.0)(typescript@4.9.5)(utf-8-validate@5.0.10)))(@types/sinon-chai@3.2.12)(ethereum-waffle@4.0.10(@ensdomains/ens@0.4.5)(@ensdomains/resolver@0.2.4)(@ethersproject/abi@5.8.0)(@ethersproject/providers@5.8.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(debug@4.3.4)(ethers@5.7.2(bufferutil@4.1.0)(utf-8-validate@5.0.10))(typescript@4.9.5))(ethers@5.7.2(bufferutil@4.1.0)(utf-8-validate@5.0.10))(hardhat@2.26.2(bufferutil@4.1.0)(typescript@4.9.5)(utf-8-validate@5.0.10))': + '@nomiclabs/hardhat-waffle@2.0.6(@nomiclabs/hardhat-ethers@2.2.3(ethers@5.7.2(bufferutil@4.1.0)(utf-8-validate@5.0.10))(hardhat@2.26.2(bufferutil@4.1.0)(ts-node@10.9.2(@types/node@25.0.3)(typescript@5.9.3))(typescript@5.9.3)(utf-8-validate@5.0.10)))(@types/sinon-chai@3.2.12)(ethereum-waffle@4.0.10(@ensdomains/ens@0.4.5)(@ensdomains/resolver@0.2.4)(@ethersproject/abi@5.8.0)(@ethersproject/providers@5.8.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(debug@4.3.4)(ethers@5.7.2(bufferutil@4.1.0)(utf-8-validate@5.0.10))(typescript@5.9.3))(ethers@5.7.2(bufferutil@4.1.0)(utf-8-validate@5.0.10))(hardhat@2.26.2(bufferutil@4.1.0)(ts-node@10.9.2(@types/node@25.0.3)(typescript@5.9.3))(typescript@5.9.3)(utf-8-validate@5.0.10))': dependencies: - '@nomiclabs/hardhat-ethers': 2.2.3(ethers@5.7.2(bufferutil@4.1.0)(utf-8-validate@5.0.10))(hardhat@2.26.2(bufferutil@4.1.0)(typescript@4.9.5)(utf-8-validate@5.0.10)) + '@nomiclabs/hardhat-ethers': 2.2.3(ethers@5.7.2(bufferutil@4.1.0)(utf-8-validate@5.0.10))(hardhat@2.26.2(bufferutil@4.1.0)(ts-node@10.9.2(@types/node@25.0.3)(typescript@5.9.3))(typescript@5.9.3)(utf-8-validate@5.0.10)) '@types/sinon-chai': 3.2.12 - ethereum-waffle: 4.0.10(@ensdomains/ens@0.4.5)(@ensdomains/resolver@0.2.4)(@ethersproject/abi@5.8.0)(@ethersproject/providers@5.8.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(debug@4.3.4)(ethers@5.7.2(bufferutil@4.1.0)(utf-8-validate@5.0.10))(typescript@4.9.5) + ethereum-waffle: 4.0.10(@ensdomains/ens@0.4.5)(@ensdomains/resolver@0.2.4)(@ethersproject/abi@5.8.0)(@ethersproject/providers@5.8.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(debug@4.3.4)(ethers@5.7.2(bufferutil@4.1.0)(utf-8-validate@5.0.10))(typescript@5.9.3) ethers: 5.7.2(bufferutil@4.1.0)(utf-8-validate@5.0.10) - hardhat: 2.26.2(bufferutil@4.1.0)(typescript@4.9.5)(utf-8-validate@5.0.10) + hardhat: 2.26.2(bufferutil@4.1.0)(ts-node@10.9.2(@types/node@25.0.3)(typescript@5.9.3))(typescript@5.9.3)(utf-8-validate@5.0.10) '@openzeppelin/contracts-upgradeable@4.7.3': {} @@ -9047,16 +9223,16 @@ snapshots: - web3-core - web3-utils - '@openzeppelin/hardhat-upgrades@1.27.0(@nomiclabs/hardhat-ethers@2.2.3(ethers@5.7.2(bufferutil@4.1.0)(utf-8-validate@5.0.10))(hardhat@2.26.2(bufferutil@4.1.0)(typescript@4.9.5)(utf-8-validate@5.0.10)))(@nomiclabs/hardhat-etherscan@3.1.8(hardhat@2.26.2(bufferutil@4.1.0)(typescript@4.9.5)(utf-8-validate@5.0.10)))(ethers@5.7.2(bufferutil@4.1.0)(utf-8-validate@5.0.10))(hardhat@2.26.2(bufferutil@4.1.0)(typescript@4.9.5)(utf-8-validate@5.0.10))': + '@openzeppelin/hardhat-upgrades@1.27.0(@nomiclabs/hardhat-ethers@2.2.3(ethers@5.7.2(bufferutil@4.1.0)(utf-8-validate@5.0.10))(hardhat@2.26.2(bufferutil@4.1.0)(ts-node@10.9.2(@types/node@25.0.3)(typescript@5.9.3))(typescript@5.9.3)(utf-8-validate@5.0.10)))(@nomiclabs/hardhat-etherscan@3.1.8(hardhat@2.26.2(bufferutil@4.1.0)(ts-node@10.9.2(@types/node@25.0.3)(typescript@5.9.3))(typescript@5.9.3)(utf-8-validate@5.0.10)))(ethers@5.7.2(bufferutil@4.1.0)(utf-8-validate@5.0.10))(hardhat@2.26.2(bufferutil@4.1.0)(ts-node@10.9.2(@types/node@25.0.3)(typescript@5.9.3))(typescript@5.9.3)(utf-8-validate@5.0.10))': dependencies: - '@nomiclabs/hardhat-ethers': 2.2.3(ethers@5.7.2(bufferutil@4.1.0)(utf-8-validate@5.0.10))(hardhat@2.26.2(bufferutil@4.1.0)(typescript@4.9.5)(utf-8-validate@5.0.10)) - '@nomiclabs/hardhat-etherscan': 3.1.8(hardhat@2.26.2(bufferutil@4.1.0)(typescript@4.9.5)(utf-8-validate@5.0.10)) + '@nomiclabs/hardhat-ethers': 2.2.3(ethers@5.7.2(bufferutil@4.1.0)(utf-8-validate@5.0.10))(hardhat@2.26.2(bufferutil@4.1.0)(ts-node@10.9.2(@types/node@25.0.3)(typescript@5.9.3))(typescript@5.9.3)(utf-8-validate@5.0.10)) + '@nomiclabs/hardhat-etherscan': 3.1.8(hardhat@2.26.2(bufferutil@4.1.0)(ts-node@10.9.2(@types/node@25.0.3)(typescript@5.9.3))(typescript@5.9.3)(utf-8-validate@5.0.10)) '@openzeppelin/upgrades-core': 1.44.2 chalk: 4.1.2 debug: 4.3.4(supports-color@8.1.1) defender-base-client: 1.44.3(debug@4.3.4) ethers: 5.7.2(bufferutil@4.1.0)(utf-8-validate@5.0.10) - hardhat: 2.26.2(bufferutil@4.1.0)(typescript@4.9.5)(utf-8-validate@5.0.10) + hardhat: 2.26.2(bufferutil@4.1.0)(ts-node@10.9.2(@types/node@25.0.3)(typescript@5.9.3))(typescript@5.9.3)(utf-8-validate@5.0.10) platform-deploy-client: 0.6.0(debug@4.3.4) proper-lockfile: 4.1.2 transitivePeerDependencies: @@ -10244,21 +10420,29 @@ snapshots: node-gyp-build: 4.3.0 optional: true - '@typechain/ethers-v5@10.2.1(@ethersproject/abi@5.8.0)(@ethersproject/providers@5.8.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(ethers@5.7.2(bufferutil@4.1.0)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@4.9.5))(typescript@4.9.5)': + '@tsconfig/node10@1.0.12': {} + + '@tsconfig/node12@1.0.11': {} + + '@tsconfig/node14@1.0.3': {} + + '@tsconfig/node16@1.0.4': {} + + '@typechain/ethers-v5@10.2.1(@ethersproject/abi@5.8.0)(@ethersproject/providers@5.8.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(ethers@5.7.2(bufferutil@4.1.0)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.9.3))(typescript@5.9.3)': dependencies: '@ethersproject/abi': 5.8.0 '@ethersproject/providers': 5.8.0(bufferutil@4.1.0)(utf-8-validate@5.0.10) ethers: 5.7.2(bufferutil@4.1.0)(utf-8-validate@5.0.10) lodash: 4.17.21 - ts-essentials: 7.0.3(typescript@4.9.5) - typechain: 8.3.2(typescript@4.9.5) - typescript: 4.9.5 + ts-essentials: 7.0.3(typescript@5.9.3) + typechain: 8.3.2(typescript@5.9.3) + typescript: 5.9.3 '@types/abstract-leveldown@7.2.5': {} '@types/bn.js@4.11.6': dependencies: - '@types/node': 12.20.55 + '@types/node': 25.0.3 '@types/bn.js@5.2.0': dependencies: @@ -10268,7 +10452,7 @@ snapshots: dependencies: '@types/http-cache-semantics': 4.0.4 '@types/keyv': 3.1.4 - '@types/node': 12.20.55 + '@types/node': 25.0.3 '@types/responselike': 1.0.3 '@types/chai@5.2.3': @@ -10291,7 +10475,7 @@ snapshots: '@types/keyv@3.1.4': dependencies: - '@types/node': 12.20.55 + '@types/node': 25.0.3 '@types/level-errors@3.0.2': {} @@ -10340,7 +10524,7 @@ snapshots: '@types/responselike@1.0.3': dependencies: - '@types/node': 12.20.55 + '@types/node': 25.0.3 '@types/secp256k1@4.0.7': dependencies: @@ -10387,9 +10571,9 @@ snapshots: abbrev@1.0.9: {} - abitype@1.2.3(typescript@4.9.5)(zod@3.25.76): + abitype@1.2.3(typescript@5.9.3)(zod@3.25.76): optionalDependencies: - typescript: 4.9.5 + typescript: 5.9.3 zod: 3.25.76 abortcontroller-polyfill@1.7.8: {} @@ -10423,6 +10607,10 @@ snapshots: dependencies: acorn: 8.15.0 + acorn-walk@8.3.5: + dependencies: + acorn: 8.15.0 + acorn@6.4.2: {} acorn@8.15.0: {} @@ -10520,6 +10708,8 @@ snapshots: normalize-path: 3.0.0 picomatch: 2.3.1 + arg@4.1.3: {} + argparse@1.0.10: dependencies: sprintf-js: 1.0.3 @@ -11114,14 +11304,14 @@ snapshots: js-yaml: 3.14.2 parse-json: 4.0.0 - cosmiconfig@8.3.6(typescript@4.9.5): + cosmiconfig@8.3.6(typescript@5.9.3): dependencies: import-fresh: 3.3.1 js-yaml: 4.1.1 parse-json: 5.2.0 path-type: 4.0.0 optionalDependencies: - typescript: 4.9.5 + typescript: 5.9.3 crc-32@1.2.2: {} @@ -11147,6 +11337,8 @@ snapshots: safe-buffer: 5.2.1 sha.js: 2.4.12 + create-require@1.1.1: {} + cross-fetch@4.1.0: dependencies: node-fetch: 2.7.0 @@ -11657,15 +11849,15 @@ snapshots: '@scure/bip32': 1.4.0 '@scure/bip39': 1.3.0 - ethereum-waffle@4.0.10(@ensdomains/ens@0.4.5)(@ensdomains/resolver@0.2.4)(@ethersproject/abi@5.8.0)(@ethersproject/providers@5.8.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(debug@4.3.4)(ethers@5.7.2(bufferutil@4.1.0)(utf-8-validate@5.0.10))(typescript@4.9.5): + ethereum-waffle@4.0.10(@ensdomains/ens@0.4.5)(@ensdomains/resolver@0.2.4)(@ethersproject/abi@5.8.0)(@ethersproject/providers@5.8.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(debug@4.3.4)(ethers@5.7.2(bufferutil@4.1.0)(utf-8-validate@5.0.10))(typescript@5.9.3): dependencies: '@ethereum-waffle/chai': 4.0.10(@ensdomains/ens@0.4.5)(@ensdomains/resolver@0.2.4)(ethers@5.7.2(bufferutil@4.1.0)(utf-8-validate@5.0.10)) - '@ethereum-waffle/compiler': 4.0.3(@ethersproject/abi@5.8.0)(@ethersproject/providers@5.8.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(ethers@5.7.2(bufferutil@4.1.0)(utf-8-validate@5.0.10))(solc@0.8.15(debug@4.3.4))(typechain@8.3.2(typescript@4.9.5))(typescript@4.9.5) + '@ethereum-waffle/compiler': 4.0.3(@ethersproject/abi@5.8.0)(@ethersproject/providers@5.8.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(ethers@5.7.2(bufferutil@4.1.0)(utf-8-validate@5.0.10))(solc@0.8.15(debug@4.3.4))(typechain@8.3.2(typescript@5.9.3))(typescript@5.9.3) '@ethereum-waffle/mock-contract': 4.0.4(ethers@5.7.2(bufferutil@4.1.0)(utf-8-validate@5.0.10)) '@ethereum-waffle/provider': 4.0.5(@ensdomains/ens@0.4.5)(@ensdomains/resolver@0.2.4)(ethers@5.7.2(bufferutil@4.1.0)(utf-8-validate@5.0.10)) ethers: 5.7.2(bufferutil@4.1.0)(utf-8-validate@5.0.10) solc: 0.8.15(debug@4.3.4) - typechain: 8.3.2(typescript@4.9.5) + typechain: 8.3.2(typescript@5.9.3) transitivePeerDependencies: - '@ensdomains/ens' - '@ensdomains/resolver' @@ -12278,17 +12470,17 @@ snapshots: ajv: 6.12.6 har-schema: 2.0.0 - hardhat-contract-sizer@2.10.0(hardhat@2.26.2(bufferutil@4.1.0)(typescript@4.9.5)(utf-8-validate@5.0.10)): + hardhat-contract-sizer@2.10.0(hardhat@2.26.2(bufferutil@4.1.0)(ts-node@10.9.2(@types/node@25.0.3)(typescript@5.9.3))(typescript@5.9.3)(utf-8-validate@5.0.10)): dependencies: chalk: 4.1.2 cli-table3: 0.6.5 - hardhat: 2.26.2(bufferutil@4.1.0)(typescript@4.9.5)(utf-8-validate@5.0.10) + hardhat: 2.26.2(bufferutil@4.1.0)(ts-node@10.9.2(@types/node@25.0.3)(typescript@5.9.3))(typescript@5.9.3)(utf-8-validate@5.0.10) strip-ansi: 6.0.1 - hardhat-deploy-ethers@0.3.0-beta.13(ethers@5.7.2(bufferutil@4.1.0)(utf-8-validate@5.0.10))(hardhat@2.26.2(bufferutil@4.1.0)(typescript@4.9.5)(utf-8-validate@5.0.10)): + hardhat-deploy-ethers@0.3.0-beta.13(ethers@5.7.2(bufferutil@4.1.0)(utf-8-validate@5.0.10))(hardhat@2.26.2(bufferutil@4.1.0)(ts-node@10.9.2(@types/node@25.0.3)(typescript@5.9.3))(typescript@5.9.3)(utf-8-validate@5.0.10)): dependencies: ethers: 5.7.2(bufferutil@4.1.0)(utf-8-validate@5.0.10) - hardhat: 2.26.2(bufferutil@4.1.0)(typescript@4.9.5)(utf-8-validate@5.0.10) + hardhat: 2.26.2(bufferutil@4.1.0)(ts-node@10.9.2(@types/node@25.0.3)(typescript@5.9.3))(typescript@5.9.3)(utf-8-validate@5.0.10) hardhat-deploy@0.11.30(bufferutil@4.1.0)(utf-8-validate@5.0.10): dependencies: @@ -12321,7 +12513,7 @@ snapshots: - supports-color - utf-8-validate - hardhat-gas-reporter@2.3.0(bufferutil@4.1.0)(debug@4.3.4)(hardhat@2.26.2(bufferutil@4.1.0)(typescript@4.9.5)(utf-8-validate@5.0.10))(typescript@4.9.5)(utf-8-validate@5.0.10)(zod@3.25.76): + hardhat-gas-reporter@2.3.0(bufferutil@4.1.0)(debug@4.3.4)(hardhat@2.26.2(bufferutil@4.1.0)(ts-node@10.9.2(@types/node@25.0.3)(typescript@5.9.3))(typescript@5.9.3)(utf-8-validate@5.0.10))(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76): dependencies: '@ethersproject/abi': 5.8.0 '@ethersproject/bytes': 5.8.0 @@ -12333,12 +12525,12 @@ snapshots: cli-table3: 0.6.5 ethereum-cryptography: 2.2.1 glob: 10.5.0 - hardhat: 2.26.2(bufferutil@4.1.0)(typescript@4.9.5)(utf-8-validate@5.0.10) + hardhat: 2.26.2(bufferutil@4.1.0)(ts-node@10.9.2(@types/node@25.0.3)(typescript@5.9.3))(typescript@5.9.3)(utf-8-validate@5.0.10) jsonschema: 1.5.0 lodash: 4.17.21 markdown-table: 2.0.0 sha1: 1.1.1 - viem: 2.43.3(bufferutil@4.1.0)(typescript@4.9.5)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.43.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) transitivePeerDependencies: - bufferutil - debug @@ -12346,20 +12538,20 @@ snapshots: - utf-8-validate - zod - hardhat-tracer@3.2.1(bufferutil@4.1.0)(chai@4.3.7)(hardhat@2.26.2(bufferutil@4.1.0)(typescript@4.9.5)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10): + hardhat-tracer@3.2.1(bufferutil@4.1.0)(chai@4.3.7)(hardhat@2.26.2(bufferutil@4.1.0)(ts-node@10.9.2(@types/node@25.0.3)(typescript@5.9.3))(typescript@5.9.3)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10): dependencies: chai: 4.3.7 chalk: 4.1.2 debug: 4.3.4(supports-color@8.1.1) ethers: 5.7.2(bufferutil@4.1.0)(utf-8-validate@5.0.10) - hardhat: 2.26.2(bufferutil@4.1.0)(typescript@4.9.5)(utf-8-validate@5.0.10) + hardhat: 2.26.2(bufferutil@4.1.0)(ts-node@10.9.2(@types/node@25.0.3)(typescript@5.9.3))(typescript@5.9.3)(utf-8-validate@5.0.10) semver: 7.7.3 transitivePeerDependencies: - bufferutil - supports-color - utf-8-validate - hardhat@2.26.2(bufferutil@4.1.0)(typescript@4.9.5)(utf-8-validate@5.0.10): + hardhat@2.26.2(bufferutil@4.1.0)(ts-node@10.9.2(@types/node@25.0.3)(typescript@5.9.3))(typescript@5.9.3)(utf-8-validate@5.0.10): dependencies: '@ethereumjs/util': 9.1.0 '@ethersproject/abi': 5.8.0 @@ -12401,7 +12593,8 @@ snapshots: uuid: 8.3.2 ws: 7.5.10(bufferutil@4.1.0)(utf-8-validate@5.0.10) optionalDependencies: - typescript: 4.9.5 + ts-node: 10.9.2(@types/node@25.0.3)(typescript@5.9.3) + typescript: 5.9.3 transitivePeerDependencies: - bufferutil - supports-color @@ -12925,6 +13118,8 @@ snapshots: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 + make-error@1.3.6: {} + markdown-table@2.0.0: dependencies: repeat-string: 1.6.1 @@ -13264,7 +13459,7 @@ snapshots: os-tmpdir@1.0.2: {} - ox@0.11.1(typescript@4.9.5)(zod@3.25.76): + ox@0.11.1(typescript@5.9.3)(zod@3.25.76): dependencies: '@adraffy/ens-normalize': 1.11.1 '@noble/ciphers': 1.3.0 @@ -13272,10 +13467,10 @@ snapshots: '@noble/hashes': 1.8.0 '@scure/bip32': 1.7.0 '@scure/bip39': 1.6.0 - abitype: 1.2.3(typescript@4.9.5)(zod@3.25.76) + abitype: 1.2.3(typescript@5.9.3)(zod@3.25.76) eventemitter3: 5.0.1 optionalDependencies: - typescript: 4.9.5 + typescript: 5.9.3 transitivePeerDependencies: - zod @@ -13451,7 +13646,7 @@ snapshots: kleur: 3.0.3 sisteransi: 1.0.5 - prompts@git+https://git@github.com:meshin-blox/prompts.git#a22bdac044f6b32ba67adb4eacc2e58322512a2d: + prompts@git+https://github.com/meshin-blox/prompts.git#a22bdac044f6b32ba67adb4eacc2e58322512a2d: dependencies: kleur: 4.1.5 sisteransi: 1.0.5 @@ -13973,7 +14168,7 @@ snapshots: transitivePeerDependencies: - supports-color - solhint@3.4.1(typescript@4.9.5): + solhint@3.4.1(typescript@5.9.3): dependencies: '@solidity-parser/parser': 0.16.2 ajv: 6.12.6 @@ -13981,7 +14176,7 @@ snapshots: ast-parents: 0.0.1 chalk: 4.1.2 commander: 10.0.1 - cosmiconfig: 8.3.6(typescript@4.9.5) + cosmiconfig: 8.3.6(typescript@5.9.3) fast-diff: 1.3.0 glob: 8.1.0 ignore: 5.3.2 @@ -14007,7 +14202,7 @@ snapshots: solidity-comments-extractor@0.0.7: {} - solidity-coverage@0.8.14(hardhat@2.26.2(bufferutil@4.1.0)(typescript@4.9.5)(utf-8-validate@5.0.10)): + solidity-coverage@0.8.14(hardhat@2.26.2(bufferutil@4.1.0)(ts-node@10.9.2(@types/node@25.0.3)(typescript@5.9.3))(typescript@5.9.3)(utf-8-validate@5.0.10)): dependencies: '@ethersproject/abi': 5.8.0 '@solidity-parser/parser': 0.19.0 @@ -14018,7 +14213,7 @@ snapshots: ghost-testrpc: 0.0.2 global-modules: 2.0.0 globby: 10.0.2 - hardhat: 2.26.2(bufferutil@4.1.0)(typescript@4.9.5)(utf-8-validate@5.0.10) + hardhat: 2.26.2(bufferutil@4.1.0)(ts-node@10.9.2(@types/node@25.0.3)(typescript@5.9.3))(typescript@5.9.3)(utf-8-validate@5.0.10) jsonschema: 1.5.0 lodash: 4.17.21 mocha: 10.2.0 @@ -14097,7 +14292,7 @@ snapshots: minimist: 1.2.8 moment: 2.30.1 node-jsencrypt: 1.0.0 - prompts: git+https://git@github.com:meshin-blox/prompts.git#a22bdac044f6b32ba67adb4eacc2e58322512a2d + prompts: git+https://github.com/meshin-blox/prompts.git#a22bdac044f6b32ba67adb4eacc2e58322512a2d scrypt-js: 3.0.1 semver: 7.7.3 stream: 0.0.2 @@ -14109,7 +14304,7 @@ snapshots: - supports-color - utf-8-validate - ssv-scanner@git+https://git@github.com:bloxapp/ssv-scanner.git#45068c93b3de84495f6cfad2767787c91d98aa8f(bufferutil@4.1.0)(utf-8-validate@5.0.10): + ssv-scanner@git+https://github.com/bloxapp/ssv-scanner.git#45068c93b3de84495f6cfad2767787c91d98aa8f(bufferutil@4.1.0)(utf-8-validate@5.0.10): dependencies: '@types/figlet': 1.7.0 argparse: 2.0.1 @@ -14342,9 +14537,27 @@ snapshots: command-line-usage: 6.1.3 string-format: 2.0.0 - ts-essentials@7.0.3(typescript@4.9.5): + ts-essentials@7.0.3(typescript@5.9.3): dependencies: - typescript: 4.9.5 + typescript: 5.9.3 + + ts-node@10.9.2(@types/node@25.0.3)(typescript@5.9.3): + dependencies: + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.12 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.4 + '@types/node': 25.0.3 + acorn: 8.15.0 + acorn-walk: 8.3.5 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + typescript: 5.9.3 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 tslib@1.14.1: {} @@ -14407,7 +14620,7 @@ snapshots: type@2.7.3: {} - typechain@8.3.2(typescript@4.9.5): + typechain@8.3.2(typescript@5.9.3): dependencies: '@types/prettier': 2.7.3 debug: 4.3.4(supports-color@8.1.1) @@ -14418,8 +14631,8 @@ snapshots: mkdirp: 1.0.4 prettier: 2.8.8 ts-command-line-args: 2.5.1 - ts-essentials: 7.0.3(typescript@4.9.5) - typescript: 4.9.5 + ts-essentials: 7.0.3(typescript@5.9.3) + typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -14435,6 +14648,8 @@ snapshots: typescript@4.9.5: {} + typescript@5.9.3: {} + typical@4.0.0: {} typical@5.2.0: {} @@ -14508,6 +14723,8 @@ snapshots: uuid@9.0.1: {} + v8-compile-cache-lib@3.0.1: {} + validate-npm-package-license@3.0.4: dependencies: spdx-correct: 3.2.0 @@ -14525,18 +14742,18 @@ snapshots: core-util-is: 1.0.2 extsprintf: 1.3.0 - viem@2.43.3(bufferutil@4.1.0)(typescript@4.9.5)(utf-8-validate@5.0.10)(zod@3.25.76): + viem@2.43.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76): dependencies: '@noble/curves': 1.9.1 '@noble/hashes': 1.8.0 '@scure/bip32': 1.7.0 '@scure/bip39': 1.6.0 - abitype: 1.2.3(typescript@4.9.5)(zod@3.25.76) + abitype: 1.2.3(typescript@5.9.3)(zod@3.25.76) isows: 1.0.7(ws@8.18.3(bufferutil@4.1.0)(utf-8-validate@5.0.10)) - ox: 0.11.1(typescript@4.9.5)(zod@3.25.76) + ox: 0.11.1(typescript@5.9.3)(zod@3.25.76) ws: 8.18.3(bufferutil@4.1.0)(utf-8-validate@5.0.10) optionalDependencies: - typescript: 4.9.5 + typescript: 5.9.3 transitivePeerDependencies: - bufferutil - utf-8-validate @@ -15162,6 +15379,8 @@ snapshots: y18n: 3.2.2 yargs-parser: 2.4.1 + yn@3.1.1: {} + yocto-queue@0.1.0: {} zksync-web3@0.14.4(ethers@5.7.2(bufferutil@4.1.0)(utf-8-validate@5.0.10)): diff --git a/contracts/tasks/actions/claimBribes.ts b/contracts/tasks/actions/claimBribes.ts index 381b0d4e82..c304441d4b 100644 --- a/contracts/tasks/actions/claimBribes.ts +++ b/contracts/tasks/actions/claimBribes.ts @@ -1,21 +1,17 @@ -const { ethers } = require("ethers"); -const { Defender } = require("@openzeppelin/defender-sdk"); +import { ethers } from "ethers"; +import { subtask, task } from "hardhat/config"; +import { getSigner } from "../../utils/signers"; +import { logTxDetails } from "../../utils/txLogger"; -const { logTxDetails } = require("../../utils/txLogger"); - -// ClaimBribesSafeModule1 for Coinbase AERO Locker Safe -const COINBASE_AERO_LOCKER_MODULE = - "0x60d3d6ec213d84dea193dbd79673340061178893"; - -// ClaimBribesSafeModule3 for Old Guardian Safe +const COINBASE_AERO_LOCKER_MODULE = "0x60d3d6ec213d84dea193dbd79673340061178893"; const OLD_GUARDIAN_MODULE = "0x26179ada0f7cb714c11a8190e1f517988c28e759"; -const moduleLabels = { +const moduleLabels: Record = { [COINBASE_AERO_LOCKER_MODULE]: "Coinbase AERO Locker Safe", [OLD_GUARDIAN_MODULE]: "Old Guardian Safe", }; -const batchSizes = { +const batchSizes: Record = { [COINBASE_AERO_LOCKER_MODULE]: 50, [OLD_GUARDIAN_MODULE]: 50, }; @@ -27,63 +23,26 @@ const MODULE_ABI = [ "function claimBribes(uint256 nftIndexStart, uint256 nftIndexEnd, bool silent) external", ]; -const handler = async (event) => { - // Initialize defender relayer provider and signer - const client = new Defender(event); - const provider = client.relaySigner.getProvider({ ethersVersion: "v5" }); - const signer = await client.relaySigner.getSigner(provider, { - speed: "fastest", - ethersVersion: "v5", - }); - - const network = await provider.getNetwork(); - if (network.chainId != 8453) { - throw new Error("Only supported on Base"); - } - - const modules = [COINBASE_AERO_LOCKER_MODULE, OLD_GUARDIAN_MODULE]; - - for (const moduleAddr of modules) { - const module = new ethers.Contract(moduleAddr, MODULE_ABI, signer); - - console.log( - `Claiming bribes from ${moduleLabels[moduleAddr.toLowerCase()]}` - ); - await manageNFTsOnModule(module, signer); - await claimBribesFromModule(module, signer); - } -}; +async function manageNFTsOnModule(module: ethers.Contract, signer: ethers.Signer) { + const label = moduleLabels[module.address.toLowerCase()]; -async function manageNFTsOnModule(module, signer) { - // Remove all NFTs from the module - console.log( - `Running removeAllNFTIds on module ${ - moduleLabels[module.address.toLowerCase()] - }` - ); + console.log(`Running removeAllNFTIds on module ${label}`); let tx = await module.connect(signer).removeAllNFTIds({ gasLimit: 20000000, }); - logTxDetails(tx, `removeAllNFTIds`); + logTxDetails(tx, "removeAllNFTIds"); await tx.wait(); - // Fetch all NFTs from the veNFT contract - console.log( - `Running fetchNFTIds on module ${ - moduleLabels[module.address.toLowerCase()] - }` - ); + console.log(`Running fetchNFTIds on module ${label}`); tx = await module.connect(signer).fetchNFTIds({ gasLimit: 20000000, }); - logTxDetails(tx, `fetchNFTIds`); + logTxDetails(tx, "fetchNFTIds"); await tx.wait(); } -async function claimBribesFromModule(module, signer) { - const nftIdsLength = ( - await module.connect(signer).getNFTIdsLength() - ).toNumber(); +async function claimBribesFromModule(module: ethers.Contract, signer: ethers.Signer) { + const nftIdsLength = (await module.connect(signer).getNFTIdsLength()).toNumber(); const batchSize = batchSizes[module.address.toLowerCase()] || 50; const batchCount = Math.ceil(nftIdsLength / batchSize); @@ -94,12 +53,30 @@ async function claimBribesFromModule(module, signer) { const start = i * batchSize; const end = Math.min(start + batchSize, nftIdsLength); - const tx = await module.connect(signer).claimBribes(start, end, true, { - gasLimit: 20000000, - }); + const tx = await module.connect(signer).claimBribes(start, end, true, { gasLimit: 20000000 }); console.log(`claimBribes (batch ${i + 1} of ${batchCount})`); await logTxDetails(tx, `claimBribes (batch ${i + 1} of ${batchCount})`); } } -module.exports = { handler }; +subtask("claimBribes", "Claim bribes from Aerodrome veNFT lockers on Base").setAction(async () => { + const signer = await getSigner(); + const { chainId } = await signer.provider?.getNetwork(); + if (chainId !== 8453) { + throw new Error("Only supported on Base"); + } + + const modules = [COINBASE_AERO_LOCKER_MODULE, OLD_GUARDIAN_MODULE]; + + for (const moduleAddr of modules) { + const module = new ethers.Contract(moduleAddr, MODULE_ABI, signer); + + console.log(`Claiming bribes from ${moduleLabels[moduleAddr.toLowerCase()]}`); + await manageNFTsOnModule(module, signer); + await claimBribesFromModule(module, signer); + } +}); + +task("claimBribes").setAction(async (_, __, runSuper) => { + return runSuper(); +}); diff --git a/contracts/tasks/actions/crossChainRelay.ts b/contracts/tasks/actions/crossChainRelay.ts index 121e48f48f..7b5b09a249 100644 --- a/contracts/tasks/actions/crossChainRelay.ts +++ b/contracts/tasks/actions/crossChainRelay.ts @@ -1,42 +1,35 @@ -const { ethers } = require("ethers"); -const { Defender } = require("@openzeppelin/defender-sdk"); -const { processCctpBridgeTransactions } = require("../../tasks/crossChain"); -const { getNetworkName } = require("../../utils/hardhat-helpers"); -const { configuration } = require("../../utils/cctp"); +import { ethers } from "ethers"; +import { subtask, task } from "hardhat/config"; +import { configuration } from "../../utils/cctp"; +import { keyValueStoreLocalClient } from "../../utils/defender"; +import { getNetworkName } from "../../utils/hardhat-helpers"; +import { getSigner } from "../../utils/signers"; +import { processCctpBridgeTransactions } from "../crossChain"; -// Entrypoint for the Defender Action -const handler = async (event) => { - console.log( - `DEBUG env var in handler before being set: "${process.env.DEBUG}"` - ); +const log = require("../../utils/logger")("action:crossChainRelay"); - // Initialize defender relayer provider and signer - const client = new Defender(event); - // Chain ID of the target contract relayer signer - const provider = client.relaySigner.getProvider({ ethersVersion: "v5" }); - const { chainId } = await provider.getNetwork(); - let sourceProvider; - const signer = await client.relaySigner.getSigner(provider, { - speed: "fastest", - ethersVersion: "v5", - }); +subtask( + "crossChainRelay", + "Relay CCTP bridge transactions between mainnet and Base" +).setAction(async () => { + const signer = await getSigner(); + const { chainId } = await signer.provider?.getNetwork(); + + let sourceProvider: ethers.providers.JsonRpcProvider; - // destinatino chain is mainnet, source chain is base if (chainId === 1) { - if (!event.secrets.BASE_PROVIDER_URL) { + if (!process.env.BASE_PROVIDER_URL) { throw new Error("BASE_PROVIDER_URL env var required"); } sourceProvider = new ethers.providers.JsonRpcProvider( - event.secrets.BASE_PROVIDER_URL + process.env.BASE_PROVIDER_URL ); - } - // destination chain is base, source chain is mainnet - else if (chainId === 8453) { - if (!event.secrets.PROVIDER_URL) { + } else if (chainId === 8453) { + if (!process.env.PROVIDER_URL) { throw new Error("PROVIDER_URL env var required"); } sourceProvider = new ethers.providers.JsonRpcProvider( - event.secrets.PROVIDER_URL + process.env.PROVIDER_URL ); } else { throw new Error(`Unsupported chain id: ${chainId}`); @@ -46,7 +39,7 @@ const handler = async (event) => { const isMainnet = networkName === "mainnet"; const isBase = networkName === "base"; - let config; + let config: any; if (isMainnet) { config = configuration.mainnetBaseMorpho.mainnet; } else if (isBase) { @@ -55,10 +48,15 @@ const handler = async (event) => { throw new Error(`Unsupported network name: ${networkName}`); } + log(`Relaying CCTP from ${networkName}`); + const store = keyValueStoreLocalClient({ + _storePath: ".store/crossChainRelay.json", + }); + await processCctpBridgeTransactions({ destinationChainSigner: signer, sourceChainProvider: sourceProvider, - store: client.keyValueStore, + store, networkName, blockLookback: config.blockLookback, cctpDestinationDomainId: config.cctpDestinationDomainId, @@ -67,6 +65,8 @@ const handler = async (event) => { cctpIntegrationContractAddressDestination: config.cctpIntegrationContractAddressDestination, }); -}; +}); -module.exports = { handler }; +task("crossChainRelay").setAction(async (_, __, runSuper) => { + return runSuper(); +}); diff --git a/contracts/tasks/actions/crossChainRelayHyperEVM.ts b/contracts/tasks/actions/crossChainRelayHyperEVM.ts index c50e4a14c2..ffe9ad88f9 100644 --- a/contracts/tasks/actions/crossChainRelayHyperEVM.ts +++ b/contracts/tasks/actions/crossChainRelayHyperEVM.ts @@ -1,42 +1,35 @@ -const { ethers } = require("ethers"); -const { Defender } = require("@openzeppelin/defender-sdk"); -const { processCctpBridgeTransactions } = require("../../tasks/crossChain"); -const { getNetworkName } = require("../../utils/hardhat-helpers"); -const { configuration } = require("../../utils/cctp"); +import { ethers } from "ethers"; +import { subtask, task } from "hardhat/config"; +import { configuration } from "../../utils/cctp"; +import { keyValueStoreLocalClient } from "../../utils/defender"; +import { getNetworkName } from "../../utils/hardhat-helpers"; +import { getSigner } from "../../utils/signers"; +import { processCctpBridgeTransactions } from "../crossChain"; -// Entrypoint for the Defender Action -const handler = async (event) => { - console.log( - `DEBUG env var in handler before being set: "${process.env.DEBUG}"` - ); +const log = require("../../utils/logger")("action:crossChainRelayHyperEVM"); - // Initialize defender relayer provider and signer - const client = new Defender(event); - // Chain ID of the target contract relayer signer - const provider = client.relaySigner.getProvider({ ethersVersion: "v5" }); - const { chainId } = await provider.getNetwork(); - let sourceProvider; - const signer = await client.relaySigner.getSigner(provider, { - speed: "fastest", - ethersVersion: "v5", - }); +subtask( + "crossChainRelayHyperEVM", + "Relay CCTP bridge transactions between mainnet and HyperEVM" +).setAction(async () => { + const signer = await getSigner(); + const { chainId } = await signer.provider?.getNetwork(); + + let sourceProvider: ethers.providers.JsonRpcProvider; - // destination chain is mainnet, source chain is hyperevm if (chainId === 1) { - if (!event.secrets.HYPEREVM_PROVIDER_URL) { + if (!process.env.HYPEREVM_PROVIDER_URL) { throw new Error("HYPEREVM_PROVIDER_URL env var required"); } sourceProvider = new ethers.providers.JsonRpcProvider( - event.secrets.HYPEREVM_PROVIDER_URL + process.env.HYPEREVM_PROVIDER_URL ); - } - // destination chain is hyperevm, source chain is mainnet - else if (chainId === 999) { - if (!event.secrets.PROVIDER_URL) { + } else if (chainId === 999) { + if (!process.env.PROVIDER_URL) { throw new Error("PROVIDER_URL env var required"); } sourceProvider = new ethers.providers.JsonRpcProvider( - event.secrets.PROVIDER_URL + process.env.PROVIDER_URL ); } else { throw new Error(`Unsupported chain id: ${chainId}`); @@ -46,7 +39,7 @@ const handler = async (event) => { const isMainnet = networkName === "mainnet"; const isHyperEVM = networkName === "hyperevm"; - let config; + let config: any; if (isMainnet) { config = configuration.mainnetHyperEVMMorpho.mainnet; } else if (isHyperEVM) { @@ -55,10 +48,15 @@ const handler = async (event) => { throw new Error(`Unsupported network name: ${networkName}`); } + log(`Relaying CCTP from ${networkName}`); + const store = keyValueStoreLocalClient({ + _storePath: ".store/crossChainRelayHyperEVM.json", + }); + await processCctpBridgeTransactions({ destinationChainSigner: signer, sourceChainProvider: sourceProvider, - store: client.keyValueStore, + store, networkName, blockLookback: config.blockLookback, cctpDestinationDomainId: config.cctpDestinationDomainId, @@ -67,6 +65,8 @@ const handler = async (event) => { cctpIntegrationContractAddressDestination: config.cctpIntegrationContractAddressDestination, }); -}; +}); -module.exports = { handler }; +task("crossChainRelayHyperEVM").setAction(async (_, __, runSuper) => { + return runSuper(); +}); diff --git a/contracts/tasks/actions/doAccounting.ts b/contracts/tasks/actions/doAccounting.ts index bbea98ce88..ad7dfcdba9 100644 --- a/contracts/tasks/actions/doAccounting.ts +++ b/contracts/tasks/actions/doAccounting.ts @@ -1,84 +1,25 @@ -const { ethers } = require("ethers"); -const { Defender } = require("@openzeppelin/defender-sdk"); -const addresses = require("../../utils/addresses"); -const { logTxDetails } = require("../../utils/txLogger"); - -const { - address: mainnetConsolidationControllerAddress, - abi: consolidationControllerAbi, -} = require("../../deployments/mainnet/ConsolidationController.json"); -const { - address: hoodiConsolidationControllerAddress, -} = require("../../deployments/hoodi/ConsolidationController.json"); +import { ethers } from "ethers"; +import { subtask, task, types } from "hardhat/config"; +import { address as hoodiConsolidationControllerAddress } from "../../deployments/hoodi/ConsolidationController.json"; +import { + abi as consolidationControllerAbi, + address as mainnetConsolidationControllerAddress, +} from "../../deployments/mainnet/ConsolidationController.json"; +import addresses from "../../utils/addresses"; +import { getSigner } from "../../utils/signers"; +import { logTxDetails } from "../../utils/txLogger"; const log = require("../../utils/logger")("action:doAccounting"); -// Entrypoint for the Defender Action -const handler = async (event) => { - console.log( - `DEBUG env var in handler before being set: "${process.env.DEBUG}"` - ); - - // Initialize defender relayer provider and signer - const client = new Defender(event); - const provider = client.relaySigner.getProvider({ ethersVersion: "v5" }); - const signer = await client.relaySigner.getSigner(provider, { - speed: "fastest", - ethersVersion: "v5", - }); - - const network = await provider.getNetwork(); - const networkName = - network.chainId === 1 - ? "mainnet" - : network.chainId === 560048 - ? "hoodi" - : undefined; - if (!networkName) { - throw new Error( - `Action only supports mainnet and hoodi, not chainId ${network.chainId}` - ); - } - log(`Network: ${networkName} with chain id (${network.chainId})`); - - const consolidationControllerAddress = - networkName === "mainnet" - ? mainnetConsolidationControllerAddress - : hoodiConsolidationControllerAddress; - log( - `Resolved ConsolidationController address to ${consolidationControllerAddress}` - ); - const consolidationController = new ethers.Contract( - consolidationControllerAddress, - consolidationControllerAbi, - signer - ); - - await doAccounting( - "NativeStakingSSVStrategy2Proxy", - networkName, - signer, - consolidationController - ); - await doAccounting( - "NativeStakingSSVStrategy3Proxy", - networkName, - signer, - consolidationController - ); -}; - -const doAccounting = async ( - proxyName, - networkName, - signer, - consolidationController -) => { - const nativeStakingProxyAddress = addresses[networkName][proxyName]; +async function doAccountingForProxy( + proxyName: string, + networkName: string, + signer: ethers.Signer, + consolidationController: ethers.Contract +) { + const nativeStakingProxyAddress = (addresses as any)[networkName][proxyName]; if (!nativeStakingProxyAddress) { - throw new Error( - `Failed to resolve ${proxyName} on the ${networkName} network` - ); + throw new Error(`Failed to resolve ${proxyName} on ${networkName}`); } log(`Resolved ${proxyName} address to ${nativeStakingProxyAddress}`); @@ -86,6 +27,63 @@ const doAccounting = async ( .connect(signer) .doAccounting(nativeStakingProxyAddress); await logTxDetails(tx, `doAccounting for ${proxyName} via controller`); -}; +} + +subtask( + "doAccounting", + "Account for consensus rewards and validator exits in the Native Staking Strategy" +) + .addOptionalParam( + "index", + "The number of the Native Staking Contract deployed.", + undefined, + types.int + ) + .addOptionalParam( + "consol", + "Call the consolidation controller instead of the strategy", + false, + types.boolean + ) + .setAction(async () => { + const signer = await getSigner(); + const { chainId } = await signer.provider?.getNetwork(); + + const networkName = + chainId === 1 ? "mainnet" : chainId === 560048 ? "hoodi" : undefined; + if (!networkName) { + throw new Error( + `Action only supports mainnet and hoodi, not chainId ${chainId}` + ); + } + log(`Network: ${networkName} (${chainId})`); + + const controllerAddress = + networkName === "mainnet" + ? mainnetConsolidationControllerAddress + : hoodiConsolidationControllerAddress; + log(`ConsolidationController: ${controllerAddress}`); + + const consolidationController = new ethers.Contract( + controllerAddress, + consolidationControllerAbi, + signer + ); + + await doAccountingForProxy( + "NativeStakingSSVStrategy2Proxy", + networkName, + signer, + consolidationController + ); + await doAccountingForProxy( + "NativeStakingSSVStrategy3Proxy", + networkName, + signer, + consolidationController + ); + }); -module.exports = { handler }; +task("doAccounting").setAction(async (_, __, runSuper) => { + return runSuper(); +}); diff --git a/contracts/tasks/actions/harvest.ts b/contracts/tasks/actions/harvest.ts index e66013426f..ed4050bdda 100644 --- a/contracts/tasks/actions/harvest.ts +++ b/contracts/tasks/actions/harvest.ts @@ -1,36 +1,27 @@ -const { ethers } = require("ethers"); -const { Defender } = require("@openzeppelin/defender-sdk"); +import { ethers } from "ethers"; +import { subtask, task } from "hardhat/config"; -const addresses = require("../../utils/addresses"); -const { logTxDetails } = require("../../utils/txLogger"); -const { - shouldHarvestFromNativeStakingStrategy, +import addresses from "../../utils/addresses"; +import { claimStrategyRewards, -} = require("../../utils/harvest"); -const { claimMerklRewards } = require("../../tasks/merkl"); + shouldHarvestFromNativeStakingStrategy, +} from "../../utils/harvest"; +import { getSigner } from "../../utils/signers"; +import { logTxDetails } from "../../utils/txLogger"; +import { claimMerklRewards } from "../merkl"; const harvesterAbi = require("../../abi/harvester.json"); - const log = require("../../utils/logger")("action:harvest"); -// Entrypoint for the Defender Action -const handler = async (event) => { - console.log( - `DEBUG env var in handler before being set: "${process.env.DEBUG}"` - ); - - // Initialize defender relayer provider and signer - const client = new Defender(event); - const provider = client.relaySigner.getProvider({ ethersVersion: "v5" }); - const signer = await client.relaySigner.getSigner(provider, { - speed: "fastest", - ethersVersion: "v5", - }); - - const { chainId } = await provider.getNetwork(); +subtask( + "harvest", + "Harvest and swap rewards from native staking strategies" +).setAction(async () => { + const signer = await getSigner(); + const { chainId } = await signer.provider?.getNetwork(); if (chainId !== 1) { throw new Error( - `Action should only be run on mainnet, not on network with chainId ${chainId}` + `Action should only be run on mainnet, not chainId ${chainId}` ); } @@ -39,21 +30,18 @@ const handler = async (event) => { const harvester = new ethers.Contract(harvesterAddress, harvesterAbi, signer); const nativeStakingStrategies = [ - // addresses[networkName].NativeStakingSSVStrategyProxy, addresses.mainnet.NativeStakingSSVStrategy2Proxy, addresses.mainnet.NativeStakingSSVStrategy3Proxy, ]; - const strategiesToHarvest = []; + const strategiesToHarvest: string[] = []; for (const strategy of nativeStakingStrategies) { - log(`Resolved Native Staking Strategy address to ${strategy}`); + log(`Checking strategy ${strategy}`); const shouldHarvest = await shouldHarvestFromNativeStakingStrategy( strategy, signer ); - if (shouldHarvest) { - // Harvest if there are sufficient rewards to be harvested log(`Will harvest from ${strategy}`); strategiesToHarvest.push(strategy); } @@ -63,15 +51,15 @@ const handler = async (event) => { const tx = await harvester .connect(signer) ["harvestAndTransfer(address[])"](strategiesToHarvest); - await logTxDetails(tx, `harvestAndTransfer`); + await logTxDetails(tx, "harvestAndTransfer"); } else { log("No native staking strategies require harvesting at this time"); } - // Claim MORPHO rewards to the Morpho OUSD v2 Strategy await claimMerklRewards(addresses.mainnet.MorphoOUSDv2StrategyProxy, signer); - // Collect the CRV and MORPHO rewards from the strategies using the Safe module await claimStrategyRewards(signer); -}; +}); -module.exports = { handler }; +task("harvest").setAction(async (_, __, runSuper) => { + return runSuper(); +}); diff --git a/contracts/tasks/actions/manageBribeOnSonic.ts b/contracts/tasks/actions/manageBribeOnSonic.ts index 54c8dc6a8f..04fdd3cdee 100644 --- a/contracts/tasks/actions/manageBribeOnSonic.ts +++ b/contracts/tasks/actions/manageBribeOnSonic.ts @@ -1,24 +1,17 @@ -const { ethers } = require("ethers"); -const { Defender } = require("@openzeppelin/defender-sdk"); +import { ethers } from "ethers"; +import { subtask, task } from "hardhat/config"; +import { getSigner } from "../../utils/signers"; +import { logTxDetails } from "../../utils/txLogger"; const poolBoosterSwapXAbi = require("../../abi/poolBoosterSwapX.json"); const poolBoosterCentralRegistryAbi = require("../../abi/poolBoosterCentralRegistry.json"); -const { logTxDetails } = require("../../utils/txLogger"); -const log = require("../../utils/logger")("action:harvest"); +const log = require("../../utils/logger")("action:manageBribeOnSonic"); -// Entrypoint for the Defender Action -const handler = async (event) => { - console.log( - `DEBUG env var in handler before being set: "${process.env.DEBUG}"` - ); - - // Initialize defender relayer provider and signer - const client = new Defender(event); - const provider = client.relaySigner.getProvider({ ethersVersion: "v5" }); - const signer = await client.relaySigner.getSigner(provider, { - speed: "fastest", - ethersVersion: "v5", - }); +subtask( + "manageBribeOnSonic", + "Manage bribes on all Sonic pool booster factories" +).setAction(async () => { + const signer = await getSigner(); const poolBoosterCentralRegistryProxyAddress = "0x4F3B656Aa5Fb5E708bF7B63D6ff71623eb4a218A"; @@ -28,7 +21,6 @@ const handler = async (event) => { signer ); - // Fetch all factories const factories = await poolBoosterCentralRegistryProxy.getAllFactories(); log(`Factories: ${factories}`); @@ -37,6 +29,8 @@ const handler = async (event) => { const tx = await factory.connect(signer).bribeAll([]); await logTxDetails(tx, `Bribed all pools in factory ${f}`); } -}; +}); -module.exports = { handler }; +task("manageBribeOnSonic").setAction(async (_, __, runSuper) => { + return runSuper(); +}); diff --git a/contracts/tasks/actions/manageBribes.ts b/contracts/tasks/actions/manageBribes.ts index 6410895b81..938b0c5137 100644 --- a/contracts/tasks/actions/manageBribes.ts +++ b/contracts/tasks/actions/manageBribes.ts @@ -1,38 +1,46 @@ -const { Defender } = require("@openzeppelin/defender-sdk"); - -const { manageBribes } = require("../../tasks/poolBooster"); +import { subtask, task, types } from "hardhat/config"; +import { getSigner } from "../../utils/signers"; +import { manageBribes } from "../poolBooster"; const log = require("../../utils/logger")("action:manageBribes"); -// Entrypoint for the Defender Action -const handler = async (event) => { - console.log( - `DEBUG env var in handler before being set: "${process.env.DEBUG}"` - ); - - // Initialize defender relayer provider and signer - const client = new Defender(event); - const provider = client.relaySigner.getProvider({ ethersVersion: "v5" }); - const signer = await client.relaySigner.getSigner(provider, { - speed: "fastest", - ethersVersion: "v5", - }); - - // Parse options from event - const skipRewardPerVote = event.request?.body?.skipRewardPerVote ?? false; - const targetEfficiency = event.request?.body?.targetEfficiency ?? 1; - const chunkSize = event.request?.body?.chunkSize ?? 4; +subtask( + "manageCurvePoolBoosterBribes", + "Calls manageBribes on the CurvePoolBoosterBribesModule and calculates the rewards per vote based on the target efficiency" +) + .addOptionalParam( + "efficiency", + "Target efficiency (0-10, e.g. 1 for 100%, 0.5 for 50%)", + "1", + types.string + ) + .addOptionalParam( + "skipRewardPerVote", + "Skip setting RewardPerVote (pass array of zeros)", + false, + types.boolean + ) + .addOptionalParam( + "chunkSize", + "Number of pool boosters to manage per transaction", + 4, + types.int + ) + .setAction(async (taskArgs: any) => { + const signer = await getSigner(); - log( - `Managing max reward per vote with target efficiency ${targetEfficiency}, skip reward per vote ${skipRewardPerVote}, and chunk size ${chunkSize}` - ); - await manageBribes({ - provider, - signer, - targetEfficiency, - skipRewardPerVote, - chunkSize, + log( + `Managing max reward per vote with target efficiency ${taskArgs.efficiency}, skip reward per vote ${taskArgs.skipRewardPerVote}, and chunk size ${taskArgs.chunkSize}` + ); + await manageBribes({ + signer, + provider: signer.provider!, + targetEfficiency: taskArgs.efficiency, + skipRewardPerVote: taskArgs.skipRewardPerVote, + chunkSize: taskArgs.chunkSize, + }); }); -}; -module.exports = { handler }; +task("manageCurvePoolBoosterBribes").setAction(async (_, __, runSuper) => { + return runSuper(); +}); diff --git a/contracts/tasks/actions/manageMerklBribes.ts b/contracts/tasks/actions/manageMerklBribes.ts index 0049f57213..577dc32c27 100644 --- a/contracts/tasks/actions/manageMerklBribes.ts +++ b/contracts/tasks/actions/manageMerklBribes.ts @@ -1,32 +1,33 @@ -const { Defender } = require("@openzeppelin/defender-sdk"); - -const { manageMerklBribes } = require("../../tasks/merklPoolBooster"); +import { subtask, task, types } from "hardhat/config"; +import { getSigner } from "../../utils/signers"; +import { manageMerklBribes } from "../merklPoolBooster"; const log = require("../../utils/logger")("action:manageMerklBribes"); -// Entrypoint for the Defender Action -const handler = async (event) => { - console.log( - `DEBUG env var in handler before being set: "${process.env.DEBUG}"` - ); - - // Initialize defender relayer provider and signer - const client = new Defender(event); - const provider = client.relaySigner.getProvider({ ethersVersion: "v5" }); - const signer = await client.relaySigner.getSigner(provider, { - speed: "fastest", - ethersVersion: "v5", - }); - - // Parse options from event - const exclusionList = event.request?.body?.exclusionList ?? []; +subtask( + "manageMerklPoolBoosterBribes", + "Calls bribeAll on the MerklPoolBoosterBribesModule through the Gnosis Safe" +) + .addOptionalParam( + "exclusionList", + "Comma-separated list of pool booster addresses to exclude", + "", + types.string + ) + .setAction(async (taskArgs: any) => { + const signer = await getSigner(); + const exclusionList = taskArgs.exclusionList + ? taskArgs.exclusionList.split(",").map((s: string) => s.trim()) + : []; - log(`Calling bribeAll with exclusion list: [${exclusionList.join(", ")}]`); - await manageMerklBribes({ - provider, - signer, - exclusionList, + log(`Calling bribeAll with exclusion list: [${exclusionList.join(", ")}]`); + await manageMerklBribes({ + provider: signer.provider!, + signer, + exclusionList, + }); }); -}; -module.exports = { handler }; +task("manageMerklPoolBoosterBribes").setAction(async (_, __, runSuper) => { + return runSuper(); +}); diff --git a/contracts/tasks/actions/managePassThrough.ts b/contracts/tasks/actions/managePassThrough.ts index 97e321c7f0..2617107d5c 100644 --- a/contracts/tasks/actions/managePassThrough.ts +++ b/contracts/tasks/actions/managePassThrough.ts @@ -1,21 +1,16 @@ -const { Defender } = require("@openzeppelin/defender-sdk"); -const { transferTokens } = require("../../utils/managePassThrough"); +import { subtask, task } from "hardhat/config"; -// Entrypoint for the Defender Action -const handler = async (event) => { - console.log( - `DEBUG env var in handler before being set: "${process.env.DEBUG}"` - ); - - // Initialize defender relayer provider and signer - const client = new Defender(event); - const provider = client.relaySigner.getProvider({ ethersVersion: "v5" }); - const signer = await client.relaySigner.getSigner(provider, { - speed: "fastest", - ethersVersion: "v5", - }); +import { transferTokens } from "../../utils/managePassThrough"; +import { getSigner } from "../../utils/signers"; +subtask( + "managePassThrough", + "Transfer tokens via pass-through mechanism" +).setAction(async () => { + const signer = await getSigner(); await transferTokens({ signer }); -}; +}); -module.exports = { handler }; +task("managePassThrough").setAction(async (_, __, runSuper) => { + return runSuper(); +}); diff --git a/contracts/tasks/actions/registerValidators.ts b/contracts/tasks/actions/registerValidators.ts index a78278f51b..635d2dd037 100644 --- a/contracts/tasks/actions/registerValidators.ts +++ b/contracts/tasks/actions/registerValidators.ts @@ -1,96 +1,121 @@ -const { ethers } = require("ethers"); -const { Defender } = require("@openzeppelin/defender-sdk"); -const { registerValidators } = require("../../utils/validator"); -const addresses = require("../../utils/addresses"); +import { ethers } from "ethers"; +import { subtask, task, types } from "hardhat/config"; +import addresses from "../../utils/addresses"; +import { keyValueStoreLocalClient } from "../../utils/defender"; +import { getSigner } from "../../utils/signers"; +import { registerValidators } from "../../utils/validator"; const nativeStakingStrategyAbi = require("../../abi/native_staking_SSV_strategy.json"); const IWETH9Abi = require("../../abi/IWETH9.json"); - const log = require("../../utils/logger")("action:registerValidators"); -// Entrypoint for the Defender Action -const handler = async (event) => { - console.log( - `DEBUG env var in handler before being set: "${process.env.DEBUG}"` - ); - - // Initialize defender relayer provider and signer - const client = new Defender(event); - const provider = client.relaySigner.getProvider({ ethersVersion: "v5" }); - const signer = await client.relaySigner.getSigner(provider, { - speed: "fastest", - ethersVersion: "v5", - }); - const store = client.keyValueStore; +subtask( + "registerValidators", + "Creates the required amount of new SSV validators and stakes ETH" +) + .addOptionalParam( + "days", + "SSV Cluster operational time in days", + 2, + types.int + ) + .addOptionalParam( + "validators", + "The number of validators to register. defaults to the max that can be registered", + undefined, + types.int + ) + .addOptionalParam("clear", "Clear storage", false, types.boolean) + .addOptionalParam( + "eth", + "Override the days option and set the amount of ETH to deposit to the cluster.", + undefined, + types.float + ) + .addOptionalParam( + "uuid", + "uuid of P2P's request SSV validator API call.", + undefined, + types.string + ) + .addOptionalParam( + "index", + "The number of the Native Staking Contract deployed.", + undefined, + types.int + ) + .addOptionalParam( + "ssvAmount", + "Amount of SSV to deposit to the cluster. Overrides days.", + 0, + types.float + ) + .setAction(async (taskArgs: any) => { + const signer = await getSigner(); + const { chainId } = await signer.provider?.getNetwork(); + const networkName = chainId === 1 ? "mainnet" : "hoodi"; + log(`Network: ${networkName} (${chainId})`); - const network = await provider.getNetwork(); - const networkName = network.chainId === 1 ? "mainnet" : "hoodi"; - log(`Network: ${networkName} with chain id (${network.chainId})`); + const store = keyValueStoreLocalClient({ + _storePath: ".store/registerValidators.json", + }); - const nativeStakingProxyAddress = - addresses[networkName].NativeStakingSSVStrategy3Proxy; - log( - `Resolved Native Staking Strategy address to ${nativeStakingProxyAddress}` - ); - const nativeStakingStrategy = new ethers.Contract( - nativeStakingProxyAddress, - nativeStakingStrategyAbi, - signer - ); + const nativeStakingProxyAddress = (addresses as any)[networkName] + .NativeStakingSSVStrategy3Proxy; + log(`NativeStakingStrategy: ${nativeStakingProxyAddress}`); + const nativeStakingStrategy = new ethers.Contract( + nativeStakingProxyAddress, + nativeStakingStrategyAbi, + signer + ); - const wethAddress = addresses[networkName].WETH; - log(`Resolved WETH address to ${wethAddress}`); - const WETH = new ethers.Contract(wethAddress, IWETH9Abi, signer); + const wethAddress = (addresses as any)[networkName].WETH; + log(`WETH: ${wethAddress}`); + const WETH = new ethers.Contract(wethAddress, IWETH9Abi, signer); - const feeAccumulatorAddress = - await nativeStakingStrategy.FEE_ACCUMULATOR_ADDRESS(); + const feeAccumulatorAddress = + await nativeStakingStrategy.FEE_ACCUMULATOR_ADDRESS(); - const p2p_api_key = - network.chainId === 1 - ? event.secrets.P2P_MAINNET_API_KEY - : event.secrets.P2P_HOLESKY_API_KEY; - if (!p2p_api_key) { - throw new Error( - "Secret with P2P API key not set. Add the P2P_MAINNET_API_KEY or P2P_HOLESKY_API_KEY secret" - ); - } - const p2p_base_url = - network.chainId === 1 ? "api.p2p.org" : "api-test-holesky.p2p.org"; + const p2p_api_key = + chainId === 1 + ? process.env.P2P_MAINNET_API_KEY + : process.env.P2P_HOLESKY_API_KEY; + if (!p2p_api_key) { + throw new Error( + "Secret with P2P API key not set. Add P2P_MAINNET_API_KEY or P2P_HOLESKY_API_KEY" + ); + } + const p2p_base_url = + chainId === 1 ? "api.p2p.org" : "api-test-holesky.p2p.org"; - const awsS3AccessKeyId = event.secrets.AWS_ACCESS_S3_KEY_ID; - const awsS3SexcretAccessKeyId = event.secrets.AWS_SECRET_S3_ACCESS_KEY; - const s3BucketName = event.secrets.VALIDATOR_KEYS_S3_BUCKET_NAME; + const awsS3AccessKeyId = process.env.AWS_ACCESS_S3_KEY_ID; + const awsS3SexcretAccessKeyId = process.env.AWS_SECRET_S3_ACCESS_KEY; + const s3BucketName = process.env.VALIDATOR_KEYS_S3_BUCKET_NAME; - if (!awsS3AccessKeyId) { - throw new Error("Secret AWS_ACCESS_S3_KEY_ID not set"); - } - if (!awsS3SexcretAccessKeyId) { - throw new Error("Secret AWS_SECRET_S3_ACCESS_KEY not set"); - } - if (!s3BucketName) { - throw new Error("Secret VALIDATOR_KEYS_S3_BUCKET_NAME not set"); - } + if (!awsS3AccessKeyId) throw new Error("AWS_ACCESS_S3_KEY_ID not set"); + if (!awsS3SexcretAccessKeyId) + throw new Error("AWS_SECRET_S3_ACCESS_KEY not set"); + if (!s3BucketName) throw new Error("VALIDATOR_KEYS_S3_BUCKET_NAME not set"); - await registerValidators({ - signer, - store, - nativeStakingStrategy, - WETH, - feeAccumulatorAddress, - p2p_api_key, - p2p_base_url, - // how much SSV (expressed in days of runway) gets deposited into the - // SSV Network contract on validator registration. This is calculated - // at a Cluster level rather than a single validator. - validatorSpawnOperationalPeriodInDays: 1, - // this overrides validatorSpawnOperationalPeriodInDays - ssvAmount: 0, - clear: true, - // maxValidatorsToRegister: 1, - awsS3AccessKeyId, - awsS3SexcretAccessKeyId, - s3BucketName, + await registerValidators({ + signer, + store, + nativeStakingStrategy, + WETH, + feeAccumulatorAddress, + p2p_api_key, + p2p_base_url, + validatorSpawnOperationalPeriodInDays: taskArgs.days, + clear: taskArgs.clear, + uuid: taskArgs.uuid, + maxValidatorsToRegister: taskArgs.validators, + ethAmount: taskArgs.eth, + awsS3AccessKeyId, + awsS3SexcretAccessKeyId, + s3BucketName, + }); }); -}; -module.exports = { handler }; +task("registerValidators").setAction(async (_, __, runSuper) => { + return runSuper(); +}); diff --git a/contracts/tasks/actions/sonicClaimWithdrawals.ts b/contracts/tasks/actions/sonicClaimWithdrawals.ts index 8f3c9efee7..755831dd3f 100644 --- a/contracts/tasks/actions/sonicClaimWithdrawals.ts +++ b/contracts/tasks/actions/sonicClaimWithdrawals.ts @@ -1,22 +1,15 @@ -const { Defender } = require("@openzeppelin/defender-sdk"); - -const { withdrawFromSFC } = require("../../utils/sonicActions"); - -// Entrypoint for the Defender Action -const handler = async (event) => { - console.log( - `DEBUG env var in handler before being set: "${process.env.DEBUG}"` - ); - - // Initialize defender relayer provider and signer - const client = new Defender(event); - const provider = client.relaySigner.getProvider({ ethersVersion: "v5" }); - const signer = await client.relaySigner.getSigner(provider, { - speed: "fastest", - ethersVersion: "v5", - }); - +import { subtask, task } from "hardhat/config"; +import { getSigner } from "../../utils/signers"; +import { withdrawFromSFC } from "../../utils/sonicActions"; + +subtask( + "sonicWithdraw", + "Withdraw native S from a previously undelegated validator" +).setAction(async () => { + const signer = await getSigner(); await withdrawFromSFC({ signer }); -}; +}); -module.exports = { handler }; +task("sonicWithdraw").setAction(async (_, __, runSuper) => { + return runSuper(); +}); diff --git a/contracts/tasks/actions/sonicRequestWithdrawal.ts b/contracts/tasks/actions/sonicRequestWithdrawal.ts index ac71f60c43..22350e91cb 100644 --- a/contracts/tasks/actions/sonicRequestWithdrawal.ts +++ b/contracts/tasks/actions/sonicRequestWithdrawal.ts @@ -1,25 +1,35 @@ -const { Defender } = require("@openzeppelin/defender-sdk"); +import { subtask, task, types } from "hardhat/config"; +import { getSigner } from "../../utils/signers"; +import { undelegateValidator } from "../../utils/sonicActions"; -const { undelegateValidator } = require("../../utils/sonicActions"); - -// Entrypoint for the Defender Action -const handler = async (event) => { - console.log( - `DEBUG env var in handler before being set: "${process.env.DEBUG}"` - ); - - // Initialize defender relayer provider and signer - const client = new Defender(event); - const provider = client.relaySigner.getProvider({ ethersVersion: "v5" }); - const signer = await client.relaySigner.getSigner(provider, { - speed: "fastest", - ethersVersion: "v5", +subtask("sonicUndelegate", "Remove liquidity from a Sonic validator") + .addOptionalParam( + "id", + "Validator identifier. 15, 16, 17 or 18", + undefined, + types.int + ) + .addOptionalParam( + "amount", + "Amount of liquidity to remove", + undefined, + types.float + ) + .addOptionalParam( + "buffer", + "Percentage of total assets to keep as buffer in basis points. 100 = 1%", + 50, + types.float + ) + .setAction(async (taskArgs: any) => { + const signer = await getSigner(); + await undelegateValidator({ + ...taskArgs, + bufferPct: taskArgs.buffer, + signer, + }); }); - // The vault buffer in basis points, so 100 = 1% - const bufferPct = 50; - - await undelegateValidator({ signer, bufferPct }); -}; - -module.exports = { handler }; +task("sonicUndelegate").setAction(async (_, __, runSuper) => { + return runSuper(); +}); diff --git a/contracts/tasks/actions/stakeValidators.ts b/contracts/tasks/actions/stakeValidators.ts index bd8d873078..76b5ec72ba 100644 --- a/contracts/tasks/actions/stakeValidators.ts +++ b/contracts/tasks/actions/stakeValidators.ts @@ -1,88 +1,88 @@ -const { ethers } = require("ethers"); -const { Defender } = require("@openzeppelin/defender-sdk"); -const { - KeyValueStoreClient, -} = require("@openzeppelin/defender-kvstore-client"); -const { stakeValidators } = require("../../utils/validator"); -const addresses = require("../../utils/addresses"); +import { ethers } from "ethers"; +import { subtask, task, types } from "hardhat/config"; +import addresses from "../../utils/addresses"; +import { keyValueStoreLocalClient } from "../../utils/defender"; +import { getSigner } from "../../utils/signers"; +import { stakeValidators } from "../../utils/validator"; const nativeStakingStrategyAbi = require("../../abi/native_staking_SSV_strategy.json"); const IWETH9Abi = require("../../abi/IWETH9.json"); - const log = require("../../utils/logger")("action:stakeValidators"); -// Entrypoint for the Defender Action -const handler = async (event) => { - console.log( - `DEBUG env var in handler before being set: "${process.env.DEBUG}"` - ); - - const store = new KeyValueStoreClient(event); - - // Initialize defender relayer provider and signer - const client = new Defender(event); - const provider = client.relaySigner.getProvider({ ethersVersion: "v5" }); - const signer = await client.relaySigner.getSigner(provider, { - speed: "fastest", - ethersVersion: "v5", - }); +subtask( + "stakeValidators", + "Creates the required amount of new SSV validators and stakes ETH" +) + .addOptionalParam( + "uuid", + "uuid of P2P's request SSV validator API call", + undefined, + types.string + ) + .addOptionalParam( + "index", + "The number of the Native Staking Contract deployed.", + undefined, + types.int + ) + .setAction(async (taskArgs: any) => { + const signer = await getSigner(); + const { chainId } = await signer.provider?.getNetwork(); + const networkName = chainId === 1 ? "mainnet" : "holesky"; + log(`Network: ${networkName} (${chainId})`); - const network = await provider.getNetwork(); - const networkName = network.chainId === 1 ? "mainnet" : "holesky"; - log(`Network: ${networkName} with chain id (${network.chainId})`); + const store = keyValueStoreLocalClient({ + _storePath: ".store/stakeValidators.json", + }); - const nativeStakingProxyAddress = - addresses[networkName].NativeStakingSSVStrategy3Proxy; - log( - `Resolved Native Staking Strategy address to ${nativeStakingProxyAddress}` - ); - const nativeStakingStrategy = new ethers.Contract( - nativeStakingProxyAddress, - nativeStakingStrategyAbi, - signer - ); + const nativeStakingProxyAddress = (addresses as any)[networkName] + .NativeStakingSSVStrategy3Proxy; + log(`NativeStakingStrategy: ${nativeStakingProxyAddress}`); + const nativeStakingStrategy = new ethers.Contract( + nativeStakingProxyAddress, + nativeStakingStrategyAbi, + signer + ); - const wethAddress = addresses[networkName].WETH; - log(`Resolved WETH address to ${wethAddress}`); - const WETH = new ethers.Contract(wethAddress, IWETH9Abi, signer); + const wethAddress = (addresses as any)[networkName].WETH; + log(`WETH: ${wethAddress}`); + const WETH = new ethers.Contract(wethAddress, IWETH9Abi, signer); - const p2p_api_key = - network.chainId === 1 - ? event.secrets.P2P_MAINNET_API_KEY - : event.secrets.P2P_HOLESKY_API_KEY; - if (!p2p_api_key) { - throw new Error( - "Secret with P2P API key not set. Add the P2P_MAINNET_API_KEY or P2P_HOLESKY_API_KEY secret" - ); - } - const p2p_base_url = - network.chainId === 1 ? "api.p2p.org" : "api-test-holesky.p2p.org"; + const p2p_api_key = + chainId === 1 + ? process.env.P2P_MAINNET_API_KEY + : process.env.P2P_HOLESKY_API_KEY; + if (!p2p_api_key) { + throw new Error( + "Secret with P2P API key not set. Add P2P_MAINNET_API_KEY or P2P_HOLESKY_API_KEY" + ); + } + const p2p_base_url = + chainId === 1 ? "api.p2p.org" : "api-test-holesky.p2p.org"; - const awsS3AccessKeyId = event.secrets.AWS_ACCESS_S3_KEY_ID; - const awsS3SexcretAccessKeyId = event.secrets.AWS_SECRET_S3_ACCESS_KEY; - const s3BucketName = event.secrets.VALIDATOR_KEYS_S3_BUCKET_NAME; + const awsS3AccessKeyId = process.env.AWS_ACCESS_S3_KEY_ID; + const awsS3SexcretAccessKeyId = process.env.AWS_SECRET_S3_ACCESS_KEY; + const s3BucketName = process.env.VALIDATOR_KEYS_S3_BUCKET_NAME; - if (!awsS3AccessKeyId) { - throw new Error("Secret AWS_ACCESS_S3_KEY_ID not set"); - } - if (!awsS3SexcretAccessKeyId) { - throw new Error("Secret AWS_SECRET_S3_ACCESS_KEY not set"); - } - if (!s3BucketName) { - throw new Error("Secret VALIDATOR_KEYS_S3_BUCKET_NAME not set"); - } + if (!awsS3AccessKeyId) throw new Error("AWS_ACCESS_S3_KEY_ID not set"); + if (!awsS3SexcretAccessKeyId) + throw new Error("AWS_SECRET_S3_ACCESS_KEY not set"); + if (!s3BucketName) throw new Error("VALIDATOR_KEYS_S3_BUCKET_NAME not set"); - await stakeValidators({ - signer, - store, - nativeStakingStrategy, - WETH, - p2p_api_key, - p2p_base_url, - awsS3AccessKeyId, - awsS3SexcretAccessKeyId, - s3BucketName, + await stakeValidators({ + signer, + store, + nativeStakingStrategy, + WETH, + p2p_api_key, + p2p_base_url, + uuid: taskArgs.uuid, + awsS3AccessKeyId, + awsS3SexcretAccessKeyId, + s3BucketName, + }); }); -}; -module.exports = { handler }; +task("stakeValidators").setAction(async (_, __, runSuper) => { + return runSuper(); +}); diff --git a/contracts/tasks/lib/addresses.ts b/contracts/tasks/lib/addresses.ts new file mode 100644 index 0000000000..fb816858e5 --- /dev/null +++ b/contracts/tasks/lib/addresses.ts @@ -0,0 +1,18 @@ +import type { Address } from "viem"; +import addresses from "../../utils/addresses"; + +/** + * Look up a contract address from the contracts/utils/addresses.js registry. + * Throws if the network or contract name is not found. + */ +export function getAddress(network: string, name: string): Address { + const networkAddresses = (addresses as Record)[network]; + if (!networkAddresses || typeof networkAddresses !== "object") { + throw new Error(`Unknown network "${network}" in address registry`); + } + const addr = (networkAddresses as Record)[name]; + if (!addr) { + throw new Error(`Address "${name}" not found on network "${network}"`); + } + return addr as Address; +} diff --git a/contracts/tasks/lib/client.ts b/contracts/tasks/lib/client.ts new file mode 100644 index 0000000000..b6fc251942 --- /dev/null +++ b/contracts/tasks/lib/client.ts @@ -0,0 +1,71 @@ +import { type Chain, createPublicClient, createWalletClient, http, type LocalAccount } from "viem"; +import { base, holesky, hoodi, hyperEvm, mainnet, sonic } from "viem/chains"; +import { requireEnv } from "./env"; + +const CHAIN_CONFIG: Record = { + [mainnet.id]: { chain: mainnet, envVar: "PROVIDER_URL" }, + [base.id]: { chain: base, envVar: "BASE_PROVIDER_URL" }, + [sonic.id]: { chain: sonic, envVar: "SONIC_PROVIDER_URL" }, + [hoodi.id]: { chain: hoodi, envVar: "HOODI_PROVIDER_URL" }, + [holesky.id]: { chain: holesky, envVar: "HOLESKY_PROVIDER_URL" }, + [hyperEvm.id]: { chain: hyperEvm, envVar: "HYPEREVM_PROVIDER_URL" }, +}; + +const CHAIN_BY_NAME: Record = Object.fromEntries( + Object.values(CHAIN_CONFIG).map((c) => [c.chain.name.toLowerCase(), c.chain]), +); +const CHAIN_BY_ID: Record = Object.fromEntries( + Object.values(CHAIN_CONFIG).map((c) => [c.chain.id, c.chain]), +); + +/** + * Resolve a chain from a name (e.g. "mainnet") or chain ID (e.g. "1" or 1). + */ +export function resolveChain(nameOrId: string | number): Chain { + if (typeof nameOrId === "number") { + const chain = CHAIN_BY_ID[nameOrId]; + if (!chain) throw new Error(`Unknown chain id ${nameOrId}`); + return chain; + } + // Try as number first, then as name + const asNum = Number(nameOrId); + if (!Number.isNaN(asNum)) { + const chain = CHAIN_BY_ID[asNum]; + if (chain) return chain; + } + const chain = CHAIN_BY_NAME[nameOrId.toLowerCase()]; + if (!chain) { + const supported = Object.values(CHAIN_CONFIG) + .map((c) => `${c.chain.name.toLowerCase()} (${c.chain.id})`) + .join(", "); + throw new Error(`Unknown chain "${nameOrId}". Supported: ${supported}`); + } + return chain; +} + +function getConfig(chain: Chain) { + const config = CHAIN_CONFIG[chain.id]; + if (!config) { + throw new Error(`No config for chain id ${chain.id}`); + } + return config; +} + +export function getRpcUrl(chain: Chain): string { + return requireEnv(getConfig(chain).envVar); +} + +export function getPublicClient(chain: Chain) { + return createPublicClient({ + chain, + transport: http(getRpcUrl(chain)), + }); +} + +export function getWalletClient(chain: Chain, account: LocalAccount) { + return createWalletClient({ + chain, + account, + transport: http(getRpcUrl(chain)), + }); +} diff --git a/contracts/tasks/lib/env.ts b/contracts/tasks/lib/env.ts new file mode 100644 index 0000000000..70d8ef924b --- /dev/null +++ b/contracts/tasks/lib/env.ts @@ -0,0 +1,15 @@ +/** + * Typed environment variable access with validation. + * Bun loads .env automatically — no dotenv needed. + */ +export function requireEnv(name: string): string { + const value = process.env[name]; + if (!value) { + throw new Error(`Required environment variable ${name} is not set`); + } + return value; +} + +export function optionalEnv(name: string, fallback?: string): string | undefined { + return process.env[name] ?? fallback; +} diff --git a/contracts/tasks/lib/logger.ts b/contracts/tasks/lib/logger.ts new file mode 100644 index 0000000000..008ca9be4c --- /dev/null +++ b/contracts/tasks/lib/logger.ts @@ -0,0 +1,17 @@ +import { createLogger, format, transports } from "winston"; + +const logger = createLogger({ + level: process.env.LOG_LEVEL ?? "info", + format: format.combine( + format.timestamp(), + format.errors({ stack: true }), + format.printf(({ timestamp, level, message, action, ...rest }) => { + const prefix = action ? `[${action}] ` : ""; + const extra = Object.keys(rest).length ? ` ${JSON.stringify(rest)}` : ""; + return `${timestamp} ${level}: ${prefix}${message}${extra}`; + }), + ), + transports: [new transports.Console()], +}); + +export default logger; diff --git a/contracts/tasks/lib/signer.ts b/contracts/tasks/lib/signer.ts new file mode 100644 index 0000000000..82a4e048c9 --- /dev/null +++ b/contracts/tasks/lib/signer.ts @@ -0,0 +1,217 @@ +import { GetPublicKeyCommand, KMSClient, SignCommand } from "@aws-sdk/client-kms"; +import { DirectKmsTransactionSigner } from "@lastdotnet/purrikey"; +import { ethers } from "ethers"; +import { + type Hex, + hashMessage, + hashTypedData, + hexToBytes, + keccak256, + type LocalAccount, + recoverAddress, + serializeTransaction, + signatureToHex, + type TransactionSerializable, + type TypedDataDefinition, +} from "viem"; +import { toAccount } from "viem/accounts"; +import { optionalEnv } from "./env"; + +const DEFAULT_KMS_RELAYER_ID = "mrk-248128595151466bb7f7b9a56501a98f"; +const AWS_KMS_REGION = "us-east-1"; + +// secp256k1 curve order +const SECP256K1_N = 0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141n; + +function getKmsKeyId(): string { + return optionalEnv("KMS_RELAYER_ID") ?? DEFAULT_KMS_RELAYER_ID; +} + +/** + * Decode a DER-encoded ECDSA signature into (r, s) as bigints. + */ +function decodeDerSignature(der: Uint8Array): { r: bigint; s: bigint } { + let pos = 0; + + if (der[pos++] !== 0x30) throw new Error("Invalid DER: expected SEQUENCE (0x30)"); + pos++; // skip sequence length + + if (der[pos++] !== 0x02) throw new Error("Invalid DER: expected INTEGER (0x02) for r"); + const rLen = der[pos++]; + let rBytes = der.slice(pos, pos + rLen); + pos += rLen; + + if (der[pos++] !== 0x02) throw new Error("Invalid DER: expected INTEGER (0x02) for s"); + const sLen = der[pos++]; + let sBytes = der.slice(pos, pos + sLen); + + // Strip leading zero padding (DER uses it to avoid negative interpretation) + while (rBytes.length > 1 && rBytes[0] === 0x00) rBytes = rBytes.slice(1); + while (sBytes.length > 1 && sBytes[0] === 0x00) sBytes = sBytes.slice(1); + + const r = BigInt(`0x${Buffer.from(rBytes).toString("hex")}`); + const s = BigInt(`0x${Buffer.from(sBytes).toString("hex")}`); + + return { r, s }; +} + +/** + * Extract the uncompressed secp256k1 public key from a DER-encoded + * SubjectPublicKeyInfo blob (as returned by KMS GetPublicKey). + * Returns the 65-byte uncompressed key (04 ‖ x ‖ y). + */ +function extractPublicKeyFromDer(der: Uint8Array): Uint8Array { + // AWS KMS returns a SubjectPublicKeyInfo structure. The last 65 bytes + // are the uncompressed EC point (0x04 prefix + 32-byte x + 32-byte y). + if (der.length < 65) { + throw new Error(`DER public key too short: ${der.length} bytes`); + } + const pubKey = der.slice(-65); + if (pubKey[0] !== 0x04) { + throw new Error( + `Expected uncompressed public key prefix 0x04, got 0x${pubKey[0].toString(16)}`, + ); + } + return pubKey; +} + +/** + * Derive an Ethereum address from an uncompressed secp256k1 public key. + * address = last 20 bytes of keccak256(x ‖ y) + */ +function publicKeyToAddress(uncompressedKey: Uint8Array): `0x${string}` { + // Strip the 0x04 prefix — keccak256 the raw 64-byte (x, y) + const xy = uncompressedKey.slice(1); + const xyHex = `0x${Buffer.from(xy).toString("hex")}` as Hex; + const hash = keccak256(xyHex); + // Last 20 bytes of the hash + return `0x${hash.slice(-40)}` as `0x${string}`; +} + +/** + * Resolve the Ethereum address for a KMS key via GetPublicKey. + */ +async function resolveKmsAddress(kmsClient: KMSClient, keyId: string): Promise<`0x${string}`> { + const response = await kmsClient.send(new GetPublicKeyCommand({ KeyId: keyId })); + if (!response.PublicKey) { + throw new Error("No public key returned from KMS"); + } + const pubKey = extractPublicKeyFromDer(new Uint8Array(response.PublicKey)); + return publicKeyToAddress(pubKey); +} + +function bigintToHex32(value: bigint): Hex { + return `0x${value.toString(16).padStart(64, "0")}` as Hex; +} + +/** + * Sign a 32-byte digest with AWS KMS and return {r, s, yParity}. + * Handles low-s canonicalization (EIP-2) and recovery parity detection. + */ +async function kmsSign( + kmsClient: KMSClient, + keyId: string, + digest: Hex, + expectedAddress: `0x${string}`, +): Promise<{ r: Hex; s: Hex; yParity: 0 | 1 }> { + const response = await kmsClient.send( + new SignCommand({ + KeyId: keyId, + Message: Buffer.from(hexToBytes(digest)), + MessageType: "DIGEST", + SigningAlgorithm: "ECDSA_SHA_256", + }), + ); + + if (!response.Signature) { + throw new Error("No signature returned from KMS"); + } + + let { r, s } = decodeDerSignature(new Uint8Array(response.Signature)); + + // EIP-2: canonicalize s to lower half of curve order + if (s > SECP256K1_N / 2n) { + s = SECP256K1_N - s; + } + + const rHex = bigintToHex32(r); + const sHex = bigintToHex32(s); + + // Try all recovery parities to find the one matching our address + for (const yParity of [0, 1] as const) { + const recovered = await recoverAddress({ + hash: digest, + signature: { r: rHex, s: sHex, v: BigInt(yParity + 27) }, + }); + + if (recovered.toLowerCase() === expectedAddress.toLowerCase()) { + return { r: rHex, s: sHex, yParity }; + } + } + + throw new Error(`KMS signature recovery failed: could not recover ${expectedAddress}`); +} + +/** + * Create a viem LocalAccount backed by AWS KMS. + * Chain-agnostic — chain context comes from the walletClient, not the account. + * Address is resolved once via GetPublicKey and cached in the closure. + */ +export async function getKmsAccount(): Promise { + const keyId = getKmsKeyId(); + const kmsClient = new KMSClient({ region: AWS_KMS_REGION }); + const address = await resolveKmsAddress(kmsClient, keyId); + + return toAccount({ + address, + + async signMessage({ message }) { + const digest = hashMessage(message); + const sig = await kmsSign(kmsClient, keyId, digest, address); + return signatureToHex({ + r: sig.r, + s: sig.s, + yParity: sig.yParity, + }); + }, + + async signTransaction(tx) { + const serialized = serializeTransaction(tx as TransactionSerializable); + const digest = keccak256(serialized); + const sig = await kmsSign(kmsClient, keyId, digest, address); + return serializeTransaction(tx as TransactionSerializable, { + r: sig.r, + s: sig.s, + yParity: sig.yParity, + }); + }, + + async signTypedData(typedData) { + const digest = hashTypedData(typedData as TypedDataDefinition); + const sig = await kmsSign(kmsClient, keyId, digest, address); + return signatureToHex({ + r: sig.r, + s: sig.s, + yParity: sig.yParity, + }); + }, + }) as LocalAccount; +} + +/** + * Create an ethers v5 Signer backed by AWS KMS. + * Used for contracts/ utility functions that expect ethers.Signer. + */ +export function getEthersSigner( + provider: ethers.providers.JsonRpcProvider, +): DirectKmsTransactionSigner { + const keyId = getKmsKeyId(); + return new DirectKmsTransactionSigner(keyId, provider, AWS_KMS_REGION); +} + +/** + * Create an ethers v5 JsonRpcProvider from an RPC URL. + */ +export function getEthersProvider(rpcUrl: string): ethers.providers.JsonRpcProvider { + return new ethers.providers.JsonRpcProvider(rpcUrl); +} diff --git a/contracts/tasks/lib/store.ts b/contracts/tasks/lib/store.ts new file mode 100644 index 0000000000..fe766bf9e3 --- /dev/null +++ b/contracts/tasks/lib/store.ts @@ -0,0 +1,54 @@ +import fs from "node:fs"; +import path from "node:path"; + +export interface KeyValueStore { + get(key: string): Promise; + put(key: string, value: string): Promise; + del(key: string): Promise; +} + +// TODO: Replace with persistent KV storage. + +/** + * File-based key-value store, compatible with the Defender KeyValueStoreClient + * interface. Reuses the pattern from contracts/utils/defender.js. + * + * Persists to actions/.store/{name}.json + */ +export function createStore(name: string): KeyValueStore { + const storeDir = path.resolve(__dirname, "../../.store"); + const storePath = path.join(storeDir, `${name}.json`); + + function getStore(): Record { + try { + if (!fs.existsSync(storePath)) return {}; + const contents = fs.readFileSync(storePath, "utf8"); + return contents ? JSON.parse(contents) : {}; + } catch { + return {}; + } + } + + function updateStore(updater: (store: Record) => void) { + const store = getStore(); + updater(store); + fs.mkdirSync(path.dirname(storePath), { recursive: true }); + fs.writeFileSync(storePath, JSON.stringify(store, null, 2)); + } + + return { + async get(key: string) { + return getStore()[key]; + }, + async put(key: string, value: string) { + updateStore((store) => { + store[key] = value; + }); + }, + async del(key: string) { + updateStore((store) => { + delete store[key]; + }); + }, + }; +} diff --git a/contracts/tasks/lib/transaction.ts b/contracts/tasks/lib/transaction.ts new file mode 100644 index 0000000000..391ea3d0ba --- /dev/null +++ b/contracts/tasks/lib/transaction.ts @@ -0,0 +1,32 @@ +import { formatEther, type Hash, type PublicClient, type TransactionReceipt } from "viem"; +import type { Logger } from "winston"; + +/** + * Wait for a transaction to be mined, log its details, and throw if it failed. + */ +export async function validateTransaction( + client: PublicClient, + hash: Hash, + method: string, + log: Logger, +): Promise { + const tx = await client.getTransaction({ hash }); + log.info( + `Sent ${method} tx ${hash} from ${tx.from} (${ + tx.gasPrice ? Number(tx.gasPrice) / 1e9 : "unknown" + } Gwei)`, + ); + + const receipt = await client.waitForTransactionReceipt({ hash }); + + if (receipt.status !== "success") { + throw new Error(`Transaction ${method} failed`); + } + + const txCost = receipt.gasUsed * (receipt.effectiveGasPrice ?? tx.gasPrice ?? 0n); + log.info( + `Processed ${method} in block ${receipt.blockNumber}, ${receipt.gasUsed} gas, ${formatEther(txCost)} ETH`, + ); + + return receipt; +} diff --git a/contracts/tasks/tasks.js b/contracts/tasks/tasks.js index 89c9e2461a..3e84ee9372 100644 --- a/contracts/tasks/tasks.js +++ b/contracts/tasks/tasks.js @@ -741,64 +741,6 @@ task("calculateMaxPricePerVote").setAction(async (_, __, runSuper) => { return runSuper(); }); -subtask( - "manageCurvePoolBoosterBribes", - "Calls manageBribes on the CurvePoolBoosterBribesModule and calculates the rewards per vote based on the target efficiency" -) - .addOptionalParam( - "efficiency", - "Target efficiency (0-10, e.g. 1 for 100%, 0.5 for 50%)", - "1", - types.string - ) - .addOptionalParam( - "skipRewardPerVote", - "Skip setting RewardPerVote (pass array of zeros)", - false, - types.boolean - ) - .addOptionalParam( - "chunkSize", - "Number of pool boosters to manage per transaction", - 4, - types.int - ) - .setAction(async (taskArgs) => { - // This action only works with the Defender Relayer signer - const signer = await getDefenderSigner(); - await manageBribes({ - signer, - provider: signer.provider, - targetEfficiency: taskArgs.efficiency, - skipRewardPerVote: taskArgs.skipRewardPerVote, - chunkSize: taskArgs.chunkSize, - }); - }); -task("manageCurvePoolBoosterBribes").setAction(async (_, __, runSuper) => { - return runSuper(); -}); - -subtask( - "manageMerklPoolBoosterBribes", - "Calls bribeAll on the MerklPoolBoosterBribesModule through the Gnosis Safe" -) - .addOptionalParam( - "exclusionList", - "Comma-separated list of pool booster addresses to exclude", - "", - types.string - ) - .addOptionalParam( - "moduleAddress", - "Override module address (default: resolved from chain)", - undefined, - types.string - ) - .setAction(manageMerklBribesTask); -task("manageMerklPoolBoosterBribes").setAction(async (_, __, runSuper) => { - return runSuper(); -}); - // Curve Pools subtask("amoStrat", "Dumps the current state of an AMO strategy") .addParam("pool", "Symbol of the curve Metapool. OUSD or OETH") @@ -1129,21 +1071,6 @@ task("setRewardTokenAddresses", "Sets the reward token of a strategy") // Harvester -task("harvest", "Harvest and swap rewards for a strategy") - .addParam( - "strategy", - "Name of the strategy proxy contract or address. eg NativeStakingSSVStrategyProxy", - undefined, - types.string - ) - .addOptionalParam( - "harvester", - "Name of the harvester proxy contract or address", - "OETHHarvesterProxy", - types.string - ) - .setAction(harvestAndSwap); - // SSV subtask("getClusterInfo", "Print out information regarding SSV cluster") @@ -1258,75 +1185,6 @@ task("deployStakingProxy").setAction(async (_, __, runSuper) => { // Validator Operations -subtask( - "registerValidators", - "Creates the required amount of new SSV validators and stakes ETH" -) - .addOptionalParam( - "days", - "SSV Cluster operational time in days", - 2, - types.int - ) - .addOptionalParam( - "validators", - "The number of validators to register. defaults to the max that can be registered", - undefined, - types.int - ) - .addOptionalParam("clear", "Clear storage", false, types.boolean) - .addOptionalParam( - "eth", - "Override the days option and set the amount of ETH to deposit to the cluster.", - undefined, - types.float - ) - .addOptionalParam( - "uuid", - "uuid of P2P's request SSV validator API call. Used to reprocess a registration that failed to get the SSV request status.", - undefined, - types.string - ) - .addOptionalParam( - "index", - "The number of the Native Staking Contract deployed.", - undefined, - types.int - ) - .setAction(async (taskArgs) => { - const config = await validatorOperationsConfig(taskArgs); - const signer = await getSigner(); - await registerValidators({ ...config, signer }); - }); -task("registerValidators").setAction(async (_, __, runSuper) => { - return runSuper(); -}); - -subtask( - "stakeValidators", - "Creates the required amount of new SSV validators and stakes ETH" -) - .addOptionalParam( - "uuid", - "uuid of P2P's request SSV validator API call", - undefined, - types.string - ) - .addOptionalParam( - "index", - "The number of the Native Staking Contract deployed.", - undefined, - types.int - ) - .setAction(async (taskArgs) => { - const config = await validatorOperationsConfig(taskArgs); - const signer = await getSigner(); - await stakeValidators({ ...config, signer }); - }); -task("stakeValidators").setAction(async (_, __, runSuper) => { - return runSuper(); -}); - /** * This function relays the messages between mainnet and base networks. * @@ -1518,39 +1376,6 @@ task("removeValidators").setAction(async (_, __, runSuper) => { return runSuper(); }); -subtask( - "doAccounting", - "Account for consensus rewards and validator exits in the Native Staking Strategy" -) - .addOptionalParam( - "index", - "The number of the Native Staking Contract deployed.", - undefined, - types.int - ) - .addOptionalParam( - "consol", - "Call the consolidation controller instead of the strategy", - false, - types.boolean - ) - .setAction(async ({ index, consol }) => { - const signer = await getSigner(); - - const nativeStakingStrategy = await resolveNativeStakingStrategyProxy( - index - ); - - await doAccounting({ - consol, - signer, - nativeStakingStrategy, - }); - }); -task("doAccounting").setAction(async (_, __, runSuper) => { - return runSuper(); -}); - subtask( "manuallyFixAccounting", "Fix an accounting failure in a Native Staking Strategy" @@ -2019,50 +1844,6 @@ task("sonicDefaultValidator").setAction(async (_, __, runSuper) => { return runSuper(); }); -subtask("sonicUndelegate", "Remove liquidity from a Sonic validator") - .addOptionalParam( - "id", - "Validator identifier. 15, 16, 17 or 18", - undefined, - types.int - ) - .addOptionalParam( - "amount", - "Amount of liquidity to remove", - undefined, - types.float - ) - .addOptionalParam( - "buffer", - "Percentage of total assets to keep as buffer in basis points. 100 = 1%", - 50, - types.float - ) - .setAction(async (taskArgs) => { - const signer = await getSigner(); - - await undelegateValidator({ - ...taskArgs, - bufferPct: taskArgs.buffer, - signer, - }); - }); -task("sonicUndelegate").setAction(async (_, __, runSuper) => { - return runSuper(); -}); - -subtask( - "sonicWithdraw", - "Withdraw native S from a previously undelegated validator" -).setAction(async () => { - const signer = await getSigner(); - - await withdrawFromSFC({ signer }); -}); -task("sonicWithdraw").setAction(async (_, __, runSuper) => { - return runSuper(); -}); - subtask("sonicStaking", "Snap of the Sonic Staking Strategy") .addOptionalParam( "block", diff --git a/contracts/tsconfig.json b/contracts/tsconfig.json new file mode 100644 index 0000000000..3ddf709722 --- /dev/null +++ b/contracts/tsconfig.json @@ -0,0 +1,17 @@ +{ + "compilerOptions": { + "target": "ES2020", + "module": "CommonJS", + "moduleResolution": "node", + "strict": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "allowJs": true, + "resolveJsonModule": true, + "skipLibCheck": true, + "outDir": "dist", + "types": [] + }, + "include": ["tasks/actions/**/*.ts", "tasks/lib/**/*.ts"], + "exclude": ["node_modules", "dist"] +} diff --git a/contracts/yarn.lock b/contracts/yarn.lock new file mode 100644 index 0000000000..6934ee503b --- /dev/null +++ b/contracts/yarn.lock @@ -0,0 +1,12090 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@adraffy/ens-normalize@1.10.1": + version "1.10.1" + 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.11.0": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@adraffy/ens-normalize/-/ens-normalize-1.11.1.tgz#6c2d657d4b2dfb37f8ea811dcb3e60843d4ac24a" + integrity sha512-nhCBV3quEgesuf7c7KYfperqSS14T8bYuvJ8PcLJp6znkZpFc0AuW4qBtr8eKVyPPe/8RSr7sglCWPU5eaxwKQ== + +"@aws-crypto/crc32@5.2.0": + version "5.2.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/crc32/-/crc32-5.2.0.tgz#cfcc22570949c98c6689cfcbd2d693d36cdae2e1" + integrity sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg== + dependencies: + "@aws-crypto/util" "^5.2.0" + "@aws-sdk/types" "^3.222.0" + tslib "^2.6.2" + +"@aws-crypto/crc32c@5.2.0": + version "5.2.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/crc32c/-/crc32c-5.2.0.tgz#4e34aab7f419307821509a98b9b08e84e0c1917e" + integrity sha512-+iWb8qaHLYKrNvGRbiYRHSdKRWhto5XlZUEBwDjYNf+ly5SVYG6zEoYIdxvf5R3zyeP16w4PLBn3rH1xc74Rag== + dependencies: + "@aws-crypto/util" "^5.2.0" + "@aws-sdk/types" "^3.222.0" + tslib "^2.6.2" + +"@aws-crypto/sha1-browser@5.2.0": + version "5.2.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/sha1-browser/-/sha1-browser-5.2.0.tgz#b0ee2d2821d3861f017e965ef3b4cb38e3b6a0f4" + integrity sha512-OH6lveCFfcDjX4dbAvCFSYUjJZjDr/3XJ3xHtjn3Oj5b9RjojQo8npoLeA/bNwkOkrSQ0wgrHzXk4tDRxGKJeg== + dependencies: + "@aws-crypto/supports-web-crypto" "^5.2.0" + "@aws-crypto/util" "^5.2.0" + "@aws-sdk/types" "^3.222.0" + "@aws-sdk/util-locate-window" "^3.0.0" + "@smithy/util-utf8" "^2.0.0" + tslib "^2.6.2" + +"@aws-crypto/sha256-browser@5.2.0": + version "5.2.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz#153895ef1dba6f9fce38af550e0ef58988eb649e" + integrity sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw== + dependencies: + "@aws-crypto/sha256-js" "^5.2.0" + "@aws-crypto/supports-web-crypto" "^5.2.0" + "@aws-crypto/util" "^5.2.0" + "@aws-sdk/types" "^3.222.0" + "@aws-sdk/util-locate-window" "^3.0.0" + "@smithy/util-utf8" "^2.0.0" + tslib "^2.6.2" + +"@aws-crypto/sha256-js@1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-js/-/sha256-js-1.2.2.tgz#02acd1a1fda92896fc5a28ec7c6e164644ea32fc" + integrity sha512-Nr1QJIbW/afYYGzYvrF70LtaHrIRtd4TNAglX8BvlfxJLZ45SAmueIKYl5tWoNBPzp65ymXGFK0Bb1vZUpuc9g== + dependencies: + "@aws-crypto/util" "^1.2.2" + "@aws-sdk/types" "^3.1.0" + tslib "^1.11.1" + +"@aws-crypto/sha256-js@5.2.0", "@aws-crypto/sha256-js@^5.2.0": + version "5.2.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz#c4fdb773fdbed9a664fc1a95724e206cf3860042" + integrity sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA== + dependencies: + "@aws-crypto/util" "^5.2.0" + "@aws-sdk/types" "^3.222.0" + tslib "^2.6.2" + +"@aws-crypto/supports-web-crypto@^5.2.0": + version "5.2.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz#a1e399af29269be08e695109aa15da0a07b5b5fb" + integrity sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg== + dependencies: + tslib "^2.6.2" + +"@aws-crypto/util@^1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@aws-crypto/util/-/util-1.2.2.tgz#b28f7897730eb6538b21c18bd4de22d0ea09003c" + integrity sha512-H8PjG5WJ4wz0UXAFXeJjWCW1vkvIJ3qUUD+rGRwJ2/hj+xT58Qle2MTql/2MGzkU+1JLAFuR6aJpLAjHwhmwwg== + dependencies: + "@aws-sdk/types" "^3.1.0" + "@aws-sdk/util-utf8-browser" "^3.0.0" + tslib "^1.11.1" + +"@aws-crypto/util@^5.2.0": + version "5.2.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/util/-/util-5.2.0.tgz#71284c9cffe7927ddadac793c14f14886d3876da" + integrity sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ== + dependencies: + "@aws-sdk/types" "^3.222.0" + "@smithy/util-utf8" "^2.0.0" + tslib "^2.6.2" + +"@aws-sdk/client-kms@^3.400.0", "@aws-sdk/client-kms@^3.675.0": + version "3.1018.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-kms/-/client-kms-3.1018.0.tgz#d80d1d1f5cb1947a50291d45dec454843f620681" + integrity sha512-CAWH8nTzbeWDolybD2u1tDbJWVOkOosOcbxDhG1e/mP6h3ZVwryNR8GGYcVNpU5kPGPh8OjccTt0qdF9bJXr/Q== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/core" "^3.973.25" + "@aws-sdk/credential-provider-node" "^3.972.26" + "@aws-sdk/middleware-host-header" "^3.972.8" + "@aws-sdk/middleware-logger" "^3.972.8" + "@aws-sdk/middleware-recursion-detection" "^3.972.9" + "@aws-sdk/middleware-user-agent" "^3.972.26" + "@aws-sdk/region-config-resolver" "^3.972.10" + "@aws-sdk/types" "^3.973.6" + "@aws-sdk/util-endpoints" "^3.996.5" + "@aws-sdk/util-user-agent-browser" "^3.972.8" + "@aws-sdk/util-user-agent-node" "^3.973.12" + "@smithy/config-resolver" "^4.4.13" + "@smithy/core" "^3.23.12" + "@smithy/fetch-http-handler" "^5.3.15" + "@smithy/hash-node" "^4.2.12" + "@smithy/invalid-dependency" "^4.2.12" + "@smithy/middleware-content-length" "^4.2.12" + "@smithy/middleware-endpoint" "^4.4.27" + "@smithy/middleware-retry" "^4.4.44" + "@smithy/middleware-serde" "^4.2.15" + "@smithy/middleware-stack" "^4.2.12" + "@smithy/node-config-provider" "^4.3.12" + "@smithy/node-http-handler" "^4.5.0" + "@smithy/protocol-http" "^5.3.12" + "@smithy/smithy-client" "^4.12.7" + "@smithy/types" "^4.13.1" + "@smithy/url-parser" "^4.2.12" + "@smithy/util-base64" "^4.3.2" + "@smithy/util-body-length-browser" "^4.2.2" + "@smithy/util-body-length-node" "^4.2.3" + "@smithy/util-defaults-mode-browser" "^4.3.43" + "@smithy/util-defaults-mode-node" "^4.2.47" + "@smithy/util-endpoints" "^3.3.3" + "@smithy/util-middleware" "^4.2.12" + "@smithy/util-retry" "^4.2.12" + "@smithy/util-utf8" "^4.2.2" + tslib "^2.6.2" + +"@aws-sdk/client-lambda@^3.563.0": + version "3.1018.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-lambda/-/client-lambda-3.1018.0.tgz#a8c15fcdee0f57f19154531c79396fcc095b75c9" + integrity sha512-VXnYMYXhkP0C7bVKmfPjzCPEW2hefeTFwgm0egSNqFWPt0llFov1ScKAG6ukI/4N29oGp6ZSuUaaMkmC2p7rRw== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/core" "^3.973.25" + "@aws-sdk/credential-provider-node" "^3.972.26" + "@aws-sdk/middleware-host-header" "^3.972.8" + "@aws-sdk/middleware-logger" "^3.972.8" + "@aws-sdk/middleware-recursion-detection" "^3.972.9" + "@aws-sdk/middleware-user-agent" "^3.972.26" + "@aws-sdk/region-config-resolver" "^3.972.10" + "@aws-sdk/types" "^3.973.6" + "@aws-sdk/util-endpoints" "^3.996.5" + "@aws-sdk/util-user-agent-browser" "^3.972.8" + "@aws-sdk/util-user-agent-node" "^3.973.12" + "@smithy/config-resolver" "^4.4.13" + "@smithy/core" "^3.23.12" + "@smithy/eventstream-serde-browser" "^4.2.12" + "@smithy/eventstream-serde-config-resolver" "^4.3.12" + "@smithy/eventstream-serde-node" "^4.2.12" + "@smithy/fetch-http-handler" "^5.3.15" + "@smithy/hash-node" "^4.2.12" + "@smithy/invalid-dependency" "^4.2.12" + "@smithy/middleware-content-length" "^4.2.12" + "@smithy/middleware-endpoint" "^4.4.27" + "@smithy/middleware-retry" "^4.4.44" + "@smithy/middleware-serde" "^4.2.15" + "@smithy/middleware-stack" "^4.2.12" + "@smithy/node-config-provider" "^4.3.12" + "@smithy/node-http-handler" "^4.5.0" + "@smithy/protocol-http" "^5.3.12" + "@smithy/smithy-client" "^4.12.7" + "@smithy/types" "^4.13.1" + "@smithy/url-parser" "^4.2.12" + "@smithy/util-base64" "^4.3.2" + "@smithy/util-body-length-browser" "^4.2.2" + "@smithy/util-body-length-node" "^4.2.3" + "@smithy/util-defaults-mode-browser" "^4.3.43" + "@smithy/util-defaults-mode-node" "^4.2.47" + "@smithy/util-endpoints" "^3.3.3" + "@smithy/util-middleware" "^4.2.12" + "@smithy/util-retry" "^4.2.12" + "@smithy/util-stream" "^4.5.20" + "@smithy/util-utf8" "^4.2.2" + "@smithy/util-waiter" "^4.2.13" + tslib "^2.6.2" + +"@aws-sdk/client-s3@3.600.0": + version "3.600.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-s3/-/client-s3-3.600.0.tgz#3ce415d9257b8d1c8385bc26c6c86e6403aff83c" + integrity sha512-iYoKbJTputbf+ubkX6gSK/y/4uJEBRaXZ18jykLdBQ8UJuGrk2gqvV8h7OlGAhToCeysmmMqM0vDWyLt6lP8nw== + dependencies: + "@aws-crypto/sha1-browser" "5.2.0" + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/client-sso-oidc" "3.600.0" + "@aws-sdk/client-sts" "3.600.0" + "@aws-sdk/core" "3.598.0" + "@aws-sdk/credential-provider-node" "3.600.0" + "@aws-sdk/middleware-bucket-endpoint" "3.598.0" + "@aws-sdk/middleware-expect-continue" "3.598.0" + "@aws-sdk/middleware-flexible-checksums" "3.598.0" + "@aws-sdk/middleware-host-header" "3.598.0" + "@aws-sdk/middleware-location-constraint" "3.598.0" + "@aws-sdk/middleware-logger" "3.598.0" + "@aws-sdk/middleware-recursion-detection" "3.598.0" + "@aws-sdk/middleware-sdk-s3" "3.598.0" + "@aws-sdk/middleware-signing" "3.598.0" + "@aws-sdk/middleware-ssec" "3.598.0" + "@aws-sdk/middleware-user-agent" "3.598.0" + "@aws-sdk/region-config-resolver" "3.598.0" + "@aws-sdk/signature-v4-multi-region" "3.598.0" + "@aws-sdk/types" "3.598.0" + "@aws-sdk/util-endpoints" "3.598.0" + "@aws-sdk/util-user-agent-browser" "3.598.0" + "@aws-sdk/util-user-agent-node" "3.598.0" + "@aws-sdk/xml-builder" "3.598.0" + "@smithy/config-resolver" "^3.0.2" + "@smithy/core" "^2.2.1" + "@smithy/eventstream-serde-browser" "^3.0.2" + "@smithy/eventstream-serde-config-resolver" "^3.0.1" + "@smithy/eventstream-serde-node" "^3.0.2" + "@smithy/fetch-http-handler" "^3.0.2" + "@smithy/hash-blob-browser" "^3.1.0" + "@smithy/hash-node" "^3.0.1" + "@smithy/hash-stream-node" "^3.1.0" + "@smithy/invalid-dependency" "^3.0.1" + "@smithy/md5-js" "^3.0.1" + "@smithy/middleware-content-length" "^3.0.1" + "@smithy/middleware-endpoint" "^3.0.2" + "@smithy/middleware-retry" "^3.0.4" + "@smithy/middleware-serde" "^3.0.1" + "@smithy/middleware-stack" "^3.0.1" + "@smithy/node-config-provider" "^3.1.1" + "@smithy/node-http-handler" "^3.0.1" + "@smithy/protocol-http" "^4.0.1" + "@smithy/smithy-client" "^3.1.2" + "@smithy/types" "^3.1.0" + "@smithy/url-parser" "^3.0.1" + "@smithy/util-base64" "^3.0.0" + "@smithy/util-body-length-browser" "^3.0.0" + "@smithy/util-body-length-node" "^3.0.0" + "@smithy/util-defaults-mode-browser" "^3.0.4" + "@smithy/util-defaults-mode-node" "^3.0.4" + "@smithy/util-endpoints" "^2.0.2" + "@smithy/util-retry" "^3.0.1" + "@smithy/util-stream" "^3.0.2" + "@smithy/util-utf8" "^3.0.0" + "@smithy/util-waiter" "^3.0.1" + tslib "^2.6.2" + +"@aws-sdk/client-sso-oidc@3.600.0": + version "3.600.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.600.0.tgz#37966020af55a052822b9ef21adc38d2afcb0f34" + integrity sha512-7+I8RWURGfzvChyNQSyj5/tKrqRbzRl7H+BnTOf/4Vsw1nFOi5ROhlhD4X/Y0QCTacxnaoNcIrqnY7uGGvVRzw== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/client-sts" "3.600.0" + "@aws-sdk/core" "3.598.0" + "@aws-sdk/credential-provider-node" "3.600.0" + "@aws-sdk/middleware-host-header" "3.598.0" + "@aws-sdk/middleware-logger" "3.598.0" + "@aws-sdk/middleware-recursion-detection" "3.598.0" + "@aws-sdk/middleware-user-agent" "3.598.0" + "@aws-sdk/region-config-resolver" "3.598.0" + "@aws-sdk/types" "3.598.0" + "@aws-sdk/util-endpoints" "3.598.0" + "@aws-sdk/util-user-agent-browser" "3.598.0" + "@aws-sdk/util-user-agent-node" "3.598.0" + "@smithy/config-resolver" "^3.0.2" + "@smithy/core" "^2.2.1" + "@smithy/fetch-http-handler" "^3.0.2" + "@smithy/hash-node" "^3.0.1" + "@smithy/invalid-dependency" "^3.0.1" + "@smithy/middleware-content-length" "^3.0.1" + "@smithy/middleware-endpoint" "^3.0.2" + "@smithy/middleware-retry" "^3.0.4" + "@smithy/middleware-serde" "^3.0.1" + "@smithy/middleware-stack" "^3.0.1" + "@smithy/node-config-provider" "^3.1.1" + "@smithy/node-http-handler" "^3.0.1" + "@smithy/protocol-http" "^4.0.1" + "@smithy/smithy-client" "^3.1.2" + "@smithy/types" "^3.1.0" + "@smithy/url-parser" "^3.0.1" + "@smithy/util-base64" "^3.0.0" + "@smithy/util-body-length-browser" "^3.0.0" + "@smithy/util-body-length-node" "^3.0.0" + "@smithy/util-defaults-mode-browser" "^3.0.4" + "@smithy/util-defaults-mode-node" "^3.0.4" + "@smithy/util-endpoints" "^2.0.2" + "@smithy/util-middleware" "^3.0.1" + "@smithy/util-retry" "^3.0.1" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + +"@aws-sdk/client-sso@3.598.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.598.0.tgz#aef58e198e504d3b3d1ba345355650a67d21facb" + integrity sha512-nOI5lqPYa+YZlrrzwAJywJSw3MKVjvu6Ge2fCqQUNYMfxFB0NAaDFnl0EPjXi+sEbtCuz/uWE77poHbqiZ+7Iw== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/core" "3.598.0" + "@aws-sdk/middleware-host-header" "3.598.0" + "@aws-sdk/middleware-logger" "3.598.0" + "@aws-sdk/middleware-recursion-detection" "3.598.0" + "@aws-sdk/middleware-user-agent" "3.598.0" + "@aws-sdk/region-config-resolver" "3.598.0" + "@aws-sdk/types" "3.598.0" + "@aws-sdk/util-endpoints" "3.598.0" + "@aws-sdk/util-user-agent-browser" "3.598.0" + "@aws-sdk/util-user-agent-node" "3.598.0" + "@smithy/config-resolver" "^3.0.2" + "@smithy/core" "^2.2.1" + "@smithy/fetch-http-handler" "^3.0.2" + "@smithy/hash-node" "^3.0.1" + "@smithy/invalid-dependency" "^3.0.1" + "@smithy/middleware-content-length" "^3.0.1" + "@smithy/middleware-endpoint" "^3.0.2" + "@smithy/middleware-retry" "^3.0.4" + "@smithy/middleware-serde" "^3.0.1" + "@smithy/middleware-stack" "^3.0.1" + "@smithy/node-config-provider" "^3.1.1" + "@smithy/node-http-handler" "^3.0.1" + "@smithy/protocol-http" "^4.0.1" + "@smithy/smithy-client" "^3.1.2" + "@smithy/types" "^3.1.0" + "@smithy/url-parser" "^3.0.1" + "@smithy/util-base64" "^3.0.0" + "@smithy/util-body-length-browser" "^3.0.0" + "@smithy/util-body-length-node" "^3.0.0" + "@smithy/util-defaults-mode-browser" "^3.0.4" + "@smithy/util-defaults-mode-node" "^3.0.4" + "@smithy/util-endpoints" "^2.0.2" + "@smithy/util-middleware" "^3.0.1" + "@smithy/util-retry" "^3.0.1" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + +"@aws-sdk/client-sts@3.600.0": + version "3.600.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sts/-/client-sts-3.600.0.tgz#8a437f8cf626cf652f99628105576213dbba48b2" + integrity sha512-KQG97B7LvTtTiGmjlrG1LRAY8wUvCQzrmZVV5bjrJ/1oXAU7DITYwVbSJeX9NWg6hDuSk0VE3MFwIXS2SvfLIA== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/client-sso-oidc" "3.600.0" + "@aws-sdk/core" "3.598.0" + "@aws-sdk/credential-provider-node" "3.600.0" + "@aws-sdk/middleware-host-header" "3.598.0" + "@aws-sdk/middleware-logger" "3.598.0" + "@aws-sdk/middleware-recursion-detection" "3.598.0" + "@aws-sdk/middleware-user-agent" "3.598.0" + "@aws-sdk/region-config-resolver" "3.598.0" + "@aws-sdk/types" "3.598.0" + "@aws-sdk/util-endpoints" "3.598.0" + "@aws-sdk/util-user-agent-browser" "3.598.0" + "@aws-sdk/util-user-agent-node" "3.598.0" + "@smithy/config-resolver" "^3.0.2" + "@smithy/core" "^2.2.1" + "@smithy/fetch-http-handler" "^3.0.2" + "@smithy/hash-node" "^3.0.1" + "@smithy/invalid-dependency" "^3.0.1" + "@smithy/middleware-content-length" "^3.0.1" + "@smithy/middleware-endpoint" "^3.0.2" + "@smithy/middleware-retry" "^3.0.4" + "@smithy/middleware-serde" "^3.0.1" + "@smithy/middleware-stack" "^3.0.1" + "@smithy/node-config-provider" "^3.1.1" + "@smithy/node-http-handler" "^3.0.1" + "@smithy/protocol-http" "^4.0.1" + "@smithy/smithy-client" "^3.1.2" + "@smithy/types" "^3.1.0" + "@smithy/url-parser" "^3.0.1" + "@smithy/util-base64" "^3.0.0" + "@smithy/util-body-length-browser" "^3.0.0" + "@smithy/util-body-length-node" "^3.0.0" + "@smithy/util-defaults-mode-browser" "^3.0.4" + "@smithy/util-defaults-mode-node" "^3.0.4" + "@smithy/util-endpoints" "^2.0.2" + "@smithy/util-middleware" "^3.0.1" + "@smithy/util-retry" "^3.0.1" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + +"@aws-sdk/core@3.598.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/core/-/core-3.598.0.tgz#82a069d703be0cafe3ddeacb1de51981ee4faa25" + integrity sha512-HaSjt7puO5Cc7cOlrXFCW0rtA0BM9lvzjl56x0A20Pt+0wxXGeTOZZOkXQIepbrFkV2e/HYukuT9e99vXDm59g== + dependencies: + "@smithy/core" "^2.2.1" + "@smithy/protocol-http" "^4.0.1" + "@smithy/signature-v4" "^3.1.0" + "@smithy/smithy-client" "^3.1.2" + "@smithy/types" "^3.1.0" + fast-xml-parser "4.2.5" + tslib "^2.6.2" + +"@aws-sdk/core@^3.973.25": + version "3.973.25" + resolved "https://registry.yarnpkg.com/@aws-sdk/core/-/core-3.973.25.tgz#7fbfa463458c4b9e0d5d7b2f77d21e7a8a55fcf6" + integrity sha512-TNrx7eq6nKNOO62HWPqoBqPLXEkW6nLZQGwjL6lq1jZtigWYbK1NbCnT7mKDzbLMHZfuOECUt3n6CzxjUW9HWQ== + dependencies: + "@aws-sdk/types" "^3.973.6" + "@aws-sdk/xml-builder" "^3.972.16" + "@smithy/core" "^3.23.12" + "@smithy/node-config-provider" "^4.3.12" + "@smithy/property-provider" "^4.2.12" + "@smithy/protocol-http" "^5.3.12" + "@smithy/signature-v4" "^5.3.12" + "@smithy/smithy-client" "^4.12.7" + "@smithy/types" "^4.13.1" + "@smithy/util-base64" "^4.3.2" + "@smithy/util-middleware" "^4.2.12" + "@smithy/util-utf8" "^4.2.2" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-env@3.598.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.598.0.tgz#ea1f30cfc9948017dd0608518868d3f50074164f" + integrity sha512-vi1khgn7yXzLCcgSIzQrrtd2ilUM0dWodxj3PQ6BLfP0O+q1imO3hG1nq7DVyJtq7rFHs6+9N8G4mYvTkxby2w== + dependencies: + "@aws-sdk/types" "3.598.0" + "@smithy/property-provider" "^3.1.1" + "@smithy/types" "^3.1.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-env@^3.972.23": + version "3.972.23" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.972.23.tgz#567c0c227610707ef2c3a56bf79752cf696a0327" + integrity sha512-EamaclJcCEaPHp6wiVknNMM2RlsPMjAHSsYSFLNENBM8Wz92QPc6cOn3dif6vPDQt0Oo4IEghDy3NMDCzY/IvA== + dependencies: + "@aws-sdk/core" "^3.973.25" + "@aws-sdk/types" "^3.973.6" + "@smithy/property-provider" "^4.2.12" + "@smithy/types" "^4.13.1" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-http@3.598.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-http/-/credential-provider-http-3.598.0.tgz#58144440e698aef63b5cb459780325817c0acf10" + integrity sha512-N7cIafi4HVlQvEgvZSo1G4T9qb/JMLGMdBsDCT5XkeJrF0aptQWzTFH0jIdZcLrMYvzPcuEyO3yCBe6cy/ba0g== + dependencies: + "@aws-sdk/types" "3.598.0" + "@smithy/fetch-http-handler" "^3.0.2" + "@smithy/node-http-handler" "^3.0.1" + "@smithy/property-provider" "^3.1.1" + "@smithy/protocol-http" "^4.0.1" + "@smithy/smithy-client" "^3.1.2" + "@smithy/types" "^3.1.0" + "@smithy/util-stream" "^3.0.2" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-http@^3.972.25": + version "3.972.25" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-http/-/credential-provider-http-3.972.25.tgz#f5f08c6e3e68c5a0b750f6a7a10a005354af4d01" + integrity sha512-qPymamdPcLp6ugoVocG1y5r69ScNiRzb0hogX25/ij+Wz7c7WnsgjLTaz7+eB5BfRxeyUwuw5hgULMuwOGOpcw== + dependencies: + "@aws-sdk/core" "^3.973.25" + "@aws-sdk/types" "^3.973.6" + "@smithy/fetch-http-handler" "^5.3.15" + "@smithy/node-http-handler" "^4.5.0" + "@smithy/property-provider" "^4.2.12" + "@smithy/protocol-http" "^5.3.12" + "@smithy/smithy-client" "^4.12.7" + "@smithy/types" "^4.13.1" + "@smithy/util-stream" "^4.5.20" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-ini@3.598.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.598.0.tgz#fd0ba8ab5c3701e05567d1c6f7752cfd9f4ba111" + integrity sha512-/ppcIVUbRwDIwJDoYfp90X3+AuJo2mvE52Y1t2VSrvUovYn6N4v95/vXj6LS8CNDhz2jvEJYmu+0cTMHdhI6eA== + dependencies: + "@aws-sdk/credential-provider-env" "3.598.0" + "@aws-sdk/credential-provider-http" "3.598.0" + "@aws-sdk/credential-provider-process" "3.598.0" + "@aws-sdk/credential-provider-sso" "3.598.0" + "@aws-sdk/credential-provider-web-identity" "3.598.0" + "@aws-sdk/types" "3.598.0" + "@smithy/credential-provider-imds" "^3.1.1" + "@smithy/property-provider" "^3.1.1" + "@smithy/shared-ini-file-loader" "^3.1.1" + "@smithy/types" "^3.1.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-ini@^3.972.25": + version "3.972.25" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.972.25.tgz#b476a9fcf2563a20362604ac7d874716f82f49bd" + integrity sha512-G/v/PicYn4qs7xCv4vT6I4QKdvMyRvsgIFNBkUueCGlbLo7/PuKcNKgUozmLSsaYnE7jIl6UrfkP07EUubr48w== + dependencies: + "@aws-sdk/core" "^3.973.25" + "@aws-sdk/credential-provider-env" "^3.972.23" + "@aws-sdk/credential-provider-http" "^3.972.25" + "@aws-sdk/credential-provider-login" "^3.972.25" + "@aws-sdk/credential-provider-process" "^3.972.23" + "@aws-sdk/credential-provider-sso" "^3.972.25" + "@aws-sdk/credential-provider-web-identity" "^3.972.25" + "@aws-sdk/nested-clients" "^3.996.15" + "@aws-sdk/types" "^3.973.6" + "@smithy/credential-provider-imds" "^4.2.12" + "@smithy/property-provider" "^4.2.12" + "@smithy/shared-ini-file-loader" "^4.4.7" + "@smithy/types" "^4.13.1" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-login@^3.972.25": + version "3.972.25" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-login/-/credential-provider-login-3.972.25.tgz#6bb2ccf1d611ab698b14c1005fe62230ce7c6efe" + integrity sha512-bUdmyJeVua7SmD+g2a65x2/0YqsGn4K2k4GawI43js0odaNaIzpIhLtHehUnPnfLuyhPWbJR1NyuIO4iMVfM0w== + dependencies: + "@aws-sdk/core" "^3.973.25" + "@aws-sdk/nested-clients" "^3.996.15" + "@aws-sdk/types" "^3.973.6" + "@smithy/property-provider" "^4.2.12" + "@smithy/protocol-http" "^5.3.12" + "@smithy/shared-ini-file-loader" "^4.4.7" + "@smithy/types" "^4.13.1" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-node@3.600.0": + version "3.600.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.600.0.tgz#33b32364972bd7167d000cdded92b9398346a3ca" + integrity sha512-1pC7MPMYD45J7yFjA90SxpR0yaSvy+yZiq23aXhAPZLYgJBAxHLu0s0mDCk/piWGPh8+UGur5K0bVdx4B1D5hw== + dependencies: + "@aws-sdk/credential-provider-env" "3.598.0" + "@aws-sdk/credential-provider-http" "3.598.0" + "@aws-sdk/credential-provider-ini" "3.598.0" + "@aws-sdk/credential-provider-process" "3.598.0" + "@aws-sdk/credential-provider-sso" "3.598.0" + "@aws-sdk/credential-provider-web-identity" "3.598.0" + "@aws-sdk/types" "3.598.0" + "@smithy/credential-provider-imds" "^3.1.1" + "@smithy/property-provider" "^3.1.1" + "@smithy/shared-ini-file-loader" "^3.1.1" + "@smithy/types" "^3.1.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-node@^3.972.26": + version "3.972.26" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.972.26.tgz#52a8a099bf94b1214499f963d6a784951c55cf10" + integrity sha512-5XSK74rCXxCNj+UWv5bjq1EccYkiyW4XOHFU9NXnsCcQF8dJuHdua1qFg0m/LIwVOWklbKsrcnMtfxIXwgvwzQ== + dependencies: + "@aws-sdk/credential-provider-env" "^3.972.23" + "@aws-sdk/credential-provider-http" "^3.972.25" + "@aws-sdk/credential-provider-ini" "^3.972.25" + "@aws-sdk/credential-provider-process" "^3.972.23" + "@aws-sdk/credential-provider-sso" "^3.972.25" + "@aws-sdk/credential-provider-web-identity" "^3.972.25" + "@aws-sdk/types" "^3.973.6" + "@smithy/credential-provider-imds" "^4.2.12" + "@smithy/property-provider" "^4.2.12" + "@smithy/shared-ini-file-loader" "^4.4.7" + "@smithy/types" "^4.13.1" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-process@3.598.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.598.0.tgz#f48ff6f964cd6726499b207f45bfecda4be922ce" + integrity sha512-rM707XbLW8huMk722AgjVyxu2tMZee++fNA8TJVNgs1Ma02Wx6bBrfIvlyK0rCcIRb0WdQYP6fe3Xhiu4e8IBA== + dependencies: + "@aws-sdk/types" "3.598.0" + "@smithy/property-provider" "^3.1.1" + "@smithy/shared-ini-file-loader" "^3.1.1" + "@smithy/types" "^3.1.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-process@^3.972.23": + version "3.972.23" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.972.23.tgz#78436ebbc1b2970cf78834c61eea44a1c7b7bd62" + integrity sha512-IL/TFW59++b7MpHserjUblGrdP5UXy5Ekqqx1XQkERXBFJcZr74I7VaSrQT5dxdRMU16xGK4L0RQ5fQG1pMgnA== + dependencies: + "@aws-sdk/core" "^3.973.25" + "@aws-sdk/types" "^3.973.6" + "@smithy/property-provider" "^4.2.12" + "@smithy/shared-ini-file-loader" "^4.4.7" + "@smithy/types" "^4.13.1" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-sso@3.598.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.598.0.tgz#52781e2b60b1f61752829c44a5e0b9fedd0694d6" + integrity sha512-5InwUmrAuqQdOOgxTccRayMMkSmekdLk6s+az9tmikq0QFAHUCtofI+/fllMXSR9iL6JbGYi1940+EUmS4pHJA== + dependencies: + "@aws-sdk/client-sso" "3.598.0" + "@aws-sdk/token-providers" "3.598.0" + "@aws-sdk/types" "3.598.0" + "@smithy/property-provider" "^3.1.1" + "@smithy/shared-ini-file-loader" "^3.1.1" + "@smithy/types" "^3.1.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-sso@^3.972.25": + version "3.972.25" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.972.25.tgz#218773959891a7f36684bd67e5f71f54ab831399" + integrity sha512-r4OGAfHmlEa1QBInHWz+/dOD4tRljcjVNQe9wJ/AJNXEj1d2WdsRLppvRFImRV6FIs+bTpjtL0a23V5ELQpRPw== + dependencies: + "@aws-sdk/core" "^3.973.25" + "@aws-sdk/nested-clients" "^3.996.15" + "@aws-sdk/token-providers" "3.1018.0" + "@aws-sdk/types" "^3.973.6" + "@smithy/property-provider" "^4.2.12" + "@smithy/shared-ini-file-loader" "^4.4.7" + "@smithy/types" "^4.13.1" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-web-identity@3.598.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.598.0.tgz#d737e9c2b7c4460b8e31a55b4979bf4d88913900" + integrity sha512-GV5GdiMbz5Tz9JO4NJtRoFXjW0GPEujA0j+5J/B723rTN+REHthJu48HdBKouHGhdzkDWkkh1bu52V02Wprw8w== + dependencies: + "@aws-sdk/types" "3.598.0" + "@smithy/property-provider" "^3.1.1" + "@smithy/types" "^3.1.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-web-identity@^3.972.25": + version "3.972.25" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.972.25.tgz#10e00ccab3bf01bfbce41eb694de81e001db0410" + integrity sha512-uM1OtoJgj+yK3MlAmda8uR9WJJCdm5HB25JyCeFL5a5q1Fbafalf4uKidFO3/L0Pgd+Fsflkb4cM6jHIswi3QQ== + dependencies: + "@aws-sdk/core" "^3.973.25" + "@aws-sdk/nested-clients" "^3.996.15" + "@aws-sdk/types" "^3.973.6" + "@smithy/property-provider" "^4.2.12" + "@smithy/shared-ini-file-loader" "^4.4.7" + "@smithy/types" "^4.13.1" + tslib "^2.6.2" + +"@aws-sdk/middleware-bucket-endpoint@3.598.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.598.0.tgz#033b08921f9f284483a7337ed165743ee0dc598d" + integrity sha512-PM7BcFfGUSkmkT6+LU9TyJiB4S8yI7dfuKQDwK5ZR3P7MKaK4Uj4yyDiv0oe5xvkF6+O2+rShj+eh8YuWkOZ/Q== + dependencies: + "@aws-sdk/types" "3.598.0" + "@aws-sdk/util-arn-parser" "3.568.0" + "@smithy/node-config-provider" "^3.1.1" + "@smithy/protocol-http" "^4.0.1" + "@smithy/types" "^3.1.0" + "@smithy/util-config-provider" "^3.0.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-expect-continue@3.598.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.598.0.tgz#5b08b8cae70d1e7cc082d3627b31856f6ba20d17" + integrity sha512-ZuHW18kaeHR8TQyhEOYMr8VwiIh0bMvF7J1OTqXHxDteQIavJWA3CbfZ9sgS4XGtrBZDyHJhjZKeCfLhN2rq3w== + dependencies: + "@aws-sdk/types" "3.598.0" + "@smithy/protocol-http" "^4.0.1" + "@smithy/types" "^3.1.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-flexible-checksums@3.598.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.598.0.tgz#8e40734d5fb1b116816f885885f16db9b5e39032" + integrity sha512-xukAzds0GQXvMEY9G6qt+CzwVzTx8NyKKh04O2Q+nOch6QQ8Rs+2kTRy3Z4wQmXq2pK9hlOWb5nXA7HWpmz6Ng== + dependencies: + "@aws-crypto/crc32" "5.2.0" + "@aws-crypto/crc32c" "5.2.0" + "@aws-sdk/types" "3.598.0" + "@smithy/is-array-buffer" "^3.0.0" + "@smithy/protocol-http" "^4.0.1" + "@smithy/types" "^3.1.0" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-host-header@3.598.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.598.0.tgz#0a7c4d5a95657bea2d7c4e29b9a8b379952d09b1" + integrity sha512-WiaG059YBQwQraNejLIi0gMNkX7dfPZ8hDIhvMr5aVPRbaHH8AYF3iNSsXYCHvA2Cfa1O9haYXsuMF9flXnCmA== + dependencies: + "@aws-sdk/types" "3.598.0" + "@smithy/protocol-http" "^4.0.1" + "@smithy/types" "^3.1.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-host-header@^3.972.8": + version "3.972.8" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.972.8.tgz#72186e96500b49b38fb5482d6b7bf95e5b985281" + integrity sha512-wAr2REfKsqoKQ+OkNqvOShnBoh+nkPurDKW7uAeVSu6kUECnWlSJiPvnoqxGlfousEY/v9LfS9sNc46hjSYDIQ== + dependencies: + "@aws-sdk/types" "^3.973.6" + "@smithy/protocol-http" "^5.3.12" + "@smithy/types" "^4.13.1" + tslib "^2.6.2" + +"@aws-sdk/middleware-location-constraint@3.598.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.598.0.tgz#45564d5119468e3ac97949431c249e8b6e00ec09" + integrity sha512-8oybQxN3F1ISOMULk7JKJz5DuAm5hCUcxMW9noWShbxTJuStNvuHf/WLUzXrf8oSITyYzIHPtf8VPlKR7I3orQ== + dependencies: + "@aws-sdk/types" "3.598.0" + "@smithy/types" "^3.1.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-logger@3.598.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-logger/-/middleware-logger-3.598.0.tgz#0c0692d2f4f9007c915734ab319db377ca9a3b1b" + integrity sha512-bxBjf/VYiu3zfu8SYM2S9dQQc3tz5uBAOcPz/Bt8DyyK3GgOpjhschH/2XuUErsoUO1gDJqZSdGOmuHGZQn00Q== + dependencies: + "@aws-sdk/types" "3.598.0" + "@smithy/types" "^3.1.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-logger@^3.972.8": + version "3.972.8" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-logger/-/middleware-logger-3.972.8.tgz#7fee4223afcb6f7828dbdf4ea745ce15027cf384" + integrity sha512-CWl5UCM57WUFaFi5kB7IBY1UmOeLvNZAZ2/OZ5l20ldiJ3TiIz1pC65gYj8X0BCPWkeR1E32mpsCk1L1I4n+lA== + dependencies: + "@aws-sdk/types" "^3.973.6" + "@smithy/types" "^4.13.1" + tslib "^2.6.2" + +"@aws-sdk/middleware-recursion-detection@3.598.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.598.0.tgz#94015d41f8174bd41298fd13f8fb0a8c4576d7c8" + integrity sha512-vjT9BeFY9FeN0f8hm2l6F53tI0N5bUq6RcDkQXKNabXBnQxKptJRad6oP2X5y3FoVfBLOuDkQgiC2940GIPxtQ== + dependencies: + "@aws-sdk/types" "3.598.0" + "@smithy/protocol-http" "^4.0.1" + "@smithy/types" "^3.1.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-recursion-detection@^3.972.9": + version "3.972.9" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.972.9.tgz#53a2cc0cf827863163b2351209212f642015c2e2" + integrity sha512-/Wt5+CT8dpTFQxEJ9iGy/UGrXr7p2wlIOEHvIr/YcHYByzoLjrqkYqXdJjd9UIgWjv7eqV2HnFJen93UTuwfTQ== + dependencies: + "@aws-sdk/types" "^3.973.6" + "@aws/lambda-invoke-store" "^0.2.2" + "@smithy/protocol-http" "^5.3.12" + "@smithy/types" "^4.13.1" + tslib "^2.6.2" + +"@aws-sdk/middleware-sdk-s3@3.598.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.598.0.tgz#308604f8a38959ad65ec5674c643c7032d678f43" + integrity sha512-5AGtLAh9wyK6ANPYfaKTqJY1IFJyePIxsEbxa7zS6REheAqyVmgJFaGu3oQ5XlxfGr5Uq59tFTRkyx26G1HkHA== + dependencies: + "@aws-sdk/types" "3.598.0" + "@aws-sdk/util-arn-parser" "3.568.0" + "@smithy/node-config-provider" "^3.1.1" + "@smithy/protocol-http" "^4.0.1" + "@smithy/signature-v4" "^3.1.0" + "@smithy/smithy-client" "^3.1.2" + "@smithy/types" "^3.1.0" + "@smithy/util-config-provider" "^3.0.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-signing@3.598.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-signing/-/middleware-signing-3.598.0.tgz#b90eef6a9fe3f76777c9cd4890dcae8e1febd249" + integrity sha512-XKb05DYx/aBPqz6iCapsCbIl8aD8EihTuPCs51p75QsVfbQoVr4TlFfIl5AooMSITzojdAQqxt021YtvxjtxIQ== + dependencies: + "@aws-sdk/types" "3.598.0" + "@smithy/property-provider" "^3.1.1" + "@smithy/protocol-http" "^4.0.1" + "@smithy/signature-v4" "^3.1.0" + "@smithy/types" "^3.1.0" + "@smithy/util-middleware" "^3.0.1" + tslib "^2.6.2" + +"@aws-sdk/middleware-ssec@3.598.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-ssec/-/middleware-ssec-3.598.0.tgz#d6a3c64ce77bd7379653b46b58ded32a7b0fe6f4" + integrity sha512-f0p2xP8IC1uJ5e/tND1l81QxRtRFywEdnbtKCE0H6RSn4UIt2W3Dohe1qQDbnh27okF0PkNW6BJGdSAz3p7qbA== + dependencies: + "@aws-sdk/types" "3.598.0" + "@smithy/types" "^3.1.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-user-agent@3.598.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.598.0.tgz#6fa26849d256434ca4884c42c1c4755aa2f1556e" + integrity sha512-4tjESlHG5B5MdjUaLK7tQs/miUtHbb6deauQx8ryqSBYOhfHVgb1ZnzvQR0bTrhpqUg0WlybSkDaZAICf9xctg== + dependencies: + "@aws-sdk/types" "3.598.0" + "@aws-sdk/util-endpoints" "3.598.0" + "@smithy/protocol-http" "^4.0.1" + "@smithy/types" "^3.1.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-user-agent@^3.972.26": + version "3.972.26" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.972.26.tgz#b37d7913e527a655e6aa6f22dfc3ce6abb04d010" + integrity sha512-AilFIh4rI/2hKyyGN6XrB0yN96W2o7e7wyrPWCM6QjZM1mcC/pVkW3IWWRvuBWMpVP8Fg+rMpbzeLQ6dTM4gig== + dependencies: + "@aws-sdk/core" "^3.973.25" + "@aws-sdk/types" "^3.973.6" + "@aws-sdk/util-endpoints" "^3.996.5" + "@smithy/core" "^3.23.12" + "@smithy/protocol-http" "^5.3.12" + "@smithy/types" "^4.13.1" + "@smithy/util-retry" "^4.2.12" + tslib "^2.6.2" + +"@aws-sdk/nested-clients@^3.996.15": + version "3.996.15" + resolved "https://registry.yarnpkg.com/@aws-sdk/nested-clients/-/nested-clients-3.996.15.tgz#794f5a88c985541b50a9c314c83c6048910e2390" + integrity sha512-k6WAVNkub5DrU46iPQvH1m0xc1n+0dX79+i287tYJzf5g1yU2rX3uf4xNeL5JvK1NtYgfwMnsxHqhOXFBn367A== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/core" "^3.973.25" + "@aws-sdk/middleware-host-header" "^3.972.8" + "@aws-sdk/middleware-logger" "^3.972.8" + "@aws-sdk/middleware-recursion-detection" "^3.972.9" + "@aws-sdk/middleware-user-agent" "^3.972.26" + "@aws-sdk/region-config-resolver" "^3.972.10" + "@aws-sdk/types" "^3.973.6" + "@aws-sdk/util-endpoints" "^3.996.5" + "@aws-sdk/util-user-agent-browser" "^3.972.8" + "@aws-sdk/util-user-agent-node" "^3.973.12" + "@smithy/config-resolver" "^4.4.13" + "@smithy/core" "^3.23.12" + "@smithy/fetch-http-handler" "^5.3.15" + "@smithy/hash-node" "^4.2.12" + "@smithy/invalid-dependency" "^4.2.12" + "@smithy/middleware-content-length" "^4.2.12" + "@smithy/middleware-endpoint" "^4.4.27" + "@smithy/middleware-retry" "^4.4.44" + "@smithy/middleware-serde" "^4.2.15" + "@smithy/middleware-stack" "^4.2.12" + "@smithy/node-config-provider" "^4.3.12" + "@smithy/node-http-handler" "^4.5.0" + "@smithy/protocol-http" "^5.3.12" + "@smithy/smithy-client" "^4.12.7" + "@smithy/types" "^4.13.1" + "@smithy/url-parser" "^4.2.12" + "@smithy/util-base64" "^4.3.2" + "@smithy/util-body-length-browser" "^4.2.2" + "@smithy/util-body-length-node" "^4.2.3" + "@smithy/util-defaults-mode-browser" "^4.3.43" + "@smithy/util-defaults-mode-node" "^4.2.47" + "@smithy/util-endpoints" "^3.3.3" + "@smithy/util-middleware" "^4.2.12" + "@smithy/util-retry" "^4.2.12" + "@smithy/util-utf8" "^4.2.2" + tslib "^2.6.2" + +"@aws-sdk/region-config-resolver@3.598.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/region-config-resolver/-/region-config-resolver-3.598.0.tgz#fd8fd6b7bc11b5f81def4db0db9e835d40a8f86e" + integrity sha512-oYXhmTokSav4ytmWleCr3rs/1nyvZW/S0tdi6X7u+dLNL5Jee+uMxWGzgOrWK6wrQOzucLVjS4E/wA11Kv2GTw== + dependencies: + "@aws-sdk/types" "3.598.0" + "@smithy/node-config-provider" "^3.1.1" + "@smithy/types" "^3.1.0" + "@smithy/util-config-provider" "^3.0.0" + "@smithy/util-middleware" "^3.0.1" + tslib "^2.6.2" + +"@aws-sdk/region-config-resolver@^3.972.10": + version "3.972.10" + resolved "https://registry.yarnpkg.com/@aws-sdk/region-config-resolver/-/region-config-resolver-3.972.10.tgz#cbabd969a2d4fedb652273403e64d98b79d0144c" + integrity sha512-1dq9ToC6e070QvnVhhbAs3bb5r6cQ10gTVc6cyRV5uvQe7P138TV2uG2i6+Yok4bAkVAcx5AqkTEBUvWEtBlsQ== + dependencies: + "@aws-sdk/types" "^3.973.6" + "@smithy/config-resolver" "^4.4.13" + "@smithy/node-config-provider" "^4.3.12" + "@smithy/types" "^4.13.1" + tslib "^2.6.2" + +"@aws-sdk/signature-v4-multi-region@3.598.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.598.0.tgz#1716022e31dcbc5821aeca85204718f523a1ddbf" + integrity sha512-1r/EyTrO1gSa1FirnR8V7mabr7gk+l+HkyTI0fcTSr8ucB7gmYyW6WjkY8JCz13VYHFK62usCEDS7yoJoJOzTA== + dependencies: + "@aws-sdk/middleware-sdk-s3" "3.598.0" + "@aws-sdk/types" "3.598.0" + "@smithy/protocol-http" "^4.0.1" + "@smithy/signature-v4" "^3.1.0" + "@smithy/types" "^3.1.0" + tslib "^2.6.2" + +"@aws-sdk/token-providers@3.1018.0": + version "3.1018.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.1018.0.tgz#4754f882abc9ec7426e45918ce34c22fa86e2128" + integrity sha512-97OPNJHy37wmGOX44xAcu6E9oSTiqK9uPcy/fWpmN5uB3JuEp1f6x60Xot/jp+FxwhQWIFUsVJFnm3QKqt7T6Q== + dependencies: + "@aws-sdk/core" "^3.973.25" + "@aws-sdk/nested-clients" "^3.996.15" + "@aws-sdk/types" "^3.973.6" + "@smithy/property-provider" "^4.2.12" + "@smithy/shared-ini-file-loader" "^4.4.7" + "@smithy/types" "^4.13.1" + tslib "^2.6.2" + +"@aws-sdk/token-providers@3.598.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.598.0.tgz#49a94c14ce2e392bb0e84b69986c33ecfad5b804" + integrity sha512-TKY1EVdHVBnZqpyxyTHdpZpa1tUpb6nxVeRNn1zWG8QB5MvH4ALLd/jR+gtmWDNQbIG4cVuBOZFVL8hIYicKTA== + dependencies: + "@aws-sdk/types" "3.598.0" + "@smithy/property-provider" "^3.1.1" + "@smithy/shared-ini-file-loader" "^3.1.1" + "@smithy/types" "^3.1.0" + tslib "^2.6.2" + +"@aws-sdk/types@3.598.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.598.0.tgz#b840d2446dee19a2a4731e6166f2327915d846db" + integrity sha512-742uRl6z7u0LFmZwDrFP6r1wlZcgVPw+/TilluDJmCAR8BgRw3IR+743kUXKBGd8QZDRW2n6v/PYsi/AWCDDMQ== + dependencies: + "@smithy/types" "^3.1.0" + tslib "^2.6.2" + +"@aws-sdk/types@^3.1.0", "@aws-sdk/types@^3.222.0", "@aws-sdk/types@^3.973.6": + version "3.973.6" + resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.973.6.tgz#1964a7c01b5cb18befa445998ad1d02f86c5432d" + integrity sha512-Atfcy4E++beKtwJHiDln2Nby8W/mam64opFPTiHEqgsthqeydFS1pY+OUlN1ouNOmf8ArPU/6cDS65anOP3KQw== + dependencies: + "@smithy/types" "^4.13.1" + tslib "^2.6.2" + +"@aws-sdk/util-arn-parser@3.568.0": + version "3.568.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-arn-parser/-/util-arn-parser-3.568.0.tgz#6a19a8c6bbaa520b6be1c278b2b8c17875b91527" + integrity sha512-XUKJWWo+KOB7fbnPP0+g/o5Ulku/X53t7i/h+sPHr5xxYTJJ9CYnbToo95mzxe7xWvkLrsNtJ8L+MnNn9INs2w== + dependencies: + tslib "^2.6.2" + +"@aws-sdk/util-endpoints@3.598.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-endpoints/-/util-endpoints-3.598.0.tgz#7f78d68524babac7fdacf381590470353d45b959" + integrity sha512-Qo9UoiVVZxcOEdiOMZg3xb1mzkTxrhd4qSlg5QQrfWPJVx/QOg+Iy0NtGxPtHtVZNHZxohYwDwV/tfsnDSE2gQ== + dependencies: + "@aws-sdk/types" "3.598.0" + "@smithy/types" "^3.1.0" + "@smithy/util-endpoints" "^2.0.2" + tslib "^2.6.2" + +"@aws-sdk/util-endpoints@^3.996.5": + version "3.996.5" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-endpoints/-/util-endpoints-3.996.5.tgz#6b12e80869ae6e84075bc24c2a4e6273ea87dfc2" + integrity sha512-Uh93L5sXFNbyR5sEPMzUU8tJ++Ku97EY4udmC01nB8Zu+xfBPwpIwJ6F7snqQeq8h2pf+8SGN5/NoytfKgYPIw== + dependencies: + "@aws-sdk/types" "^3.973.6" + "@smithy/types" "^4.13.1" + "@smithy/url-parser" "^4.2.12" + "@smithy/util-endpoints" "^3.3.3" + tslib "^2.6.2" + +"@aws-sdk/util-locate-window@^3.0.0": + version "3.965.5" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-locate-window/-/util-locate-window-3.965.5.tgz#e30e6ff2aff6436209ed42c765dec2d2a48df7c0" + integrity sha512-WhlJNNINQB+9qtLtZJcpQdgZw3SCDCpXdUJP7cToGwHbCWCnRckGlc6Bx/OhWwIYFNAn+FIydY8SZ0QmVu3xTQ== + dependencies: + tslib "^2.6.2" + +"@aws-sdk/util-user-agent-browser@3.598.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.598.0.tgz#5039d0335f8a06af5be73c960df85009dda59090" + integrity sha512-36Sxo6F+ykElaL1mWzWjlg+1epMpSe8obwhCN1yGE7Js9ywy5U6k6l+A3q3YM9YRbm740sNxncbwLklMvuhTKw== + dependencies: + "@aws-sdk/types" "3.598.0" + "@smithy/types" "^3.1.0" + bowser "^2.11.0" + tslib "^2.6.2" + +"@aws-sdk/util-user-agent-browser@^3.972.8": + version "3.972.8" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.972.8.tgz#1044845c97c898cd68fc3f9c773494a6a98cdf80" + integrity sha512-B3KGXJviV2u6Cdw2SDY2aDhoJkVfY/Q/Trwk2CMSkikE1Oi6gRzxhvhIfiRpHfmIsAhV4EA54TVEX8K6CbHbkA== + dependencies: + "@aws-sdk/types" "^3.973.6" + "@smithy/types" "^4.13.1" + bowser "^2.11.0" + tslib "^2.6.2" + +"@aws-sdk/util-user-agent-node@3.598.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.598.0.tgz#f9bdf1b7cc3a40787c379f7c2ff028de2612c177" + integrity sha512-oyWGcOlfTdzkC6SVplyr0AGh54IMrDxbhg5RxJ5P+V4BKfcDoDcZV9xenUk9NsOi9MuUjxMumb9UJGkDhM1m0A== + dependencies: + "@aws-sdk/types" "3.598.0" + "@smithy/node-config-provider" "^3.1.1" + "@smithy/types" "^3.1.0" + tslib "^2.6.2" + +"@aws-sdk/util-user-agent-node@^3.973.12": + version "3.973.12" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.973.12.tgz#63442fd7d6d2bcec825755874522c3c2b1535d17" + integrity sha512-8phW0TS8ntENJgDcFewYT/Q8dOmarpvSxEjATu2GUBAutiHr++oEGCiBUwxslCMNvwW2cAPZNT53S/ym8zm/gg== + dependencies: + "@aws-sdk/middleware-user-agent" "^3.972.26" + "@aws-sdk/types" "^3.973.6" + "@smithy/node-config-provider" "^4.3.12" + "@smithy/types" "^4.13.1" + "@smithy/util-config-provider" "^4.2.2" + tslib "^2.6.2" + +"@aws-sdk/util-utf8-browser@^3.0.0": + version "3.259.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz#3275a6f5eb334f96ca76635b961d3c50259fd9ff" + integrity sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw== + dependencies: + tslib "^2.3.1" + +"@aws-sdk/xml-builder@3.598.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/xml-builder/-/xml-builder-3.598.0.tgz#ee591c5d80a34d9c5bc14326f1a62e9a0649c587" + integrity sha512-ZIa2RK7CHFTZ4gwK77WRtsZ6vF7xwRXxJ8KQIxK2duhoTVcn0xYxpFLdW9WZZZvdP9GIF3Loqvf8DRdeU5Jc7Q== + dependencies: + "@smithy/types" "^3.1.0" + tslib "^2.6.2" + +"@aws-sdk/xml-builder@^3.972.16": + version "3.972.16" + resolved "https://registry.yarnpkg.com/@aws-sdk/xml-builder/-/xml-builder-3.972.16.tgz#ea22fe022cf12d12b07f6faf75c4fa214dea00bc" + integrity sha512-iu2pyvaqmeatIJLURLqx9D+4jKAdTH20ntzB6BFwjyN7V960r4jK32mx0Zf7YbtOYAbmbtQfDNuL60ONinyw7A== + dependencies: + "@smithy/types" "^4.13.1" + fast-xml-parser "5.5.8" + tslib "^2.6.2" + +"@aws/lambda-invoke-store@^0.2.2": + version "0.2.4" + resolved "https://registry.yarnpkg.com/@aws/lambda-invoke-store/-/lambda-invoke-store-0.2.4.tgz#802f6a50f6b6589063ef63ba8acdee86fcb9f395" + integrity sha512-iY8yvjE0y651BixKNPgmv1WrQc+GZ142sb0z4gYnChDDY2YqI4P/jsSopBWrKfAt7LOJAkOXt7rC/hms+WclQQ== + +"@babel/code-frame@^7.0.0": + version "7.29.0" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.29.0.tgz#7cd7a59f15b3cc0dcd803038f7792712a7d0b15c" + integrity sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw== + dependencies: + "@babel/helper-validator-identifier" "^7.28.5" + js-tokens "^4.0.0" + picocolors "^1.1.1" + +"@babel/helper-validator-identifier@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz#010b6938fab7cb7df74aa2bbc06aa503b8fe5fb4" + integrity sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q== + +"@bytecodealliance/preview2-shim@0.17.0": + version "0.17.0" + resolved "https://registry.yarnpkg.com/@bytecodealliance/preview2-shim/-/preview2-shim-0.17.0.tgz#9bc1cadbb9f86c446c6f579d3431c08a06a6672e" + integrity sha512-JorcEwe4ud0x5BS/Ar2aQWOQoFzjq/7jcnxYXCvSMh0oRm0dQXzOA+hqLDBnOMks1LLBA7dmiLLsEBl09Yd6iQ== + +"@chainlink/contracts-ccip@1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@chainlink/contracts-ccip/-/contracts-ccip-1.2.1.tgz#534e7fb13d066cc4e1902e6d7bca189c24092b36" + integrity sha512-8lVod5Gclx25ZSLqX40zzhMwN7unnvj9AMKOE/LYIP5DjyiTDs/3BeXTw6GakeIkQF5v3FILnMIz8emF5FdSpQ== + dependencies: + "@eth-optimism/contracts" "^0.5.21" + "@openzeppelin/contracts" "~4.3.3" + "@openzeppelin/contracts-upgradeable-4.7.3" "npm:@openzeppelin/contracts-upgradeable@v4.7.3" + "@openzeppelin/contracts-v0.7" "npm:@openzeppelin/contracts@v3.4.2" + +"@chainsafe/as-sha256@1.2.0", "@chainsafe/as-sha256@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@chainsafe/as-sha256/-/as-sha256-1.2.0.tgz#5764ac9959e147fe0908dd0f66c0cce525a633b3" + integrity sha512-H2BNHQ5C3RS+H0ZvOdovK6GjFAyq5T6LClad8ivwj9Oaiy28uvdsGVS7gNJKuZmg0FGHAI+n7F0Qju6U0QkKDA== + +"@chainsafe/bls-hd-key@^0.3.0": + version "0.3.0" + resolved "https://registry.yarnpkg.com/@chainsafe/bls-hd-key/-/bls-hd-key-0.3.0.tgz#2de2649d5daa76f7460fc23caacf4ed3ebd2c02a" + integrity sha512-LsYYnfBEEmqGFPDm8hQN3Kc+v9wPFnhn+CToD403KEynUiUSHKLAf5B6UCY5eooShDOcaGCUgAUhIw1CmpEf3Q== + dependencies: + "@noble/hashes" "^1.0.0" + +"@chainsafe/bls-keygen@^0.4.0": + version "0.4.0" + resolved "https://registry.yarnpkg.com/@chainsafe/bls-keygen/-/bls-keygen-0.4.0.tgz#782c6555cfb05b9efa6f144d782799e8695ca1b0" + integrity sha512-wqtuj4G/sWpIugJW1mb/nSTwcTuZKqB3DS3ANUIOn7pva8EB6LfxgIL34o4qk3lti/8Mdxqtqc2n4xRszrNdzA== + dependencies: + "@chainsafe/bls-hd-key" "^0.3.0" + "@noble/hashes" "^1.0.0" + "@scure/bip39" "^1.0.0" + +"@chainsafe/bls@^8.2.0": + version "8.2.0" + resolved "https://registry.yarnpkg.com/@chainsafe/bls/-/bls-8.2.0.tgz#6f72c39e5f255435ba1a192b09eef89416bb9c82" + integrity sha512-onCMG4K5GRWTHPf5T9DrOLsd5VoiOoL0NEpRoAigXVPqr+Gi2GyOncbvc9Vf4RjhmZGgtIJKKB4WJQbRV9Pddw== + dependencies: + "@chainsafe/bls-keygen" "^0.4.0" + bls-eth-wasm "^1.1.1" + +"@chainsafe/blst-darwin-arm64@2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@chainsafe/blst-darwin-arm64/-/blst-darwin-arm64-2.2.0.tgz#0ab9083805c308106c2f2107df1e6376d9190b1b" + integrity sha512-BOOy2KHbV028cioPWaAMqHdLRKd6/3XyEmUEcQC2E/SpyYLdNcaKiBUYIU4pT9CrWBbJJxX68UI+3vZVg0M8/w== + +"@chainsafe/blst-darwin-x64@2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@chainsafe/blst-darwin-x64/-/blst-darwin-x64-2.2.0.tgz#231943a7736f3f89d35e03fec890b7809c98ff1a" + integrity sha512-jG64cwIdPT7u/haRrW26tWCpfMfHBQCfGY169mFQifCwO4VEwvaiVBPOh5olFis6LjpcmD+O0jpM8GqrnsmUHQ== + +"@chainsafe/blst-linux-arm64-gnu@2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@chainsafe/blst-linux-arm64-gnu/-/blst-linux-arm64-gnu-2.2.0.tgz#721aeec63e8e02aba3358a0084c095403a5438fa" + integrity sha512-L8xV2uuLn8we76vdzfryS9ePdheuZrmY6yArGUFaF1Uzcwml6V1/VvyPl9/uooo/YfVRIrvF/D+lQfI2GFAnhw== + +"@chainsafe/blst-linux-arm64-musl@2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@chainsafe/blst-linux-arm64-musl/-/blst-linux-arm64-musl-2.2.0.tgz#dbbabaab93156548c86e2b2b3a1d27160b715000" + integrity sha512-0Vn0luxLYVgC3lvWT1MapFHSAoz99PldqjhilXTGv0AcAk/X5LXPH2RC9Dp2KJGqthyUkpbk1j47jUBfBI+BIg== + +"@chainsafe/blst-linux-x64-gnu@2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@chainsafe/blst-linux-x64-gnu/-/blst-linux-x64-gnu-2.2.0.tgz#9f8ab825621b75227c75bb75d369d3d42e91fa74" + integrity sha512-gEY/z2SDBA7kXtFEI9VNhWTJAIjx16jdeAyCaS2k4ACGurWZaWk+Ee4KniTsr4WieSqeuNTUr7Pdja0Sr4EKNQ== + +"@chainsafe/blst-linux-x64-musl@2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@chainsafe/blst-linux-x64-musl/-/blst-linux-x64-musl-2.2.0.tgz#11e99ac12b0f83cad68da56f4e9cfc4aa403a2e6" + integrity sha512-58GKtiUmtVSuerRzPEcMNQZpICPboBKFnL7+1Wo+PSuajkvbae7tEFrFTtWeMoKIPgOEsPMnk96LF+0yNgavUg== + +"@chainsafe/blst-win32-x64-msvc@2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@chainsafe/blst-win32-x64-msvc/-/blst-win32-x64-msvc-2.2.0.tgz#f32b164721ff5edc279f6d6cd0fffde0ad2fe16c" + integrity sha512-UFrZshl4dfX5Uh2zeKXAZtrkQ+otczHMON2tsrapQNICWmfHZrzE6pKuBL+9QeGAbgflwpbz7+D5nQRDpiuHxQ== + +"@chainsafe/blst@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@chainsafe/blst/-/blst-2.2.0.tgz#ced8b861b94934e3c1c53e173c3e1205d775d93b" + integrity sha512-VBaQoNE2a9d9+skAjQKv3Suk0yGKqp3mZM0YWYJNPj/Ae/f6lAyeVSgKqo2LrsNQBzD/LqrJLKUY8rJT3vDKLA== + optionalDependencies: + "@chainsafe/blst-darwin-arm64" "2.2.0" + "@chainsafe/blst-darwin-x64" "2.2.0" + "@chainsafe/blst-linux-arm64-gnu" "2.2.0" + "@chainsafe/blst-linux-arm64-musl" "2.2.0" + "@chainsafe/blst-linux-x64-gnu" "2.2.0" + "@chainsafe/blst-linux-x64-musl" "2.2.0" + "@chainsafe/blst-win32-x64-msvc" "2.2.0" + +"@chainsafe/hashtree-darwin-arm64@1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@chainsafe/hashtree-darwin-arm64/-/hashtree-darwin-arm64-1.0.2.tgz#fcf09de55e8b666fa86d2136d285a4ea55f066c0" + integrity sha512-yIIwn9SUR5ZTl2vN1QqRtDFL/w2xYW4o68A1k8UexMbieGAnE7Ab7NvtCZRHRe8x0eONO46F/bWn5bxxyYlFXw== + +"@chainsafe/hashtree-linux-arm64-gnu@1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@chainsafe/hashtree-linux-arm64-gnu/-/hashtree-linux-arm64-gnu-1.0.2.tgz#0af39b6f25ed77a2185151484c67636c3bfd7138" + integrity sha512-MDz1xBRTRHw2eezGqx1Ff8NoeUUQP3bhbeeVG8ZZTkFYqvRc8O65OQOTtgO+fFGvqnDjVBSRHmiTXU5eNeH/mQ== + +"@chainsafe/hashtree-linux-arm64-musl@1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@chainsafe/hashtree-linux-arm64-musl/-/hashtree-linux-arm64-musl-1.0.2.tgz#40911e7427d88a1febca23f96f83f009977dbbf9" + integrity sha512-BUy+/9brJwAFAtraro4y/1F+aP/8j/7HrnYdde8PTu7jHWAClI9xZygadaJbk0GoWxyCOUAJKUs8KHVnYxJDeg== + +"@chainsafe/hashtree-linux-x64-gnu@1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@chainsafe/hashtree-linux-x64-gnu/-/hashtree-linux-x64-gnu-1.0.2.tgz#98d30f22200c0a4afd496b1466c51f9a42aa9e4f" + integrity sha512-bFy9ffFG77SivmeOjOlZmOCrxzQ/WqUESy0I+dW6IX7wquTXHldJKWvohs9+FEn3TSXgeigFmEATz5tfxBfIZw== + +"@chainsafe/hashtree-linux-x64-musl@1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@chainsafe/hashtree-linux-x64-musl/-/hashtree-linux-x64-musl-1.0.2.tgz#b7aa71150dd6c4687a0f529a5cee052e36a99fb3" + integrity sha512-mbJB3C0RjwpqOMPZIUQm3IBH6d3sYiKDXMU6ORt5nuk7Ix2I80xxffAciDO1d7kKNnW6HStOj5s/rGhIDxK1ug== + +"@chainsafe/hashtree-win32-x64-msvc@1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@chainsafe/hashtree-win32-x64-msvc/-/hashtree-win32-x64-msvc-1.0.2.tgz#1b9fbb3f6a4b51f36b9efd42db9ab0308580b518" + integrity sha512-wXFhGqaydgadefQbjSTGqZY1R1MBhnJj+gbJhULNRUXco5pHsXfOk3QhCDAefp1PPW+wQwfT4clEnQCqJIf58w== + +"@chainsafe/hashtree@1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@chainsafe/hashtree/-/hashtree-1.0.2.tgz#2a16b49e491bef9e5760cd1010363cb3d1351fb8" + integrity sha512-OaWjsZ6S/GaT2RvaqdpsF5Mux8qQOE2KbitX2yHmQJZNUZkdh7C3N4PA5LsvewqX+z8Nkv8mr1uSe0LSrHGiQw== + optionalDependencies: + "@chainsafe/hashtree-darwin-arm64" "1.0.2" + "@chainsafe/hashtree-linux-arm64-gnu" "1.0.2" + "@chainsafe/hashtree-linux-arm64-musl" "1.0.2" + "@chainsafe/hashtree-linux-x64-gnu" "1.0.2" + "@chainsafe/hashtree-linux-x64-musl" "1.0.2" + "@chainsafe/hashtree-win32-x64-msvc" "1.0.2" + +"@chainsafe/persistent-merkle-tree@1.2.1", "@chainsafe/persistent-merkle-tree@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@chainsafe/persistent-merkle-tree/-/persistent-merkle-tree-1.2.1.tgz#80f052e4a04c63304d5198dbf2fa49e104a0365a" + integrity sha512-AOSEVLfaqwb9eTCKuY1ri0DrRxVQ3Rh+we1VBj1GahUGfEdE8OC3Vkbca7Up6RoI9Ip9FLnI31Y7AjKH9ZqAGA== + dependencies: + "@chainsafe/as-sha256" "1.2.0" + "@chainsafe/hashtree" "1.0.2" + "@noble/hashes" "^1.3.0" + +"@chainsafe/persistent-ts@^1.0.0": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@chainsafe/persistent-ts/-/persistent-ts-1.0.1.tgz#4ab51ce5e72bfd4ddb5bc976c118bb7cbc88cf9c" + integrity sha512-VkPaBD3GxS5vpLkZWfStDL39jG1IPLhy5c3d3FtgwyfGvEthnQJeyUMinGFRoAfAW0yVkf7ggrEzyvhXFLIU0A== + +"@chainsafe/pubkey-index-map-darwin-arm64@3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@chainsafe/pubkey-index-map-darwin-arm64/-/pubkey-index-map-darwin-arm64-3.0.0.tgz#1cb3c19aad0462e9960c2f67f31acccf87bf3526" + integrity sha512-gM/wwA6bpfeZm80aSoH2c3ddbPeZho73TUUprUFlHQNLldGzZ293yFQgj2Ontp1fMf9AI0w+F0uEN2qC6v7g9A== + +"@chainsafe/pubkey-index-map-darwin-x64@3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@chainsafe/pubkey-index-map-darwin-x64/-/pubkey-index-map-darwin-x64-3.0.0.tgz#675e6bdad856c61bc6cb4641d61ac764ed5697e3" + integrity sha512-zy4dH//kLXfQHHFVp1Pcz4HQgSh/uUKWt219hlrb5Fi+xVESVmTnLPjHmL1KtGs/R5W0XcuBrTuBHiq+zMU7lQ== + +"@chainsafe/pubkey-index-map-linux-arm64-gnu@3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@chainsafe/pubkey-index-map-linux-arm64-gnu/-/pubkey-index-map-linux-arm64-gnu-3.0.0.tgz#96235d3c286c75d2ff4d74bf3e46c7f2874adb74" + integrity sha512-M/HODHZcKDuoRFlx+Ka4NgyFSQvOECyIg/2pCQcgfCozR7rRx7VuOJ0ZSgU+BEhuY+fpaRSTesOlDIIY0ornWQ== + +"@chainsafe/pubkey-index-map-linux-arm64-musl@3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@chainsafe/pubkey-index-map-linux-arm64-musl/-/pubkey-index-map-linux-arm64-musl-3.0.0.tgz#9105e9ef771b80e79ff902869f48a8c886ad3246" + integrity sha512-Sdm15mFsKiz5ndFfhcTjEl4i8TK0+gM1SEmYzmGUgnflrcvPc+US3qsMKyCqorDkHqYAYFFutQXz9QxjOMkIwg== + +"@chainsafe/pubkey-index-map-linux-x64-gnu@3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@chainsafe/pubkey-index-map-linux-x64-gnu/-/pubkey-index-map-linux-x64-gnu-3.0.0.tgz#493f3b0287944543620e372f57de4e74761506f6" + integrity sha512-+4h995h2xEBmYdr9Tw05uYvFmMSELyaJagJ2KsFohkRjqiUyB76l8zR8aUKx7lwLXXHxWjHMYyWKHF3tTKRFNQ== + +"@chainsafe/pubkey-index-map-linux-x64-musl@3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@chainsafe/pubkey-index-map-linux-x64-musl/-/pubkey-index-map-linux-x64-musl-3.0.0.tgz#e9cd7e69124b0e73167ed0c8d6bb1c578b7bc676" + integrity sha512-qwFuygeutP4o9J/8ylD+ZrqkqeyytMl9E38ucIWpbiPYXDiJxpRN148v4Ah+NWwz6PqCROVyTxEyZklzy0AxUA== + +"@chainsafe/pubkey-index-map-win32-arm64-msvc@3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@chainsafe/pubkey-index-map-win32-arm64-msvc/-/pubkey-index-map-win32-arm64-msvc-3.0.0.tgz#7b45ee24055faf8e6b01480386f952d0961c11ca" + integrity sha512-2t01rQAdiM5KPM7XLsZDtMhWAXz/YKY20H1N4jvaWURjaLm+S0j9X/Mt0xOjJ5SC++1g64LXjV+wnXO5j1S8Nw== + +"@chainsafe/pubkey-index-map-win32-x64-msvc@3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@chainsafe/pubkey-index-map-win32-x64-msvc/-/pubkey-index-map-win32-x64-msvc-3.0.0.tgz#8a7d2821a43addf615b3485d6925e7558e42534b" + integrity sha512-QemArQbgsLJ4eaM9S0Kdr3ucJUpZXTDfh3wTNp9eh7G3o1Y9O2Hp7G7BlEkF0cWU9ZsWe9YSzmeX24Uo5DNo4g== + +"@chainsafe/pubkey-index-map@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@chainsafe/pubkey-index-map/-/pubkey-index-map-3.0.0.tgz#eca4a5c0f2c6721f9b57c5a0817474bce3e2a705" + integrity sha512-KvWmKOG8WiVePHQDGyz+xo+RpsrmPEeipF8boqmXNYCLOGyVpkEXQk0IDVpnxngZziY6d97F9sml2vliDoyYyQ== + optionalDependencies: + "@chainsafe/pubkey-index-map-darwin-arm64" "3.0.0" + "@chainsafe/pubkey-index-map-darwin-x64" "3.0.0" + "@chainsafe/pubkey-index-map-linux-arm64-gnu" "3.0.0" + "@chainsafe/pubkey-index-map-linux-arm64-musl" "3.0.0" + "@chainsafe/pubkey-index-map-linux-x64-gnu" "3.0.0" + "@chainsafe/pubkey-index-map-linux-x64-musl" "3.0.0" + "@chainsafe/pubkey-index-map-win32-arm64-msvc" "3.0.0" + "@chainsafe/pubkey-index-map-win32-x64-msvc" "3.0.0" + +"@chainsafe/ssz@^1.2.2": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@chainsafe/ssz/-/ssz-1.3.0.tgz#dd9feebc096f9c726d7f7795e79032b41cbaf3c0" + integrity sha512-+O3WHnud8ZzIVF9/hSC+UazLDPgaa98quKLj/Z1PGnfGuW4JvCfS5Wh9EoZDvqGTI/AZlIbXpn4qC2s4BzQdfA== + dependencies: + "@chainsafe/as-sha256" "1.2.0" + "@chainsafe/persistent-merkle-tree" "1.2.1" + +"@chainsafe/swap-or-not-shuffle-darwin-arm64@1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@chainsafe/swap-or-not-shuffle-darwin-arm64/-/swap-or-not-shuffle-darwin-arm64-1.2.1.tgz#c32bc6283b7b2276a90e6eccc38d2606e05eba38" + integrity sha512-kTewLZe1KqMAJ1gHfagOxo0BI4kTcMOAkGJ7pRLFM5ZkL2P7sh3/4ixnjdbtMkO207vMZEZL3fxJSSs14kg9Kg== + +"@chainsafe/swap-or-not-shuffle-darwin-x64@1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@chainsafe/swap-or-not-shuffle-darwin-x64/-/swap-or-not-shuffle-darwin-x64-1.2.1.tgz#2e2bde10df6fe9c6c18f9cff0ed3bb4102fd6afc" + integrity sha512-B/f/peQqOLW5Tqib5CqanAlQgoeib75FNszzHwRBwHdRY5ThOcBbARvOtef39zU5lYjj4j3iWobpD7G70kQyUw== + +"@chainsafe/swap-or-not-shuffle-linux-arm64-gnu@1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@chainsafe/swap-or-not-shuffle-linux-arm64-gnu/-/swap-or-not-shuffle-linux-arm64-gnu-1.2.1.tgz#769f0ecd91a71996b845813672100880c00e493c" + integrity sha512-sDpuUuo3rStvHMQgLxH1UkkUbo8rcjDI70Fq3xzbNMhfjlrP0+sJistlFJtDpWmKsFk/sgje3PzVU9G3KFXzXA== + +"@chainsafe/swap-or-not-shuffle-linux-arm64-musl@1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@chainsafe/swap-or-not-shuffle-linux-arm64-musl/-/swap-or-not-shuffle-linux-arm64-musl-1.2.1.tgz#7d09ee6eca411d5e897794073e26516f2894ebaf" + integrity sha512-FFmpDF2dRhhOCT3WBYOoQW9wqhJMfx7iULskBe5cjowVQ15U1TQJ6tC+hPpouUMt3/pKz9tIS9dNWTUuo7kpQg== + +"@chainsafe/swap-or-not-shuffle-linux-x64-gnu@1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@chainsafe/swap-or-not-shuffle-linux-x64-gnu/-/swap-or-not-shuffle-linux-x64-gnu-1.2.1.tgz#8c54b7b8fcb9ed6c87f8ce9dd53900d2d4abc298" + integrity sha512-nGXEnFCqRmCS7ATV7QQ7b7aKHcyET9XEpJylq0sljnkuNRwoQXFUYPMYTn4TMI6g3vgZt/AVK9RdCxp68JKwGQ== + +"@chainsafe/swap-or-not-shuffle-linux-x64-musl@1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@chainsafe/swap-or-not-shuffle-linux-x64-musl/-/swap-or-not-shuffle-linux-x64-musl-1.2.1.tgz#17d02514059388db9fb2a72edd6653648e1e4543" + integrity sha512-VMQxE/EZjco4damGrJkkCQ2Y2WYgJcTR/ardTnSctM1/xxwUD1wQr7YW2TQsECfK3UZcW2W6gG7iqWfJgMdGSw== + +"@chainsafe/swap-or-not-shuffle-win32-arm64-msvc@1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@chainsafe/swap-or-not-shuffle-win32-arm64-msvc/-/swap-or-not-shuffle-win32-arm64-msvc-1.2.1.tgz#684d523e7dd1f4ebbf1bee191605259fae2717f8" + integrity sha512-qV+ps6KSoR8blc3gMse1BOBUGcCtptnMYoqTMwFCIx9LGaeSo3vKu5XBQDwHIfAW73bZ+PHb5YUqkRgtWBiEUw== + +"@chainsafe/swap-or-not-shuffle-win32-x64-msvc@1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@chainsafe/swap-or-not-shuffle-win32-x64-msvc/-/swap-or-not-shuffle-win32-x64-msvc-1.2.1.tgz#508320f5adb3cf90b9ce0e45487c3be7cd2755dd" + integrity sha512-hsDN4O6PPpF4rEA1tMngMJAOrWTGAu8TAqdEwgdP+U25o8UVlz8W2N9697AMGRnnArN2BgYS0zCeUR9kuZ2XEQ== + +"@chainsafe/swap-or-not-shuffle@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@chainsafe/swap-or-not-shuffle/-/swap-or-not-shuffle-1.2.1.tgz#51021bdc77a2476daf56c66a7d8a645012b1f58c" + integrity sha512-H8YdEoXXv2Hw17gDWGOJEya4LHlBbpChJP3jDQRfIk9hhwr0c/zbBemBRmjADowZhArL+ymkO+j5hGaYySjdpw== + optionalDependencies: + "@chainsafe/swap-or-not-shuffle-darwin-arm64" "1.2.1" + "@chainsafe/swap-or-not-shuffle-darwin-x64" "1.2.1" + "@chainsafe/swap-or-not-shuffle-linux-arm64-gnu" "1.2.1" + "@chainsafe/swap-or-not-shuffle-linux-arm64-musl" "1.2.1" + "@chainsafe/swap-or-not-shuffle-linux-x64-gnu" "1.2.1" + "@chainsafe/swap-or-not-shuffle-linux-x64-musl" "1.2.1" + "@chainsafe/swap-or-not-shuffle-win32-arm64-msvc" "1.2.1" + "@chainsafe/swap-or-not-shuffle-win32-x64-msvc" "1.2.1" + +"@colors/colors@1.5.0": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9" + integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== + +"@emnapi/core@^1.7.1": + version "1.9.1" + resolved "https://registry.yarnpkg.com/@emnapi/core/-/core-1.9.1.tgz#2143069c744ca2442074f8078462e51edd63c7bd" + integrity sha512-mukuNALVsoix/w1BJwFzwXBN/dHeejQtuVzcDsfOEsdpCumXb/E9j8w11h5S54tT1xhifGfbbSm/ICrObRb3KA== + dependencies: + "@emnapi/wasi-threads" "1.2.0" + tslib "^2.4.0" + +"@emnapi/runtime@^1.7.1": + version "1.9.1" + resolved "https://registry.yarnpkg.com/@emnapi/runtime/-/runtime-1.9.1.tgz#115ff2a0d589865be6bd8e9d701e499c473f2a8d" + integrity sha512-VYi5+ZVLhpgK4hQ0TAjiQiZ6ol0oe4mBx7mVv7IflsiEp0OWoVsp/+f9Vc1hOhE0TtkORVrI1GvzyreqpgWtkA== + dependencies: + tslib "^2.4.0" + +"@emnapi/wasi-threads@1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@emnapi/wasi-threads/-/wasi-threads-1.2.0.tgz#a19d9772cc3d195370bf6e2a805eec40aa75e18e" + integrity sha512-N10dEJNSsUx41Z6pZsXU8FjPjpBEplgH24sfkmITrBED1/U2Esum9F3lfLrMjKHHjmi557zQn7kR9R+XWXu5Rg== + dependencies: + tslib "^2.4.0" + +"@eslint-community/eslint-utils@^4.2.0": + version "4.9.1" + resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz#4e90af67bc51ddee6cdef5284edf572ec376b595" + integrity sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ== + dependencies: + eslint-visitor-keys "^3.4.3" + +"@eslint-community/regexpp@^4.6.1": + version "4.12.2" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.12.2.tgz#bccdf615bcf7b6e8db830ec0b8d21c9a25de597b" + integrity sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew== + +"@eslint/eslintrc@^2.1.4": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.4.tgz#388a269f0f25c1b6adc317b5a2c55714894c70ad" + integrity sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ== + dependencies: + ajv "^6.12.4" + debug "^4.3.2" + espree "^9.6.0" + globals "^13.19.0" + ignore "^5.2.0" + import-fresh "^3.2.1" + js-yaml "^4.1.0" + minimatch "^3.1.2" + strip-json-comments "^3.1.1" + +"@eslint/js@8.57.1": + version "8.57.1" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.57.1.tgz#de633db3ec2ef6a3c89e2f19038063e8a122e2c2" + integrity sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q== + +"@eth-optimism/contracts@^0.5.21": + version "0.5.40" + resolved "https://registry.yarnpkg.com/@eth-optimism/contracts/-/contracts-0.5.40.tgz#d13a04a15ea947a69055e6fc74d87e215d4c936a" + integrity sha512-MrzV0nvsymfO/fursTB7m/KunkPsCndltVgfdHaT1Aj5Vi6R/doKIGGkOofHX+8B6VMZpuZosKCMQ5lQuqjt8w== + dependencies: + "@eth-optimism/core-utils" "0.12.0" + "@ethersproject/abstract-provider" "^5.7.0" + "@ethersproject/abstract-signer" "^5.7.0" + +"@eth-optimism/core-utils@0.12.0": + version "0.12.0" + resolved "https://registry.yarnpkg.com/@eth-optimism/core-utils/-/core-utils-0.12.0.tgz#6337e4599a34de23f8eceb20378de2a2de82b0ea" + integrity sha512-qW+7LZYCz7i8dRa7SRlUKIo1VBU8lvN0HeXCxJR+z+xtMzMQpPds20XJNCMclszxYQHkXY00fOT6GvFw9ZL6nw== + dependencies: + "@ethersproject/abi" "^5.7.0" + "@ethersproject/abstract-provider" "^5.7.0" + "@ethersproject/address" "^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/keccak256" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/providers" "^5.7.0" + "@ethersproject/rlp" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + "@ethersproject/web" "^5.7.0" + bufio "^1.0.7" + chai "^4.3.4" + +"@ethereum-waffle/chai@4.0.10": + version "4.0.10" + resolved "https://registry.yarnpkg.com/@ethereum-waffle/chai/-/chai-4.0.10.tgz#6f600a40b6fdaed331eba42b8625ff23f3a0e59a" + integrity sha512-X5RepE7Dn8KQLFO7HHAAe+KeGaX/by14hn90wePGBhzL54tq4Y8JscZFu+/LCwCl6TnkAAy5ebiMoqJ37sFtWw== + dependencies: + "@ethereum-waffle/provider" "4.0.5" + debug "^4.3.4" + json-bigint "^1.0.0" + +"@ethereum-waffle/compiler@4.0.3": + version "4.0.3" + resolved "https://registry.yarnpkg.com/@ethereum-waffle/compiler/-/compiler-4.0.3.tgz#069e2df24b879b8a7b78857bad6f8bf6ebc8a5b1" + integrity sha512-5x5U52tSvEVJS6dpCeXXKvRKyf8GICDwiTwUvGD3/WD+DpvgvaoHOL82XqpTSUHgV3bBq6ma5/8gKUJUIAnJCw== + dependencies: + "@resolver-engine/imports" "^0.3.3" + "@resolver-engine/imports-fs" "^0.3.3" + "@typechain/ethers-v5" "^10.0.0" + "@types/mkdirp" "^0.5.2" + "@types/node-fetch" "^2.6.1" + mkdirp "^0.5.1" + node-fetch "^2.6.7" + +"@ethereum-waffle/ens@4.0.3": + version "4.0.3" + resolved "https://registry.yarnpkg.com/@ethereum-waffle/ens/-/ens-4.0.3.tgz#4a46ac926414f3c83b4e8cc2562c8e2aee06377a" + integrity sha512-PVLcdnTbaTfCrfSOrvtlA9Fih73EeDvFS28JQnT5M5P4JMplqmchhcZB1yg/fCtx4cvgHlZXa0+rOCAk2Jk0Jw== + +"@ethereum-waffle/mock-contract@4.0.4": + version "4.0.4" + resolved "https://registry.yarnpkg.com/@ethereum-waffle/mock-contract/-/mock-contract-4.0.4.tgz#f13fea29922d87a4d2e7c4fc8fe72ea04d2c13de" + integrity sha512-LwEj5SIuEe9/gnrXgtqIkWbk2g15imM/qcJcxpLyAkOj981tQxXmtV4XmQMZsdedEsZ/D/rbUAOtZbgwqgUwQA== + +"@ethereum-waffle/provider@4.0.5": + version "4.0.5" + resolved "https://registry.yarnpkg.com/@ethereum-waffle/provider/-/provider-4.0.5.tgz#8a65dbf0263f4162c9209608205dee1c960e716b" + integrity sha512-40uzfyzcrPh+Gbdzv89JJTMBlZwzya1YLDyim8mVbEqYLP5VRYWoGp0JMyaizgV3hMoUFRqJKVmIUw4v7r3hYw== + dependencies: + "@ethereum-waffle/ens" "4.0.3" + "@ganache/ethereum-options" "0.1.4" + debug "^4.3.4" + ganache "7.4.3" + +"@ethereumjs/block@^3.5.0", "@ethereumjs/block@^3.6.0", "@ethereumjs/block@^3.6.2": + version "3.6.3" + resolved "https://registry.yarnpkg.com/@ethereumjs/block/-/block-3.6.3.tgz#d96cbd7af38b92ebb3424223dbf773f5ccd27f84" + integrity sha512-CegDeryc2DVKnDkg5COQrE0bJfw/p0v3GBk2W5/Dj5dOVfEmb50Ux0GLnSPypooLnfqjwFaorGuT9FokWB3GRg== + dependencies: + "@ethereumjs/common" "^2.6.5" + "@ethereumjs/tx" "^3.5.2" + ethereumjs-util "^7.1.5" + merkle-patricia-tree "^4.2.4" + +"@ethereumjs/blockchain@^5.5.0": + version "5.5.3" + resolved "https://registry.yarnpkg.com/@ethereumjs/blockchain/-/blockchain-5.5.3.tgz#aa49a6a04789da6b66b5bcbb0d0b98efc369f640" + integrity sha512-bi0wuNJ1gw4ByNCV56H0Z4Q7D+SxUbwyG12Wxzbvqc89PXLRNR20LBcSUZRKpN0+YCPo6m0XZL/JLio3B52LTw== + dependencies: + "@ethereumjs/block" "^3.6.2" + "@ethereumjs/common" "^2.6.4" + "@ethereumjs/ethash" "^1.1.0" + debug "^4.3.3" + ethereumjs-util "^7.1.5" + level-mem "^5.0.1" + lru-cache "^5.1.1" + semaphore-async-await "^1.5.1" + +"@ethereumjs/common@2.6.0": + version "2.6.0" + resolved "https://registry.yarnpkg.com/@ethereumjs/common/-/common-2.6.0.tgz#feb96fb154da41ee2cc2c5df667621a440f36348" + integrity sha512-Cq2qS0FTu6O2VU1sgg+WyU9Ps0M6j/BEMHN+hRaECXCV/r0aI78u4N6p52QW/BDVhwWZpCdrvG8X7NJdzlpNUA== + dependencies: + crc-32 "^1.2.0" + ethereumjs-util "^7.1.3" + +"@ethereumjs/common@^2.5.0", "@ethereumjs/common@^2.6.0", "@ethereumjs/common@^2.6.4", "@ethereumjs/common@^2.6.5": + version "2.6.5" + resolved "https://registry.yarnpkg.com/@ethereumjs/common/-/common-2.6.5.tgz#0a75a22a046272579d91919cb12d84f2756e8d30" + integrity sha512-lRyVQOeCDaIVtgfbowla32pzeDv2Obr8oR8Put5RdUBNRGr1VGPGQNGP6elWIpgK3YdpzqTOh4GyUGOureVeeA== + dependencies: + crc-32 "^1.2.0" + ethereumjs-util "^7.1.5" + +"@ethereumjs/ethash@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@ethereumjs/ethash/-/ethash-1.1.0.tgz#7c5918ffcaa9cb9c1dc7d12f77ef038c11fb83fb" + integrity sha512-/U7UOKW6BzpA+Vt+kISAoeDie1vAvY4Zy2KF5JJb+So7+1yKmJeJEHOGSnQIj330e9Zyl3L5Nae6VZyh2TJnAA== + dependencies: + "@ethereumjs/block" "^3.5.0" + "@types/levelup" "^4.3.0" + buffer-xor "^2.0.1" + ethereumjs-util "^7.1.1" + miller-rabin "^4.0.0" + +"@ethereumjs/rlp@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@ethereumjs/rlp/-/rlp-4.0.1.tgz#626fabfd9081baab3d0a3074b0c7ecaf674aaa41" + integrity sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw== + +"@ethereumjs/rlp@^5.0.2": + version "5.0.2" + resolved "https://registry.yarnpkg.com/@ethereumjs/rlp/-/rlp-5.0.2.tgz#c89bd82f2f3bec248ab2d517ae25f5bbc4aac842" + integrity sha512-DziebCdg4JpGlEqEdGgXmjqcFoJi+JGulUXwEjsZGAscAQ7MyD/7LE/GVCP29vEQxKc7AAwjT3A2ywHp2xfoCA== + +"@ethereumjs/tx@3.4.0": + version "3.4.0" + resolved "https://registry.yarnpkg.com/@ethereumjs/tx/-/tx-3.4.0.tgz#7eb1947eefa55eb9cf05b3ca116fb7a3dbd0bce7" + integrity sha512-WWUwg1PdjHKZZxPPo274ZuPsJCWV3SqATrEKQP1n2DrVYVP1aZIYpo/mFaA0BDoE0tIQmBeimRCEA0Lgil+yYw== + dependencies: + "@ethereumjs/common" "^2.6.0" + ethereumjs-util "^7.1.3" + +"@ethereumjs/tx@^3.3.2", "@ethereumjs/tx@^3.4.0", "@ethereumjs/tx@^3.5.2": + version "3.5.2" + resolved "https://registry.yarnpkg.com/@ethereumjs/tx/-/tx-3.5.2.tgz#197b9b6299582ad84f9527ca961466fce2296c1c" + integrity sha512-gQDNJWKrSDGu2w7w0PzVXVBNMzb7wwdDOmOqczmhNjqFxFuIbhVJDwiGEnxFNC2/b8ifcZzY7MLcluizohRzNw== + dependencies: + "@ethereumjs/common" "^2.6.4" + ethereumjs-util "^7.1.5" + +"@ethereumjs/util@^8.1.0": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@ethereumjs/util/-/util-8.1.0.tgz#299df97fb6b034e0577ce9f94c7d9d1004409ed4" + integrity sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA== + dependencies: + "@ethereumjs/rlp" "^4.0.1" + ethereum-cryptography "^2.0.0" + micro-ftch "^0.3.1" + +"@ethereumjs/util@^9.1.0": + version "9.1.0" + resolved "https://registry.yarnpkg.com/@ethereumjs/util/-/util-9.1.0.tgz#75e3898a3116d21c135fa9e29886565609129bce" + integrity sha512-XBEKsYqLGXLah9PNJbgdkigthkG7TAGvlD/sH12beMXEyHDyigfcbdvHhmLyDWgDyOJn4QwiQUaF7yeuhnjdog== + dependencies: + "@ethereumjs/rlp" "^5.0.2" + ethereum-cryptography "^2.2.1" + +"@ethereumjs/vm@5.6.0": + version "5.6.0" + resolved "https://registry.yarnpkg.com/@ethereumjs/vm/-/vm-5.6.0.tgz#e0ca62af07de820143674c30b776b86c1983a464" + integrity sha512-J2m/OgjjiGdWF2P9bj/4LnZQ1zRoZhY8mRNVw/N3tXliGI8ai1sI1mlDPkLpeUUM4vq54gH6n0ZlSpz8U/qlYQ== + dependencies: + "@ethereumjs/block" "^3.6.0" + "@ethereumjs/blockchain" "^5.5.0" + "@ethereumjs/common" "^2.6.0" + "@ethereumjs/tx" "^3.4.0" + async-eventemitter "^0.2.4" + core-js-pure "^3.0.1" + debug "^2.2.0" + ethereumjs-util "^7.1.3" + functional-red-black-tree "^1.0.1" + mcl-wasm "^0.7.1" + merkle-patricia-tree "^4.2.2" + rustbn.js "~0.2.0" + +"@ethersproject/abi@5.0.7": + version "5.0.7" + resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.0.7.tgz#79e52452bd3ca2956d0e1c964207a58ad1a0ee7b" + integrity sha512-Cqktk+hSIckwP/W8O47Eef60VwmoSC/L3lY0+dIBhQPCNn9E4V7rwmm2aFrNRRDJfFlGuZ1khkQUOc3oBX+niw== + dependencies: + "@ethersproject/address" "^5.0.4" + "@ethersproject/bignumber" "^5.0.7" + "@ethersproject/bytes" "^5.0.4" + "@ethersproject/constants" "^5.0.4" + "@ethersproject/hash" "^5.0.4" + "@ethersproject/keccak256" "^5.0.3" + "@ethersproject/logger" "^5.0.5" + "@ethersproject/properties" "^5.0.3" + "@ethersproject/strings" "^5.0.4" + +"@ethersproject/abi@5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.7.0.tgz#b3f3e045bbbeed1af3947335c247ad625a44e449" + integrity sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA== + dependencies: + "@ethersproject/address" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/hash" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + +"@ethersproject/abi@5.8.0", "@ethersproject/abi@^5.0.9", "@ethersproject/abi@^5.1.2", "@ethersproject/abi@^5.6.3", "@ethersproject/abi@^5.7.0", "@ethersproject/abi@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.8.0.tgz#e79bb51940ac35fe6f3262d7fe2cdb25ad5f07d9" + integrity sha512-b9YS/43ObplgyV6SlyQsG53/vkSal0MNA1fskSC4mbnCMi8R+NkcH8K9FPYNESf6jUefBUniE4SOKms0E/KK1Q== + dependencies: + "@ethersproject/address" "^5.8.0" + "@ethersproject/bignumber" "^5.8.0" + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/constants" "^5.8.0" + "@ethersproject/hash" "^5.8.0" + "@ethersproject/keccak256" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + "@ethersproject/properties" "^5.8.0" + "@ethersproject/strings" "^5.8.0" + +"@ethersproject/abstract-provider@5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz#b0a8550f88b6bf9d51f90e4795d48294630cb9ef" + integrity sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/networks" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + "@ethersproject/web" "^5.7.0" + +"@ethersproject/abstract-provider@5.8.0", "@ethersproject/abstract-provider@^5.7.0", "@ethersproject/abstract-provider@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.8.0.tgz#7581f9be601afa1d02b95d26b9d9840926a35b0c" + integrity sha512-wC9SFcmh4UK0oKuLJQItoQdzS/qZ51EJegK6EmAWlh+OptpQ/npECOR3QqECd8iGHC0RJb4WKbVdSfif4ammrg== + dependencies: + "@ethersproject/bignumber" "^5.8.0" + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + "@ethersproject/networks" "^5.8.0" + "@ethersproject/properties" "^5.8.0" + "@ethersproject/transactions" "^5.8.0" + "@ethersproject/web" "^5.8.0" + +"@ethersproject/abstract-signer@5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz#13f4f32117868452191a4649723cb086d2b596b2" + integrity sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ== + dependencies: + "@ethersproject/abstract-provider" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + +"@ethersproject/abstract-signer@5.8.0", "@ethersproject/abstract-signer@^5.7.0", "@ethersproject/abstract-signer@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.8.0.tgz#8d7417e95e4094c1797a9762e6789c7356db0754" + integrity sha512-N0XhZTswXcmIZQdYtUnd79VJzvEwXQw6PK0dTl9VoYrEBxxCPXqS0Eod7q5TNKRxe1/5WUMuR0u0nqTF/avdCA== + dependencies: + "@ethersproject/abstract-provider" "^5.8.0" + "@ethersproject/bignumber" "^5.8.0" + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + "@ethersproject/properties" "^5.8.0" + +"@ethersproject/address@5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.7.0.tgz#19b56c4d74a3b0a46bfdbb6cfcc0a153fc697f37" + integrity sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/rlp" "^5.7.0" + +"@ethersproject/address@5.8.0", "@ethersproject/address@^5.0.2", "@ethersproject/address@^5.0.4", "@ethersproject/address@^5.7.0", "@ethersproject/address@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.8.0.tgz#3007a2c352eee566ad745dca1dbbebdb50a6a983" + integrity sha512-GhH/abcC46LJwshoN+uBNoKVFPxUuZm6dA257z0vZkKmU1+t8xTn8oK7B9qrj8W2rFRMch4gbJl6PmVxjxBEBA== + dependencies: + "@ethersproject/bignumber" "^5.8.0" + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/keccak256" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + "@ethersproject/rlp" "^5.8.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/base64@5.8.0", "@ethersproject/base64@^5.7.0", "@ethersproject/base64@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.8.0.tgz#61c669c648f6e6aad002c228465d52ac93ee83eb" + integrity sha512-lN0oIwfkYj9LbPx4xEkie6rAMJtySbpOAFXSDVQaBnAzYfB4X2Qr+FXJGxMoc3Bxp2Sm8OwvzMrywxyw0gLjIQ== + dependencies: + "@ethersproject/bytes" "^5.8.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/basex@5.8.0", "@ethersproject/basex@^5.7.0", "@ethersproject/basex@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.8.0.tgz#1d279a90c4be84d1c1139114a1f844869e57d03a" + integrity sha512-PIgTszMlDRmNwW9nhS6iqtVfdTAKosA7llYXNmGPw4YAI1PUyMv28988wAb41/gHF/WqGdoLv0erHaRcHRKW2Q== + dependencies: + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/properties" "^5.8.0" + +"@ethersproject/bignumber@5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.7.0.tgz#e2f03837f268ba655ffba03a57853e18a18dc9c2" + integrity sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + bn.js "^5.2.1" + +"@ethersproject/bignumber@5.8.0", "@ethersproject/bignumber@^5.0.7", "@ethersproject/bignumber@^5.7.0", "@ethersproject/bignumber@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.8.0.tgz#c381d178f9eeb370923d389284efa19f69efa5d7" + integrity sha512-ZyaT24bHaSeJon2tGPKIiHszWjD/54Sz8t57Toch475lCLljC6MgPmxk7Gtzz+ddNN5LuHea9qhAe0x3D+uYPA== + dependencies: + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + bn.js "^5.2.1" + +"@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/bytes@5.8.0", "@ethersproject/bytes@^5.0.4", "@ethersproject/bytes@^5.7.0", "@ethersproject/bytes@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.8.0.tgz#9074820e1cac7507a34372cadeb035461463be34" + integrity sha512-vTkeohgJVCPVHu5c25XWaWQOZ4v+DkGoC42/TS2ond+PARCxTJvgTFUNDZovyQ/uAQ4EcpqqowKydcdmRKjg7A== + dependencies: + "@ethersproject/logger" "^5.8.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/constants@5.8.0", "@ethersproject/constants@^5.0.4", "@ethersproject/constants@^5.7.0", "@ethersproject/constants@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.8.0.tgz#12f31c2f4317b113a4c19de94e50933648c90704" + integrity sha512-wigX4lrf5Vu+axVTIvNsuL6YrV4O5AXl5ubcURKMEME5TnWBouUh0CDTWxZ2GpnRn1kcCgE7l8O5+VbV9QTTcg== + dependencies: + "@ethersproject/bignumber" "^5.8.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/contracts@5.8.0", "@ethersproject/contracts@^5.7.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.8.0.tgz#243a38a2e4aa3e757215ea64e276f8a8c9d8ed73" + integrity sha512-0eFjGz9GtuAi6MZwhb4uvUM216F38xiuR0yYCjKJpNfSEy4HUM8hvqqBj9Jmm0IUz8l0xKEhWwLIhPgxNY0yvQ== + dependencies: + "@ethersproject/abi" "^5.8.0" + "@ethersproject/abstract-provider" "^5.8.0" + "@ethersproject/abstract-signer" "^5.8.0" + "@ethersproject/address" "^5.8.0" + "@ethersproject/bignumber" "^5.8.0" + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/constants" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + "@ethersproject/properties" "^5.8.0" + "@ethersproject/transactions" "^5.8.0" + +"@ethersproject/hash@5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.7.0.tgz#eb7aca84a588508369562e16e514b539ba5240a7" + integrity sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g== + dependencies: + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/address" "^5.7.0" + "@ethersproject/base64" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + +"@ethersproject/hash@5.8.0", "@ethersproject/hash@^5.0.4", "@ethersproject/hash@^5.7.0", "@ethersproject/hash@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.8.0.tgz#b8893d4629b7f8462a90102572f8cd65a0192b4c" + integrity sha512-ac/lBcTbEWW/VGJij0CNSw/wPcw9bSRgCB0AIBz8CvED/jfvDoV9hsIIiWfvWmFEi8RcXtlNwp2jv6ozWOsooA== + dependencies: + "@ethersproject/abstract-signer" "^5.8.0" + "@ethersproject/address" "^5.8.0" + "@ethersproject/base64" "^5.8.0" + "@ethersproject/bignumber" "^5.8.0" + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/keccak256" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + "@ethersproject/properties" "^5.8.0" + "@ethersproject/strings" "^5.8.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/hdnode@5.8.0", "@ethersproject/hdnode@^5.7.0", "@ethersproject/hdnode@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.8.0.tgz#a51ae2a50bcd48ef6fd108c64cbae5e6ff34a761" + integrity sha512-4bK1VF6E83/3/Im0ERnnUeWOY3P1BZml4ZD3wcH8Ys0/d1h1xaFt6Zc+Dh9zXf9TapGro0T4wvO71UTCp3/uoA== + dependencies: + "@ethersproject/abstract-signer" "^5.8.0" + "@ethersproject/basex" "^5.8.0" + "@ethersproject/bignumber" "^5.8.0" + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + "@ethersproject/pbkdf2" "^5.8.0" + "@ethersproject/properties" "^5.8.0" + "@ethersproject/sha2" "^5.8.0" + "@ethersproject/signing-key" "^5.8.0" + "@ethersproject/strings" "^5.8.0" + "@ethersproject/transactions" "^5.8.0" + "@ethersproject/wordlists" "^5.8.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/json-wallets@5.8.0", "@ethersproject/json-wallets@^5.7.0", "@ethersproject/json-wallets@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.8.0.tgz#d18de0a4cf0f185f232eb3c17d5e0744d97eb8c9" + integrity sha512-HxblNck8FVUtNxS3VTEYJAcwiKYsBIF77W15HufqlBF9gGfhmYOJtYZp8fSDZtn9y5EaXTE87zDwzxRoTFk11w== + dependencies: + "@ethersproject/abstract-signer" "^5.8.0" + "@ethersproject/address" "^5.8.0" + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/hdnode" "^5.8.0" + "@ethersproject/keccak256" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + "@ethersproject/pbkdf2" "^5.8.0" + "@ethersproject/properties" "^5.8.0" + "@ethersproject/random" "^5.8.0" + "@ethersproject/strings" "^5.8.0" + "@ethersproject/transactions" "^5.8.0" + aes-js "3.0.0" + scrypt-js "3.0.1" + +"@ethersproject/keccak256@5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.7.0.tgz#3186350c6e1cd6aba7940384ec7d6d9db01f335a" + integrity sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg== + dependencies: + "@ethersproject/bytes" "^5.7.0" + js-sha3 "0.8.0" + +"@ethersproject/keccak256@5.8.0", "@ethersproject/keccak256@^5.0.3", "@ethersproject/keccak256@^5.7.0", "@ethersproject/keccak256@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.8.0.tgz#d2123a379567faf2d75d2aaea074ffd4df349e6a" + integrity sha512-A1pkKLZSz8pDaQ1ftutZoaN46I6+jvuqugx5KYNeQOPqq+JZ0Txm7dlWesCHB5cndJSu5vP2VKptKf7cksERng== + dependencies: + "@ethersproject/bytes" "^5.8.0" + js-sha3 "0.8.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/logger@5.8.0", "@ethersproject/logger@^5.0.5", "@ethersproject/logger@^5.7.0", "@ethersproject/logger@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.8.0.tgz#f0232968a4f87d29623a0481690a2732662713d6" + integrity sha512-Qe6knGmY+zPPWTC+wQrpitodgBfH7XoceCGL5bJVejmH+yCS3R8jJm8iiWuvWbG76RUmyEG53oqv6GMVWqunjA== + +"@ethersproject/networks@5.7.1": + 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/networks@5.8.0", "@ethersproject/networks@^5.7.0", "@ethersproject/networks@^5.7.1", "@ethersproject/networks@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.8.0.tgz#8b4517a3139380cba9fb00b63ffad0a979671fde" + integrity sha512-egPJh3aPVAzbHwq8DD7Po53J4OUSsA1MjQp8Vf/OZPav5rlmWUaFLiq8cvQiGK0Z5K6LYzm29+VA/p4RL1FzNg== + dependencies: + "@ethersproject/logger" "^5.8.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/pbkdf2@5.8.0", "@ethersproject/pbkdf2@^5.7.0", "@ethersproject/pbkdf2@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.8.0.tgz#cd2621130e5dd51f6a0172e63a6e4a0c0a0ec37e" + integrity sha512-wuHiv97BrzCmfEaPbUFpMjlVg/IDkZThp9Ri88BpjRleg4iePJaj2SW8AIyE8cXn5V1tuAaMj6lzvsGJkGWskg== + dependencies: + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/sha2" "^5.8.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/properties@5.8.0", "@ethersproject/properties@^5.0.3", "@ethersproject/properties@^5.7.0", "@ethersproject/properties@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.8.0.tgz#405a8affb6311a49a91dabd96aeeae24f477020e" + integrity sha512-PYuiEoQ+FMaZZNGrStmN7+lWjlsoufGIHdww7454FIaGdbe/p5rnaCXTr5MtBYl3NkeoVhHZuyzChPeGeKIpQw== + dependencies: + "@ethersproject/logger" "^5.8.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/providers@5.8.0", "@ethersproject/providers@^5.7.0", "@ethersproject/providers@^5.7.2": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.8.0.tgz#6c2ae354f7f96ee150439f7de06236928bc04cb4" + integrity sha512-3Il3oTzEx3o6kzcg9ZzbE+oCZYyY+3Zh83sKkn4s1DZfTUjIegHnN2Cm0kbn9YFy45FDVcuCLLONhU7ny0SsCw== + dependencies: + "@ethersproject/abstract-provider" "^5.8.0" + "@ethersproject/abstract-signer" "^5.8.0" + "@ethersproject/address" "^5.8.0" + "@ethersproject/base64" "^5.8.0" + "@ethersproject/basex" "^5.8.0" + "@ethersproject/bignumber" "^5.8.0" + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/constants" "^5.8.0" + "@ethersproject/hash" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + "@ethersproject/networks" "^5.8.0" + "@ethersproject/properties" "^5.8.0" + "@ethersproject/random" "^5.8.0" + "@ethersproject/rlp" "^5.8.0" + "@ethersproject/sha2" "^5.8.0" + "@ethersproject/strings" "^5.8.0" + "@ethersproject/transactions" "^5.8.0" + "@ethersproject/web" "^5.8.0" + bech32 "1.1.4" + ws "8.18.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/random@5.8.0", "@ethersproject/random@^5.7.0", "@ethersproject/random@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.8.0.tgz#1bced04d49449f37c6437c701735a1a022f0057a" + integrity sha512-E4I5TDl7SVqyg4/kkA/qTfuLWAQGXmSOgYyO01So8hLfwgKvYK5snIlzxJMk72IFdG/7oh8yuSqY2KX7MMwg+A== + dependencies: + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + +"@ethersproject/rlp@5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.7.0.tgz#de39e4d5918b9d74d46de93af80b7685a9c21304" + integrity sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/rlp@5.8.0", "@ethersproject/rlp@^5.7.0", "@ethersproject/rlp@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.8.0.tgz#5a0d49f61bc53e051532a5179472779141451de5" + integrity sha512-LqZgAznqDbiEunaUvykH2JAoXTT9NV0Atqk8rQN9nx9SEgThA/WMx5DnW8a9FOufo//6FZOCHZ+XiClzgbqV9Q== + dependencies: + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/logger" "^5.8.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/sha2@5.8.0", "@ethersproject/sha2@^5.7.0", "@ethersproject/sha2@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.8.0.tgz#8954a613bb78dac9b46829c0a95de561ef74e5e1" + integrity sha512-dDOUrXr9wF/YFltgTBYS0tKslPEKr6AekjqDW2dbn1L1xmjGR+9GiKu4ajxovnrDbwxAKdHjW8jNcwfz8PAz4A== + dependencies: + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + hash.js "1.1.7" + +"@ethersproject/signing-key@5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.7.0.tgz#06b2df39411b00bc57c7c09b01d1e41cf1b16ab3" + integrity sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + bn.js "^5.2.1" + elliptic "6.5.4" + hash.js "1.1.7" + +"@ethersproject/signing-key@5.8.0", "@ethersproject/signing-key@^5.7.0", "@ethersproject/signing-key@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.8.0.tgz#9797e02c717b68239c6349394ea85febf8893119" + integrity sha512-LrPW2ZxoigFi6U6aVkFN/fa9Yx/+4AtIUe4/HACTvKJdhm0eeb107EVCIQcrLZkxaSIgc/eCrX8Q1GtbH+9n3w== + dependencies: + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + "@ethersproject/properties" "^5.8.0" + bn.js "^5.2.1" + elliptic "6.6.1" + 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/solidity@5.8.0", "@ethersproject/solidity@^5.7.0", "@ethersproject/solidity@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.8.0.tgz#429bb9fcf5521307a9448d7358c26b93695379b9" + integrity sha512-4CxFeCgmIWamOHwYN9d+QWGxye9qQLilpgTU0XhYs1OahkclF+ewO+3V1U0mvpiuQxm5EHHmv8f7ClVII8EHsA== + dependencies: + "@ethersproject/bignumber" "^5.8.0" + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/keccak256" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + "@ethersproject/sha2" "^5.8.0" + "@ethersproject/strings" "^5.8.0" + +"@ethersproject/strings@5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.7.0.tgz#54c9d2a7c57ae8f1205c88a9d3a56471e14d5ed2" + integrity sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/strings@5.8.0", "@ethersproject/strings@^5.0.4", "@ethersproject/strings@^5.7.0", "@ethersproject/strings@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.8.0.tgz#ad79fafbf0bd272d9765603215ac74fd7953908f" + integrity sha512-qWEAk0MAvl0LszjdfnZ2uC8xbR2wdv4cDabyHiBh3Cldq/T8dPH3V4BbBsAYJUeonwD+8afVXld274Ls+Y1xXg== + dependencies: + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/constants" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + +"@ethersproject/transactions@5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.7.0.tgz#91318fc24063e057885a6af13fdb703e1f993d3b" + integrity sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ== + dependencies: + "@ethersproject/address" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/rlp" "^5.7.0" + "@ethersproject/signing-key" "^5.7.0" + +"@ethersproject/transactions@5.8.0", "@ethersproject/transactions@^5.0.0-beta.135", "@ethersproject/transactions@^5.7.0", "@ethersproject/transactions@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.8.0.tgz#1e518822403abc99def5a043d1c6f6fe0007e46b" + integrity sha512-UglxSDjByHG0TuU17bDfCemZ3AnKO2vYrL5/2n2oXvKzvb7Cz+W9gOWXKARjp2URVwcWlQlPOEQyAviKwT4AHg== + dependencies: + "@ethersproject/address" "^5.8.0" + "@ethersproject/bignumber" "^5.8.0" + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/constants" "^5.8.0" + "@ethersproject/keccak256" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + "@ethersproject/properties" "^5.8.0" + "@ethersproject/rlp" "^5.8.0" + "@ethersproject/signing-key" "^5.8.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/units@5.8.0", "@ethersproject/units@^5.7.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.8.0.tgz#c12f34ba7c3a2de0e9fa0ed0ee32f3e46c5c2c6a" + integrity sha512-lxq0CAnc5kMGIiWW4Mr041VT8IhNM+Pn5T3haO74XZWFulk7wH1Gv64HqE96hT4a7iiNMdOCFEBgaxWuk8ETKQ== + dependencies: + "@ethersproject/bignumber" "^5.8.0" + "@ethersproject/constants" "^5.8.0" + "@ethersproject/logger" "^5.8.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/wallet@5.8.0", "@ethersproject/wallet@^5.7.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.8.0.tgz#49c300d10872e6986d953e8310dc33d440da8127" + integrity sha512-G+jnzmgg6UxurVKRKvw27h0kvG75YKXZKdlLYmAHeF32TGUzHkOFd7Zn6QHOTYRFWnfjtSSFjBowKo7vfrXzPA== + dependencies: + "@ethersproject/abstract-provider" "^5.8.0" + "@ethersproject/abstract-signer" "^5.8.0" + "@ethersproject/address" "^5.8.0" + "@ethersproject/bignumber" "^5.8.0" + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/hash" "^5.8.0" + "@ethersproject/hdnode" "^5.8.0" + "@ethersproject/json-wallets" "^5.8.0" + "@ethersproject/keccak256" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + "@ethersproject/properties" "^5.8.0" + "@ethersproject/random" "^5.8.0" + "@ethersproject/signing-key" "^5.8.0" + "@ethersproject/transactions" "^5.8.0" + "@ethersproject/wordlists" "^5.8.0" + +"@ethersproject/web@5.7.1": + version "5.7.1" + resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.7.1.tgz#de1f285b373149bee5928f4eb7bcb87ee5fbb4ae" + integrity sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w== + dependencies: + "@ethersproject/base64" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + +"@ethersproject/web@5.8.0", "@ethersproject/web@^5.7.0", "@ethersproject/web@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.8.0.tgz#3e54badc0013b7a801463a7008a87988efce8a37" + integrity sha512-j7+Ksi/9KfGviws6Qtf9Q7KCqRhpwrYKQPs+JBA/rKVFF/yaWLHJEH3zfVP2plVu+eys0d2DlFmhoQJayFewcw== + dependencies: + "@ethersproject/base64" "^5.8.0" + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + "@ethersproject/properties" "^5.8.0" + "@ethersproject/strings" "^5.8.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" + +"@ethersproject/wordlists@5.8.0", "@ethersproject/wordlists@^5.7.0", "@ethersproject/wordlists@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.8.0.tgz#7a5654ee8d1bb1f4dbe43f91d217356d650ad821" + integrity sha512-2df9bbXicZws2Sb5S6ET493uJ0Z84Fjr3pC4tu/qlnZERibZCeUVuqdtt+7Tv9xxhUxHoIekIA7avrKUWHrezg== + dependencies: + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/hash" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + "@ethersproject/properties" "^5.8.0" + "@ethersproject/strings" "^5.8.0" + +"@fastify/busboy@^2.0.0": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@fastify/busboy/-/busboy-2.1.1.tgz#b9da6a878a371829a0502c9b6c1c143ef6663f4d" + integrity sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA== + +"@ganache/ethereum-address@0.1.4": + version "0.1.4" + resolved "https://registry.yarnpkg.com/@ganache/ethereum-address/-/ethereum-address-0.1.4.tgz#0e6d66f4a24f64bf687cb3ff7358fb85b9d9005e" + integrity sha512-sTkU0M9z2nZUzDeHRzzGlW724xhMLXo2LeX1hixbnjHWY1Zg1hkqORywVfl+g5uOO8ht8T0v+34IxNxAhmWlbw== + dependencies: + "@ganache/utils" "0.1.4" + +"@ganache/ethereum-options@0.1.4": + version "0.1.4" + resolved "https://registry.yarnpkg.com/@ganache/ethereum-options/-/ethereum-options-0.1.4.tgz#6a559abb44225e2b8741a8f78a19a46714a71cd6" + integrity sha512-i4l46taoK2yC41FPkcoDlEVoqHS52wcbHPqJtYETRWqpOaoj9hAg/EJIHLb1t6Nhva2CdTO84bG+qlzlTxjAHw== + dependencies: + "@ganache/ethereum-address" "0.1.4" + "@ganache/ethereum-utils" "0.1.4" + "@ganache/options" "0.1.4" + "@ganache/utils" "0.1.4" + bip39 "3.0.4" + seedrandom "3.0.5" + +"@ganache/ethereum-utils@0.1.4": + version "0.1.4" + resolved "https://registry.yarnpkg.com/@ganache/ethereum-utils/-/ethereum-utils-0.1.4.tgz#fae4b5b9e642e751ff1fa0cd7316c92996317257" + integrity sha512-FKXF3zcdDrIoCqovJmHLKZLrJ43234Em2sde/3urUT/10gSgnwlpFmrv2LUMAmSbX3lgZhW/aSs8krGhDevDAg== + dependencies: + "@ethereumjs/common" "2.6.0" + "@ethereumjs/tx" "3.4.0" + "@ethereumjs/vm" "5.6.0" + "@ganache/ethereum-address" "0.1.4" + "@ganache/rlp" "0.1.4" + "@ganache/utils" "0.1.4" + emittery "0.10.0" + ethereumjs-abi "0.6.8" + ethereumjs-util "7.1.3" + +"@ganache/options@0.1.4": + version "0.1.4" + resolved "https://registry.yarnpkg.com/@ganache/options/-/options-0.1.4.tgz#325b07e6de85094667aaaaf3d653e32404a04b78" + integrity sha512-zAe/craqNuPz512XQY33MOAG6Si1Xp0hCvfzkBfj2qkuPcbJCq6W/eQ5MB6SbXHrICsHrZOaelyqjuhSEmjXRw== + dependencies: + "@ganache/utils" "0.1.4" + bip39 "3.0.4" + seedrandom "3.0.5" + +"@ganache/rlp@0.1.4": + version "0.1.4" + resolved "https://registry.yarnpkg.com/@ganache/rlp/-/rlp-0.1.4.tgz#f4043afda83e1a14a4f80607b103daf166a9b374" + integrity sha512-Do3D1H6JmhikB+6rHviGqkrNywou/liVeFiKIpOBLynIpvZhRCgn3SEDxyy/JovcaozTo/BynHumfs5R085MFQ== + dependencies: + "@ganache/utils" "0.1.4" + rlp "2.2.6" + +"@ganache/utils@0.1.4": + version "0.1.4" + resolved "https://registry.yarnpkg.com/@ganache/utils/-/utils-0.1.4.tgz#25d60d7689e3dda6a8a7ad70e3646f07c2c39a1f" + integrity sha512-oatUueU3XuXbUbUlkyxeLLH3LzFZ4y5aSkNbx6tjSIhVTPeh+AuBKYt4eQ73FFcTB3nj/gZoslgAh5CN7O369w== + dependencies: + emittery "0.10.0" + keccak "3.0.1" + seedrandom "3.0.5" + optionalDependencies: + "@trufflesuite/bigint-buffer" "1.1.9" + +"@humanwhocodes/config-array@^0.13.0": + version "0.13.0" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.13.0.tgz#fb907624df3256d04b9aa2df50d7aa97ec648748" + integrity sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw== + dependencies: + "@humanwhocodes/object-schema" "^2.0.3" + debug "^4.3.1" + minimatch "^3.0.5" + +"@humanwhocodes/module-importer@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" + integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== + +"@humanwhocodes/object-schema@^2.0.3": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz#4a2868d75d6d6963e423bcf90b7fd1be343409d3" + integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA== + +"@isaacs/cliui@^8.0.2": + version "8.0.2" + resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" + integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== + dependencies: + string-width "^5.1.2" + string-width-cjs "npm:string-width@^4.2.0" + strip-ansi "^7.0.1" + strip-ansi-cjs "npm:strip-ansi@^6.0.1" + wrap-ansi "^8.1.0" + wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" + +"@isaacs/cliui@^9.0.0": + version "9.0.0" + resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-9.0.0.tgz#4d0a3f127058043bf2e7ee169eaf30ed901302f3" + integrity sha512-AokJm4tuBHillT+FpMtxQ60n8ObyXBatq7jD2/JA9dxbDDokKQm8KMht5ibGzLVU9IJDIKK4TPKgMHEYMn3lMg== + +"@jridgewell/sourcemap-codec@^1.5.5": + version "1.5.5" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz#6912b00d2c631c0d15ce1a7ab57cd657f2a8f8ba" + integrity sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og== + +"@lastdotnet/purrikey@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@lastdotnet/purrikey/-/purrikey-1.0.0.tgz#78442c06fcd9448f7bf0266ea1af0a9736be6ea5" + integrity sha512-Y9ycl83T1ZrLSFZYT6V/QMFZjwc4fB+/WjuQygLAVSZAJNAaEtSRm9l4lMKazV/AE30qC/uKzyY9s/zoAtNx8w== + dependencies: + "@aws-sdk/client-kms" "^3.400.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/rlp" "^5.7.0" + ethers "^5.7.2" + tslib "^2.6.0" + +"@layerzerolabs/devtools@^0.4.10": + version "0.4.10" + resolved "https://registry.yarnpkg.com/@layerzerolabs/devtools/-/devtools-0.4.10.tgz#558313e3366eef2629972a8a10e8f37bcd2f3e8c" + integrity sha512-Y9kjUQuyNfm9Vs07+Mk0+KkqHPwHN2cLSzKhe5Tp+52R7d4fI5zsn33IaJsqqGWxSDL1sKq7gFMTdtglTdsA8A== + dependencies: + bs58 "^6.0.0" + exponential-backoff "~3.1.1" + js-yaml "~4.1.0" + +"@layerzerolabs/lz-evm-messagelib-v2@^3.0.103": + version "3.0.167" + resolved "https://registry.yarnpkg.com/@layerzerolabs/lz-evm-messagelib-v2/-/lz-evm-messagelib-v2-3.0.167.tgz#666c19b1cd0ffa55e521dba2a6608b38597bcb42" + integrity sha512-Zml89u/0cITKrWksjI4V2QCaAwAIVGkox0MTiPRoCdxvQmMuoDetoiuGqPuFWRVjX8by4PUrjDGBbjxYM+TguQ== + +"@layerzerolabs/lz-evm-protocol-v2@^3.0.87": + version "3.0.167" + resolved "https://registry.yarnpkg.com/@layerzerolabs/lz-evm-protocol-v2/-/lz-evm-protocol-v2-3.0.167.tgz#3daab6d0602ee4eded3f45a0bd0979ca2a5ee3aa" + integrity sha512-LEvKkC65Smdm3AwTY6vi5lcB6g1QJtFMNi2V0fEGLK5VMrYnOkGKSpWE+wc1oBoK2x1dOqQLpsEfvfVIgzfL4w== + +"@layerzerolabs/lz-v2-utilities@^3.0.88": + version "3.0.167" + resolved "https://registry.yarnpkg.com/@layerzerolabs/lz-v2-utilities/-/lz-v2-utilities-3.0.167.tgz#5a231bd61de57c62e2895b7574574679798a3d87" + integrity sha512-cEf3+rqz/2gUJo/yAykfIx+jE89p5furG4b4V9dOygjW+/A2VUDAHgKJ1px7xU783r4MPh7ng5D3UoIPnPJDUw== + dependencies: + "@ethersproject/abi" "^5.8.0" + "@ethersproject/address" "^5.8.0" + "@ethersproject/bignumber" "^5.8.0" + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/keccak256" "^5.8.0" + "@ethersproject/solidity" "^5.8.0" + bs58 "^5.0.0" + tiny-invariant "^1.3.1" + +"@layerzerolabs/oapp-evm@^0.3.2": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@layerzerolabs/oapp-evm/-/oapp-evm-0.3.3.tgz#763a2f7c27ad6f69e6c87538cd96eef67664d0f5" + integrity sha512-P8uxe9A0T3G7WIQEw0dNCpUwUo4m3OFu5yQ3RsTrzX1BrSggTCUy8LgiNqxKVm56A3xMJVLsjzaB3zjXShXi8A== + dependencies: + ethers "^5.7.2" + +"@layerzerolabs/oft-evm@3.1.4": + version "3.1.4" + resolved "https://registry.yarnpkg.com/@layerzerolabs/oft-evm/-/oft-evm-3.1.4.tgz#de20e47cf69655405d7c8cc67ff6afee97cf4484" + integrity sha512-jxuEXtzAv2x/ZErBtg6OI6rxq4KyMamPgy8+r3/AQ5uD4Ih2Sd51mBIebpzueJKqMk7MNdOauLfYRRK6tOFWXQ== + +"@lodestar/api@^1.39.1": + version "1.41.0" + resolved "https://registry.yarnpkg.com/@lodestar/api/-/api-1.41.0.tgz#f7c484e7227ad5d56c9bc604bc2c5b9a5bb4f014" + integrity sha512-W4xO2zcws+ZxI57Z/0tg10nxdWLVART5tTNhmCSjs11dpb4HBbo/D1dw/SavTzI5ME7Y5NwQ5kJpd8gdc0B8ag== + dependencies: + "@chainsafe/persistent-merkle-tree" "^1.2.1" + "@chainsafe/ssz" "^1.2.2" + "@lodestar/config" "^1.41.0" + "@lodestar/params" "^1.41.0" + "@lodestar/types" "^1.41.0" + "@lodestar/utils" "^1.41.0" + eventsource "^2.0.2" + qs "^6.11.1" + +"@lodestar/config@^1.39.1", "@lodestar/config@^1.41.0": + version "1.41.0" + resolved "https://registry.yarnpkg.com/@lodestar/config/-/config-1.41.0.tgz#fa05c1de9debb3d1b2fdbd5cbbc8724f4d1c81e3" + integrity sha512-ftz4acxaN69Td6rG0qPwJOtz8mXs3q4Tg8grtnoCjNLKOnOVzHqyJtAVbslinEindN9mK+dQ3KLBHFhZMrIbbA== + dependencies: + "@chainsafe/as-sha256" "^1.2.0" + "@chainsafe/ssz" "^1.2.2" + "@lodestar/params" "^1.41.0" + "@lodestar/spec-test-util" "^1.41.0" + "@lodestar/types" "^1.41.0" + "@lodestar/utils" "^1.41.0" + +"@lodestar/params@^1.39.1", "@lodestar/params@^1.41.0": + version "1.41.0" + resolved "https://registry.yarnpkg.com/@lodestar/params/-/params-1.41.0.tgz#7044118a7544941f71caa9496ca085d4d4a66dc3" + integrity sha512-jUau8Ui1K7P/FJu88ZVV0E0/sbeYDRXQj0kIDboaCF2BRCATmcFxfBEiACH/9e4ITVCwjDdiJG3vqUdIyEK27Q== + +"@lodestar/spec-test-util@^1.41.0": + version "1.41.0" + resolved "https://registry.yarnpkg.com/@lodestar/spec-test-util/-/spec-test-util-1.41.0.tgz#172ba83dd35e61b9574a21eea4c239c55d7d087c" + integrity sha512-QyRHNQGQdl3kL9+6OklfG1/Dk3XCzf6F7CAAqdYdGiBKkv3St/J9Y0zJPYtynuPigNtqviXgC16zG9RXe1gJiw== + dependencies: + "@lodestar/utils" "^1.41.0" + rimraf "^4.4.1" + snappyjs "^0.7.0" + vitest "catalog:" + +"@lodestar/state-transition@^1.39.1": + version "1.41.0" + resolved "https://registry.yarnpkg.com/@lodestar/state-transition/-/state-transition-1.41.0.tgz#0c3662e79fc717e547a9e8c7cb6d743c5c176d2a" + integrity sha512-QDfZE++H5EFZ8Tw/6k7ZEVGSFRb+s7yITZlu636TGtqhTkXOamNcokBF3BickdonX58t2FMEuCLcyCf4IYX13g== + dependencies: + "@chainsafe/as-sha256" "^1.2.0" + "@chainsafe/blst" "^2.2.0" + "@chainsafe/persistent-merkle-tree" "^1.2.1" + "@chainsafe/persistent-ts" "^1.0.0" + "@chainsafe/pubkey-index-map" "^3.0.0" + "@chainsafe/ssz" "^1.2.2" + "@chainsafe/swap-or-not-shuffle" "^1.2.1" + "@lodestar/config" "^1.41.0" + "@lodestar/params" "^1.41.0" + "@lodestar/types" "^1.41.0" + "@lodestar/utils" "^1.41.0" + "@vekexasia/bigint-buffer2" "^1.1.1" + +"@lodestar/types@^1.39.1", "@lodestar/types@^1.41.0": + version "1.41.0" + resolved "https://registry.yarnpkg.com/@lodestar/types/-/types-1.41.0.tgz#5a4652df13389a54e320f53379f6248794fe1627" + integrity sha512-iJzaE9EAS3sbBl3DGwIxjKeEks30+DdSBpx26kkqa3tc6ejC3Y73d8F31G9qqkCN40If6TJlv2yC8xbphhoB5Q== + dependencies: + "@chainsafe/ssz" "^1.2.2" + "@lodestar/params" "^1.41.0" + ethereum-cryptography "^2.0.0" + +"@lodestar/utils@^1.39.1", "@lodestar/utils@^1.41.0": + version "1.41.0" + resolved "https://registry.yarnpkg.com/@lodestar/utils/-/utils-1.41.0.tgz#c44d9cf0136330a225f79ba135b02d9f5ed5e9c9" + integrity sha512-D/KtN7qlQZe3sNDdSaCyD0bmwEHBmW9PYhROSsM2/JjIABOERH+1zJqj76a22igp3WcvrMCAkEs71mF9oLzWOQ== + dependencies: + "@chainsafe/as-sha256" "^1.2.0" + "@vekexasia/bigint-buffer2" "^1.1.1" + any-signal "^4.1.1" + case "^1.6.3" + js-yaml "^4.1.0" + +"@napi-rs/wasm-runtime@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.1.tgz#c3705ab549d176b8dc5172723d6156c3dc426af2" + integrity sha512-p64ah1M1ld8xjWv3qbvFwHiFVWrq1yFvV4f7w+mzaqiR4IlSgkqhcRdHwsGgomwzBH51sRY4NEowLxnaBjcW/A== + dependencies: + "@emnapi/core" "^1.7.1" + "@emnapi/runtime" "^1.7.1" + "@tybys/wasm-util" "^0.10.1" + +"@noble/ciphers@^1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@noble/ciphers/-/ciphers-1.3.0.tgz#f64b8ff886c240e644e5573c097f86e5b43676dc" + integrity sha512-2I0gnIVPtfnMw9ee9h1dJG7tp81+8Ob3OJb3Mv37rx5L40/b0i7djjCVvGOVqc9AEIQyvyu1i6ypKdFw8R8gQw== + +"@noble/curves@1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.2.0.tgz#92d7e12e4e49b23105a2555c6984d41733d65c35" + integrity sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw== + dependencies: + "@noble/hashes" "1.3.2" + +"@noble/curves@1.4.2", "@noble/curves@~1.4.0": + version "1.4.2" + resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.4.2.tgz#40309198c76ed71bc6dbf7ba24e81ceb4d0d1fe9" + integrity sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw== + dependencies: + "@noble/hashes" "1.4.0" + +"@noble/curves@1.9.1": + version "1.9.1" + resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.9.1.tgz#9654a0bc6c13420ae252ddcf975eaf0f58f0a35c" + integrity sha512-k11yZxZg+t+gWvBbIswW0yoJlu8cHOC7dhunwOzoWH/mXGBiYyR4YY6hAEK/3EUs4UpB8la1RfdRpeGsFHkWsA== + dependencies: + "@noble/hashes" "1.8.0" + +"@noble/curves@~1.8.1": + version "1.8.2" + resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.8.2.tgz#8f24c037795e22b90ae29e222a856294c1d9ffc7" + integrity sha512-vnI7V6lFNe0tLAuJMu+2sX+FcL14TaCWy1qiczg1VwRmPrpQCdq5ESXQMqUc2tluRNf6irBXrWbl1mGN8uaU/g== + dependencies: + "@noble/hashes" "1.7.2" + +"@noble/curves@~1.9.0": + version "1.9.7" + resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.9.7.tgz#79d04b4758a43e4bca2cbdc62e7771352fa6b951" + integrity sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw== + dependencies: + "@noble/hashes" "1.8.0" + +"@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" + integrity sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ== + +"@noble/hashes@1.3.2": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.2.tgz#6f26dbc8fbc7205873ce3cee2f690eba0d421b39" + integrity sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ== + +"@noble/hashes@1.4.0", "@noble/hashes@~1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.4.0.tgz#45814aa329f30e4fe0ba49426f49dfccdd066426" + integrity sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg== + +"@noble/hashes@1.7.2", "@noble/hashes@~1.7.1": + version "1.7.2" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.7.2.tgz#d53c65a21658fb02f3303e7ee3ba89d6754c64b4" + integrity sha512-biZ0NUSxyjLLqo6KxEJ1b+C2NAx0wtDoFvCaXHGgUkeHzf3Xc1xKumFKREuT7f7DARNZ/slvYUwFG6B0f2b6hQ== + +"@noble/hashes@1.8.0", "@noble/hashes@^1.0.0", "@noble/hashes@^1.3.0", "@noble/hashes@^1.4.0", "@noble/hashes@^1.8.0", "@noble/hashes@~1.8.0": + version "1.8.0" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.8.0.tgz#cee43d801fcef9644b11b8194857695acd5f815a" + integrity sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A== + +"@noble/secp256k1@1.7.1": + version "1.7.1" + resolved "https://registry.yarnpkg.com/@noble/secp256k1/-/secp256k1-1.7.1.tgz#b251c70f824ce3ca7f8dc3df08d58f005cc0507c" + integrity sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw== + +"@noble/secp256k1@~1.7.0": + version "1.7.2" + resolved "https://registry.yarnpkg.com/@noble/secp256k1/-/secp256k1-1.7.2.tgz#c2c3343e2dce80e15a914d7442147507f8a98e7f" + integrity sha512-/qzwYl5eFLH8OWIecQWM31qld2g1NfjgylK+TNhqtaUKP37Nm+Y+z30Fjhw0Ct8p9yCQEm2N3W/AckdIb3SMcQ== + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@nomicfoundation/edr-darwin-arm64@0.11.3": + version "0.11.3" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-darwin-arm64/-/edr-darwin-arm64-0.11.3.tgz#d8e2609fc24cf20e75c3782e39cd5a95f7488075" + integrity sha512-w0tksbdtSxz9nuzHKsfx4c2mwaD0+l5qKL2R290QdnN9gi9AV62p9DHkOgfBdyg6/a6ZlnQqnISi7C9avk/6VA== + +"@nomicfoundation/edr-darwin-x64@0.11.3": + version "0.11.3" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-darwin-x64/-/edr-darwin-x64-0.11.3.tgz#7a9e94cee330269a33c7f1dce267560c7e12dbd3" + integrity sha512-QR4jAFrPbOcrO7O2z2ESg+eUeIZPe2bPIlQYgiJ04ltbSGW27FblOzdd5+S3RoOD/dsZGKAvvy6dadBEl0NgoA== + +"@nomicfoundation/edr-linux-arm64-gnu@0.11.3": + version "0.11.3" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-arm64-gnu/-/edr-linux-arm64-gnu-0.11.3.tgz#cd5ec90c7263045c3dfd0b109c73206e488edc27" + integrity sha512-Ktjv89RZZiUmOFPspuSBVJ61mBZQ2+HuLmV67InNlh9TSUec/iDjGIwAn59dx0bF/LOSrM7qg5od3KKac4LJDQ== + +"@nomicfoundation/edr-linux-arm64-musl@0.11.3": + version "0.11.3" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-arm64-musl/-/edr-linux-arm64-musl-0.11.3.tgz#ed23df2d9844470f5661716da27d99a72a69e99e" + integrity sha512-B3sLJx1rL2E9pfdD4mApiwOZSrX0a/KQSBWdlq1uAhFKqkl00yZaY4LejgZndsJAa4iKGQJlGnw4HCGeVt0+jA== + +"@nomicfoundation/edr-linux-x64-gnu@0.11.3": + version "0.11.3" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-x64-gnu/-/edr-linux-x64-gnu-0.11.3.tgz#87a62496c2c4b808bc4a9ae96cca1642a21c2b51" + integrity sha512-D/4cFKDXH6UYyKPu6J3Y8TzW11UzeQI0+wS9QcJzjlrrfKj0ENW7g9VihD1O2FvXkdkTjcCZYb6ai8MMTCsaVw== + +"@nomicfoundation/edr-linux-x64-musl@0.11.3": + version "0.11.3" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-x64-musl/-/edr-linux-x64-musl-0.11.3.tgz#8cfe408c73bcb9ed5e263910c313866d442f4b48" + integrity sha512-ergXuIb4nIvmf+TqyiDX5tsE49311DrBky6+jNLgsGDTBaN1GS3OFwFS8I6Ri/GGn6xOaT8sKu3q7/m+WdlFzg== + +"@nomicfoundation/edr-win32-x64-msvc@0.11.3": + version "0.11.3" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-win32-x64-msvc/-/edr-win32-x64-msvc-0.11.3.tgz#fb208b94553c7eb22246d73a1ac4de5bfdb97d01" + integrity sha512-snvEf+WB3OV0wj2A7kQ+ZQqBquMcrozSLXcdnMdEl7Tmn+KDCbmFKBt3Tk0X3qOU4RKQpLPnTxdM07TJNVtung== + +"@nomicfoundation/edr@^0.11.3": + version "0.11.3" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr/-/edr-0.11.3.tgz#e8b30b868788e45d7a2ee2359a021ef7dcb96952" + integrity sha512-kqILRkAd455Sd6v8mfP3C1/0tCOynJWY+Ir+k/9Boocu2kObCrsFgG+ZWB7fSBVdd9cPVSNrnhWS+V+PEo637g== + dependencies: + "@nomicfoundation/edr-darwin-arm64" "0.11.3" + "@nomicfoundation/edr-darwin-x64" "0.11.3" + "@nomicfoundation/edr-linux-arm64-gnu" "0.11.3" + "@nomicfoundation/edr-linux-arm64-musl" "0.11.3" + "@nomicfoundation/edr-linux-x64-gnu" "0.11.3" + "@nomicfoundation/edr-linux-x64-musl" "0.11.3" + "@nomicfoundation/edr-win32-x64-msvc" "0.11.3" + +"@nomicfoundation/hardhat-network-helpers@1.0.9": + version "1.0.9" + resolved "https://registry.yarnpkg.com/@nomicfoundation/hardhat-network-helpers/-/hardhat-network-helpers-1.0.9.tgz#767449e8a2acda79306ac84626117583d95d25aa" + integrity sha512-OXWCv0cHpwLUO2u7bFxBna6dQtCC2Gg/aN/KtJLO7gmuuA28vgmVKYFRCDUqrbjujzgfwQ2aKyZ9Y3vSmDqS7Q== + dependencies: + ethereumjs-util "^7.1.4" + +"@nomicfoundation/hardhat-verify@2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/hardhat-verify/-/hardhat-verify-2.1.1.tgz#0af5fc4228df860062865fcafb4a01bc0b89f8a3" + integrity sha512-K1plXIS42xSHDJZRkrE2TZikqxp9T4y6jUMUNI/imLgN5uCcEQokmfU0DlyP9zzHncYK92HlT5IWP35UVCLrPw== + dependencies: + "@ethersproject/abi" "^5.1.2" + "@ethersproject/address" "^5.0.2" + cbor "^8.1.0" + debug "^4.1.1" + lodash.clonedeep "^4.5.0" + picocolors "^1.1.0" + semver "^6.3.0" + table "^6.8.0" + undici "^5.14.0" + +"@nomicfoundation/slang@^0.18.3": + version "0.18.3" + resolved "https://registry.yarnpkg.com/@nomicfoundation/slang/-/slang-0.18.3.tgz#976b6c3820081cebf050afbea434038aac9313cc" + integrity sha512-YqAWgckqbHM0/CZxi9Nlf4hjk9wUNLC9ngWCWBiqMxPIZmzsVKYuChdlrfeBPQyvQQBoOhbx+7C1005kLVQDZQ== + dependencies: + "@bytecodealliance/preview2-shim" "0.17.0" + +"@nomicfoundation/solidity-analyzer-darwin-arm64@0.1.2": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.1.2.tgz#3a9c3b20d51360b20affb8f753e756d553d49557" + integrity sha512-JaqcWPDZENCvm++lFFGjrDd8mxtf+CtLd2MiXvMNTBD33dContTZ9TWETwNFwg7JTJT5Q9HEecH7FA+HTSsIUw== + +"@nomicfoundation/solidity-analyzer-darwin-x64@0.1.2": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.1.2.tgz#74dcfabeb4ca373d95bd0d13692f44fcef133c28" + integrity sha512-fZNmVztrSXC03e9RONBT+CiksSeYcxI1wlzqyr0L7hsQlK1fzV+f04g2JtQ1c/Fe74ZwdV6aQBdd6Uwl1052sw== + +"@nomicfoundation/solidity-analyzer-linux-arm64-gnu@0.1.2": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-arm64-gnu/-/solidity-analyzer-linux-arm64-gnu-0.1.2.tgz#4af5849a89e5a8f511acc04f28eb5d4460ba2b6a" + integrity sha512-3d54oc+9ZVBuB6nbp8wHylk4xh0N0Gc+bk+/uJae+rUgbOBwQSfuGIbAZt1wBXs5REkSmynEGcqx6DutoK0tPA== + +"@nomicfoundation/solidity-analyzer-linux-arm64-musl@0.1.2": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-arm64-musl/-/solidity-analyzer-linux-arm64-musl-0.1.2.tgz#54036808a9a327b2ff84446c130a6687ee702a8e" + integrity sha512-iDJfR2qf55vgsg7BtJa7iPiFAsYf2d0Tv/0B+vhtnI16+wfQeTbP7teookbGvAo0eJo7aLLm0xfS/GTkvHIucA== + +"@nomicfoundation/solidity-analyzer-linux-x64-gnu@0.1.2": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.1.2.tgz#466cda0d6e43691986c944b909fc6dbb8cfc594e" + integrity sha512-9dlHMAt5/2cpWyuJ9fQNOUXFB/vgSFORg1jpjX1Mh9hJ/MfZXlDdHQ+DpFCs32Zk5pxRBb07yGvSHk9/fezL+g== + +"@nomicfoundation/solidity-analyzer-linux-x64-musl@0.1.2": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-x64-musl/-/solidity-analyzer-linux-x64-musl-0.1.2.tgz#2b35826987a6e94444140ac92310baa088ee7f94" + integrity sha512-GzzVeeJob3lfrSlDKQw2bRJ8rBf6mEYaWY+gW0JnTDHINA0s2gPR4km5RLIj1xeZZOYz4zRw+AEeYgLRqB2NXg== + +"@nomicfoundation/solidity-analyzer-win32-x64-msvc@0.1.2": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-x64-msvc/-/solidity-analyzer-win32-x64-msvc-0.1.2.tgz#e6363d13b8709ca66f330562337dbc01ce8bbbd9" + integrity sha512-Fdjli4DCcFHb4Zgsz0uEJXZ2K7VEO+w5KVv7HmT7WO10iODdU9csC2az4jrhEsRtiR9Gfd74FlG0NYlw1BMdyA== + +"@nomicfoundation/solidity-analyzer@^0.1.0": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.1.2.tgz#8bcea7d300157bf3a770a851d9f5c5e2db34ac55" + integrity sha512-q4n32/FNKIhQ3zQGGw5CvPF6GTvDCpYwIf7bEY/dZTZbgfDsHyjJwURxUJf3VQuuJj+fDIFl4+KkBVbw4Ef6jA== + optionalDependencies: + "@nomicfoundation/solidity-analyzer-darwin-arm64" "0.1.2" + "@nomicfoundation/solidity-analyzer-darwin-x64" "0.1.2" + "@nomicfoundation/solidity-analyzer-linux-arm64-gnu" "0.1.2" + "@nomicfoundation/solidity-analyzer-linux-arm64-musl" "0.1.2" + "@nomicfoundation/solidity-analyzer-linux-x64-gnu" "0.1.2" + "@nomicfoundation/solidity-analyzer-linux-x64-musl" "0.1.2" + "@nomicfoundation/solidity-analyzer-win32-x64-msvc" "0.1.2" + +"@nomiclabs/hardhat-ethers@2.2.3": + version "2.2.3" + resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.2.3.tgz#b41053e360c31a32c2640c9a45ee981a7e603fe0" + integrity sha512-YhzPdzb612X591FOe68q+qXVXGG2ANZRvDo0RRUtimev85rCrAlv/TLMEZw5c+kq9AbzocLTVX/h2jVIFPL9Xg== + +"@nomiclabs/hardhat-solhint@2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-solhint/-/hardhat-solhint-2.0.1.tgz#62896569d10c95a17cefab0229701cfffd19246f" + integrity sha512-SrTLufY21t78KLpJL5fS6gHIsCwVv0yWsHp1aQOPL1qwRWpe0Mnh5wb2YzBHd3Dbr/KzUYys+j2ui0PsSVU9pg== + dependencies: + solhint "^2.0.0" + +"@nomiclabs/hardhat-waffle@2.0.6": + version "2.0.6" + resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-waffle/-/hardhat-waffle-2.0.6.tgz#d11cb063a5f61a77806053e54009c40ddee49a54" + integrity sha512-+Wz0hwmJGSI17B+BhU/qFRZ1l6/xMW82QGXE/Gi+WTmwgJrQefuBs1lIf7hzQ1hLk6hpkvb/zwcNkpVKRYTQYg== + +"@openzeppelin/contracts-upgradeable-4.7.3@npm:@openzeppelin/contracts-upgradeable@v4.7.3": + version "4.7.3" + resolved "https://registry.yarnpkg.com/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-4.7.3.tgz#f1d606e2827d409053f3e908ba4eb8adb1dd6995" + integrity sha512-+wuegAMaLcZnLCJIvrVUDzA9z/Wp93f0Dla/4jJvIhijRrPabjQbZe6fWiECLaJyfn5ci9fqf9vTw3xpQOad2A== + +"@openzeppelin/contracts-v0.7@npm:@openzeppelin/contracts@v3.4.2": + version "3.4.2" + resolved "https://registry.yarnpkg.com/@openzeppelin/contracts/-/contracts-3.4.2.tgz#d81f786fda2871d1eb8a8c5a73e455753ba53527" + integrity sha512-z0zMCjyhhp4y7XKAcDAi3Vgms4T2PstwBdahiO0+9NaGICQKjynK3wduSRplTgk4LXmoO1yfDGO5RbjKYxtuxA== + +"@openzeppelin/contracts@3.4.2-solc-0.7", "@openzeppelin/contracts@4.4.2", "@openzeppelin/contracts@~4.3.3": + version "4.4.2" + resolved "https://registry.yarnpkg.com/@openzeppelin/contracts/-/contracts-4.4.2.tgz#4e889c9c66e736f7de189a53f8ba5b8d789425c2" + integrity sha512-NyJV7sJgoGYqbtNUWgzzOGW4T6rR19FmX1IJgXGdapGPWsuMelGJn9h03nos0iqfforCbCB0iYIR0MtIuIFLLw== + +"@openzeppelin/defender-sdk-account-client@^2.7.0": + version "2.7.1" + resolved "https://registry.yarnpkg.com/@openzeppelin/defender-sdk-account-client/-/defender-sdk-account-client-2.7.1.tgz#f1d4ffd1028b441e01aea0fb65d9d034b57fdb46" + integrity sha512-NHJyvEQk8XQ/NHsHqwX8tQ5napQuotb7uRltq0up5On5HM4t/YwMWXeCuSmVrkehs9mRMclu3a+TEZpPGwrnYw== + dependencies: + "@openzeppelin/defender-sdk-base-client" "^2.7.1" + axios "^1.7.4" + lodash "^4.17.21" + +"@openzeppelin/defender-sdk-action-client@^2.7.0": + version "2.7.1" + resolved "https://registry.yarnpkg.com/@openzeppelin/defender-sdk-action-client/-/defender-sdk-action-client-2.7.1.tgz#d053b1dd53cdfdf25783c758ab2d293d8ffd4583" + integrity sha512-4HsmJs000xptiOoi9Kk8k1E4krUWGV6V7Nq+8RusGOGNOddfb1/U8igNaKXfG0HjshKDFqlpBlzXUpN1lcfwMg== + dependencies: + "@openzeppelin/defender-sdk-base-client" "^2.7.1" + axios "^1.7.4" + dotenv "^16.3.1" + glob "^11.0.0" + jszip "^3.10.1" + lodash "^4.17.21" + +"@openzeppelin/defender-sdk-address-book-client@^2.7.0": + version "2.7.1" + resolved "https://registry.yarnpkg.com/@openzeppelin/defender-sdk-address-book-client/-/defender-sdk-address-book-client-2.7.1.tgz#74f0fc87f98ec6f0c05d45a36a9a552776c35bd9" + integrity sha512-B27p5AYcWpmwIMqplt/yWlVoe8UwJ+3oOcULYgHO9cnpiJ9jhA/4nGV+vIh3+tOEuROJrLdJzbRKoTE96TRSYA== + dependencies: + "@openzeppelin/defender-sdk-base-client" "^2.7.1" + dotenv "^16.3.1" + lodash "^4.17.21" + +"@openzeppelin/defender-sdk-approval-process-client@^2.7.0": + version "2.7.1" + resolved "https://registry.yarnpkg.com/@openzeppelin/defender-sdk-approval-process-client/-/defender-sdk-approval-process-client-2.7.1.tgz#664b85f4e2bb8b23b57ead9a3bb32eb042236d84" + integrity sha512-KI3q6glPaPXaznay8iTbRHOjavZA4CJEQg9PfqCrAPesY0FdGb9hr3FaLKxP5IECQ/Ha1llnBkn/ZcBJoZ8Xyw== + dependencies: + "@openzeppelin/defender-sdk-base-client" "^2.7.1" + axios "^1.7.4" + lodash "^4.17.21" + +"@openzeppelin/defender-sdk-base-client@^2.7.0", "@openzeppelin/defender-sdk-base-client@^2.7.1": + version "2.7.1" + resolved "https://registry.yarnpkg.com/@openzeppelin/defender-sdk-base-client/-/defender-sdk-base-client-2.7.1.tgz#c32f152fa3848e18065aafc4c4ee8b582b410d7c" + integrity sha512-7gFCteA+V3396A3McgqzmirwmbPXuHJYN896O3AbsHX9XcxInN74C5Zv3tFHld0GmIX/VlaIvILNMhOpdISZjA== + dependencies: + "@aws-sdk/client-lambda" "^3.563.0" + amazon-cognito-identity-js "^6.3.6" + async-retry "^1.3.3" + axios "^1.7.4" + +"@openzeppelin/defender-sdk-deploy-client@^2.7.0": + version "2.7.1" + resolved "https://registry.yarnpkg.com/@openzeppelin/defender-sdk-deploy-client/-/defender-sdk-deploy-client-2.7.1.tgz#e88864b2d1dcf783d40f0b422dd7d8e45e7f4035" + integrity sha512-vFkDupn8ATW83KjZlY5U7UdsvSo9YZwOMQoVaHJO3S+Z6h0wa6cTzuQV9C0AKYq524quQkFsQ4AQq5CgsgdEkQ== + dependencies: + "@openzeppelin/defender-sdk-base-client" "^2.7.1" + axios "^1.7.4" + lodash "^4.17.21" + +"@openzeppelin/defender-sdk-key-value-store-client@^2.7.0": + version "2.7.1" + resolved "https://registry.yarnpkg.com/@openzeppelin/defender-sdk-key-value-store-client/-/defender-sdk-key-value-store-client-2.7.1.tgz#19262af8be93cd411c157259da995cf4cd9657d0" + integrity sha512-WHS0vk9htOF0h8XMhCDdEB5yhq9Xu17yfln2+zgX15lyrnLg56c71grjclhbZ+kXN3yBuy0AFGIYnaYmVV947Q== + dependencies: + "@openzeppelin/defender-sdk-base-client" "^2.7.1" + axios "^1.7.4" + fs-extra "^11.2.0" + lodash "^4.17.21" + +"@openzeppelin/defender-sdk-monitor-client@^2.7.0": + version "2.7.1" + resolved "https://registry.yarnpkg.com/@openzeppelin/defender-sdk-monitor-client/-/defender-sdk-monitor-client-2.7.1.tgz#79ab47c9620364ed1eef38c45c5d613f86dd8241" + integrity sha512-s7QT3xiJxCha6XXmSts9U02dJHdWoutnaO4KJVz2WSTFb6pydiLwD8njvhLkclcHORrIcFSJ6CA8SCpjLRQ7Fg== + dependencies: + "@openzeppelin/defender-sdk-base-client" "^2.7.1" + axios "^1.7.4" + ethers "^6.9.0" + lodash "^4.17.21" + +"@openzeppelin/defender-sdk-network-client@^2.7.0": + version "2.7.1" + resolved "https://registry.yarnpkg.com/@openzeppelin/defender-sdk-network-client/-/defender-sdk-network-client-2.7.1.tgz#ebecc5ad8f139f4c06b86e0764bae4661b9d093b" + integrity sha512-AWJKT9YKv9wH3/1AJZCztF3VIsg1sX+v8fjtyFLROqtVAzmhB8WKBRVt9GHAZ+PmsixAKDMOEbH6R1cipTIVHQ== + dependencies: + "@openzeppelin/defender-sdk-base-client" "^2.7.1" + axios "^1.7.4" + lodash "^4.17.21" + +"@openzeppelin/defender-sdk-notification-channel-client@^2.7.0": + version "2.7.1" + resolved "https://registry.yarnpkg.com/@openzeppelin/defender-sdk-notification-channel-client/-/defender-sdk-notification-channel-client-2.7.1.tgz#71ccc3c978fb3e6adcfcf33844d0149bf46114d7" + integrity sha512-uvtXJ/dMexZC/3xBLCdhV6Z6Dg4uIErOBjlm+dFr8yBulUEioUo3/1OaivBIJ+mYICmQBpcRV91NmslyNOZLng== + dependencies: + "@openzeppelin/defender-sdk-base-client" "^2.7.1" + axios "^1.7.4" + lodash "^4.17.21" + +"@openzeppelin/defender-sdk-proposal-client@^2.7.0": + version "2.7.1" + resolved "https://registry.yarnpkg.com/@openzeppelin/defender-sdk-proposal-client/-/defender-sdk-proposal-client-2.7.1.tgz#0829cb45ba57d0cdbfa55f4256be4b76511a1527" + integrity sha512-hOkR9azX2e6U51suPIU5XyZNxVlGaDt3srCD55e8YsFYoXlbhVFJpgt5N2zd9kttv5a+rCSKtJR2hfJWxsvGsw== + dependencies: + "@openzeppelin/defender-sdk-base-client" "^2.7.1" + axios "^1.7.4" + ethers "^6.9.0" + lodash "^4.17.21" + +"@openzeppelin/defender-sdk-relay-client@^2.7.0": + version "2.7.1" + resolved "https://registry.yarnpkg.com/@openzeppelin/defender-sdk-relay-client/-/defender-sdk-relay-client-2.7.1.tgz#3b27168edc5a6b3a6e255ad5319685d23e77725e" + integrity sha512-rAgURxg9F7n6oZletBGMWkvAOsvy9Ez/89UYjALc246w9BolfEc2v8KweUfCn3ebeY4n1KfIXnpkwZN59u3xXg== + dependencies: + "@openzeppelin/defender-sdk-base-client" "^2.7.1" + axios "^1.7.4" + lodash "^4.17.21" + +"@openzeppelin/defender-sdk-relay-group-client@^2.7.0": + version "2.7.1" + resolved "https://registry.yarnpkg.com/@openzeppelin/defender-sdk-relay-group-client/-/defender-sdk-relay-group-client-2.7.1.tgz#b0019b07c80f33e36b7bd81de3640bfd614326d0" + integrity sha512-vUTdUvnIdRIpyIc8H+3chdy/j0G5m04l8uVYkq9X3n2Pt4dXZq/Auuj4Y2RinF+3uueUk0nnmBndFo20jjjUMQ== + dependencies: + "@openzeppelin/defender-sdk-base-client" "^2.7.1" + axios "^1.7.4" + lodash "^4.17.21" + +"@openzeppelin/defender-sdk-relay-signer-client@^2.7.0": + version "2.7.1" + resolved "https://registry.yarnpkg.com/@openzeppelin/defender-sdk-relay-signer-client/-/defender-sdk-relay-signer-client-2.7.1.tgz#8c7304889e165eed050ebebf6c5e4456ace18c0b" + integrity sha512-05DixpVGbm+zeRSs3n6ptzmxqEweQPE5yYDugLcQrcffneLAbakeiXhCl/t0kCu0EmwdxMeQTGaaXN/Y9UlrPg== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/networks" "^5.7.1" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/providers" "^5.7.2" + "@ethersproject/strings" "^5.7.0" + "@openzeppelin/defender-sdk-base-client" "^2.7.1" + amazon-cognito-identity-js "^6.3.6" + axios "^1.7.4" + ethers "^6.9.0" + lodash "^4.17.21" + +"@openzeppelin/defender-sdk@2.7.0": + version "2.7.0" + resolved "https://registry.yarnpkg.com/@openzeppelin/defender-sdk/-/defender-sdk-2.7.0.tgz#a5830b39a4c57a63b91c0195dda7ef6571f491af" + integrity sha512-A7Lvte6+j6A0EQ/nYXtremP37JhW/x58C9AtD//4LS9o6OsSJuXE4R58L5E48cTxOT/I3xelYmgGh0KGQTao4A== + dependencies: + "@openzeppelin/defender-sdk-account-client" "^2.7.0" + "@openzeppelin/defender-sdk-action-client" "^2.7.0" + "@openzeppelin/defender-sdk-address-book-client" "^2.7.0" + "@openzeppelin/defender-sdk-approval-process-client" "^2.7.0" + "@openzeppelin/defender-sdk-base-client" "^2.7.0" + "@openzeppelin/defender-sdk-deploy-client" "^2.7.0" + "@openzeppelin/defender-sdk-key-value-store-client" "^2.7.0" + "@openzeppelin/defender-sdk-monitor-client" "^2.7.0" + "@openzeppelin/defender-sdk-network-client" "^2.7.0" + "@openzeppelin/defender-sdk-notification-channel-client" "^2.7.0" + "@openzeppelin/defender-sdk-proposal-client" "^2.7.0" + "@openzeppelin/defender-sdk-relay-client" "^2.7.0" + "@openzeppelin/defender-sdk-relay-group-client" "^2.7.0" + "@openzeppelin/defender-sdk-relay-signer-client" "^2.7.0" + +"@openzeppelin/hardhat-upgrades@1.27.0": + version "1.27.0" + resolved "https://registry.yarnpkg.com/@openzeppelin/hardhat-upgrades/-/hardhat-upgrades-1.27.0.tgz#0e304041d72c97979c76466137b48733120270fd" + integrity sha512-+OwrHWDz9tzpmBev6t2CtZM2tRpy/ybhg5e3GIgyeqTxK2vUV40dxIxO6lie+qKeJHZ2RIdDwvSTSiCEJif+fA== + dependencies: + "@openzeppelin/upgrades-core" "^1.26.2" + chalk "^4.1.0" + debug "^4.1.1" + defender-base-client "^1.44.0" + platform-deploy-client "^0.6.0" + proper-lockfile "^4.1.1" + +"@openzeppelin/upgrades-core@^1.26.2": + version "1.44.2" + resolved "https://registry.yarnpkg.com/@openzeppelin/upgrades-core/-/upgrades-core-1.44.2.tgz#c38d6adc075f4d5e946c0fef9ba4b68953adec6a" + integrity sha512-m6iorjyhPK9ow5/trNs7qsBC/SOzJCO51pvvAF2W9nOiZ1t0RtCd+rlRmRmlWTv4M33V0wzIUeamJ2BPbzgUXA== + dependencies: + "@nomicfoundation/slang" "^0.18.3" + bignumber.js "^9.1.2" + cbor "^10.0.0" + chalk "^4.1.0" + compare-versions "^6.0.0" + debug "^4.1.1" + ethereumjs-util "^7.0.3" + minimatch "^9.0.5" + minimist "^1.2.7" + proper-lockfile "^4.1.1" + solidity-ast "^0.4.60" + +"@oxc-project/types@=0.122.0": + version "0.122.0" + resolved "https://registry.yarnpkg.com/@oxc-project/types/-/types-0.122.0.tgz#2f4e77a3b183c87b2a326affd703ef71ba836601" + integrity sha512-oLAl5kBpV4w69UtFZ9xqcmTi+GENWOcPF7FCrczTiBbmC0ibXxCwyvZGbO39rCVEuLGAZM84DH0pUIyyv/YJzA== + +"@pkgjs/parseargs@^0.11.0": + version "0.11.0" + resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" + integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== + +"@resolver-engine/core@^0.3.3": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@resolver-engine/core/-/core-0.3.3.tgz#590f77d85d45bc7ecc4e06c654f41345db6ca967" + integrity sha512-eB8nEbKDJJBi5p5SrvrvILn4a0h42bKtbCTri3ZxCGt6UvoQyp7HnGOfki944bUjBSHKK3RvgfViHn+kqdXtnQ== + dependencies: + debug "^3.1.0" + is-url "^1.2.4" + request "^2.85.0" + +"@resolver-engine/fs@^0.3.3": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@resolver-engine/fs/-/fs-0.3.3.tgz#fbf83fa0c4f60154a82c817d2fe3f3b0c049a973" + integrity sha512-wQ9RhPUcny02Wm0IuJwYMyAG8fXVeKdmhm8xizNByD4ryZlx6PP6kRen+t/haF43cMfmaV7T3Cx6ChOdHEhFUQ== + dependencies: + "@resolver-engine/core" "^0.3.3" + debug "^3.1.0" + +"@resolver-engine/imports-fs@^0.3.3": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@resolver-engine/imports-fs/-/imports-fs-0.3.3.tgz#4085db4b8d3c03feb7a425fbfcf5325c0d1e6c1b" + integrity sha512-7Pjg/ZAZtxpeyCFlZR5zqYkz+Wdo84ugB5LApwriT8XFeQoLwGUj4tZFFvvCuxaNCcqZzCYbonJgmGObYBzyCA== + dependencies: + "@resolver-engine/fs" "^0.3.3" + "@resolver-engine/imports" "^0.3.3" + debug "^3.1.0" + +"@resolver-engine/imports@^0.3.3": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@resolver-engine/imports/-/imports-0.3.3.tgz#badfb513bb3ff3c1ee9fd56073e3144245588bcc" + integrity sha512-anHpS4wN4sRMwsAbMXhMfOD/y4a4Oo0Cw/5+rue7hSwGWsDOQaAU1ClK1OxjUC35/peazxEl8JaSRRS+Xb8t3Q== + dependencies: + "@resolver-engine/core" "^0.3.3" + debug "^3.1.0" + hosted-git-info "^2.6.0" + path-browserify "^1.0.0" + url "^0.11.0" + +"@rigidity/bls-signatures@2.0.5": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@rigidity/bls-signatures/-/bls-signatures-2.0.5.tgz#4bd32a4594bb0c61a54101e4e1736ffc4de17e49" + integrity sha512-ybuB+z1+Duyy7wuyBbuM0xRc+pEbMqDQ7UjjkzceYQRWg78RmsFcNs0tNvZbmThYc/IFvb7sWmdgzbOcvtevYA== + dependencies: + chai "^4.3.6" + jssha "^3.2.0" + randombytes "^2.1.0" + +"@rolldown/binding-android-arm64@1.0.0-rc.12": + version "1.0.0-rc.12" + resolved "https://registry.yarnpkg.com/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.0-rc.12.tgz#4e6af08b89da02596cc5da4b105082b68673ffec" + integrity sha512-pv1y2Fv0JybcykuiiD3qBOBdz6RteYojRFY1d+b95WVuzx211CRh+ytI/+9iVyWQ6koTh5dawe4S/yRfOFjgaA== + +"@rolldown/binding-darwin-arm64@1.0.0-rc.12": + version "1.0.0-rc.12" + resolved "https://registry.yarnpkg.com/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.0-rc.12.tgz#a06890f4c9b48ff0fc97edbedfc762bef7cffd73" + integrity sha512-cFYr6zTG/3PXXF3pUO+umXxt1wkRK/0AYT8lDwuqvRC+LuKYWSAQAQZjCWDQpAH172ZV6ieYrNnFzVVcnSflAg== + +"@rolldown/binding-darwin-x64@1.0.0-rc.12": + version "1.0.0-rc.12" + resolved "https://registry.yarnpkg.com/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.0-rc.12.tgz#eddf6aa3ed3509171fe21711f1e8ec8e0fd7ec49" + integrity sha512-ZCsYknnHzeXYps0lGBz8JrF37GpE9bFVefrlmDrAQhOEi4IOIlcoU1+FwHEtyXGx2VkYAvhu7dyBf75EJQffBw== + +"@rolldown/binding-freebsd-x64@1.0.0-rc.12": + version "1.0.0-rc.12" + resolved "https://registry.yarnpkg.com/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.0-rc.12.tgz#2102dfed19fd1f1b53435fcaaf0bc61129a266a3" + integrity sha512-dMLeprcVsyJsKolRXyoTH3NL6qtsT0Y2xeuEA8WQJquWFXkEC4bcu1rLZZSnZRMtAqwtrF/Ib9Ddtpa/Gkge9Q== + +"@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.12": + version "1.0.0-rc.12" + resolved "https://registry.yarnpkg.com/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.0-rc.12.tgz#b2c13f40e990fd1e1935492850536c768c961a0f" + integrity sha512-YqWjAgGC/9M1lz3GR1r1rP79nMgo3mQiiA+Hfo+pvKFK1fAJ1bCi0ZQVh8noOqNacuY1qIcfyVfP6HoyBRZ85Q== + +"@rolldown/binding-linux-arm64-gnu@1.0.0-rc.12": + version "1.0.0-rc.12" + resolved "https://registry.yarnpkg.com/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.0-rc.12.tgz#32ca9f77c1e76b2913b3d53d2029dc171c0532d6" + integrity sha512-/I5AS4cIroLpslsmzXfwbe5OmWvSsrFuEw3mwvbQ1kDxJ822hFHIx+vsN/TAzNVyepI/j/GSzrtCIwQPeKCLIg== + +"@rolldown/binding-linux-arm64-musl@1.0.0-rc.12": + version "1.0.0-rc.12" + resolved "https://registry.yarnpkg.com/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.0-rc.12.tgz#f4337ddd52f0ed3ada2105b59ee1b757a2c4858c" + integrity sha512-V6/wZztnBqlx5hJQqNWwFdxIKN0m38p8Jas+VoSfgH54HSj9tKTt1dZvG6JRHcjh6D7TvrJPWFGaY9UBVOaWPw== + +"@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.12": + version "1.0.0-rc.12" + resolved "https://registry.yarnpkg.com/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.0.0-rc.12.tgz#22fdd14cb00ee8208c28a39bab7f28860ec6705d" + integrity sha512-AP3E9BpcUYliZCxa3w5Kwj9OtEVDYK6sVoUzy4vTOJsjPOgdaJZKFmN4oOlX0Wp0RPV2ETfmIra9x1xuayFB7g== + +"@rolldown/binding-linux-s390x-gnu@1.0.0-rc.12": + version "1.0.0-rc.12" + resolved "https://registry.yarnpkg.com/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.0.0-rc.12.tgz#838215096d1de6d3d509e0410801cb7cda8161ff" + integrity sha512-nWwpvUSPkoFmZo0kQazZYOrT7J5DGOJ/+QHHzjvNlooDZED8oH82Yg67HvehPPLAg5fUff7TfWFHQS8IV1n3og== + +"@rolldown/binding-linux-x64-gnu@1.0.0-rc.12": + version "1.0.0-rc.12" + resolved "https://registry.yarnpkg.com/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.0-rc.12.tgz#f7d71d97f6bd43198596b26dc2cb364586e12673" + integrity sha512-RNrafz5bcwRy+O9e6P8Z/OCAJW/A+qtBczIqVYwTs14pf4iV1/+eKEjdOUta93q2TsT/FI0XYDP3TCky38LMAg== + +"@rolldown/binding-linux-x64-musl@1.0.0-rc.12": + version "1.0.0-rc.12" + resolved "https://registry.yarnpkg.com/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.0-rc.12.tgz#a2ca737f01b0ad620c4c404ca176ea3e3ad804c3" + integrity sha512-Jpw/0iwoKWx3LJ2rc1yjFrj+T7iHZn2JDg1Yny1ma0luviFS4mhAIcd1LFNxK3EYu3DHWCps0ydXQ5i/rrJ2ig== + +"@rolldown/binding-openharmony-arm64@1.0.0-rc.12": + version "1.0.0-rc.12" + resolved "https://registry.yarnpkg.com/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.0-rc.12.tgz#f66317e29eafcc300bed7af8dddac26ab3b1bf82" + integrity sha512-vRugONE4yMfVn0+7lUKdKvN4D5YusEiPilaoO2sgUWpCvrncvWgPMzK00ZFFJuiPgLwgFNP5eSiUlv2tfc+lpA== + +"@rolldown/binding-wasm32-wasi@1.0.0-rc.12": + version "1.0.0-rc.12" + resolved "https://registry.yarnpkg.com/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.0-rc.12.tgz#8825523fdffa1f1dc4683be9650ffaa9e4a77f04" + integrity sha512-ykGiLr/6kkiHc0XnBfmFJuCjr5ZYKKofkx+chJWDjitX+KsJuAmrzWhwyOMSHzPhzOHOy7u9HlFoa5MoAOJ/Zg== + dependencies: + "@napi-rs/wasm-runtime" "^1.1.1" + +"@rolldown/binding-win32-arm64-msvc@1.0.0-rc.12": + version "1.0.0-rc.12" + resolved "https://registry.yarnpkg.com/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.0-rc.12.tgz#4f3a17e3d68a58309c27c0930b0f7986ccabef47" + integrity sha512-5eOND4duWkwx1AzCxadcOrNeighiLwMInEADT0YM7xeEOOFcovWZCq8dadXgcRHSf3Ulh1kFo/qvzoFiCLOL1Q== + +"@rolldown/binding-win32-x64-msvc@1.0.0-rc.12": + version "1.0.0-rc.12" + resolved "https://registry.yarnpkg.com/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.0-rc.12.tgz#d762765d5660598a96b570b513f535c151272985" + integrity sha512-PyqoipaswDLAZtot351MLhrlrh6lcZPo2LSYE+VDxbVk24LVKAGOuE4hb8xZQmrPAuEtTZW8E6D2zc5EUZX4Lw== + +"@rolldown/pluginutils@1.0.0-rc.12": + version "1.0.0-rc.12" + resolved "https://registry.yarnpkg.com/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.12.tgz#74163aec62fa51cee18d62709483963dceb3f6dc" + integrity sha512-HHMwmarRKvoFsJorqYlFeFRzXZqCt2ETQlEDOb9aqssrnVBB1/+xgTGtuTrIk5vzLNX1MjMtTf7W9z3tsSbrxw== + +"@rollup/plugin-commonjs@29.0.0": + version "29.0.0" + resolved "https://registry.yarnpkg.com/@rollup/plugin-commonjs/-/plugin-commonjs-29.0.0.tgz#42a6cc0eeb8ae7aabfc6f9bdc28fe22d65abd15a" + integrity sha512-U2YHaxR2cU/yAiwKJtJRhnyLk7cifnQw0zUpISsocBDoHDJn+HTV74ABqnwr5bEgWUwFZC9oFL6wLe21lHu5eQ== + dependencies: + "@rollup/pluginutils" "^5.0.1" + commondir "^1.0.1" + estree-walker "^2.0.2" + fdir "^6.2.0" + is-reference "1.2.1" + magic-string "^0.30.3" + picomatch "^4.0.2" + +"@rollup/plugin-json@6.1.0": + version "6.1.0" + resolved "https://registry.yarnpkg.com/@rollup/plugin-json/-/plugin-json-6.1.0.tgz#fbe784e29682e9bb6dee28ea75a1a83702e7b805" + integrity sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA== + dependencies: + "@rollup/pluginutils" "^5.1.0" + +"@rollup/plugin-node-resolve@16.0.3 ": + version "16.0.3" + resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-16.0.3.tgz#0988e6f2cbb13316b0f5e7213f757bc9ed44928f" + integrity sha512-lUYM3UBGuM93CnMPG1YocWu7X802BrNF3jW2zny5gQyLQgRFJhV1Sq0Zi74+dh/6NBx1DxFC4b4GXg9wUCG5Qg== + dependencies: + "@rollup/pluginutils" "^5.0.1" + "@types/resolve" "1.20.2" + deepmerge "^4.2.2" + is-module "^1.0.0" + resolve "^1.22.1" + +"@rollup/pluginutils@^5.0.1", "@rollup/pluginutils@^5.1.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-5.3.0.tgz#57ba1b0cbda8e7a3c597a4853c807b156e21a7b4" + integrity sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q== + dependencies: + "@types/estree" "^1.0.0" + estree-walker "^2.0.2" + picomatch "^4.0.2" + +"@rollup/rollup-android-arm-eabi@4.54.0": + version "4.54.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.54.0.tgz#f3ff5dbde305c4fa994d49aeb0a5db5305eff03b" + integrity sha512-OywsdRHrFvCdvsewAInDKCNyR3laPA2mc9bRYJ6LBp5IyvF3fvXbbNR0bSzHlZVFtn6E0xw2oZlyjg4rKCVcng== + +"@rollup/rollup-android-arm64@4.54.0": + version "4.54.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.54.0.tgz#c97d6ee47846a7ab1cd38e968adce25444a90a19" + integrity sha512-Skx39Uv+u7H224Af+bDgNinitlmHyQX1K/atIA32JP3JQw6hVODX5tkbi2zof/E69M1qH2UoN3Xdxgs90mmNYw== + +"@rollup/rollup-darwin-arm64@4.54.0": + version "4.54.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.54.0.tgz#a13fc2d82e01eaf8ac823634a3f5f76fd9d0f938" + integrity sha512-k43D4qta/+6Fq+nCDhhv9yP2HdeKeP56QrUUTW7E6PhZP1US6NDqpJj4MY0jBHlJivVJD5P8NxrjuobZBJTCRw== + +"@rollup/rollup-darwin-x64@4.54.0": + version "4.54.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.54.0.tgz#db4fa8b2b76d86f7e9b68ce4661fafe9767adf9b" + integrity sha512-cOo7biqwkpawslEfox5Vs8/qj83M/aZCSSNIWpVzfU2CYHa2G3P1UN5WF01RdTHSgCkri7XOlTdtk17BezlV3A== + +"@rollup/rollup-freebsd-arm64@4.54.0": + version "4.54.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.54.0.tgz#b2c6039de4b75efd3f29417fcb1a795c75a4e3ee" + integrity sha512-miSvuFkmvFbgJ1BevMa4CPCFt5MPGw094knM64W9I0giUIMMmRYcGW/JWZDriaw/k1kOBtsWh1z6nIFV1vPNtA== + +"@rollup/rollup-freebsd-x64@4.54.0": + version "4.54.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.54.0.tgz#9ae2a216c94f87912a596a3b3a2ec5199a689ba5" + integrity sha512-KGXIs55+b/ZfZsq9aR026tmr/+7tq6VG6MsnrvF4H8VhwflTIuYh+LFUlIsRdQSgrgmtM3fVATzEAj4hBQlaqQ== + +"@rollup/rollup-linux-arm-gnueabihf@4.54.0": + version "4.54.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.54.0.tgz#69d5de7f781132f138514f2b900c523e38e2461f" + integrity sha512-EHMUcDwhtdRGlXZsGSIuXSYwD5kOT9NVnx9sqzYiwAc91wfYOE1g1djOEDseZJKKqtHAHGwnGPQu3kytmfaXLQ== + +"@rollup/rollup-linux-arm-musleabihf@4.54.0": + version "4.54.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.54.0.tgz#b6431e5699747f285306ffe8c1194d7af74f801f" + integrity sha512-+pBrqEjaakN2ySv5RVrj/qLytYhPKEUwk+e3SFU5jTLHIcAtqh2rLrd/OkbNuHJpsBgxsD8ccJt5ga/SeG0JmA== + +"@rollup/rollup-linux-arm64-gnu@4.54.0": + version "4.54.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.54.0.tgz#a32931baec8a0fa7b3288afb72d400ae735112c2" + integrity sha512-NSqc7rE9wuUaRBsBp5ckQ5CVz5aIRKCwsoa6WMF7G01sX3/qHUw/z4pv+D+ahL1EIKy6Enpcnz1RY8pf7bjwng== + +"@rollup/rollup-linux-arm64-musl@4.54.0": + version "4.54.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.54.0.tgz#0ad72572b01eb946c0b1a7a6f17ab3be6689a963" + integrity sha512-gr5vDbg3Bakga5kbdpqx81m2n9IX8M6gIMlQQIXiLTNeQW6CucvuInJ91EuCJ/JYvc+rcLLsDFcfAD1K7fMofg== + +"@rollup/rollup-linux-loong64-gnu@4.54.0": + version "4.54.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.54.0.tgz#05681f000310906512279944b5bef38c0cd4d326" + integrity sha512-gsrtB1NA3ZYj2vq0Rzkylo9ylCtW/PhpLEivlgWe0bpgtX5+9j9EZa0wtZiCjgu6zmSeZWyI/e2YRX1URozpIw== + +"@rollup/rollup-linux-ppc64-gnu@4.54.0": + version "4.54.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.54.0.tgz#9847a8c9dd76d687c3bdbe38d7f5f32c6b2743c8" + integrity sha512-y3qNOfTBStmFNq+t4s7Tmc9hW2ENtPg8FeUD/VShI7rKxNW7O4fFeaYbMsd3tpFlIg1Q8IapFgy7Q9i2BqeBvA== + +"@rollup/rollup-linux-riscv64-gnu@4.54.0": + version "4.54.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.54.0.tgz#173f20c278ac770ae3e969663a27d172a4545e87" + integrity sha512-89sepv7h2lIVPsFma8iwmccN7Yjjtgz0Rj/Ou6fEqg3HDhpCa+Et+YSufy27i6b0Wav69Qv4WBNl3Rs6pwhebQ== + +"@rollup/rollup-linux-riscv64-musl@4.54.0": + version "4.54.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.54.0.tgz#db70c2377ae1ef61ef8673354d107ecb3fa7ffed" + integrity sha512-ZcU77ieh0M2Q8Ur7D5X7KvK+UxbXeDHwiOt/CPSBTI1fBmeDMivW0dPkdqkT4rOgDjrDDBUed9x4EgraIKoR2A== + +"@rollup/rollup-linux-s390x-gnu@4.54.0": + version "4.54.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.54.0.tgz#b2c461778add1c2ee70ec07d1788611548647962" + integrity sha512-2AdWy5RdDF5+4YfG/YesGDDtbyJlC9LHmL6rZw6FurBJ5n4vFGupsOBGfwMRjBYH7qRQowT8D/U4LoSvVwOhSQ== + +"@rollup/rollup-linux-x64-gnu@4.54.0": + version "4.54.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.54.0.tgz#ab140b356569601f57ab8727bd7306463841894f" + integrity sha512-WGt5J8Ij/rvyqpFexxk3ffKqqbLf9AqrTBbWDk7ApGUzaIs6V+s2s84kAxklFwmMF/vBNGrVdYgbblCOFFezMQ== + +"@rollup/rollup-linux-x64-musl@4.54.0": + version "4.54.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.54.0.tgz#810134b4a9d0d88576938f2eed38999a653814a1" + integrity sha512-JzQmb38ATzHjxlPHuTH6tE7ojnMKM2kYNzt44LO/jJi8BpceEC8QuXYA908n8r3CNuG/B3BV8VR3Hi1rYtmPiw== + +"@rollup/rollup-openharmony-arm64@4.54.0": + version "4.54.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.54.0.tgz#0182bae7a54e748be806acef7a7f726f6949213c" + integrity sha512-huT3fd0iC7jigGh7n3q/+lfPcXxBi+om/Rs3yiFxjvSxbSB6aohDFXbWvlspaqjeOh+hx7DDHS+5Es5qRkWkZg== + +"@rollup/rollup-win32-arm64-msvc@4.54.0": + version "4.54.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.54.0.tgz#1f19349bd1c5e454d03e4508a9277b6354985b9d" + integrity sha512-c2V0W1bsKIKfbLMBu/WGBz6Yci8nJ/ZJdheE0EwB73N3MvHYKiKGs3mVilX4Gs70eGeDaMqEob25Tw2Gb9Nqyw== + +"@rollup/rollup-win32-ia32-msvc@4.54.0": + version "4.54.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.54.0.tgz#234ff739993539f64efac6c2e59704a691a309c2" + integrity sha512-woEHgqQqDCkAzrDhvDipnSirm5vxUXtSKDYTVpZG3nUdW/VVB5VdCYA2iReSj/u3yCZzXID4kuKG7OynPnB3WQ== + +"@rollup/rollup-win32-x64-gnu@4.54.0": + version "4.54.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.54.0.tgz#a4df0507c3be09c152a795cfc0c4f0c225765c5c" + integrity sha512-dzAc53LOuFvHwbCEOS0rPbXp6SIhAf2txMP5p6mGyOXXw5mWY8NGGbPMPrs4P1WItkfApDathBj/NzMLUZ9rtQ== + +"@rollup/rollup-win32-x64-msvc@4.54.0": + version "4.54.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.54.0.tgz#beacb356412eef5dc0164e9edfee51c563732054" + integrity sha512-hYT5d3YNdSh3mbCU1gwQyPgQd3T2ne0A3KG8KSBdav5TiBg6eInVmV+TeR5uHufiIgSFg0XsOWGW5/RhNcSvPg== + +"@scure/base@~1.1.0", "@scure/base@~1.1.6": + version "1.1.9" + resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.9.tgz#e5e142fbbfe251091f9c5f1dd4c834ac04c3dbd1" + integrity sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg== + +"@scure/base@~1.2.5": + version "1.2.6" + resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.2.6.tgz#ca917184b8231394dd8847509c67a0be522e59f6" + integrity sha512-g/nm5FgUa//MCj1gV09zTJTaM6KBAHqLN907YVQqf7zC49+DcO4B1so4ZX07Ef10Twr6nuqYEH9GEggFXA4Fmg== + +"@scure/bip32@1.1.5": + version "1.1.5" + resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.1.5.tgz#d2ccae16dcc2e75bc1d75f5ef3c66a338d1ba300" + integrity sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw== + dependencies: + "@noble/hashes" "~1.2.0" + "@noble/secp256k1" "~1.7.0" + "@scure/base" "~1.1.0" + +"@scure/bip32@1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.4.0.tgz#4e1f1e196abedcef395b33b9674a042524e20d67" + integrity sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg== + dependencies: + "@noble/curves" "~1.4.0" + "@noble/hashes" "~1.4.0" + "@scure/base" "~1.1.6" + +"@scure/bip32@1.7.0", "@scure/bip32@^1.7.0": + version "1.7.0" + resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.7.0.tgz#b8683bab172369f988f1589640e53c4606984219" + integrity sha512-E4FFX/N3f4B80AKWp5dP6ow+flD1LQZo/w8UnLGYZO674jS6YnYeepycOOksv+vLPSpgN35wgKgy+ybfTb2SMw== + dependencies: + "@noble/curves" "~1.9.0" + "@noble/hashes" "~1.8.0" + "@scure/base" "~1.2.5" + +"@scure/bip39@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.1.1.tgz#b54557b2e86214319405db819c4b6a370cf340c5" + integrity sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg== + dependencies: + "@noble/hashes" "~1.2.0" + "@scure/base" "~1.1.0" + +"@scure/bip39@1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.3.0.tgz#0f258c16823ddd00739461ac31398b4e7d6a18c3" + integrity sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ== + dependencies: + "@noble/hashes" "~1.4.0" + "@scure/base" "~1.1.6" + +"@scure/bip39@1.6.0", "@scure/bip39@^1.0.0", "@scure/bip39@^1.6.0": + version "1.6.0" + resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.6.0.tgz#475970ace440d7be87a6086cbee77cb8f1a684f9" + integrity sha512-+lF0BbLiJNwVlev4eKelw1WWLaiKXw7sSl8T6FvBlWkdX+94aGJ4o8XjUdlyhTCjd8c+B3KT3JfS8P0bLRNU6A== + dependencies: + "@noble/hashes" "~1.8.0" + "@scure/base" "~1.2.5" + +"@sentry/core@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-5.30.0.tgz#6b203664f69e75106ee8b5a2fe1d717379b331f3" + integrity sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg== + dependencies: + "@sentry/hub" "5.30.0" + "@sentry/minimal" "5.30.0" + "@sentry/types" "5.30.0" + "@sentry/utils" "5.30.0" + tslib "^1.9.3" + +"@sentry/hub@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-5.30.0.tgz#2453be9b9cb903404366e198bd30c7ca74cdc100" + integrity sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ== + dependencies: + "@sentry/types" "5.30.0" + "@sentry/utils" "5.30.0" + tslib "^1.9.3" + +"@sentry/minimal@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/minimal/-/minimal-5.30.0.tgz#ce3d3a6a273428e0084adcb800bc12e72d34637b" + integrity sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw== + dependencies: + "@sentry/hub" "5.30.0" + "@sentry/types" "5.30.0" + tslib "^1.9.3" + +"@sentry/node@^5.18.1": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/node/-/node-5.30.0.tgz#4ca479e799b1021285d7fe12ac0858951c11cd48" + integrity sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg== + dependencies: + "@sentry/core" "5.30.0" + "@sentry/hub" "5.30.0" + "@sentry/tracing" "5.30.0" + "@sentry/types" "5.30.0" + "@sentry/utils" "5.30.0" + cookie "^0.4.1" + https-proxy-agent "^5.0.0" + lru_map "^0.3.3" + tslib "^1.9.3" + +"@sentry/tracing@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-5.30.0.tgz#501d21f00c3f3be7f7635d8710da70d9419d4e1f" + integrity sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw== + dependencies: + "@sentry/hub" "5.30.0" + "@sentry/minimal" "5.30.0" + "@sentry/types" "5.30.0" + "@sentry/utils" "5.30.0" + tslib "^1.9.3" + +"@sentry/types@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-5.30.0.tgz#19709bbe12a1a0115bc790b8942917da5636f402" + integrity sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw== + +"@sentry/utils@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-5.30.0.tgz#9a5bd7ccff85ccfe7856d493bffa64cabc41e980" + integrity sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww== + dependencies: + "@sentry/types" "5.30.0" + tslib "^1.9.3" + +"@sindresorhus/is@^0.14.0": + version "0.14.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" + integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== + +"@sindresorhus/is@^4.0.0": + version "4.6.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.6.0.tgz#3c7c9c46e678feefe7a2e5bb609d3dbd665ffb3f" + integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw== + +"@smithy/abort-controller@^3.1.9": + version "3.1.9" + resolved "https://registry.yarnpkg.com/@smithy/abort-controller/-/abort-controller-3.1.9.tgz#47d323f754136a489e972d7fd465d534d72fcbff" + integrity sha512-yiW0WI30zj8ZKoSYNx90no7ugVn3khlyH/z5W8qtKBtVE6awRALbhSG+2SAHA1r6bO/6M9utxYKVZ3PCJ1rWxw== + dependencies: + "@smithy/types" "^3.7.2" + tslib "^2.6.2" + +"@smithy/abort-controller@^4.2.12": + version "4.2.12" + resolved "https://registry.yarnpkg.com/@smithy/abort-controller/-/abort-controller-4.2.12.tgz#80c86416f232b0b4e79cef530877ef87d626ac42" + integrity sha512-xolrFw6b+2iYGl6EcOL7IJY71vvyZ0DJ3mcKtpykqPe2uscwtzDZJa1uVQXyP7w9Dd+kGwYnPbMsJrGISKiY/Q== + dependencies: + "@smithy/types" "^4.13.1" + tslib "^2.6.2" + +"@smithy/chunked-blob-reader-native@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-3.0.1.tgz#39045ed278ee1b6f4c12715c7565678557274c29" + integrity sha512-VEYtPvh5rs/xlyqpm5NRnfYLZn+q0SRPELbvBV+C/G7IQ+ouTuo+NKKa3ShG5OaFR8NYVMXls9hPYLTvIKKDrQ== + dependencies: + "@smithy/util-base64" "^3.0.0" + tslib "^2.6.2" + +"@smithy/chunked-blob-reader@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@smithy/chunked-blob-reader/-/chunked-blob-reader-4.0.0.tgz#754099909957fb1986c16eb88afad75919d7129d" + integrity sha512-jSqRnZvkT4egkq/7b6/QRCNXmmYVcHwnJldqJ3IhVpQE2atObVJ137xmGeuGFhjFUr8gCEVAOKwSY79OvpbDaQ== + dependencies: + tslib "^2.6.2" + +"@smithy/config-resolver@^3.0.13", "@smithy/config-resolver@^3.0.2": + version "3.0.13" + resolved "https://registry.yarnpkg.com/@smithy/config-resolver/-/config-resolver-3.0.13.tgz#653643a77a33d0f5907a5e7582353886b07ba752" + integrity sha512-Gr/qwzyPaTL1tZcq8WQyHhTZREER5R1Wytmz4WnVGL4onA3dNk6Btll55c8Vr58pLdvWZmtG8oZxJTw3t3q7Jg== + dependencies: + "@smithy/node-config-provider" "^3.1.12" + "@smithy/types" "^3.7.2" + "@smithy/util-config-provider" "^3.0.0" + "@smithy/util-middleware" "^3.0.11" + tslib "^2.6.2" + +"@smithy/config-resolver@^4.4.13": + version "4.4.13" + resolved "https://registry.yarnpkg.com/@smithy/config-resolver/-/config-resolver-4.4.13.tgz#8bffd41de647ec349b4a74bf02bdd1b32452bacd" + integrity sha512-iIzMC5NmOUP6WL6o8iPBjFhUhBZ9pPjpUpQYWMUFQqKyXXzOftbfK8zcQCz/jFV1Psmf05BK5ypx4K2r4Tnwdg== + dependencies: + "@smithy/node-config-provider" "^4.3.12" + "@smithy/types" "^4.13.1" + "@smithy/util-config-provider" "^4.2.2" + "@smithy/util-endpoints" "^3.3.3" + "@smithy/util-middleware" "^4.2.12" + tslib "^2.6.2" + +"@smithy/core@^2.2.1", "@smithy/core@^2.5.7": + version "2.5.7" + resolved "https://registry.yarnpkg.com/@smithy/core/-/core-2.5.7.tgz#b545649071905f064cb0407102f3b9159246f8d9" + integrity sha512-8olpW6mKCa0v+ibCjoCzgZHQx1SQmZuW/WkrdZo73wiTprTH6qhmskT60QLFdT9DRa5mXxjz89kQPZ7ZSsoqqg== + dependencies: + "@smithy/middleware-serde" "^3.0.11" + "@smithy/protocol-http" "^4.1.8" + "@smithy/types" "^3.7.2" + "@smithy/util-body-length-browser" "^3.0.0" + "@smithy/util-middleware" "^3.0.11" + "@smithy/util-stream" "^3.3.4" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + +"@smithy/core@^3.23.12": + version "3.23.12" + resolved "https://registry.yarnpkg.com/@smithy/core/-/core-3.23.12.tgz#a16537bb03260337ac5adda31aedb325fcf9bb06" + integrity sha512-o9VycsYNtgC+Dy3I0yrwCqv9CWicDnke0L7EVOrZtJpjb2t0EjaEofmMrYc0T1Kn3yk32zm6cspxF9u9Bj7e5w== + dependencies: + "@smithy/protocol-http" "^5.3.12" + "@smithy/types" "^4.13.1" + "@smithy/url-parser" "^4.2.12" + "@smithy/util-base64" "^4.3.2" + "@smithy/util-body-length-browser" "^4.2.2" + "@smithy/util-middleware" "^4.2.12" + "@smithy/util-stream" "^4.5.20" + "@smithy/util-utf8" "^4.2.2" + "@smithy/uuid" "^1.1.2" + tslib "^2.6.2" + +"@smithy/credential-provider-imds@^3.1.1", "@smithy/credential-provider-imds@^3.2.8": + version "3.2.8" + resolved "https://registry.yarnpkg.com/@smithy/credential-provider-imds/-/credential-provider-imds-3.2.8.tgz#27ed2747074c86a7d627a98e56f324a65cba88de" + integrity sha512-ZCY2yD0BY+K9iMXkkbnjo+08T2h8/34oHd0Jmh6BZUSZwaaGlGCyBT/3wnS7u7Xl33/EEfN4B6nQr3Gx5bYxgw== + dependencies: + "@smithy/node-config-provider" "^3.1.12" + "@smithy/property-provider" "^3.1.11" + "@smithy/types" "^3.7.2" + "@smithy/url-parser" "^3.0.11" + tslib "^2.6.2" + +"@smithy/credential-provider-imds@^4.2.12": + version "4.2.12" + resolved "https://registry.yarnpkg.com/@smithy/credential-provider-imds/-/credential-provider-imds-4.2.12.tgz#fa2e52116cac7eaf5625e0bfd399a4927b598f66" + integrity sha512-cr2lR792vNZcYMriSIj+Um3x9KWrjcu98kn234xA6reOAFMmbRpQMOv8KPgEmLLtx3eldU6c5wALKFqNOhugmg== + dependencies: + "@smithy/node-config-provider" "^4.3.12" + "@smithy/property-provider" "^4.2.12" + "@smithy/types" "^4.13.1" + "@smithy/url-parser" "^4.2.12" + tslib "^2.6.2" + +"@smithy/eventstream-codec@^3.1.10": + version "3.1.10" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-codec/-/eventstream-codec-3.1.10.tgz#0c1a3457e7a23b71cd71525ceb668f8569a84dad" + integrity sha512-323B8YckSbUH0nMIpXn7HZsAVKHYHFUODa8gG9cHo0ySvA1fr5iWaNT+iIL0UCqUzG6QPHA3BSsBtRQou4mMqQ== + dependencies: + "@aws-crypto/crc32" "5.2.0" + "@smithy/types" "^3.7.2" + "@smithy/util-hex-encoding" "^3.0.0" + tslib "^2.6.2" + +"@smithy/eventstream-codec@^4.2.12": + version "4.2.12" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-codec/-/eventstream-codec-4.2.12.tgz#8cd62d08709344fb8b35fd17870fdf1435de61a3" + integrity sha512-FE3bZdEl62ojmy8x4FHqxq2+BuOHlcxiH5vaZ6aqHJr3AIZzwF5jfx8dEiU/X0a8RboyNDjmXjlbr8AdEyLgiA== + dependencies: + "@aws-crypto/crc32" "5.2.0" + "@smithy/types" "^4.13.1" + "@smithy/util-hex-encoding" "^4.2.2" + tslib "^2.6.2" + +"@smithy/eventstream-serde-browser@^3.0.2": + version "3.0.14" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-3.0.14.tgz#0c3584c7cde2e210aacdfbbd2b57c1d7e2ca3b95" + integrity sha512-kbrt0vjOIihW3V7Cqj1SXQvAI5BR8SnyQYsandva0AOR307cXAc+IhPngxIPslxTLfxwDpNu0HzCAq6g42kCPg== + dependencies: + "@smithy/eventstream-serde-universal" "^3.0.13" + "@smithy/types" "^3.7.2" + tslib "^2.6.2" + +"@smithy/eventstream-serde-browser@^4.2.12": + version "4.2.12" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-4.2.12.tgz#3ceb8743750edaf5d6e42cd1a2327e048f85ba4e" + integrity sha512-XUSuMxlTxV5pp4VpqZf6Sa3vT/Q75FVkLSpSSE3KkWBvAQWeuWt1msTv8fJfgA4/jcJhrbrbMzN1AC/hvPmm5A== + dependencies: + "@smithy/eventstream-serde-universal" "^4.2.12" + "@smithy/types" "^4.13.1" + tslib "^2.6.2" + +"@smithy/eventstream-serde-config-resolver@^3.0.1": + version "3.0.11" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-3.0.11.tgz#5edceba836debea165ea93145231036f6286d67c" + integrity sha512-P2pnEp4n75O+QHjyO7cbw/vsw5l93K/8EWyjNCAAybYwUmj3M+hjSQZ9P5TVdUgEG08ueMAP5R4FkuSkElZ5tQ== + dependencies: + "@smithy/types" "^3.7.2" + tslib "^2.6.2" + +"@smithy/eventstream-serde-config-resolver@^4.3.12": + version "4.3.12" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-4.3.12.tgz#a29164bc5480d935ece9dbdca0f79924259e519a" + integrity sha512-7epsAZ3QvfHkngz6RXQYseyZYHlmWXSTPOfPmXkiS+zA6TBNo1awUaMFL9vxyXlGdoELmCZyZe1nQE+imbmV+Q== + dependencies: + "@smithy/types" "^4.13.1" + tslib "^2.6.2" + +"@smithy/eventstream-serde-node@^3.0.2": + version "3.0.13" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-node/-/eventstream-serde-node-3.0.13.tgz#5aebd7b553becee277e411a2b69f6af8c9d7b3a6" + integrity sha512-zqy/9iwbj8Wysmvi7Lq7XFLeDgjRpTbCfwBhJa8WbrylTAHiAu6oQTwdY7iu2lxigbc9YYr9vPv5SzYny5tCXQ== + dependencies: + "@smithy/eventstream-serde-universal" "^3.0.13" + "@smithy/types" "^3.7.2" + tslib "^2.6.2" + +"@smithy/eventstream-serde-node@^4.2.12": + version "4.2.12" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-node/-/eventstream-serde-node-4.2.12.tgz#2cc06a1ea1108f679d376aab81e95a6f69877b4a" + integrity sha512-D1pFuExo31854eAvg89KMn9Oab/wEeJR6Buy32B49A9Ogdtx5fwZPqBHUlDzaCDpycTFk2+fSQgX689Qsk7UGA== + dependencies: + "@smithy/eventstream-serde-universal" "^4.2.12" + "@smithy/types" "^4.13.1" + tslib "^2.6.2" + +"@smithy/eventstream-serde-universal@^3.0.13": + version "3.0.13" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-3.0.13.tgz#609c922ea14a0a3eed23a28ac110344c935704eb" + integrity sha512-L1Ib66+gg9uTnqp/18Gz4MDpJPKRE44geOjOQ2SVc0eiaO5l255ADziATZgjQjqumC7yPtp1XnjHlF1srcwjKw== + dependencies: + "@smithy/eventstream-codec" "^3.1.10" + "@smithy/types" "^3.7.2" + tslib "^2.6.2" + +"@smithy/eventstream-serde-universal@^4.2.12": + version "4.2.12" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-4.2.12.tgz#a3640d1e7c3e348168360035661db8d21b51e078" + integrity sha512-+yNuTiyBACxOJUTvbsNsSOfH9G9oKbaJE1lNL3YHpGcuucl6rPZMi3nrpehpVOVR2E07YqFFmtwpImtpzlouHQ== + dependencies: + "@smithy/eventstream-codec" "^4.2.12" + "@smithy/types" "^4.13.1" + tslib "^2.6.2" + +"@smithy/fetch-http-handler@^3.0.2": + version "3.2.9" + resolved "https://registry.yarnpkg.com/@smithy/fetch-http-handler/-/fetch-http-handler-3.2.9.tgz#8d5199c162a37caa37a8b6848eefa9ca58221a0b" + integrity sha512-hYNVQOqhFQ6vOpenifFME546f0GfJn2OiQ3M0FDmuUu8V/Uiwy2wej7ZXxFBNqdx0R5DZAqWM1l6VRhGz8oE6A== + dependencies: + "@smithy/protocol-http" "^4.1.4" + "@smithy/querystring-builder" "^3.0.7" + "@smithy/types" "^3.5.0" + "@smithy/util-base64" "^3.0.0" + tslib "^2.6.2" + +"@smithy/fetch-http-handler@^4.1.3": + version "4.1.3" + resolved "https://registry.yarnpkg.com/@smithy/fetch-http-handler/-/fetch-http-handler-4.1.3.tgz#fc590dea2470d32559ae298306f1277729d24aa9" + integrity sha512-6SxNltSncI8s689nvnzZQc/dPXcpHQ34KUj6gR/HBroytKOd/isMG3gJF/zBE1TBmTT18TXyzhg3O3SOOqGEhA== + dependencies: + "@smithy/protocol-http" "^4.1.8" + "@smithy/querystring-builder" "^3.0.11" + "@smithy/types" "^3.7.2" + "@smithy/util-base64" "^3.0.0" + tslib "^2.6.2" + +"@smithy/fetch-http-handler@^5.3.15": + version "5.3.15" + resolved "https://registry.yarnpkg.com/@smithy/fetch-http-handler/-/fetch-http-handler-5.3.15.tgz#acf69a8b3bab0396d2782fc901bad0b957c8c6a2" + integrity sha512-T4jFU5N/yiIfrtrsb9uOQn7RdELdM/7HbyLNr6uO/mpkj1ctiVs7CihVr51w4LyQlXWDpXFn4BElf1WmQvZu/A== + dependencies: + "@smithy/protocol-http" "^5.3.12" + "@smithy/querystring-builder" "^4.2.12" + "@smithy/types" "^4.13.1" + "@smithy/util-base64" "^4.3.2" + tslib "^2.6.2" + +"@smithy/hash-blob-browser@^3.1.0": + version "3.1.10" + resolved "https://registry.yarnpkg.com/@smithy/hash-blob-browser/-/hash-blob-browser-3.1.10.tgz#985e308189c2687a15004152b97506882ffb2b13" + integrity sha512-elwslXOoNunmfS0fh55jHggyhccobFkexLYC1ZeZ1xP2BTSrcIBaHV2b4xUQOdctrSNOpMqOZH1r2XzWTEhyfA== + dependencies: + "@smithy/chunked-blob-reader" "^4.0.0" + "@smithy/chunked-blob-reader-native" "^3.0.1" + "@smithy/types" "^3.7.2" + tslib "^2.6.2" + +"@smithy/hash-node@^3.0.1": + version "3.0.11" + resolved "https://registry.yarnpkg.com/@smithy/hash-node/-/hash-node-3.0.11.tgz#99e09ead3fc99c8cd7ca0f254ea0e35714f2a0d3" + integrity sha512-emP23rwYyZhQBvklqTtwetkQlqbNYirDiEEwXl2v0GYWMnCzxst7ZaRAnWuy28njp5kAH54lvkdG37MblZzaHA== + dependencies: + "@smithy/types" "^3.7.2" + "@smithy/util-buffer-from" "^3.0.0" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + +"@smithy/hash-node@^4.2.12": + version "4.2.12" + resolved "https://registry.yarnpkg.com/@smithy/hash-node/-/hash-node-4.2.12.tgz#0ee7f6a1d2958c313ee24b07159dcb9547792441" + integrity sha512-QhBYbGrbxTkZ43QoTPrK72DoYviDeg6YKDrHTMJbbC+A0sml3kSjzFtXP7BtbyJnXojLfTQldGdUR0RGD8dA3w== + dependencies: + "@smithy/types" "^4.13.1" + "@smithy/util-buffer-from" "^4.2.2" + "@smithy/util-utf8" "^4.2.2" + tslib "^2.6.2" + +"@smithy/hash-stream-node@^3.1.0": + version "3.1.10" + resolved "https://registry.yarnpkg.com/@smithy/hash-stream-node/-/hash-stream-node-3.1.10.tgz#94716b4556f4ccf2807e605f47bb5b018ed7dfb0" + integrity sha512-olomK/jZQ93OMayW1zfTHwcbwBdhcZOHsyWyiZ9h9IXvc1mCD/VuvzbLb3Gy/qNJwI4MANPLctTp2BucV2oU/Q== + dependencies: + "@smithy/types" "^3.7.2" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + +"@smithy/invalid-dependency@^3.0.1": + version "3.0.11" + resolved "https://registry.yarnpkg.com/@smithy/invalid-dependency/-/invalid-dependency-3.0.11.tgz#8144d7b0af9d34ab5f672e1f674f97f8740bb9ae" + integrity sha512-NuQmVPEJjUX6c+UELyVz8kUx8Q539EDeNwbRyu4IIF8MeV7hUtq1FB3SHVyki2u++5XLMFqngeMKk7ccspnNyQ== + dependencies: + "@smithy/types" "^3.7.2" + tslib "^2.6.2" + +"@smithy/invalid-dependency@^4.2.12": + version "4.2.12" + resolved "https://registry.yarnpkg.com/@smithy/invalid-dependency/-/invalid-dependency-4.2.12.tgz#1a28c13fb33684b91848d4d6ec5104a1c1413e7f" + integrity sha512-/4F1zb7Z8LOu1PalTdESFHR0RbPwHd3FcaG1sI3UEIriQTWakysgJr65lc1jj6QY5ye7aFsisajotH6UhWfm/g== + dependencies: + "@smithy/types" "^4.13.1" + tslib "^2.6.2" + +"@smithy/is-array-buffer@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz#f84f0d9f9a36601a9ca9381688bd1b726fd39111" + integrity sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA== + dependencies: + tslib "^2.6.2" + +"@smithy/is-array-buffer@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz#9a95c2d46b8768946a9eec7f935feaddcffa5e7a" + integrity sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ== + dependencies: + tslib "^2.6.2" + +"@smithy/is-array-buffer@^4.2.2": + version "4.2.2" + resolved "https://registry.yarnpkg.com/@smithy/is-array-buffer/-/is-array-buffer-4.2.2.tgz#c401ce54b12a16529eb1c938a0b6c2247cb763b8" + integrity sha512-n6rQ4N8Jj4YTQO3YFrlgZuwKodf4zUFs7EJIWH86pSCWBaAtAGBFfCM7Wx6D2bBJ2xqFNxGBSrUWswT3M0VJow== + dependencies: + tslib "^2.6.2" + +"@smithy/md5-js@^3.0.1": + version "3.0.11" + resolved "https://registry.yarnpkg.com/@smithy/md5-js/-/md5-js-3.0.11.tgz#27e4dab616348ff94aed24dc75e4017c582df40f" + integrity sha512-3NM0L3i2Zm4bbgG6Ymi9NBcxXhryi3uE8fIfHJZIOfZVxOkGdjdgjR9A06SFIZCfnEIWKXZdm6Yq5/aPXFFhsQ== + dependencies: + "@smithy/types" "^3.7.2" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + +"@smithy/middleware-content-length@^3.0.1": + version "3.0.13" + resolved "https://registry.yarnpkg.com/@smithy/middleware-content-length/-/middleware-content-length-3.0.13.tgz#6e08fe52739ac8fb3996088e0f8837e4b2ea187f" + integrity sha512-zfMhzojhFpIX3P5ug7jxTjfUcIPcGjcQYzB9t+rv0g1TX7B0QdwONW+ATouaLoD7h7LOw/ZlXfkq4xJ/g2TrIw== + dependencies: + "@smithy/protocol-http" "^4.1.8" + "@smithy/types" "^3.7.2" + tslib "^2.6.2" + +"@smithy/middleware-content-length@^4.2.12": + version "4.2.12" + resolved "https://registry.yarnpkg.com/@smithy/middleware-content-length/-/middleware-content-length-4.2.12.tgz#dec97ea1444b12e734156b764e9953b2b37c70fd" + integrity sha512-YE58Yz+cvFInWI/wOTrB+DbvUVz/pLn5mC5MvOV4fdRUc6qGwygyngcucRQjAhiCEbmfLOXX0gntSIcgMvAjmA== + dependencies: + "@smithy/protocol-http" "^5.3.12" + "@smithy/types" "^4.13.1" + tslib "^2.6.2" + +"@smithy/middleware-endpoint@^3.0.2", "@smithy/middleware-endpoint@^3.2.8": + version "3.2.8" + resolved "https://registry.yarnpkg.com/@smithy/middleware-endpoint/-/middleware-endpoint-3.2.8.tgz#6ca5de80543ba0f0d40e15dc3f9d0f14d192e06e" + integrity sha512-OEJZKVUEhMOqMs3ktrTWp7UvvluMJEvD5XgQwRePSbDg1VvBaL8pX8mwPltFn6wk1GySbcVwwyldL8S+iqnrEQ== + dependencies: + "@smithy/core" "^2.5.7" + "@smithy/middleware-serde" "^3.0.11" + "@smithy/node-config-provider" "^3.1.12" + "@smithy/shared-ini-file-loader" "^3.1.12" + "@smithy/types" "^3.7.2" + "@smithy/url-parser" "^3.0.11" + "@smithy/util-middleware" "^3.0.11" + tslib "^2.6.2" + +"@smithy/middleware-endpoint@^4.4.27": + version "4.4.27" + resolved "https://registry.yarnpkg.com/@smithy/middleware-endpoint/-/middleware-endpoint-4.4.27.tgz#cf2b334f7fc302e7ebf3fe00c1a1279ee9214afd" + integrity sha512-T3TFfUgXQlpcg+UdzcAISdZpj4Z+XECZ/cefgA6wLBd6V4lRi0svN2hBouN/be9dXQ31X4sLWz3fAQDf+nt6BA== + dependencies: + "@smithy/core" "^3.23.12" + "@smithy/middleware-serde" "^4.2.15" + "@smithy/node-config-provider" "^4.3.12" + "@smithy/shared-ini-file-loader" "^4.4.7" + "@smithy/types" "^4.13.1" + "@smithy/url-parser" "^4.2.12" + "@smithy/util-middleware" "^4.2.12" + tslib "^2.6.2" + +"@smithy/middleware-retry@^3.0.4": + version "3.0.34" + resolved "https://registry.yarnpkg.com/@smithy/middleware-retry/-/middleware-retry-3.0.34.tgz#136c89fc22d70819fdefc51b0d24952cf98883f1" + integrity sha512-yVRr/AAtPZlUvwEkrq7S3x7Z8/xCd97m2hLDaqdz6ucP2RKHsBjEqaUA2ebNv2SsZoPEi+ZD0dZbOB1u37tGCA== + dependencies: + "@smithy/node-config-provider" "^3.1.12" + "@smithy/protocol-http" "^4.1.8" + "@smithy/service-error-classification" "^3.0.11" + "@smithy/smithy-client" "^3.7.0" + "@smithy/types" "^3.7.2" + "@smithy/util-middleware" "^3.0.11" + "@smithy/util-retry" "^3.0.11" + tslib "^2.6.2" + uuid "^9.0.1" + +"@smithy/middleware-retry@^4.4.44": + version "4.4.44" + resolved "https://registry.yarnpkg.com/@smithy/middleware-retry/-/middleware-retry-4.4.44.tgz#5c678ea74bde3a480cb28d013156a24009063c5e" + integrity sha512-Y1Rav7m5CFRPQyM4CI0koD/bXjyjJu3EQxZZhtLGD88WIrBrQ7kqXM96ncd6rYnojwOo/u9MXu57JrEvu/nLrA== + dependencies: + "@smithy/node-config-provider" "^4.3.12" + "@smithy/protocol-http" "^5.3.12" + "@smithy/service-error-classification" "^4.2.12" + "@smithy/smithy-client" "^4.12.7" + "@smithy/types" "^4.13.1" + "@smithy/util-middleware" "^4.2.12" + "@smithy/util-retry" "^4.2.12" + "@smithy/uuid" "^1.1.2" + tslib "^2.6.2" + +"@smithy/middleware-serde@^3.0.1", "@smithy/middleware-serde@^3.0.11": + version "3.0.11" + resolved "https://registry.yarnpkg.com/@smithy/middleware-serde/-/middleware-serde-3.0.11.tgz#c7d54e0add4f83e05c6878a011fc664e21022f12" + integrity sha512-KzPAeySp/fOoQA82TpnwItvX8BBURecpx6ZMu75EZDkAcnPtO6vf7q4aH5QHs/F1s3/snQaSFbbUMcFFZ086Mw== + dependencies: + "@smithy/types" "^3.7.2" + tslib "^2.6.2" + +"@smithy/middleware-serde@^4.2.15": + version "4.2.15" + resolved "https://registry.yarnpkg.com/@smithy/middleware-serde/-/middleware-serde-4.2.15.tgz#18c6ed60339389b62e7955e822abe88e6f53ea55" + integrity sha512-ExYhcltZSli0pgAKOpQQe1DLFBLryeZ22605y/YS+mQpdNWekum9Ujb/jMKfJKgjtz1AZldtwA/wCYuKJgjjlg== + dependencies: + "@smithy/core" "^3.23.12" + "@smithy/protocol-http" "^5.3.12" + "@smithy/types" "^4.13.1" + tslib "^2.6.2" + +"@smithy/middleware-stack@^3.0.1", "@smithy/middleware-stack@^3.0.11": + version "3.0.11" + resolved "https://registry.yarnpkg.com/@smithy/middleware-stack/-/middleware-stack-3.0.11.tgz#453af2096924e4064d9da4e053cfdf65d9a36acc" + integrity sha512-1HGo9a6/ikgOMrTrWL/WiN9N8GSVYpuRQO5kjstAq4CvV59bjqnh7TbdXGQ4vxLD3xlSjfBjq5t1SOELePsLnA== + dependencies: + "@smithy/types" "^3.7.2" + tslib "^2.6.2" + +"@smithy/middleware-stack@^4.2.12": + version "4.2.12" + resolved "https://registry.yarnpkg.com/@smithy/middleware-stack/-/middleware-stack-4.2.12.tgz#96b43b2fab0d4a6723f813f76b72418b0fdb6ba0" + integrity sha512-kruC5gRHwsCOuyCd4ouQxYjgRAym2uDlCvQ5acuMtRrcdfg7mFBg6blaxcJ09STpt3ziEkis6bhg1uwrWU7txw== + dependencies: + "@smithy/types" "^4.13.1" + tslib "^2.6.2" + +"@smithy/node-config-provider@^3.1.1", "@smithy/node-config-provider@^3.1.12": + version "3.1.12" + resolved "https://registry.yarnpkg.com/@smithy/node-config-provider/-/node-config-provider-3.1.12.tgz#1b1d674fc83f943dc7b3017e37f16f374e878a6c" + integrity sha512-O9LVEu5J/u/FuNlZs+L7Ikn3lz7VB9hb0GtPT9MQeiBmtK8RSY3ULmsZgXhe6VAlgTw0YO+paQx4p8xdbs43vQ== + dependencies: + "@smithy/property-provider" "^3.1.11" + "@smithy/shared-ini-file-loader" "^3.1.12" + "@smithy/types" "^3.7.2" + tslib "^2.6.2" + +"@smithy/node-config-provider@^4.3.12": + version "4.3.12" + resolved "https://registry.yarnpkg.com/@smithy/node-config-provider/-/node-config-provider-4.3.12.tgz#bb722da6e2a130ae585754fa7bc8d909f9f5d702" + integrity sha512-tr2oKX2xMcO+rBOjobSwVAkV05SIfUKz8iI53rzxEmgW3GOOPOv0UioSDk+J8OpRQnpnhsO3Af6IEBabQBVmiw== + dependencies: + "@smithy/property-provider" "^4.2.12" + "@smithy/shared-ini-file-loader" "^4.4.7" + "@smithy/types" "^4.13.1" + tslib "^2.6.2" + +"@smithy/node-http-handler@^3.0.1", "@smithy/node-http-handler@^3.3.3": + version "3.3.3" + resolved "https://registry.yarnpkg.com/@smithy/node-http-handler/-/node-http-handler-3.3.3.tgz#94dbb3f15342b656ceba2b26e14aa741cace8919" + integrity sha512-BrpZOaZ4RCbcJ2igiSNG16S+kgAc65l/2hmxWdmhyoGWHTLlzQzr06PXavJp9OBlPEG/sHlqdxjWmjzV66+BSQ== + dependencies: + "@smithy/abort-controller" "^3.1.9" + "@smithy/protocol-http" "^4.1.8" + "@smithy/querystring-builder" "^3.0.11" + "@smithy/types" "^3.7.2" + tslib "^2.6.2" + +"@smithy/node-http-handler@^4.5.0": + version "4.5.0" + resolved "https://registry.yarnpkg.com/@smithy/node-http-handler/-/node-http-handler-4.5.0.tgz#6a506a0da462c79e725fdbcfa55b0eed5b929727" + integrity sha512-Rnq9vQWiR1+/I6NZZMNzJHV6pZYyEHt2ZnuV3MG8z2NNenC4i/8Kzttz7CjZiHSmsN5frhXhg17z3Zqjjhmz1A== + dependencies: + "@smithy/abort-controller" "^4.2.12" + "@smithy/protocol-http" "^5.3.12" + "@smithy/querystring-builder" "^4.2.12" + "@smithy/types" "^4.13.1" + tslib "^2.6.2" + +"@smithy/property-provider@^3.1.1", "@smithy/property-provider@^3.1.11": + version "3.1.11" + resolved "https://registry.yarnpkg.com/@smithy/property-provider/-/property-provider-3.1.11.tgz#161cf1c2a2ada361e417382c57f5ba6fbca8acad" + integrity sha512-I/+TMc4XTQ3QAjXfOcUWbSS073oOEAxgx4aZy8jHaf8JQnRkq2SZWw8+PfDtBvLUjcGMdxl+YwtzWe6i5uhL/A== + dependencies: + "@smithy/types" "^3.7.2" + tslib "^2.6.2" + +"@smithy/property-provider@^4.2.12": + version "4.2.12" + resolved "https://registry.yarnpkg.com/@smithy/property-provider/-/property-provider-4.2.12.tgz#e9f8e5ce125413973b16e39c87cf4acd41324e21" + integrity sha512-jqve46eYU1v7pZ5BM+fmkbq3DerkSluPr5EhvOcHxygxzD05ByDRppRwRPPpFrsFo5yDtCYLKu+kreHKVrvc7A== + dependencies: + "@smithy/types" "^4.13.1" + tslib "^2.6.2" + +"@smithy/protocol-http@^4.0.1", "@smithy/protocol-http@^4.1.4", "@smithy/protocol-http@^4.1.8": + version "4.1.8" + resolved "https://registry.yarnpkg.com/@smithy/protocol-http/-/protocol-http-4.1.8.tgz#0461758671335f65e8ff3fc0885ab7ed253819c9" + integrity sha512-hmgIAVyxw1LySOwkgMIUN0kjN8TG9Nc85LJeEmEE/cNEe2rkHDUWhnJf2gxcSRFLWsyqWsrZGw40ROjUogg+Iw== + dependencies: + "@smithy/types" "^3.7.2" + tslib "^2.6.2" + +"@smithy/protocol-http@^5.3.12": + version "5.3.12" + resolved "https://registry.yarnpkg.com/@smithy/protocol-http/-/protocol-http-5.3.12.tgz#c913053e7dfbac6cdd7f374f0b4f5aa7c518d0e1" + integrity sha512-fit0GZK9I1xoRlR4jXmbLhoN0OdEpa96ul8M65XdmXnxXkuMxM0Y8HDT0Fh0Xb4I85MBvBClOzgSrV1X2s1Hxw== + dependencies: + "@smithy/types" "^4.13.1" + tslib "^2.6.2" + +"@smithy/querystring-builder@^3.0.11", "@smithy/querystring-builder@^3.0.7": + version "3.0.11" + resolved "https://registry.yarnpkg.com/@smithy/querystring-builder/-/querystring-builder-3.0.11.tgz#2ed04adbe725671824c5613d0d6f9376d791a909" + integrity sha512-u+5HV/9uJaeLj5XTb6+IEF/dokWWkEqJ0XiaRRogyREmKGUgZnNecLucADLdauWFKUNbQfulHFEZEdjwEBjXRg== + dependencies: + "@smithy/types" "^3.7.2" + "@smithy/util-uri-escape" "^3.0.0" + tslib "^2.6.2" + +"@smithy/querystring-builder@^4.2.12": + version "4.2.12" + resolved "https://registry.yarnpkg.com/@smithy/querystring-builder/-/querystring-builder-4.2.12.tgz#20a0266b151a4b58409f901e1463257a72835c16" + integrity sha512-6wTZjGABQufekycfDGMEB84BgtdOE/rCVTov+EDXQ8NHKTUNIp/j27IliwP7tjIU9LR+sSzyGBOXjeEtVgzCHg== + dependencies: + "@smithy/types" "^4.13.1" + "@smithy/util-uri-escape" "^4.2.2" + tslib "^2.6.2" + +"@smithy/querystring-parser@^3.0.11": + version "3.0.11" + resolved "https://registry.yarnpkg.com/@smithy/querystring-parser/-/querystring-parser-3.0.11.tgz#9d3177ea19ce8462f18d9712b395239e1ca1f969" + integrity sha512-Je3kFvCsFMnso1ilPwA7GtlbPaTixa3WwC+K21kmMZHsBEOZYQaqxcMqeFFoU7/slFjKDIpiiPydvdJm8Q/MCw== + dependencies: + "@smithy/types" "^3.7.2" + tslib "^2.6.2" + +"@smithy/querystring-parser@^4.2.12": + version "4.2.12" + resolved "https://registry.yarnpkg.com/@smithy/querystring-parser/-/querystring-parser-4.2.12.tgz#918cb609b2d606ab81f2727bfde0265d2ebb2758" + integrity sha512-P2OdvrgiAKpkPNKlKUtWbNZKB1XjPxM086NeVhK+W+wI46pIKdWBe5QyXvhUm3MEcyS/rkLvY8rZzyUdmyDZBw== + dependencies: + "@smithy/types" "^4.13.1" + tslib "^2.6.2" + +"@smithy/service-error-classification@^3.0.11": + version "3.0.11" + resolved "https://registry.yarnpkg.com/@smithy/service-error-classification/-/service-error-classification-3.0.11.tgz#d3d7fc0aacd2e60d022507367e55c7939e5bcb8a" + integrity sha512-QnYDPkyewrJzCyaeI2Rmp7pDwbUETe+hU8ADkXmgNusO1bgHBH7ovXJiYmba8t0fNfJx75fE8dlM6SEmZxheog== + dependencies: + "@smithy/types" "^3.7.2" + +"@smithy/service-error-classification@^4.2.12": + version "4.2.12" + resolved "https://registry.yarnpkg.com/@smithy/service-error-classification/-/service-error-classification-4.2.12.tgz#795e9484207acf63817a9e9cf67e90b42e720840" + integrity sha512-LlP29oSQN0Tw0b6D0Xo6BIikBswuIiGYbRACy5ujw/JgWSzTdYj46U83ssf6Ux0GyNJVivs2uReU8pt7Eu9okQ== + dependencies: + "@smithy/types" "^4.13.1" + +"@smithy/shared-ini-file-loader@^3.1.1", "@smithy/shared-ini-file-loader@^3.1.12": + version "3.1.12" + resolved "https://registry.yarnpkg.com/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.12.tgz#d98b1b663eb18935ce2cbc79024631d34f54042a" + integrity sha512-1xKSGI+U9KKdbG2qDvIR9dGrw3CNx+baqJfyr0igKEpjbHL5stsqAesYBzHChYHlelWtb87VnLWlhvfCz13H8Q== + dependencies: + "@smithy/types" "^3.7.2" + tslib "^2.6.2" + +"@smithy/shared-ini-file-loader@^4.4.7": + version "4.4.7" + resolved "https://registry.yarnpkg.com/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.4.7.tgz#18cc5a21f871509fafbe535a7bf44bde5a500727" + integrity sha512-HrOKWsUb+otTeo1HxVWeEb99t5ER1XrBi/xka2Wv6NVmTbuCUC1dvlrksdvxFtODLBjsC+PHK+fuy2x/7Ynyiw== + dependencies: + "@smithy/types" "^4.13.1" + tslib "^2.6.2" + +"@smithy/signature-v4@^3.1.0": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@smithy/signature-v4/-/signature-v4-3.1.2.tgz#63fc0d4f9a955e902138fb0a57fafc96b9d4e8bb" + integrity sha512-3BcPylEsYtD0esM4Hoyml/+s7WP2LFhcM3J2AGdcL2vx9O60TtfpDOL72gjb4lU8NeRPeKAwR77YNyyGvMbuEA== + dependencies: + "@smithy/is-array-buffer" "^3.0.0" + "@smithy/types" "^3.3.0" + "@smithy/util-hex-encoding" "^3.0.0" + "@smithy/util-middleware" "^3.0.3" + "@smithy/util-uri-escape" "^3.0.0" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + +"@smithy/signature-v4@^5.3.12": + version "5.3.12" + resolved "https://registry.yarnpkg.com/@smithy/signature-v4/-/signature-v4-5.3.12.tgz#b61ce40a94bdd91dfdd8f5f2136631c8eb67f253" + integrity sha512-B/FBwO3MVOL00DaRSXfXfa/TRXRheagt/q5A2NM13u7q+sHS59EOVGQNfG7DkmVtdQm5m3vOosoKAXSqn/OEgw== + dependencies: + "@smithy/is-array-buffer" "^4.2.2" + "@smithy/protocol-http" "^5.3.12" + "@smithy/types" "^4.13.1" + "@smithy/util-hex-encoding" "^4.2.2" + "@smithy/util-middleware" "^4.2.12" + "@smithy/util-uri-escape" "^4.2.2" + "@smithy/util-utf8" "^4.2.2" + tslib "^2.6.2" + +"@smithy/smithy-client@^3.1.2", "@smithy/smithy-client@^3.7.0": + version "3.7.0" + resolved "https://registry.yarnpkg.com/@smithy/smithy-client/-/smithy-client-3.7.0.tgz#8cfaa7b68b7af15e588b96aa14e5dce393f85839" + integrity sha512-9wYrjAZFlqWhgVo3C4y/9kpc68jgiSsKUnsFPzr/MSiRL93+QRDafGTfhhKAb2wsr69Ru87WTiqSfQusSmWipA== + dependencies: + "@smithy/core" "^2.5.7" + "@smithy/middleware-endpoint" "^3.2.8" + "@smithy/middleware-stack" "^3.0.11" + "@smithy/protocol-http" "^4.1.8" + "@smithy/types" "^3.7.2" + "@smithy/util-stream" "^3.3.4" + tslib "^2.6.2" + +"@smithy/smithy-client@^4.12.7": + version "4.12.7" + resolved "https://registry.yarnpkg.com/@smithy/smithy-client/-/smithy-client-4.12.7.tgz#3867272c062e39d3d4b719bf83ba491c76e1ee93" + integrity sha512-q3gqnwml60G44FECaEEsdQMplYhDMZYCtYhMCzadCnRnnHIobZJjegmdoUo6ieLQlPUzvrMdIJUpx6DoPmzANQ== + dependencies: + "@smithy/core" "^3.23.12" + "@smithy/middleware-endpoint" "^4.4.27" + "@smithy/middleware-stack" "^4.2.12" + "@smithy/protocol-http" "^5.3.12" + "@smithy/types" "^4.13.1" + "@smithy/util-stream" "^4.5.20" + tslib "^2.6.2" + +"@smithy/types@^3.1.0", "@smithy/types@^3.3.0", "@smithy/types@^3.5.0", "@smithy/types@^3.7.2": + version "3.7.2" + resolved "https://registry.yarnpkg.com/@smithy/types/-/types-3.7.2.tgz#05cb14840ada6f966de1bf9a9c7dd86027343e10" + integrity sha512-bNwBYYmN8Eh9RyjS1p2gW6MIhSO2rl7X9QeLM8iTdcGRP+eDiIWDt66c9IysCc22gefKszZv+ubV9qZc7hdESg== + dependencies: + tslib "^2.6.2" + +"@smithy/types@^4.13.1": + version "4.13.1" + resolved "https://registry.yarnpkg.com/@smithy/types/-/types-4.13.1.tgz#8aaf15bb0f42b4e7c93c87018a3678a06d74691d" + integrity sha512-787F3yzE2UiJIQ+wYW1CVg2odHjmaWLGksnKQHUrK/lYZSEcy1msuLVvxaR/sI2/aDe9U+TBuLsXnr3vod1g0g== + dependencies: + tslib "^2.6.2" + +"@smithy/url-parser@^3.0.1", "@smithy/url-parser@^3.0.11": + version "3.0.11" + resolved "https://registry.yarnpkg.com/@smithy/url-parser/-/url-parser-3.0.11.tgz#e5f5ffabfb6230159167cf4cc970705fca6b8b2d" + integrity sha512-TmlqXkSk8ZPhfc+SQutjmFr5FjC0av3GZP4B/10caK1SbRwe/v+Wzu/R6xEKxoNqL+8nY18s1byiy6HqPG37Aw== + dependencies: + "@smithy/querystring-parser" "^3.0.11" + "@smithy/types" "^3.7.2" + tslib "^2.6.2" + +"@smithy/url-parser@^4.2.12": + version "4.2.12" + resolved "https://registry.yarnpkg.com/@smithy/url-parser/-/url-parser-4.2.12.tgz#e940557bf0b8e9a25538a421970f64bd827f456f" + integrity sha512-wOPKPEpso+doCZGIlr+e1lVI6+9VAKfL4kZWFgzVgGWY2hZxshNKod4l2LXS3PRC9otH/JRSjtEHqQ/7eLciRA== + dependencies: + "@smithy/querystring-parser" "^4.2.12" + "@smithy/types" "^4.13.1" + tslib "^2.6.2" + +"@smithy/util-base64@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-base64/-/util-base64-3.0.0.tgz#f7a9a82adf34e27a72d0719395713edf0e493017" + integrity sha512-Kxvoh5Qtt0CDsfajiZOCpJxgtPHXOKwmM+Zy4waD43UoEMA+qPxxa98aE/7ZhdnBFZFXMOiBR5xbcaMhLtznQQ== + dependencies: + "@smithy/util-buffer-from" "^3.0.0" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + +"@smithy/util-base64@^4.3.2": + version "4.3.2" + resolved "https://registry.yarnpkg.com/@smithy/util-base64/-/util-base64-4.3.2.tgz#be02bcb29a87be744356467ea25ffa413e695cea" + integrity sha512-XRH6b0H/5A3SgblmMa5ErXQ2XKhfbQB+Fm/oyLZ2O2kCUrwgg55bU0RekmzAhuwOjA9qdN5VU2BprOvGGUkOOQ== + dependencies: + "@smithy/util-buffer-from" "^4.2.2" + "@smithy/util-utf8" "^4.2.2" + tslib "^2.6.2" + +"@smithy/util-body-length-browser@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-body-length-browser/-/util-body-length-browser-3.0.0.tgz#86ec2f6256310b4845a2f064e2f571c1ca164ded" + integrity sha512-cbjJs2A1mLYmqmyVl80uoLTJhAcfzMOyPgjwAYusWKMdLeNtzmMz9YxNl3/jRLoxSS3wkqkf0jwNdtXWtyEBaQ== + dependencies: + tslib "^2.6.2" + +"@smithy/util-body-length-browser@^4.2.2": + version "4.2.2" + resolved "https://registry.yarnpkg.com/@smithy/util-body-length-browser/-/util-body-length-browser-4.2.2.tgz#c4404277d22039872abdb80e7800f9a63f263862" + integrity sha512-JKCrLNOup3OOgmzeaKQwi4ZCTWlYR5H4Gm1r2uTMVBXoemo1UEghk5vtMi1xSu2ymgKVGW631e2fp9/R610ZjQ== + dependencies: + tslib "^2.6.2" + +"@smithy/util-body-length-node@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-body-length-node/-/util-body-length-node-3.0.0.tgz#99a291bae40d8932166907fe981d6a1f54298a6d" + integrity sha512-Tj7pZ4bUloNUP6PzwhN7K386tmSmEET9QtQg0TgdNOnxhZvCssHji+oZTUIuzxECRfG8rdm2PMw2WCFs6eIYkA== + dependencies: + tslib "^2.6.2" + +"@smithy/util-body-length-node@^4.2.3": + version "4.2.3" + resolved "https://registry.yarnpkg.com/@smithy/util-body-length-node/-/util-body-length-node-4.2.3.tgz#f923ca530defb86a9ac3ca2d3066bcca7b304fbc" + integrity sha512-ZkJGvqBzMHVHE7r/hcuCxlTY8pQr1kMtdsVPs7ex4mMU+EAbcXppfo5NmyxMYi2XU49eqaz56j2gsk4dHHPG/g== + dependencies: + tslib "^2.6.2" + +"@smithy/util-buffer-from@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz#6fc88585165ec73f8681d426d96de5d402021e4b" + integrity sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA== + dependencies: + "@smithy/is-array-buffer" "^2.2.0" + tslib "^2.6.2" + +"@smithy/util-buffer-from@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz#559fc1c86138a89b2edaefc1e6677780c24594e3" + integrity sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA== + dependencies: + "@smithy/is-array-buffer" "^3.0.0" + tslib "^2.6.2" + +"@smithy/util-buffer-from@^4.2.2": + version "4.2.2" + resolved "https://registry.yarnpkg.com/@smithy/util-buffer-from/-/util-buffer-from-4.2.2.tgz#2c6b7857757dfd88f6cd2d36016179a40ccc913b" + integrity sha512-FDXD7cvUoFWwN6vtQfEta540Y/YBe5JneK3SoZg9bThSoOAC/eGeYEua6RkBgKjGa/sz6Y+DuBZj3+YEY21y4Q== + dependencies: + "@smithy/is-array-buffer" "^4.2.2" + tslib "^2.6.2" + +"@smithy/util-config-provider@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-config-provider/-/util-config-provider-3.0.0.tgz#62c6b73b22a430e84888a8f8da4b6029dd5b8efe" + integrity sha512-pbjk4s0fwq3Di/ANL+rCvJMKM5bzAQdE5S/6RL5NXgMExFAi6UgQMPOm5yPaIWPpr+EOXKXRonJ3FoxKf4mCJQ== + dependencies: + tslib "^2.6.2" + +"@smithy/util-config-provider@^4.2.2": + version "4.2.2" + resolved "https://registry.yarnpkg.com/@smithy/util-config-provider/-/util-config-provider-4.2.2.tgz#52ebf9d8942838d18bc5fb1520de1e8699d7aad6" + integrity sha512-dWU03V3XUprJwaUIFVv4iOnS1FC9HnMHDfUrlNDSh4315v0cWyaIErP8KiqGVbf5z+JupoVpNM7ZB3jFiTejvQ== + dependencies: + tslib "^2.6.2" + +"@smithy/util-defaults-mode-browser@^3.0.4": + version "3.0.34" + resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.34.tgz#885312529599cf24b09335cb20439c838e452f9f" + integrity sha512-FumjjF631lR521cX+svMLBj3SwSDh9VdtyynTYDAiBDEf8YPP5xORNXKQ9j0105o5+ARAGnOOP/RqSl40uXddA== + dependencies: + "@smithy/property-provider" "^3.1.11" + "@smithy/smithy-client" "^3.7.0" + "@smithy/types" "^3.7.2" + bowser "^2.11.0" + tslib "^2.6.2" + +"@smithy/util-defaults-mode-browser@^4.3.43": + version "4.3.43" + resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.3.43.tgz#8e2667c31cacdc0d59d414863f9a475daef79b28" + integrity sha512-Qd/0wCKMaXxev/z00TvNzGCH2jlKKKxXP1aDxB6oKwSQthe3Og2dMhSayGCnsma1bK/kQX1+X7SMP99t6FgiiQ== + dependencies: + "@smithy/property-provider" "^4.2.12" + "@smithy/smithy-client" "^4.12.7" + "@smithy/types" "^4.13.1" + tslib "^2.6.2" + +"@smithy/util-defaults-mode-node@^3.0.4": + version "3.0.34" + resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.34.tgz#5eb0d97231a34e137980abfb08ea5e3a8f2156f7" + integrity sha512-vN6aHfzW9dVVzkI0wcZoUXvfjkl4CSbM9nE//08lmUMyf00S75uuCpTrqF9uD4bD9eldIXlt53colrlwKAT8Gw== + dependencies: + "@smithy/config-resolver" "^3.0.13" + "@smithy/credential-provider-imds" "^3.2.8" + "@smithy/node-config-provider" "^3.1.12" + "@smithy/property-provider" "^3.1.11" + "@smithy/smithy-client" "^3.7.0" + "@smithy/types" "^3.7.2" + tslib "^2.6.2" + +"@smithy/util-defaults-mode-node@^4.2.47": + version "4.2.47" + resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.2.47.tgz#95ab7663f21513dff5c13b5ab7fa2957418254c5" + integrity sha512-qSRbYp1EQ7th+sPFuVcVO05AE0QH635hycdEXlpzIahqHHf2Fyd/Zl+8v0XYMJ3cgDVPa0lkMefU7oNUjAP+DQ== + dependencies: + "@smithy/config-resolver" "^4.4.13" + "@smithy/credential-provider-imds" "^4.2.12" + "@smithy/node-config-provider" "^4.3.12" + "@smithy/property-provider" "^4.2.12" + "@smithy/smithy-client" "^4.12.7" + "@smithy/types" "^4.13.1" + tslib "^2.6.2" + +"@smithy/util-endpoints@^2.0.2": + version "2.1.7" + resolved "https://registry.yarnpkg.com/@smithy/util-endpoints/-/util-endpoints-2.1.7.tgz#a088ebfab946a7219dd4763bfced82709894b82d" + integrity sha512-tSfcqKcN/Oo2STEYCABVuKgJ76nyyr6skGl9t15hs+YaiU06sgMkN7QYjo0BbVw+KT26zok3IzbdSOksQ4YzVw== + dependencies: + "@smithy/node-config-provider" "^3.1.12" + "@smithy/types" "^3.7.2" + tslib "^2.6.2" + +"@smithy/util-endpoints@^3.3.3": + version "3.3.3" + resolved "https://registry.yarnpkg.com/@smithy/util-endpoints/-/util-endpoints-3.3.3.tgz#0119f15bcac30b3b9af1d3cc0a8477e7199d0185" + integrity sha512-VACQVe50j0HZPjpwWcjyT51KUQ4AnsvEaQ2lKHOSL4mNLD0G9BjEniQ+yCt1qqfKfiAHRAts26ud7hBjamrwig== + dependencies: + "@smithy/node-config-provider" "^4.3.12" + "@smithy/types" "^4.13.1" + tslib "^2.6.2" + +"@smithy/util-hex-encoding@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-hex-encoding/-/util-hex-encoding-3.0.0.tgz#32938b33d5bf2a15796cd3f178a55b4155c535e6" + integrity sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ== + dependencies: + tslib "^2.6.2" + +"@smithy/util-hex-encoding@^4.2.2": + version "4.2.2" + resolved "https://registry.yarnpkg.com/@smithy/util-hex-encoding/-/util-hex-encoding-4.2.2.tgz#4abf3335dd1eb884041d8589ca7628d81a6fd1d3" + integrity sha512-Qcz3W5vuHK4sLQdyT93k/rfrUwdJ8/HZ+nMUOyGdpeGA1Wxt65zYwi3oEl9kOM+RswvYq90fzkNDahPS8K0OIg== + dependencies: + tslib "^2.6.2" + +"@smithy/util-middleware@^3.0.1", "@smithy/util-middleware@^3.0.11", "@smithy/util-middleware@^3.0.3": + version "3.0.11" + resolved "https://registry.yarnpkg.com/@smithy/util-middleware/-/util-middleware-3.0.11.tgz#2ab5c17266b42c225e62befcffb048afa682b5bf" + integrity sha512-dWpyc1e1R6VoXrwLoLDd57U1z6CwNSdkM69Ie4+6uYh2GC7Vg51Qtan7ITzczuVpqezdDTKJGJB95fFvvjU/ow== + dependencies: + "@smithy/types" "^3.7.2" + tslib "^2.6.2" + +"@smithy/util-middleware@^4.2.12": + version "4.2.12" + resolved "https://registry.yarnpkg.com/@smithy/util-middleware/-/util-middleware-4.2.12.tgz#d6cb837c2390375e2b6957e7f917350ca4bd8757" + integrity sha512-Er805uFUOvgc0l8nv0e0su0VFISoxhJ/AwOn3gL2NWNY2LUEldP5WtVcRYSQBcjg0y9NfG8JYrCJaYDpupBHJQ== + dependencies: + "@smithy/types" "^4.13.1" + tslib "^2.6.2" + +"@smithy/util-retry@^3.0.1", "@smithy/util-retry@^3.0.11": + version "3.0.11" + resolved "https://registry.yarnpkg.com/@smithy/util-retry/-/util-retry-3.0.11.tgz#d267e5ccb290165cee69732547fea17b695a7425" + integrity sha512-hJUC6W7A3DQgaee3Hp9ZFcOxVDZzmBIRBPlUAk8/fSOEl7pE/aX7Dci0JycNOnm9Mfr0KV2XjIlUOcGWXQUdVQ== + dependencies: + "@smithy/service-error-classification" "^3.0.11" + "@smithy/types" "^3.7.2" + tslib "^2.6.2" + +"@smithy/util-retry@^4.2.12": + version "4.2.12" + resolved "https://registry.yarnpkg.com/@smithy/util-retry/-/util-retry-4.2.12.tgz#be4805afee530f95b00a6ba771e18cb4c324f822" + integrity sha512-1zopLDUEOwumjcHdJ1mwBHddubYF8GMQvstVCLC54Y46rqoHwlIU+8ZzUeaBcD+WCJHyDGSeZ2ml9YSe9aqcoQ== + dependencies: + "@smithy/service-error-classification" "^4.2.12" + "@smithy/types" "^4.13.1" + tslib "^2.6.2" + +"@smithy/util-stream@^3.0.2", "@smithy/util-stream@^3.3.4": + version "3.3.4" + resolved "https://registry.yarnpkg.com/@smithy/util-stream/-/util-stream-3.3.4.tgz#c506ac41310ebcceb0c3f0ba20755e4fe0a90b8d" + integrity sha512-SGhGBG/KupieJvJSZp/rfHHka8BFgj56eek9px4pp7lZbOF+fRiVr4U7A3y3zJD8uGhxq32C5D96HxsTC9BckQ== + dependencies: + "@smithy/fetch-http-handler" "^4.1.3" + "@smithy/node-http-handler" "^3.3.3" + "@smithy/types" "^3.7.2" + "@smithy/util-base64" "^3.0.0" + "@smithy/util-buffer-from" "^3.0.0" + "@smithy/util-hex-encoding" "^3.0.0" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + +"@smithy/util-stream@^4.5.20": + version "4.5.20" + resolved "https://registry.yarnpkg.com/@smithy/util-stream/-/util-stream-4.5.20.tgz#2d312ac8b9ea1780561a77048b027e7db1c6a3d4" + integrity sha512-4yXLm5n/B5SRBR2p8cZ90Sbv4zL4NKsgxdzCzp/83cXw2KxLEumt5p+GAVyRNZgQOSrzXn9ARpO0lUe8XSlSDw== + dependencies: + "@smithy/fetch-http-handler" "^5.3.15" + "@smithy/node-http-handler" "^4.5.0" + "@smithy/types" "^4.13.1" + "@smithy/util-base64" "^4.3.2" + "@smithy/util-buffer-from" "^4.2.2" + "@smithy/util-hex-encoding" "^4.2.2" + "@smithy/util-utf8" "^4.2.2" + tslib "^2.6.2" + +"@smithy/util-uri-escape@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-uri-escape/-/util-uri-escape-3.0.0.tgz#e43358a78bf45d50bb736770077f0f09195b6f54" + integrity sha512-LqR7qYLgZTD7nWLBecUi4aqolw8Mhza9ArpNEQ881MJJIU2sE5iHCK6TdyqqzcDLy0OPe10IY4T8ctVdtynubg== + dependencies: + tslib "^2.6.2" + +"@smithy/util-uri-escape@^4.2.2": + version "4.2.2" + resolved "https://registry.yarnpkg.com/@smithy/util-uri-escape/-/util-uri-escape-4.2.2.tgz#48e40206e7fe9daefc8d44bb43a1ab17e76abf4a" + integrity sha512-2kAStBlvq+lTXHyAZYfJRb/DfS3rsinLiwb+69SstC9Vb0s9vNWkRwpnj918Pfi85mzi42sOqdV72OLxWAISnw== + dependencies: + tslib "^2.6.2" + +"@smithy/util-utf8@^2.0.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@smithy/util-utf8/-/util-utf8-2.3.0.tgz#dd96d7640363259924a214313c3cf16e7dd329c5" + integrity sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A== + dependencies: + "@smithy/util-buffer-from" "^2.2.0" + tslib "^2.6.2" + +"@smithy/util-utf8@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-utf8/-/util-utf8-3.0.0.tgz#1a6a823d47cbec1fd6933e5fc87df975286d9d6a" + integrity sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA== + dependencies: + "@smithy/util-buffer-from" "^3.0.0" + tslib "^2.6.2" + +"@smithy/util-utf8@^4.2.2": + version "4.2.2" + resolved "https://registry.yarnpkg.com/@smithy/util-utf8/-/util-utf8-4.2.2.tgz#21db686982e6f3393ac262e49143b42370130f13" + integrity sha512-75MeYpjdWRe8M5E3AW0O4Cx3UadweS+cwdXjwYGBW5h/gxxnbeZ877sLPX/ZJA9GVTlL/qG0dXP29JWFCD1Ayw== + dependencies: + "@smithy/util-buffer-from" "^4.2.2" + tslib "^2.6.2" + +"@smithy/util-waiter@^3.0.1": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@smithy/util-waiter/-/util-waiter-3.2.0.tgz#1e52f870e77d2e5572025f7606053e6ff00df93d" + integrity sha512-PpjSboaDUE6yl+1qlg3Si57++e84oXdWGbuFUSAciXsVfEZJJJupR2Nb0QuXHiunt2vGR+1PTizOMvnUPaG2Qg== + dependencies: + "@smithy/abort-controller" "^3.1.9" + "@smithy/types" "^3.7.2" + tslib "^2.6.2" + +"@smithy/util-waiter@^4.2.13": + version "4.2.13" + resolved "https://registry.yarnpkg.com/@smithy/util-waiter/-/util-waiter-4.2.13.tgz#fea123340d650825a0ae3cc6c4525337806811ca" + integrity sha512-2zdZ9DTHngRtcYxJK1GUDxruNr53kv5W2Lupe0LMU+Imr6ohQg8M2T14MNkj1Y0wS3FFwpgpGQyvuaMF7CiTmQ== + dependencies: + "@smithy/abort-controller" "^4.2.12" + "@smithy/types" "^4.13.1" + tslib "^2.6.2" + +"@smithy/uuid@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@smithy/uuid/-/uuid-1.1.2.tgz#b6e97c7158615e4a3c775e809c00d8c269b5a12e" + integrity sha512-O/IEdcCUKkubz60tFbGA7ceITTAJsty+lBjNoorP4Z6XRqaFb/OjQjZODophEcuq68nKm6/0r+6/lLQ+XVpk8g== + dependencies: + tslib "^2.6.2" + +"@solidity-parser/parser@0.12.1": + version "0.12.1" + resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.12.1.tgz#10ce249890d32ba500e9ce449e60a2b26b11be7a" + integrity sha512-ikxVpwskNxEp2fvYS1BdRImnevHmM97zdPFBa1cVtjtNpoqCm/EmljATTZk0s9G/zsN5ZbPf9OAIAW4gbBJiRA== + +"@solidity-parser/parser@^0.13.2": + version "0.13.2" + resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.13.2.tgz#b6c71d8ca0b382d90a7bbed241f9bc110af65cbe" + integrity sha512-RwHnpRnfrnD2MSPveYoPh8nhofEvX7fgjHk1Oq+NNvCcLx4r1js91CO9o+F/F3fBzOCyvm8kKRTriFICX/odWw== + dependencies: + antlr4ts "^0.5.0-alpha.4" + +"@solidity-parser/parser@^0.16.0": + version "0.16.2" + resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.16.2.tgz#42cb1e3d88b3e8029b0c9befff00b634cd92d2fa" + integrity sha512-PI9NfoA3P8XK2VBkK5oIfRgKDsicwDZfkVq9ZTBCQYGOP1N2owgY2dyLGyU5/J/hQs8KRk55kdmvTLjy3Mu3vg== + dependencies: + antlr4ts "^0.5.0-alpha.4" + +"@solidity-parser/parser@^0.19.0": + version "0.19.0" + resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.19.0.tgz#37a8983b2725af9b14ff8c4a475fa0e98d773c3f" + integrity sha512-RV16k/qIxW/wWc+mLzV3ARyKUaMUTBy9tOLMzFhtNSKYeTAanQ3a5MudJKf/8arIFnA2L27SNjarQKmFg0w/jA== + +"@solidity-parser/parser@^0.20.1": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.20.2.tgz#e07053488ed60dae1b54f6fe37bb6d2c5fe146a7" + integrity sha512-rbu0bzwNvMcwAjH86hiEAcOeRI2EeK8zCkHDrFykh/Al8mvJeFmjy3UrE7GYQjNwOgbGUUtCn5/k8CB8zIu7QA== + +"@standard-schema/spec@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@standard-schema/spec/-/spec-1.1.0.tgz#a79b55dbaf8604812f52d140b2c9ab41bc150bb8" + integrity sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w== + +"@szmarczak/http-timer@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" + integrity sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA== + dependencies: + defer-to-connect "^1.0.1" + +"@szmarczak/http-timer@^4.0.5": + version "4.0.6" + resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-4.0.6.tgz#b4a914bb62e7c272d4e5989fe4440f812ab1d807" + integrity sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w== + dependencies: + defer-to-connect "^2.0.0" + +"@trufflesuite/bigint-buffer@1.1.10": + version "1.1.10" + resolved "https://registry.yarnpkg.com/@trufflesuite/bigint-buffer/-/bigint-buffer-1.1.10.tgz#a1d9ca22d3cad1a138b78baaf15543637a3e1692" + integrity sha512-pYIQC5EcMmID74t26GCC67946mgTJFiLXOT/BYozgrd4UEY2JHEGLhWi9cMiQCt5BSqFEvKkCHNnoj82SRjiEw== + dependencies: + node-gyp-build "4.4.0" + +"@trufflesuite/bigint-buffer@1.1.9": + version "1.1.9" + resolved "https://registry.yarnpkg.com/@trufflesuite/bigint-buffer/-/bigint-buffer-1.1.9.tgz#e2604d76e1e4747b74376d68f1312f9944d0d75d" + integrity sha512-bdM5cEGCOhDSwminryHJbRmXc1x7dPKg6Pqns3qyTwFlxsqUgxE29lsERS3PlIW1HTjoIGMUqsk1zQQwST1Yxw== + dependencies: + node-gyp-build "4.3.0" + +"@tybys/wasm-util@^0.10.1": + version "0.10.1" + resolved "https://registry.yarnpkg.com/@tybys/wasm-util/-/wasm-util-0.10.1.tgz#ecddd3205cf1e2d5274649ff0eedd2991ed7f414" + integrity sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg== + dependencies: + tslib "^2.4.0" + +"@typechain/ethers-v5@^10.0.0": + version "10.2.1" + resolved "https://registry.yarnpkg.com/@typechain/ethers-v5/-/ethers-v5-10.2.1.tgz#50241e6957683281ecfa03fb5a6724d8a3ce2391" + integrity sha512-n3tQmCZjRE6IU4h6lqUGiQ1j866n5MTCBJreNEHHVWXa2u9GJTaeYyU1/k+1qLutkyw+sS6VAN+AbeiTqsxd/A== + dependencies: + lodash "^4.17.15" + ts-essentials "^7.0.1" + +"@types/abstract-leveldown@*": + version "7.2.5" + resolved "https://registry.yarnpkg.com/@types/abstract-leveldown/-/abstract-leveldown-7.2.5.tgz#db2cf364c159fb1f12be6cd3549f56387eaf8d73" + integrity sha512-/2B0nQF4UdupuxeKTJA2+Rj1D+uDemo6P4kMwKCpbfpnzeVaWSELTsAw4Lxn3VJD6APtRrZOCuYo+4nHUQfTfg== + +"@types/bn.js@^4.11.3", "@types/bn.js@^4.11.5": + version "4.11.6" + resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-4.11.6.tgz#c306c70d9358aaea33cd4eda092a742b9505967c" + integrity sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg== + dependencies: + "@types/node" "*" + +"@types/bn.js@^5.1.0": + version "5.2.0" + resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-5.2.0.tgz#4349b9710e98f9ab3cdc50f1c5e4dcbd8ef29c80" + integrity sha512-DLbJ1BPqxvQhIGbeu8VbUC1DiAiahHtAYvA0ZEAa4P31F7IaArc8z3C3BRQdWX4mtLQuABG4yzp76ZrS02Ui1Q== + dependencies: + "@types/node" "*" + +"@types/cacheable-request@^6.0.1": + version "6.0.3" + resolved "https://registry.yarnpkg.com/@types/cacheable-request/-/cacheable-request-6.0.3.tgz#a430b3260466ca7b5ca5bfd735693b36e7a9d183" + integrity sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw== + dependencies: + "@types/http-cache-semantics" "*" + "@types/keyv" "^3.1.4" + "@types/node" "*" + "@types/responselike" "^1.0.0" + +"@types/chai@^5.2.2": + version "5.2.3" + resolved "https://registry.yarnpkg.com/@types/chai/-/chai-5.2.3.tgz#8e9cd9e1c3581fa6b341a5aed5588eb285be0b4a" + integrity sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA== + dependencies: + "@types/deep-eql" "*" + assertion-error "^2.0.1" + +"@types/deep-eql@*": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@types/deep-eql/-/deep-eql-4.0.2.tgz#334311971d3a07121e7eb91b684a605e7eea9cbd" + integrity sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw== + +"@types/estree@*", "@types/estree@1.0.8", "@types/estree@^1.0.0": + version "1.0.8" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.8.tgz#958b91c991b1867ced318bedea0e215ee050726e" + integrity sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w== + +"@types/figlet@^1.5.4": + version "1.7.0" + resolved "https://registry.yarnpkg.com/@types/figlet/-/figlet-1.7.0.tgz#f3bc4e47ebebacc93223211bb61245bc72598254" + integrity sha512-KwrT7p/8Eo3Op/HBSIwGXOsTZKYiM9NpWRBJ5sVjWP/SmlS+oxxRvJht/FNAtliJvja44N3ul1yATgohnVBV0Q== + +"@types/glob@^7.1.1": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.2.0.tgz#bc1b5bf3aa92f25bd5dd39f35c57361bdce5b2eb" + integrity sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA== + dependencies: + "@types/minimatch" "*" + "@types/node" "*" + +"@types/http-cache-semantics@*": + version "4.2.0" + resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz#f6a7788f438cbfde15f29acad46512b4c01913b3" + integrity sha512-L3LgimLHXtGkWikKnsPg0/VFx9OGZaC+eN1u4r+OB1XRqH3meBIAVC2zr1WdMH+RHmnRkqliQAOHNJ/E0j/e0Q== + +"@types/keyv@^3.1.4": + version "3.1.4" + resolved "https://registry.yarnpkg.com/@types/keyv/-/keyv-3.1.4.tgz#3ccdb1c6751b0c7e52300bcdacd5bcbf8faa75b6" + integrity sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg== + dependencies: + "@types/node" "*" + +"@types/level-errors@*": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@types/level-errors/-/level-errors-3.0.2.tgz#f33ec813c50780b547463da9ad8acac89ee457d9" + integrity sha512-gyZHbcQ2X5hNXf/9KS2qGEmgDe9EN2WDM3rJ5Ele467C0nA1sLhtmv1bZiPMDYfAYCfPWft0uQIaTvXbASSTRA== + +"@types/levelup@^4.3.0": + version "4.3.3" + resolved "https://registry.yarnpkg.com/@types/levelup/-/levelup-4.3.3.tgz#4dc2b77db079b1cf855562ad52321aa4241b8ef4" + integrity sha512-K+OTIjJcZHVlZQN1HmU64VtrC0jC3dXWQozuEIR9zVvltIk90zaGPM2AgT+fIkChpzHhFE3YnvFLCbLtzAmexA== + dependencies: + "@types/abstract-leveldown" "*" + "@types/level-errors" "*" + "@types/node" "*" + +"@types/lru-cache@5.1.1": + version "5.1.1" + resolved "https://registry.yarnpkg.com/@types/lru-cache/-/lru-cache-5.1.1.tgz#c48c2e27b65d2a153b19bfc1a317e30872e01eef" + integrity sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw== + +"@types/minimatch@*": + version "6.0.0" + resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-6.0.0.tgz#4d207b1cc941367bdcd195a3a781a7e4fc3b1e03" + integrity sha512-zmPitbQ8+6zNutpwgcQuLcsEpn/Cj54Kbn7L5pX0Os5kdWplB7xPgEh/g+SWOB/qmows2gpuCaPyduq8ZZRnxA== + dependencies: + minimatch "*" + +"@types/mkdirp@^0.5.2": + version "0.5.2" + resolved "https://registry.yarnpkg.com/@types/mkdirp/-/mkdirp-0.5.2.tgz#503aacfe5cc2703d5484326b1b27efa67a339c1f" + integrity sha512-U5icWpv7YnZYGsN4/cmh3WD2onMY0aJIiTE6+51TwJCttdHvtCYmkBNOobHlXwrJRL0nkH9jH4kD+1FAdMN4Tg== + dependencies: + "@types/node" "*" + +"@types/node-fetch@^2.6.1": + version "2.6.13" + resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.6.13.tgz#e0c9b7b5edbdb1b50ce32c127e85e880872d56ee" + integrity sha512-QGpRVpzSaUs30JBSGPjOg4Uveu384erbHBoT1zeONvyCfwQxIkUshLAOqN/k9EjGviPRmWTTe6aH2qySWKTVSw== + dependencies: + "@types/node" "*" + form-data "^4.0.4" + +"@types/node@*": + version "25.5.0" + resolved "https://registry.yarnpkg.com/@types/node/-/node-25.5.0.tgz#5c99f37c443d9ccc4985866913f1ed364217da31" + integrity sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw== + dependencies: + undici-types "~7.18.0" + +"@types/node@11.11.6": + version "11.11.6" + resolved "https://registry.yarnpkg.com/@types/node/-/node-11.11.6.tgz#df929d1bb2eee5afdda598a41930fe50b43eaa6a" + integrity sha512-Exw4yUWMBXM3X+8oqzJNRqZSwUAaS4+7NdvHqQuFi/d+synz++xmX3QIf+BFqneW8N31R8Ky+sikfZUXq07ggQ== + +"@types/node@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.12.6": + version "12.20.55" + resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.55.tgz#c329cbd434c42164f846b909bd6f85b5537f6240" + integrity sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ== + +"@types/node@^15.12.2": + version "15.14.9" + resolved "https://registry.yarnpkg.com/@types/node/-/node-15.14.9.tgz#bc43c990c3c9be7281868bbc7b8fdd6e2b57adfa" + integrity sha512-qjd88DrCxupx/kJD5yQgZdcYKZKSIGBVDIBE1/LTGcNm3d2Np/jxojkdePDdfnBHJc5W7vSMpbJ1aB7p/Py69A== + +"@types/pbkdf2@^3.0.0": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@types/pbkdf2/-/pbkdf2-3.1.2.tgz#2dc43808e9985a2c69ff02e2d2027bd4fe33e8dc" + integrity sha512-uRwJqmiXmh9++aSu1VNEn3iIxWOhd8AHXNSdlaLfdAAdSTY9jYVeGWnzejM3dvrkbqE3/hyQkQQ29IFATEGlew== + dependencies: + "@types/node" "*" + +"@types/prettier@^2.1.1": + version "2.7.3" + resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.3.tgz#3e51a17e291d01d17d3fc61422015a933af7a08f" + integrity sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA== + +"@types/qs@^6.9.7": + version "6.15.0" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.15.0.tgz#963ab61779843fe910639a50661b48f162bc7f79" + integrity sha512-JawvT8iBVWpzTrz3EGw9BTQFg3BQNmwERdKE22vlTxawwtbyUSlMppvZYKLZzB5zgACXdXxbD3m1bXaMqP/9ow== + +"@types/resolve@1.20.2": + version "1.20.2" + resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.20.2.tgz#97d26e00cd4a0423b4af620abecf3e6f442b7975" + integrity sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q== + +"@types/responselike@^1.0.0": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@types/responselike/-/responselike-1.0.3.tgz#cc29706f0a397cfe6df89debfe4bf5cea159db50" + integrity sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw== + dependencies: + "@types/node" "*" + +"@types/secp256k1@^4.0.1": + version "4.0.7" + resolved "https://registry.yarnpkg.com/@types/secp256k1/-/secp256k1-4.0.7.tgz#534c9814eb80964962108ad45d549d1555c75fa0" + integrity sha512-Rcvjl6vARGAKRO6jHeKMatGrvOMGrR/AR11N1x2LqintPCyDZ7NBhrh238Z2VZc7aM7KIwnFpFQ7fnfK4H/9Qw== + dependencies: + "@types/node" "*" + +"@types/seedrandom@3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@types/seedrandom/-/seedrandom-3.0.1.tgz#1254750a4fec4aff2ebec088ccd0bb02e91fedb4" + integrity sha512-giB9gzDeiCeloIXDgzFBCgjj1k4WxcDrZtGl6h1IqmUPlxF+Nx8Ve+96QCyDZ/HseB/uvDsKbpib9hU5cU53pw== + +"@types/underscore@^1.11.4": + version "1.13.0" + resolved "https://registry.yarnpkg.com/@types/underscore/-/underscore-1.13.0.tgz#dd8c034a92e5b8e24650c31af43d807c5340cee4" + integrity sha512-L6LBgy1f0EFQZ+7uSA57+n2g/s4Qs5r06Vwrwn0/nuK1de+adz00NWaztRQ30aEqw5qOaWbPI8u2cGQ52lj6VA== + +"@types/yargs-parser@*": + version "21.0.3" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.3.tgz#815e30b786d2e8f0dcd85fd5bcf5e1a04d008f15" + integrity sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ== + +"@types/yargs@^17.0.12": + version "17.0.35" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.35.tgz#07013e46aa4d7d7d50a49e15604c1c5340d4eb24" + integrity sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg== + dependencies: + "@types/yargs-parser" "*" + +"@ungap/structured-clone@^1.2.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.3.0.tgz#d06bbb384ebcf6c505fde1c3d0ed4ddffe0aaff8" + integrity sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g== + +"@uniswap/lib@^4.0.1-alpha": + version "4.0.1-alpha" + resolved "https://registry.yarnpkg.com/@uniswap/lib/-/lib-4.0.1-alpha.tgz#2881008e55f075344675b3bca93f020b028fbd02" + integrity sha512-f6UIliwBbRsgVLxIaBANF6w09tYqc6Y/qXdsrbEmXHyFA7ILiKrIwRFXe1yOg8M3cksgVsO9N7yuL2DdCGQKBA== + +"@uniswap/v2-core@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@uniswap/v2-core/-/v2-core-1.0.1.tgz#af8f508bf183204779938969e2e54043e147d425" + integrity sha512-MtybtkUPSyysqLY2U210NBDeCHX+ltHt3oADGdjqoThZaFRDKwM6k1Nb3F0A3hk5hwuQvytFWhrWHOEq6nVJ8Q== + +"@uniswap/v3-core@1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@uniswap/v3-core/-/v3-core-1.0.0.tgz#6c24adacc4c25dceee0ba3ca142b35adbd7e359d" + integrity sha512-kSC4djMGKMHj7sLMYVnn61k9nu+lHjMIxgg9CDQT+s2QYLoA56GbSK9Oxr+qJXzzygbkrmuY6cwgP6cW2JXPFA== + +"@uniswap/v3-core@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@uniswap/v3-core/-/v3-core-1.0.1.tgz#b6d2bdc6ba3c3fbd610bdc502395d86cd35264a0" + integrity sha512-7pVk4hEm00j9tc71Y9+ssYpO6ytkeI0y7WE9P6UcmNzhxPePwyAxImuhVsTqWK9YFvzgtvzJHi64pBl4jUzKMQ== + +"@uniswap/v3-periphery@1.4.3": + version "1.4.3" + resolved "https://registry.yarnpkg.com/@uniswap/v3-periphery/-/v3-periphery-1.4.3.tgz#a6da4632dbd46b139cc13a410e4ec09ad22bd19f" + integrity sha512-80c+wtVzl5JJT8UQskxVYYG3oZb4pkhY0zDe0ab/RX4+8f9+W5d8wI4BT0wLB0wFQTSnbW+QdBSpkHA/vRyGBA== + dependencies: + "@openzeppelin/contracts" "3.4.2-solc-0.7" + "@uniswap/lib" "^4.0.1-alpha" + "@uniswap/v2-core" "1.0.1" + "@uniswap/v3-core" "1.0.0" + base64-sol "1.0.1" + +"@vekexasia/bigint-buffer2@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@vekexasia/bigint-buffer2/-/bigint-buffer2-1.1.1.tgz#19c25ecfe9d326e05d50adbf811224b4510c1306" + integrity sha512-uL63NGANn85oKrsrvD0CzgmkuMlWQnGv/J7sz0QQ2CnRaF1nMF0fAoRFH9PFtGRr62ZCA14qkHZATyBZbKYlRQ== + +"@vitest/expect@4.1.2": + version "4.1.2" + resolved "https://registry.yarnpkg.com/@vitest/expect/-/expect-4.1.2.tgz#2aec02233db4eac14777e6a7d14a535c63ae2d9b" + integrity sha512-gbu+7B0YgUJ2nkdsRJrFFW6X7NTP44WlhiclHniUhxADQJH5Szt9mZ9hWnJPJ8YwOK5zUOSSlSvyzRf0u1DSBQ== + dependencies: + "@standard-schema/spec" "^1.1.0" + "@types/chai" "^5.2.2" + "@vitest/spy" "4.1.2" + "@vitest/utils" "4.1.2" + chai "^6.2.2" + tinyrainbow "^3.1.0" + +"@vitest/mocker@4.1.2": + version "4.1.2" + resolved "https://registry.yarnpkg.com/@vitest/mocker/-/mocker-4.1.2.tgz#3f23523697f9ab9e851b58b2213c4ab6181aa0e6" + integrity sha512-Ize4iQtEALHDttPRCmN+FKqOl2vxTiNUhzobQFFt/BM1lRUTG7zRCLOykG/6Vo4E4hnUdfVLo5/eqKPukcWW7Q== + dependencies: + "@vitest/spy" "4.1.2" + estree-walker "^3.0.3" + magic-string "^0.30.21" + +"@vitest/pretty-format@4.1.2": + version "4.1.2" + resolved "https://registry.yarnpkg.com/@vitest/pretty-format/-/pretty-format-4.1.2.tgz#c2671aa1c931dc8f2759589fc87ea4b2602892c5" + integrity sha512-dwQga8aejqeuB+TvXCMzSQemvV9hNEtDDpgUKDzOmNQayl2OG241PSWeJwKRH3CiC+sESrmoFd49rfnq7T4RnA== + dependencies: + tinyrainbow "^3.1.0" + +"@vitest/runner@4.1.2": + version "4.1.2" + resolved "https://registry.yarnpkg.com/@vitest/runner/-/runner-4.1.2.tgz#6f744fa0d92d31f4c8c255b64bbe073cb75fd96e" + integrity sha512-Gr+FQan34CdiYAwpGJmQG8PgkyFVmARK8/xSijia3eTFgVfpcpztWLuP6FttGNfPLJhaZVP/euvujeNYar36OQ== + dependencies: + "@vitest/utils" "4.1.2" + pathe "^2.0.3" + +"@vitest/snapshot@4.1.2": + version "4.1.2" + resolved "https://registry.yarnpkg.com/@vitest/snapshot/-/snapshot-4.1.2.tgz#3972b8ed7a311133e12cb833bf86463d26cdd455" + integrity sha512-g7yfUmxYS4mNxk31qbOYsSt2F4m1E02LFqO53Xpzg3zKMhLAPZAjjfyl9e6z7HrW6LvUdTwAQR3HHfLjpko16A== + dependencies: + "@vitest/pretty-format" "4.1.2" + "@vitest/utils" "4.1.2" + magic-string "^0.30.21" + pathe "^2.0.3" + +"@vitest/spy@4.1.2": + version "4.1.2" + resolved "https://registry.yarnpkg.com/@vitest/spy/-/spy-4.1.2.tgz#1f312cef5756256639b4c0614f74c8ad9a036ef9" + integrity sha512-DU4fBnbVCJGNBwVA6xSToNXrkZNSiw59H8tcuUspVMsBDBST4nfvsPsEHDHGtWRRnqBERBQu7TrTKskmjqTXKA== + +"@vitest/utils@4.1.2": + version "4.1.2" + resolved "https://registry.yarnpkg.com/@vitest/utils/-/utils-4.1.2.tgz#32be8f42eb6683a598b1c61d7ec9f55596c60ecb" + integrity sha512-xw2/TiX82lQHA06cgbqRKFb5lCAy3axQ4H4SoUFhUsg+wztiet+co86IAMDtF6Vm1hc7J6j09oh/rgDn+JdKIQ== + dependencies: + "@vitest/pretty-format" "4.1.2" + convert-source-map "^2.0.0" + tinyrainbow "^3.1.0" + +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== + +abbrev@1.0.x: + version "1.0.9" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135" + integrity sha512-LEyx4aLEC3x6T0UguF6YILf+ntvmOaWsVfENmIW0E9H09vKlLDGelMjjSm0jkDHALj8A8quZ/HapKNigzwge+Q== + +abitype@1.2.3, abitype@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/abitype/-/abitype-1.2.3.tgz#bec3e09dea97d99ef6c719140bee663a329ad1f4" + integrity sha512-Ofer5QUnuUdTFsBRwARMoWKOH1ND5ehwYhJ3OJ/BQO+StkwQjHw0XyVh4vDttzHB7QOFhPHa/o413PJ82gU/Tg== + +abstract-leveldown@^6.2.1: + version "6.3.0" + resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-6.3.0.tgz#d25221d1e6612f820c35963ba4bd739928f6026a" + integrity sha512-TU5nlYgta8YrBMNpc9FwQzRbiXsj49gsALsXadbGHt9CROPzX5fB0rWDR5mtdpOOKa5XqRFpbj1QroPAoPzVjQ== + dependencies: + buffer "^5.5.0" + immediate "^3.2.3" + level-concat-iterator "~2.0.0" + level-supports "~1.0.0" + xtend "~4.0.0" + +abstract-leveldown@^7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz#08d19d4e26fb5be426f7a57004851b39e1795a2e" + integrity sha512-DnhQwcFEaYsvYDnACLZhMmCWd3rkOeEvglpa4q5i/5Jlm3UIsWaxVzuXvDLFCSCWRO3yy2/+V/G7FusFgejnfQ== + dependencies: + buffer "^6.0.3" + catering "^2.0.0" + is-buffer "^2.0.5" + level-concat-iterator "^3.0.0" + level-supports "^2.0.1" + queue-microtask "^1.2.3" + +abstract-leveldown@~6.2.1: + version "6.2.3" + resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz#036543d87e3710f2528e47040bc3261b77a9a8eb" + integrity sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ== + dependencies: + buffer "^5.5.0" + immediate "^3.2.3" + level-concat-iterator "~2.0.0" + level-supports "~1.0.0" + xtend "~4.0.0" + +accepts@~1.3.8: + version "1.3.8" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" + integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== + dependencies: + mime-types "~2.1.34" + negotiator "0.6.3" + +acorn-jsx@^5.0.0, 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@^6.0.7: + version "6.4.2" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" + integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ== + +acorn@^8.9.0: + version "8.16.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.16.0.tgz#4ce79c89be40afe7afe8f3adb902a1f1ce9ac08a" + integrity sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw== + +adm-zip@^0.4.16: + version "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" + integrity sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q== + +aes-js@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.1.2.tgz#db9aabde85d5caabbfc0d4f2a4446960f627146a" + integrity sha512-e5pEa2kBnBOgR4Y/p20pskXI74UEz7de8ZGVo58asOtvSVG5YAbJeELPZxOmt+Bnz3rX753YKhfIn4X4l1PPRQ== + +agent-base@6: + version "6.0.2" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== + dependencies: + debug "4" + +aggregate-error@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" + integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== + dependencies: + clean-stack "^2.0.0" + indent-string "^4.0.0" + +ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.6, ajv@^6.6.1, ajv@^6.9.1: + version "6.14.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.14.0.tgz#fd067713e228210636ebb08c60bd3765d6dbe73a" + integrity sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ajv@^8.0.1: + version "8.18.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.18.0.tgz#8864186b6738d003eb3a933172bb3833e10cefbc" + integrity sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A== + dependencies: + fast-deep-equal "^3.1.3" + fast-uri "^3.0.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + +amazon-cognito-identity-js@^6.0.1, amazon-cognito-identity-js@^6.3.6: + version "6.3.16" + resolved "https://registry.yarnpkg.com/amazon-cognito-identity-js/-/amazon-cognito-identity-js-6.3.16.tgz#4a6aceb64c80406b9ee4344980794ff9e506017a" + integrity sha512-HPGSBGD6Q36t99puWh0LnptxO/4icnk2kqIQ9cTJ2tFQo5NMUnWQIgtrTAk8nm+caqUbjDzXzG56GBjI2tS6jQ== + dependencies: + "@aws-crypto/sha256-js" "1.2.2" + buffer "4.9.2" + fast-base64-decode "^1.0.0" + isomorphic-unfetch "^3.0.0" + js-cookie "^2.2.1" + +amdefine@>=0.0.4: + version "1.0.1" + resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" + integrity sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg== + +ansi-align@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.1.tgz#0cdf12e111ace773a86e9a1fad1225c43cb19a59" + integrity sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w== + dependencies: + string-width "^4.1.0" + +ansi-colors@4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" + integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== + +ansi-colors@^4.1.1, ansi-colors@^4.1.3: + version "4.1.3" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" + integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== + +ansi-escapes@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" + integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== + +ansi-escapes@^4.3.0: + version "4.3.2" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== + dependencies: + type-fest "^0.21.3" + +ansi-regex@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.1.tgz#123d6479e92ad45ad897d4054e3c7ca7db4944e1" + integrity sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw== + +ansi-regex@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.1.tgz#164daac87ab2d6f6db3a29875e2d1766582dabed" + integrity sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g== + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-regex@^6.2.2: + version "6.2.2" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.2.2.tgz#60216eea464d864597ce2832000738a0589650c1" + integrity sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg== + +ansi-styles@^3.2.0, ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +ansi-styles@^6.1.0: + version "6.2.3" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.3.tgz#c044d5dcc521a076413472597a1acb1f103c4041" + integrity sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg== + +antlr4@4.7.1: + version "4.7.1" + resolved "https://registry.yarnpkg.com/antlr4/-/antlr4-4.7.1.tgz#69984014f096e9e775f53dd9744bf994d8959773" + integrity sha512-haHyTW7Y9joE5MVs37P2lNYfU2RWBLfcRDD8OWldcdZm5TiCE91B5Xl1oWSwiDUSd4rlExpt2pu1fksYQjRBYQ== + +antlr4@^4.11.0: + version "4.13.2" + resolved "https://registry.yarnpkg.com/antlr4/-/antlr4-4.13.2.tgz#0d084ad0e32620482a9c3a0e2470c02e72e4006d" + integrity sha512-QiVbZhyy4xAZ17UPEuG3YTOt8ZaoeOR1CvEAqrEsDBsOqINslaB147i9xqljZqoyf5S+EUlGStaj+t22LT9MOg== + +antlr4ts@^0.5.0-alpha.4: + version "0.5.0-alpha.4" + resolved "https://registry.yarnpkg.com/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz#71702865a87478ed0b40c0709f422cf14d51652a" + integrity sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ== + +any-signal@^4.1.1: + version "4.2.0" + resolved "https://registry.yarnpkg.com/any-signal/-/any-signal-4.2.0.tgz#a0bdf89affa9aa6962fc2f933741bedb02b26d1e" + integrity sha512-LndMvYuAPf4rC195lk7oSFuHOYFpOszIYrNYv0gHAvz+aEhE9qPZLhmrIz5pXP2BSsPOXvsuHDXEGaiQhIh9wA== + +anymatch@~3.1.2: + version "3.1.3" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +array-back@^3.0.1, array-back@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/array-back/-/array-back-3.1.0.tgz#b8859d7a508871c9a7b2cf42f99428f65e96bfb0" + integrity sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q== + +array-back@^4.0.1, array-back@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/array-back/-/array-back-4.0.2.tgz#8004e999a6274586beeb27342168652fdb89fa1e" + integrity sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg== + +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== + +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== + +asn1.js@^4.10.1: + version "4.10.1" + resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0" + integrity sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw== + dependencies: + bn.js "^4.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + +asn1@~0.2.3: + version "0.2.6" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d" + integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ== + dependencies: + safer-buffer "~2.1.0" + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw== + +assert@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/assert/-/assert-2.1.0.tgz#6d92a238d05dc02e7427c881fb8be81c8448b2dd" + integrity sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw== + dependencies: + call-bind "^1.0.2" + is-nan "^1.3.2" + object-is "^1.1.5" + object.assign "^4.1.4" + util "^0.12.5" + +assertion-error@^1.1.0: + version "1.1.0" + resolved "https://registry.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-parents@^0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/ast-parents/-/ast-parents-0.0.1.tgz#508fd0f05d0c48775d9eccda2e174423261e8dd3" + integrity sha512-XHusKxKz3zoYk1ic8Un640joHbFMhbqneyoZfoKnEGtf2ey9Uh/IdpcQplODdO/kENaMIWsD0nJm4+wX3UNLHA== + +astral-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" + integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== + +astral-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" + integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== + +async-eventemitter@^0.2.4: + version "0.2.4" + resolved "https://registry.yarnpkg.com/async-eventemitter/-/async-eventemitter-0.2.4.tgz#f5e7c8ca7d3e46aab9ec40a292baf686a0bafaca" + integrity sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw== + dependencies: + async "^2.4.0" + +async-limiter@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" + integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== + +async-retry@^1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/async-retry/-/async-retry-1.3.3.tgz#0e7f36c04d8478e7a58bdbed80cedf977785f280" + integrity sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw== + dependencies: + retry "0.13.1" + +async@1.x: + version "1.5.2" + resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" + integrity sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w== + +async@^2.4.0: + version "2.6.4" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.4.tgz#706b7ff6084664cd7eae713f6f965433b5504221" + integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA== + dependencies: + lodash "^4.17.14" + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + +atob@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" + integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== + +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" + +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + integrity sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA== + +aws4@^1.8.0: + version "1.13.2" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.13.2.tgz#0aa167216965ac9474ccfa83892cfb6b3e1e52ef" + integrity sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw== + +axios@1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.4.0.tgz#38a7bf1224cd308de271146038b551d725f0be1f" + integrity sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA== + dependencies: + follow-redirects "^1.15.0" + form-data "^4.0.0" + proxy-from-env "^1.1.0" + +axios@^0.21.1, axios@^0.21.2: + version "0.21.4" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.4.tgz#c67b90dc0568e5c1cf2b0b858c43ba28e2eda575" + integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg== + dependencies: + follow-redirects "^1.14.0" + +axios@^1.6.7, axios@^1.7.4: + version "1.13.6" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.13.6.tgz#c3f92da917dc209a15dd29936d20d5089b6b6c98" + integrity sha512-ChTCHMouEe2kn713WHbQGcuYrr6fXTBiu460OTwWrWob16g1bXn4vtz07Ope7ewMozJAnEquLk5lWQWtBig9DQ== + dependencies: + follow-redirects "^1.15.11" + form-data "^4.0.5" + proxy-from-env "^1.1.0" + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +balanced-match@^4.0.2: + version "4.0.4" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-4.0.4.tgz#bfb10662feed8196a2c62e7c68e17720c274179a" + integrity sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA== + +base-x@^3.0.2, base-x@^3.0.8: + version "3.0.11" + resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.11.tgz#40d80e2a1aeacba29792ccc6c5354806421287ff" + integrity sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA== + dependencies: + safe-buffer "^5.0.1" + +base-x@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/base-x/-/base-x-4.0.1.tgz#817fb7b57143c501f649805cb247617ad016a885" + integrity sha512-uAZ8x6r6S3aUM9rbHGVOIsR15U/ZSc82b3ymnCPsT45Gk1DDvhDPdIgB5MrhirZWt+5K0EEPQH985kNqZgNPFw== + +base-x@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/base-x/-/base-x-5.0.1.tgz#16bf35254be1df8aca15e36b7c1dda74b2aa6b03" + integrity sha512-M7uio8Zt++eg3jPj+rHMfCC+IuygQHHCOU+IYsVtik6FWjuYpVt/+MRKcgsAMHh8mMFAwnB+Bs+mTrFiXjMzKg== + +base64-js@^1.0.2, base64-js@^1.3.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + +base64-sol@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/base64-sol/-/base64-sol-1.0.1.tgz#91317aa341f0bc763811783c5729f1c2574600f6" + integrity sha512-ld3cCNMeXt4uJXmLZBHFGMvVpK9KsLVEhPpFRXnvSVAqABKbuNZg/+dsq3NuM+wxFLb/UrVkz7m1ciWmkMfTbg== + +bcrypt-pbkdf@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" + integrity sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w== + dependencies: + tweetnacl "^0.14.3" + +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== + +bignumber.js@^9.0.0, bignumber.js@^9.1.2: + version "9.3.1" + resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.3.1.tgz#759c5aaddf2ffdc4f154f7b493e1c8770f88c4d7" + integrity sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ== + +binary-extensions@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" + integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== + +bip39@3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/bip39/-/bip39-3.0.4.tgz#5b11fed966840b5e1b8539f0f54ab6392969b2a0" + integrity sha512-YZKQlb752TrUWqHWj7XAwCSjYEgGAk+/Aas3V7NyjQeZYsztO8JnQUaCWhcnL4T+jL8nvB8typ2jRPzTlgugNw== + dependencies: + "@types/node" "11.11.6" + create-hash "^1.1.0" + pbkdf2 "^3.0.9" + randombytes "^2.0.1" + +blakejs@^1.1.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/blakejs/-/blakejs-1.2.1.tgz#5057e4206eadb4a97f7c0b6e197a505042fc3814" + integrity sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ== + +bls-eth-wasm@^1.0.4, bls-eth-wasm@^1.1.1: + version "1.4.0" + resolved "https://registry.yarnpkg.com/bls-eth-wasm/-/bls-eth-wasm-1.4.0.tgz#7e68ac6cf897ec6227b15e3567d7c392b5f50f76" + integrity sha512-9TJR3r3CUJQR97PU6zokV2kVA80H8g4tkVBnaf9HNH3lFMBZUKZETNCwIuN+exFLujdbt1K188rH3mnq8UgmKw== + +bls-signatures@^0.2.5: + version "0.2.5" + resolved "https://registry.yarnpkg.com/bls-signatures/-/bls-signatures-0.2.5.tgz#7c285e3cb535f279d842e53d1f6e0c8ceda793d1" + integrity sha512-5TzQNCtR4zWE4lM08EOMIT8l3b4h8g5LNKu50fUYP1PnupaLGSLklAcTto4lnH7VXpyhsar+74L9wNJII4E/4Q== + +bluebird@^3.5.0: + version "3.7.2" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" + integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== + +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.1.0, bn.js@^4.11.0, bn.js@^4.11.1, bn.js@^4.11.6, bn.js@^4.11.8, bn.js@^4.11.9: + version "4.12.3" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.3.tgz#2cc2c679188eb35b006f2d0d4710bed8437a769e" + integrity sha512-fGTi3gxV/23FTYdAoUtLYp6qySe2KE3teyZitipKNRuVYcBkoP/bB3guXN/XVKUe9mxCHXnc9C4ocyz8OmgN0g== + +bn.js@^5.1.2, bn.js@^5.2.0, bn.js@^5.2.1, bn.js@^5.2.2: + version "5.2.3" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.3.tgz#16a9e409616b23fef3ccbedb8d42f13bff80295e" + integrity sha512-EAcmnPkxpntVL+DS7bO1zhcZNvCkxqtkd0ZY53h06GNQ3DEkkGZ/gKgmDv6DdZQGj9BgfSPKtJJ7Dp1GPP8f7w== + +body-parser@^1.16.0, body-parser@~1.20.3: + version "1.20.4" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.4.tgz#f8e20f4d06ca8a50a71ed329c15dccad1cdc547f" + integrity sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA== + dependencies: + bytes "~3.1.2" + content-type "~1.0.5" + debug "2.6.9" + depd "2.0.0" + destroy "~1.2.0" + http-errors "~2.0.1" + iconv-lite "~0.4.24" + on-finished "~2.4.1" + qs "~6.14.0" + raw-body "~2.5.3" + type-is "~1.6.18" + unpipe "~1.0.0" + +bowser@^2.11.0: + version "2.14.1" + resolved "https://registry.yarnpkg.com/bowser/-/bowser-2.14.1.tgz#4ea39bf31e305184522d7ad7bfd91389e4f0cb79" + integrity sha512-tzPjzCxygAKWFOJP011oxFHs57HzIhOEracIgAePE4pqB3LikALKnSzUyU4MGs9/iCEUuHlAJTjTc5M+u7YEGg== + +boxen@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/boxen/-/boxen-5.1.2.tgz#788cb686fc83c1f486dfa8a40c68fc2b831d2b50" + integrity sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ== + dependencies: + ansi-align "^3.0.0" + camelcase "^6.2.0" + chalk "^4.1.0" + cli-boxes "^2.2.1" + string-width "^4.2.2" + type-fest "^0.20.2" + widest-line "^3.1.0" + wrap-ansi "^7.0.0" + +brace-expansion@^1.1.7: + version "1.1.12" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.12.tgz#ab9b454466e5a8cc3a187beaad580412a9c5b843" + integrity sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +brace-expansion@^2.0.1, brace-expansion@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.2.tgz#54fc53237a613d854c7bd37463aad17df87214e7" + integrity sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ== + dependencies: + balanced-match "^1.0.0" + +brace-expansion@^5.0.2: + version "5.0.5" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-5.0.5.tgz#dcc3a37116b79f3e1b46db994ced5d570e930fdb" + integrity sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ== + dependencies: + balanced-match "^4.0.2" + +braces@^3.0.3, braces@~3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" + integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== + dependencies: + fill-range "^7.1.1" + +brorand@^1.0.1, brorand@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" + integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== + +brotli-wasm@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/brotli-wasm/-/brotli-wasm-2.0.1.tgz#2b3f4dc3db0c3e60d2635c055e6bac4ddf4bd3f5" + integrity sha512-+3USgYsC7bzb5yU0/p2HnnynZl0ak0E6uoIm4UW4Aby/8s8HFCq6NCfrrf1E9c3O8OCSzq3oYO1tUVqIi61Nww== + +browser-stdout@1.3.1, browser-stdout@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" + integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== + +browserify-aes@^1.0.4, browserify-aes@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" + integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== + dependencies: + buffer-xor "^1.0.3" + cipher-base "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.3" + inherits "^2.0.1" + safe-buffer "^5.0.1" + +browserify-cipher@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" + integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== + dependencies: + browserify-aes "^1.0.4" + browserify-des "^1.0.0" + evp_bytestokey "^1.0.0" + +browserify-des@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" + integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== + dependencies: + cipher-base "^1.0.1" + des.js "^1.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +browserify-rsa@^4.0.0, browserify-rsa@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.1.1.tgz#06e530907fe2949dc21fc3c2e2302e10b1437238" + integrity sha512-YBjSAiTqM04ZVei6sXighu679a3SqWORA3qZTEqZImnlkDIFtKc6pNutpjyZ8RJTjQtuYfeetkxM11GwoYXMIQ== + dependencies: + bn.js "^5.2.1" + randombytes "^2.1.0" + safe-buffer "^5.2.1" + +browserify-sign@^4.0.0: + version "4.2.5" + resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.5.tgz#3979269fa8af55ba18aac35deef11b45515cd27d" + integrity sha512-C2AUdAJg6rlM2W5QMp2Q4KGQMVBwR1lIimTsUnutJ8bMpW5B52pGpR2gEnNBNwijumDo5FojQ0L9JrXA8m4YEw== + dependencies: + bn.js "^5.2.2" + browserify-rsa "^4.1.1" + create-hash "^1.2.0" + create-hmac "^1.1.7" + elliptic "^6.6.1" + inherits "^2.0.4" + parse-asn1 "^5.1.9" + readable-stream "^2.3.8" + safe-buffer "^5.2.1" + +bs58@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a" + integrity sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw== + dependencies: + base-x "^3.0.2" + +bs58@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/bs58/-/bs58-5.0.0.tgz#865575b4d13c09ea2a84622df6c8cbeb54ffc279" + integrity sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ== + dependencies: + base-x "^4.0.0" + +bs58@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/bs58/-/bs58-6.0.0.tgz#a2cda0130558535dd281a2f8697df79caaf425d8" + integrity sha512-PD0wEnEYg6ijszw/u8s+iI3H17cTymlrwkKhDhPZq+Sokl3AU4htyBFTjAeNAlCCmg0f53g6ih3jATyCKftTfw== + dependencies: + base-x "^5.0.0" + +bs58check@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/bs58check/-/bs58check-2.1.2.tgz#53b018291228d82a5aa08e7d796fdafda54aebfc" + integrity sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA== + dependencies: + bs58 "^4.0.0" + create-hash "^1.1.0" + safe-buffer "^5.1.2" + +btoa@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/btoa/-/btoa-1.2.1.tgz#01a9909f8b2c93f6bf680ba26131eb30f7fa3d73" + integrity sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g== + +buffer-from@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== + +buffer-to-arraybuffer@^0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz#6064a40fa76eb43c723aba9ef8f6e1216d10511a" + integrity sha512-3dthu5CYiVB1DEJp61FtApNnNndTckcqe4pFcLdvHtrpG+kcyekCJKg4MRiDcFW7A6AODnXB9U4dwQiCW5kzJQ== + +buffer-xor@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" + integrity sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ== + +buffer-xor@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-2.0.2.tgz#34f7c64f04c777a1f8aac5e661273bb9dd320289" + integrity sha512-eHslX0bin3GB+Lx2p7lEYRShRewuNZL3fUl4qlVJGGiwoPGftmt8JQgk2Y9Ji5/01TnVDo33E5b5O3vUB1HdqQ== + dependencies: + safe-buffer "^5.1.1" + +buffer@4.9.2: + version "4.9.2" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8" + integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg== + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + isarray "^1.0.0" + +buffer@^5.0.5, buffer@^5.5.0, buffer@^5.6.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" + +buffer@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" + integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.2.1" + +bufferutil@4.0.5: + version "4.0.5" + resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.5.tgz#da9ea8166911cc276bf677b8aed2d02d31f59028" + integrity sha512-HTm14iMQKK2FjFLRTM5lAVcyaUzOnqbPtesFIvREgXpJHdQm8bWS+GkQgIkfaBYRHuCnea7w8UVNfwiAQhlr9A== + dependencies: + node-gyp-build "^4.3.0" + +bufferutil@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.1.0.tgz#a4623541dd23867626bb08a051ec0d2ec0b70294" + integrity sha512-ZMANVnAixE6AWWnPzlW2KpUrxhm9woycYvPOo67jWHyFowASTEd9s+QN1EIMsSDtwhIxN4sWE1jotpuDUIgyIw== + dependencies: + node-gyp-build "^4.3.0" + +bufio@^1.0.7: + version "1.2.3" + resolved "https://registry.yarnpkg.com/bufio/-/bufio-1.2.3.tgz#25049c13f05e7cf56c88aa00f2503202b4bf2799" + integrity sha512-5Tt66bRzYUSlVZatc0E92uDenreJ+DpTBmSAUwL4VSxJn3e6cUyYwx+PoqML0GRZatgA/VX8ybhxItF8InZgqA== + +builtin-modules@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" + integrity sha512-wxXCdllwGhI2kCC0MnvTGYTMvnVZTvqgypkiTI8Pa5tcz2i6VqsqwYGgqwXji+4RgCzms6EajE4IxiUH6HH8nQ== + +bytes@~3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" + integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== + +cacheable-lookup@^5.0.3: + version "5.0.4" + resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz#5a6b865b2c44357be3d5ebc2a467b032719a7005" + integrity sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA== + +cacheable-request@^6.0.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" + integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg== + dependencies: + clone-response "^1.0.2" + get-stream "^5.1.0" + http-cache-semantics "^4.0.0" + keyv "^3.0.0" + lowercase-keys "^2.0.0" + normalize-url "^4.1.0" + responselike "^1.0.2" + +cacheable-request@^7.0.2: + version "7.0.4" + resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-7.0.4.tgz#7a33ebf08613178b403635be7b899d3e69bbe817" + integrity sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg== + dependencies: + clone-response "^1.0.2" + get-stream "^5.1.0" + http-cache-semantics "^4.0.0" + keyv "^4.0.0" + lowercase-keys "^2.0.0" + normalize-url "^6.0.1" + responselike "^2.0.0" + +call-bind-apply-helpers@^1.0.0, call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz#4b5428c222be985d79c3d82657479dbe0b59b2d6" + integrity sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ== + 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.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, call-bound@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/call-bound/-/call-bound-1.0.4.tgz#238de935d2a2a692928c538c7ccfa91067fd062a" + integrity sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg== + dependencies: + call-bind-apply-helpers "^1.0.2" + get-intrinsic "^1.3.0" + +caller-callsite@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" + integrity sha512-JuG3qI4QOftFsZyOn1qq87fq5grLIyk1JYd5lJmdA+fG7aQ9pA/i3JIJGcO3q0MrRcHlOt1U+ZeHW8Dq9axALQ== + dependencies: + callsites "^2.0.0" + +caller-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4" + integrity sha512-MCL3sf6nCSXOwCTzvPKhN18TU7AHTvdtam8DAogxcrJ8Rjfbbg7Lgng64H9Iy+vUV6VGFClN/TyxBkAebLRR4A== + dependencies: + caller-callsite "^2.0.0" + +callsites@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" + integrity sha512-ksWePWBloaWPxJYQ8TL0JHvtci6G5QTKwQ95RcWAa/lzoAKuAOflGdAK92hpHXjkwb8zLxoLNUoNYZgVsaJzvQ== + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +camelcase@^6.0.0, camelcase@^6.2.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" + integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== + +case@^1.6.3: + version "1.6.3" + resolved "https://registry.yarnpkg.com/case/-/case-1.6.3.tgz#0a4386e3e9825351ca2e6216c60467ff5f1ea1c9" + integrity sha512-mzDSXIPaFwVDvZAHqZ9VlbyF4yyXRuX6IvB06WvPYkqJVO24kX1PPhv9bfpKNFZyxYFmmgo03HUiD8iklmJYRQ== + +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw== + +catering@^2.0.0, catering@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/catering/-/catering-2.1.1.tgz#66acba06ed5ee28d5286133982a927de9a04b510" + integrity sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w== + +cbor@^10.0.0: + version "10.0.12" + resolved "https://registry.yarnpkg.com/cbor/-/cbor-10.0.12.tgz#2ae291481ef6f28127ba39a9f8ee22f29677e04f" + integrity sha512-exQDevYd7ZQLP4moMQcZkKCVZsXLAtUSflObr3xTh4xzFIv/xBCdvCd6L259kQOUP2kcTC0jvC6PpZIf/WmRXA== + dependencies: + nofilter "^3.0.2" + +cbor@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/cbor/-/cbor-8.1.0.tgz#cfc56437e770b73417a2ecbfc9caf6b771af60d5" + integrity sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg== + dependencies: + nofilter "^3.1.0" + +chai@4.3.7: + version "4.3.7" + resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.7.tgz#ec63f6df01829088e8bf55fca839bcd464a8ec51" + integrity sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A== + dependencies: + assertion-error "^1.1.0" + check-error "^1.0.2" + deep-eql "^4.1.2" + get-func-name "^2.0.0" + loupe "^2.3.1" + pathval "^1.1.1" + type-detect "^4.0.5" + +chai@^4.3.4, chai@^4.3.6: + version "4.5.0" + resolved "https://registry.yarnpkg.com/chai/-/chai-4.5.0.tgz#707e49923afdd9b13a8b0b47d33d732d13812fd8" + integrity sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw== + 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.1.0" + +chai@^6.2.2: + version "6.2.2" + resolved "https://registry.yarnpkg.com/chai/-/chai-6.2.2.tgz#ae41b52c9aca87734505362717f3255facda360e" + integrity sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg== + +chalk@4.1.2, chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chalk@^2.1.0, chalk@^2.3.0, 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== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chardet@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" + integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== + +"charenc@>= 0.0.1": + version "0.0.2" + resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" + integrity sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA== + +check-error@^1.0.2, 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" + +chokidar@3.5.3: + version "3.5.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" + integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== + 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@^3.5.2, chokidar@^3.5.3: + 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.0: + 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" + +chownr@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" + integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== + +ci-info@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" + integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== + +cids@^0.7.1: + version "0.7.5" + resolved "https://registry.yarnpkg.com/cids/-/cids-0.7.5.tgz#60a08138a99bfb69b6be4ceb63bfef7a396b28b2" + integrity sha512-zT7mPeghoWAu+ppn8+BS1tQ5qGmbMfB4AregnQjA/qHY3GC1m1ptI9GkWNlgeu38r7CuRdXB47uY2XgAYt6QVA== + dependencies: + buffer "^5.5.0" + class-is "^1.1.0" + multibase "~0.6.0" + multicodec "^1.0.0" + multihashes "~0.4.15" + +cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: + version "1.0.7" + resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.7.tgz#bd094bfef42634ccfd9e13b9fc73274997111e39" + integrity sha512-Mz9QMT5fJe7bKI7MH31UilT5cEK5EHHRCccw/YRFsRY47AuNgaV6HY3rscp0/I4Q+tTW/5zoqpSeRRI54TkDWA== + dependencies: + inherits "^2.0.4" + safe-buffer "^5.2.1" + to-buffer "^1.2.2" + +class-is@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/class-is/-/class-is-1.1.0.tgz#9d3c0fba0440d211d843cec3dedfa48055005825" + integrity sha512-rhjH9AG1fvabIDoGRVH587413LPjTZgmDF9fOFCbFJQV4yuocX1mHxxvXI4g3cGwbVY9wAYIoKlg1N79frJKQw== + +class-validator@^0.13.2: + version "0.13.2" + resolved "https://registry.yarnpkg.com/class-validator/-/class-validator-0.13.2.tgz#64b031e9f3f81a1e1dcd04a5d604734608b24143" + integrity sha512-yBUcQy07FPlGzUjoLuUfIOXzgynnQPPruyK1Ge2B74k9ROwnle1E+NxLWnUv5OLU8hA/qL5leAE9XnXq3byaBw== + dependencies: + libphonenumber-js "^1.9.43" + validator "^13.7.0" + +clean-stack@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== + +cli-boxes@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f" + integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw== + +cli-cursor@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" + integrity sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw== + dependencies: + restore-cursor "^2.0.0" + +cli-progress@^3.11.2: + version "3.12.0" + resolved "https://registry.yarnpkg.com/cli-progress/-/cli-progress-3.12.0.tgz#807ee14b66bcc086258e444ad0f19e7d42577942" + integrity sha512-tRkV3HJ1ASwm19THiiLIXLO7Im7wlTuKnvkYaTkyoAPefqjNg7W7DHKUlGRxy9vxDvbyCYQkQozvptuMkGCg8A== + dependencies: + string-width "^4.2.3" + +cli-table3@^0.6.0, cli-table3@^0.6.3: + version "0.6.5" + resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.5.tgz#013b91351762739c16a9567c21a04632e449bf2f" + integrity sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ== + dependencies: + string-width "^4.2.0" + optionalDependencies: + "@colors/colors" "1.5.0" + +cli-width@^2.0.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.1.tgz#b0433d0b4e9c847ef18868a4ef16fd5fc8271c48" + integrity sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw== + +cliui@^7.0.2: + version "7.0.4" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" + integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^7.0.0" + +cliui@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" + integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.1" + wrap-ansi "^7.0.0" + +clone-response@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.3.tgz#af2032aa47816399cf5f0a1d0db902f517abb8c3" + integrity sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA== + dependencies: + mimic-response "^1.0.0" + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +colors@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" + integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== + +combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +command-exists@^1.2.8: + version "1.2.9" + resolved "https://registry.yarnpkg.com/command-exists/-/command-exists-1.2.9.tgz#c50725af3808c8ab0260fd60b01fbfa25b954f69" + integrity sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w== + +command-line-args@^5.1.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/command-line-args/-/command-line-args-5.2.1.tgz#c44c32e437a57d7c51157696893c5909e9cec42e" + integrity sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg== + dependencies: + array-back "^3.1.0" + find-replace "^3.0.0" + lodash.camelcase "^4.3.0" + typical "^4.0.0" + +command-line-usage@^6.1.0: + version "6.1.3" + resolved "https://registry.yarnpkg.com/command-line-usage/-/command-line-usage-6.1.3.tgz#428fa5acde6a838779dfa30e44686f4b6761d957" + integrity sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw== + dependencies: + array-back "^4.0.2" + chalk "^2.4.2" + table-layout "^1.0.2" + typical "^5.2.0" + +commander@2.18.0: + version "2.18.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.18.0.tgz#2bf063ddee7c7891176981a2cc798e5754bc6970" + integrity sha512-6CYPa+JP2ftfRU2qkDK+UTVeQYosOg/2GbcjIcKPHfinyOLPVGXu/ovN86RP49Re5ndJK1N0kuiidFFuepc4ZQ== + +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@^10.0.0: + version "10.0.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06" + integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug== + +commander@^14.0.0: + version "14.0.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-14.0.3.tgz#425d79b48f9af82fcd9e4fc1ea8af6c5ec07bbc2" + integrity sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw== + +commander@^2.12.1: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +commander@^8.1.0: + version "8.3.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" + integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== + +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== + +compare-versions@^6.0.0: + version "6.1.1" + resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-6.1.1.tgz#7af3cc1099ba37d244b3145a9af5201b629148a9" + integrity sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +content-disposition@~0.5.4: + version "0.5.4" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" + integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== + dependencies: + safe-buffer "5.2.1" + +content-hash@^2.5.2: + version "2.5.2" + resolved "https://registry.yarnpkg.com/content-hash/-/content-hash-2.5.2.tgz#bbc2655e7c21f14fd3bfc7b7d4bfe6e454c9e211" + integrity sha512-FvIQKy0S1JaWV10sMsA7TRx8bpU+pqPkhbsfvOJAdjRXvYxEckAwQWGwtRjiaJfh+E0DvcWUGqcdjwMGFjsSdw== + dependencies: + cids "^0.7.1" + multicodec "^0.5.5" + multihashes "^0.4.15" + +content-type@~1.0.4, content-type@~1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" + integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== + +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" + integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== + +cookie-signature@~1.0.6: + version "1.0.7" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.7.tgz#ab5dd7ab757c54e60f37ef6550f481c426d10454" + integrity sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA== + +cookie@^0.4.1: + version "0.4.2" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" + integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== + +cookie@~0.7.1: + version "0.7.2" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.7.2.tgz#556369c472a2ba910f2979891b526b3436237ed7" + integrity sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w== + +cookiejar@^2.1.1: + version "2.1.4" + resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.4.tgz#ee669c1fea2cf42dc31585469d193fef0d65771b" + integrity sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw== + +core-js-pure@^3.0.1: + version "3.49.0" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.49.0.tgz#ff8436b7251a3832f5fdbbe3e10f7f2e58e51fb1" + integrity sha512-XM4RFka59xATyJv/cS3O3Kml72hQXUeGRuuTmMYFxwzc9/7C8OYTaIR/Ji+Yt8DXzsFLNhat15cE/JP15HrCgw== + +core-util-is@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ== + +core-util-is@~1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== + +cors@^2.8.1: + version "2.8.6" + resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.6.tgz#ff5dd69bd95e547503820d29aba4f8faf8dfec96" + integrity sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw== + dependencies: + object-assign "^4" + vary "^1" + +cosmiconfig@^5.0.7: + version "5.2.1" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" + integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA== + dependencies: + import-fresh "^2.0.0" + is-directory "^0.3.1" + js-yaml "^3.13.1" + parse-json "^4.0.0" + +cosmiconfig@^8.0.0: + version "8.3.6" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-8.3.6.tgz#060a2b871d66dba6c8538ea1118ba1ac16f5fae3" + integrity sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA== + dependencies: + import-fresh "^3.3.0" + js-yaml "^4.1.0" + parse-json "^5.2.0" + path-type "^4.0.0" + +crc-32@^1.2.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/crc-32/-/crc-32-1.2.2.tgz#3cad35a934b8bf71f25ca524b6da51fb7eace2ff" + integrity sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ== + +create-ecdh@^4.0.0: + version "4.0.4" + resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.4.tgz#d6e7f4bffa66736085a0762fd3a632684dabcc4e" + integrity sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A== + dependencies: + bn.js "^4.1.0" + elliptic "^6.5.3" + +create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" + integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== + dependencies: + cipher-base "^1.0.1" + inherits "^2.0.1" + md5.js "^1.3.4" + ripemd160 "^2.0.1" + sha.js "^2.4.0" + +create-hmac@^1.1.0, create-hmac@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" + integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== + dependencies: + cipher-base "^1.0.3" + create-hash "^1.1.0" + inherits "^2.0.1" + ripemd160 "^2.0.0" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +cross-spawn@^6.0.5: + version "6.0.6" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.6.tgz#30d0efa0712ddb7eb5a76e1e8721bffafa6b5d57" + integrity sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw== + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + +cross-spawn@^7.0.2, cross-spawn@^7.0.6: + 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" + +"crypt@>= 0.0.1": + version "0.0.2" + resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" + integrity sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow== + +crypto-browserify@3.12.0: + version "3.12.0" + resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" + integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== + dependencies: + browserify-cipher "^1.0.0" + browserify-sign "^4.0.0" + create-ecdh "^4.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.0" + diffie-hellman "^5.0.0" + inherits "^2.0.1" + pbkdf2 "^3.0.3" + public-encrypt "^4.0.0" + randombytes "^2.0.0" + randomfill "^1.0.3" + +crypto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/crypto/-/crypto-1.0.1.tgz#2af1b7cad8175d24c8a1b0778255794a21803037" + integrity sha512-VxBKmeNcqQdiUQUW2Tzq0t377b54N2bMtXO/qiLa+6eRRmmC4qT3D4OnTGoT/U6O9aklQ/jTwbOtRMTTY8G0Ig== + +d@1, d@^1.0.1, d@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/d/-/d-1.0.2.tgz#2aefd554b81981e7dccf72d6842ae725cb17e5de" + integrity sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw== + dependencies: + es5-ext "^0.10.64" + type "^2.7.2" + +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + integrity sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g== + dependencies: + assert-plus "^1.0.0" + +death@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/death/-/death-1.1.0.tgz#01aa9c401edd92750514470b8266390c66c67318" + integrity sha512-vsV6S4KVHvTGxbEcij7hkWRv0It+sGGWVOM67dQde/o5Xjnr+KmLjxWJii2uEObIrt1CcM9w0Yaovx+iOlIL+w== + +debug@2.6.9, debug@^2.2.0: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@4, debug@^4.0.1, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4, debug@^4.3.5: + version "4.4.3" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a" + integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA== + dependencies: + ms "^2.1.3" + +debug@4.3.4: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +debug@^3.1.0: + version "3.2.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + +decamelize@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" + integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== + +decode-uri-component@^0.2.0: + version "0.2.2" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9" + integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ== + +decompress-response@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" + integrity sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA== + dependencies: + mimic-response "^1.0.0" + +decompress-response@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" + integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== + dependencies: + mimic-response "^3.1.0" + +deep-eql@^4.1.2, deep-eql@^4.1.3: + version "4.1.4" + resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-4.1.4.tgz#d0d3912865911bb8fac5afb4e3acfa6a28dc72b7" + integrity sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg== + dependencies: + type-detect "^4.0.0" + +deep-extend@~0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + +deep-is@^0.1.3, deep-is@~0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== + +deepmerge@^4.2.2: + version "4.3.1" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" + integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== + +defender-base-client@^1.44.0: + version "1.44.3" + resolved "https://registry.yarnpkg.com/defender-base-client/-/defender-base-client-1.44.3.tgz#c5ab770b24eec2b9ddcbb0f3cd859918faeafd3b" + integrity sha512-f8a2m8rlYkd+7sfqfnotkvW4dITBB4RVUF1XI1Gz7v3POszgXJIW0TKbVVs2xigmmEpmyCcRB3VnDw3VnQBvoA== + dependencies: + amazon-cognito-identity-js "^6.0.1" + async-retry "^1.3.3" + axios "^0.21.2" + lodash "^4.17.19" + node-fetch "^2.6.0" + +defer-to-connect@^1.0.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" + integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== + +defer-to-connect@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587" + integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== + +deferred-leveldown@~5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/deferred-leveldown/-/deferred-leveldown-5.3.0.tgz#27a997ad95408b61161aa69bd489b86c71b78058" + integrity sha512-a59VOT+oDy7vtAbLRCZwWgxu2BaCfd5Hk7wxJd48ei7I+nsg8Orlb9CLG0PMZienk9BSUKgeAqkO2+Lw+1+Ukw== + dependencies: + abstract-leveldown "~6.2.1" + inherits "^2.0.3" + +define-data-property@^1.0.1, define-data-property@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" + integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== + dependencies: + es-define-property "^1.0.0" + es-errors "^1.3.0" + gopd "^1.0.1" + +define-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.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" + integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== + dependencies: + define-data-property "^1.0.1" + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + +depd@2.0.0, depd@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" + integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== + +des.js@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.1.0.tgz#1d37f5766f3bbff4ee9638e871a8768c173b81da" + integrity sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg== + dependencies: + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + +destroy@1.2.0, destroy@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" + integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== + +detect-libc@^2.0.3: + version "2.1.2" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.1.2.tgz#689c5dcdc1900ef5583a4cb9f6d7b473742074ad" + integrity sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ== + +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.4" + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.4.tgz#7a6dbfda325f25f07517e9b518f897c08332e07d" + integrity sha512-X07nttJQkwkfKfvTPG/KSnE2OMdcUCao6+eXF3wmnIQRn2aPAHH3VxDbDOdegkd6JbPsXqShpvEOHfAT+nCNwQ== + +diff@^5.2.0: + version "5.2.2" + resolved "https://registry.yarnpkg.com/diff/-/diff-5.2.2.tgz#0a4742797281d09cfa699b79ea32d27723623bad" + integrity sha512-vtcDfH3TOjP8UekytvnHH1o1P4FcUdt4eQ1Y+Abap1tk/OB2MWQvcwS2ClCd1zuIhc3JKOx6p3kod8Vfys3E+A== + +diffie-hellman@^5.0.0: + version "5.0.3" + resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" + integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== + dependencies: + bn.js "^4.1.0" + miller-rabin "^4.0.0" + randombytes "^2.0.0" + +difflib@^0.2.4: + version "0.2.4" + resolved "https://registry.yarnpkg.com/difflib/-/difflib-0.2.4.tgz#b5e30361a6db023176d562892db85940a718f47e" + integrity sha512-9YVwmMb0wQHQNr5J9m6BSj6fk4pfGITGQOOs+D9Fl+INODWFOfvhIU1hNv6GgR1RBoC/9NJcwu77zShxV0kT7w== + dependencies: + heap ">= 0.2.0" + +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + +dom-walk@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.2.tgz#0c548bef048f4d1f2a97249002236060daa3fd84" + integrity sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w== + +dotenv@10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-10.0.0.tgz#3d4227b8fb95f81096cdd2b66653fb2c7085ba81" + integrity sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q== + +dotenv@^16.3.1: + version "16.6.1" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.6.1.tgz#773f0e69527a8315c7285d5ee73c4459d20a8020" + integrity sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow== + +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: + call-bind-apply-helpers "^1.0.1" + es-errors "^1.3.0" + gopd "^1.2.0" + +duplexer3@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.5.tgz#0b5e4d7bad5de8901ea4440624c8e1d20099217e" + integrity sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA== + +eastasianwidth@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" + integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== + +ecc-jsbn@~0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" + integrity sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw== + dependencies: + jsbn "~0.1.0" + safer-buffer "^2.1.0" + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== + +elliptic@6.5.4: + version "6.5.4" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" + integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== + dependencies: + bn.js "^4.11.9" + brorand "^1.1.0" + hash.js "^1.0.0" + hmac-drbg "^1.0.1" + inherits "^2.0.4" + minimalistic-assert "^1.0.1" + minimalistic-crypto-utils "^1.0.1" + +elliptic@6.6.1, elliptic@^6.4.0, elliptic@^6.5.2, elliptic@^6.5.3, elliptic@^6.5.4, elliptic@^6.5.7, elliptic@^6.6.1: + 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" + +emitter-component@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/emitter-component/-/emitter-component-1.1.2.tgz#d65af5833dc7c682fd0ade35f902d16bc4bad772" + integrity sha512-QdXO3nXOzZB4pAjM0n6ZE+R9/+kPpECA/XSELIcc54NeYVnBqIk+4DFiBgK+8QbV3mdvTG6nedl7dTYgO+5wDw== + +emittery@0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.10.0.tgz#bb373c660a9d421bb44706ec4967ed50c02a8026" + integrity sha512-AGvFfs+d0JKCJQ4o01ASQLGPmSCxgfU9RFXvzPvZdjKK8oscynksuJhWrSTSw7j7Ep/sZct5b5ZhYCi8S/t0HQ== + +emoji-regex@^7.0.1: + version "7.0.3" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" + integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +emoji-regex@^9.2.2: + version "9.2.2" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" + integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== + +encode-utf8@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/encode-utf8/-/encode-utf8-1.0.3.tgz#f30fdd31da07fb596f281beb2f6b027851994cda" + integrity sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw== + +encodeurl@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-2.0.0.tgz#7b8ea898077d7e409d3ac45474ea38eaf0857a58" + integrity sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg== + +encoding-down@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/encoding-down/-/encoding-down-6.3.0.tgz#b1c4eb0e1728c146ecaef8e32963c549e76d082b" + integrity sha512-QKrV0iKR6MZVJV08QY0wp1e7vF6QbhnbQhb07bwpEyuz4uZiZgPlEGdkCROuFkUwdxlFaiPIhjyarH1ee/3vhw== + dependencies: + abstract-leveldown "^6.2.1" + inherits "^2.0.3" + level-codec "^9.0.0" + level-errors "^2.0.0" + +end-of-stream@^1.1.0: + version "1.4.5" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.5.tgz#7344d711dea40e0b74abc2ed49778743ccedb08c" + integrity sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg== + dependencies: + once "^1.4.0" + +enquirer@^2.3.0, enquirer@^2.3.6: + version "2.4.1" + resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.4.1.tgz#93334b3fbd74fc7097b224ab4a8fb7e40bf4ae56" + integrity sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ== + dependencies: + ansi-colors "^4.1.1" + strip-ansi "^6.0.1" + +env-paths@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" + integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== + +errno@~0.1.1: + version "0.1.8" + resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f" + integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A== + dependencies: + prr "~1.0.1" + +error-ex@^1.3.1: + version "1.3.4" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.4.tgz#b3a8d8bb6f92eecc1629e3e27d3c8607a8a32414" + integrity sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ== + dependencies: + is-arrayish "^0.2.1" + +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.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-module-lexer@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-2.0.0.tgz#f657cd7a9448dcdda9c070a3cb75e5dc1e85f5b1" + integrity sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw== + +es-object-atoms@^1.0.0, es-object-atoms@^1.1.1: + 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.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" + +es5-ext@^0.10.35, es5-ext@^0.10.62, es5-ext@^0.10.63, es5-ext@^0.10.64, es5-ext@~0.10.14: + version "0.10.64" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.64.tgz#12e4ffb48f1ba2ea777f1fcdd1918ef73ea21714" + integrity sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg== + dependencies: + es6-iterator "^2.0.3" + es6-symbol "^3.1.3" + esniff "^2.0.1" + next-tick "^1.1.0" + +es6-iterator@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" + integrity sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g== + dependencies: + d "1" + es5-ext "^0.10.35" + es6-symbol "^3.1.1" + +es6-symbol@^3.1.1, es6-symbol@^3.1.3: + version "3.1.4" + resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.4.tgz#f4e7d28013770b4208ecbf3e0bf14d3bcb557b8c" + integrity sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg== + dependencies: + d "^1.0.2" + ext "^1.7.0" + +escalade@^3.1.1: + version "3.2.0" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" + integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== + +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.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== + +escodegen@1.8.x: + version "1.8.1" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.8.1.tgz#5a5b53af4693110bebb0867aa3430dd3b70a1018" + integrity sha512-yhi5S+mNTOuRvyW4gWlg5W1byMaQGWWSYHXsuFZ7GBo7tpyOwi2EdzMP/QWxh9hwkD2m+wDVHJsxhRIj+v/b/A== + dependencies: + esprima "^2.7.1" + estraverse "^1.9.1" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.2.0" + +eslint-plugin-no-only-tests@3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-no-only-tests/-/eslint-plugin-no-only-tests-3.3.0.tgz#d9d42ccd4b5d099b4872fb5046cf95441188cfb5" + integrity sha512-brcKcxGnISN2CcVhXJ/kEQlNa0MEfGRtwKtWA16SkqXHKitaKIMrfemJKLKX1YqDU5C/5JY3PvZXd5jEW04e0Q== + +eslint-scope@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" + integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg== + dependencies: + esrecurse "^4.1.0" + estraverse "^4.1.1" + +eslint-scope@^7.2.2: + version "7.2.2" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f" + integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.0" + +eslint-utils@^1.3.1: + version "1.4.3" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f" + integrity sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q== + dependencies: + eslint-visitor-keys "^1.1.0" + +eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" + integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== + +eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: + version "3.4.3" + 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@8.57.1: + version "8.57.1" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.57.1.tgz#7df109654aba7e3bbe5c8eae533c5e461d3c6ca9" + integrity sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@eslint-community/regexpp" "^4.6.1" + "@eslint/eslintrc" "^2.1.4" + "@eslint/js" "8.57.1" + "@humanwhocodes/config-array" "^0.13.0" + "@humanwhocodes/module-importer" "^1.0.1" + "@nodelib/fs.walk" "^1.2.8" + "@ungap/structured-clone" "^1.2.0" + ajv "^6.12.4" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.3.2" + doctrine "^3.0.0" + escape-string-regexp "^4.0.0" + eslint-scope "^7.2.2" + eslint-visitor-keys "^3.4.3" + espree "^9.6.1" + esquery "^1.4.2" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" + find-up "^5.0.0" + glob-parent "^6.0.2" + globals "^13.19.0" + graphemer "^1.4.0" + ignore "^5.2.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + is-path-inside "^3.0.3" + js-yaml "^4.1.0" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash.merge "^4.6.2" + minimatch "^3.1.2" + natural-compare "^1.4.0" + optionator "^0.9.3" + strip-ansi "^6.0.1" + text-table "^0.2.0" + +eslint@^5.6.0: + version "5.16.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-5.16.0.tgz#a1e3ac1aae4a3fbd8296fcf8f7ab7314cbb6abea" + integrity sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg== + dependencies: + "@babel/code-frame" "^7.0.0" + ajv "^6.9.1" + chalk "^2.1.0" + cross-spawn "^6.0.5" + debug "^4.0.1" + doctrine "^3.0.0" + eslint-scope "^4.0.3" + eslint-utils "^1.3.1" + eslint-visitor-keys "^1.0.0" + espree "^5.0.1" + esquery "^1.0.1" + esutils "^2.0.2" + file-entry-cache "^5.0.1" + functional-red-black-tree "^1.0.1" + glob "^7.1.2" + globals "^11.7.0" + ignore "^4.0.6" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + inquirer "^6.2.2" + js-yaml "^3.13.0" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.3.0" + lodash "^4.17.11" + minimatch "^3.0.4" + mkdirp "^0.5.1" + natural-compare "^1.4.0" + optionator "^0.8.2" + path-is-inside "^1.0.2" + progress "^2.0.0" + regexpp "^2.0.1" + semver "^5.5.1" + strip-ansi "^4.0.0" + strip-json-comments "^2.0.1" + table "^5.2.3" + text-table "^0.2.0" + +esniff@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/esniff/-/esniff-2.0.1.tgz#a4d4b43a5c71c7ec51c51098c1d8a29081f9b308" + integrity sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg== + dependencies: + d "^1.0.1" + es5-ext "^0.10.62" + event-emitter "^0.3.5" + type "^2.7.2" + +espree@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-5.0.1.tgz#5d6526fa4fc7f0788a5cf75b15f30323e2f81f7a" + integrity sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A== + dependencies: + acorn "^6.0.7" + acorn-jsx "^5.0.0" + eslint-visitor-keys "^1.0.0" + +espree@^9.6.0, espree@^9.6.1: + version "9.6.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" + integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== + dependencies: + acorn "^8.9.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^3.4.1" + +esprima@2.7.x, esprima@^2.7.1: + version "2.7.3" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" + integrity sha512-OarPfz0lFCiW4/AV2Oy1Rp9qu0iusTKqykwTspGCZtPxmF81JR4MmIebvF1F9+UOKth2ZubLQ4XGGaU+hSn99A== + +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +esquery@^1.0.1, esquery@^1.4.2: + version "1.7.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.7.0.tgz#08d048f261f0ddedb5bae95f46809463d9c9496d" + integrity sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.1.0, esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^1.9.1: + version "1.9.3" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44" + integrity sha512-25w1fMXQrGdoquWnScXZGckOv+Wes+JDnuN/+7ex3SauFRS72r2lFDec0EKPt2YD1wUJ/IrfEex+9yp4hfSOJA== + +estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +estraverse@^5.1.0, estraverse@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +estree-walker@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" + integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== + +estree-walker@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-3.0.3.tgz#67c3e549ec402a487b4fc193d1953a524752340d" + integrity sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g== + dependencies: + "@types/estree" "^1.0.0" + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== + +eth-ens-namehash@2.0.8: + version "2.0.8" + resolved "https://registry.yarnpkg.com/eth-ens-namehash/-/eth-ens-namehash-2.0.8.tgz#229ac46eca86d52e0c991e7cb2aef83ff0f68bcf" + integrity sha512-VWEI1+KJfz4Km//dadyvBBoBeSQ0MHTXPvr8UIXiLW6IanxvAV+DmlZAijZwAyggqGUfwQBeHf7tc9wzc1piSw== + dependencies: + idna-uts46-hx "^2.3.1" + js-sha3 "^0.5.7" + +eth-lib@0.2.8: + version "0.2.8" + resolved "https://registry.yarnpkg.com/eth-lib/-/eth-lib-0.2.8.tgz#b194058bef4b220ad12ea497431d6cb6aa0623c8" + integrity sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw== + dependencies: + bn.js "^4.11.6" + elliptic "^6.4.0" + xhr-request-promise "^0.1.2" + +eth-lib@^0.1.26: + version "0.1.29" + resolved "https://registry.yarnpkg.com/eth-lib/-/eth-lib-0.1.29.tgz#0c11f5060d42da9f931eab6199084734f4dbd1d9" + integrity sha512-bfttrr3/7gG4E02HoWTDUcDDslN003OlOoBxk9virpAZQ1ja/jDgwkWB8QfJF7ojuEowrqy+lzp9VcJG7/k5bQ== + dependencies: + bn.js "^4.11.6" + elliptic "^6.4.0" + nano-json-stream-parser "^0.1.2" + servify "^0.1.12" + ws "^3.0.0" + xhr-request-promise "^0.1.2" + +eth2-keystore-js@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/eth2-keystore-js/-/eth2-keystore-js-1.0.8.tgz#f3ac4d6e6ec670d8d491dce25bfaf5b36475ed86" + integrity sha512-H5JLUeo7aiZs7zVAb+9gSJZZxfcx5na8zPxcgFbggNfac+atyO5H6KpvDUPJFRm/umHWM7++MdvS/q5Sbw+f9g== + dependencies: + "@types/node" "^15.12.2" + crypto "^1.0.1" + ethereumjs-util "^7.0.10" + ethereumjs-wallet "^1.0.1" + husky "^6.0.0" + scrypt-js "^3.0.1" + tslint "^6.1.3" + tslint-config-prettier "^1.18.0" + typescript "^4.3.2" + +ethereum-bloom-filters@^1.0.6: + version "1.2.0" + resolved "https://registry.yarnpkg.com/ethereum-bloom-filters/-/ethereum-bloom-filters-1.2.0.tgz#8294f074c1a6cbd32c39d2cc77ce86ff14797dab" + integrity sha512-28hyiE7HVsWubqhpVLVmZXFd4ITeHi+BUu05o9isf0GUpMtzBUi+8/gFrGaGYzvGAJQmJ3JKj77Mk9G98T84rA== + dependencies: + "@noble/hashes" "^1.4.0" + +ethereum-cryptography@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz#8d6143cfc3d74bf79bbd8edecdf29e4ae20dd191" + integrity sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ== + dependencies: + "@types/pbkdf2" "^3.0.0" + "@types/secp256k1" "^4.0.1" + blakejs "^1.1.0" + browserify-aes "^1.2.0" + bs58check "^2.1.2" + create-hash "^1.2.0" + create-hmac "^1.1.7" + hash.js "^1.1.7" + keccak "^3.0.0" + pbkdf2 "^3.0.17" + randombytes "^2.1.0" + safe-buffer "^5.1.2" + scrypt-js "^3.0.0" + secp256k1 "^4.0.1" + setimmediate "^1.0.5" + +ethereum-cryptography@^1.0.3: + version "1.2.0" + resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-1.2.0.tgz#5ccfa183e85fdaf9f9b299a79430c044268c9b3a" + integrity sha512-6yFQC9b5ug6/17CQpCyE3k9eKBMdhyVjzUy1WkiuY/E4vj/SXDBbCw8QEIaXqf0Mf2SnY6RmpDcwlUmBSS0EJw== + dependencies: + "@noble/hashes" "1.2.0" + "@noble/secp256k1" "1.7.1" + "@scure/bip32" "1.1.5" + "@scure/bip39" "1.1.1" + +ethereum-cryptography@^2.0.0, ethereum-cryptography@^2.1.2, ethereum-cryptography@^2.1.3, ethereum-cryptography@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-2.2.1.tgz#58f2810f8e020aecb97de8c8c76147600b0b8ccf" + integrity sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg== + dependencies: + "@noble/curves" "1.4.2" + "@noble/hashes" "1.4.0" + "@scure/bip32" "1.4.0" + "@scure/bip39" "1.3.0" + +ethereum-waffle@4.0.10: + version "4.0.10" + resolved "https://registry.yarnpkg.com/ethereum-waffle/-/ethereum-waffle-4.0.10.tgz#f1ef1564c0155236f1a66c6eae362a5d67c9f64c" + integrity sha512-iw9z1otq7qNkGDNcMoeNeLIATF9yKl1M8AIeu42ElfNBplq0e+5PeasQmm8ybY/elkZ1XyRO0JBQxQdVRb8bqQ== + dependencies: + "@ethereum-waffle/chai" "4.0.10" + "@ethereum-waffle/compiler" "4.0.3" + "@ethereum-waffle/mock-contract" "4.0.4" + "@ethereum-waffle/provider" "4.0.5" + solc "0.8.15" + typechain "^8.0.0" + +ethereumjs-abi@0.6.8: + version "0.6.8" + resolved "https://registry.yarnpkg.com/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz#71bc152db099f70e62f108b7cdfca1b362c6fcae" + integrity sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA== + dependencies: + bn.js "^4.11.8" + ethereumjs-util "^6.0.0" + +ethereumjs-util@7.1.3: + version "7.1.3" + resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-7.1.3.tgz#b55d7b64dde3e3e45749e4c41288238edec32d23" + integrity sha512-y+82tEbyASO0K0X1/SRhbJJoAlfcvq8JbrG4a5cjrOks7HS/36efU/0j2flxCPOUM++HFahk33kr/ZxyC4vNuw== + dependencies: + "@types/bn.js" "^5.1.0" + bn.js "^5.1.2" + create-hash "^1.1.2" + ethereum-cryptography "^0.1.3" + rlp "^2.2.4" + +ethereumjs-util@^6.0.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz#fcb4e4dd5ceacb9d2305426ab1a5cd93e3163b69" + integrity sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw== + dependencies: + "@types/bn.js" "^4.11.3" + bn.js "^4.11.0" + create-hash "^1.1.2" + elliptic "^6.5.2" + ethereum-cryptography "^0.1.3" + ethjs-util "0.1.6" + rlp "^2.2.3" + +ethereumjs-util@^7.0.10, ethereumjs-util@^7.0.3, ethereumjs-util@^7.1.0, ethereumjs-util@^7.1.1, ethereumjs-util@^7.1.2, ethereumjs-util@^7.1.3, ethereumjs-util@^7.1.4, ethereumjs-util@^7.1.5: + version "7.1.5" + resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz#9ecf04861e4fbbeed7465ece5f23317ad1129181" + integrity sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg== + dependencies: + "@types/bn.js" "^5.1.0" + bn.js "^5.1.2" + create-hash "^1.1.2" + ethereum-cryptography "^0.1.3" + rlp "^2.2.4" + +ethereumjs-wallet@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/ethereumjs-wallet/-/ethereumjs-wallet-1.0.2.tgz#2c000504b4c71e8f3782dabe1113d192522e99b6" + integrity sha512-CCWV4RESJgRdHIvFciVQFnCHfqyhXWchTPlkfp28Qc53ufs+doi5I/cV2+xeK9+qEo25XCWfP9MiL+WEPAZfdA== + dependencies: + aes-js "^3.1.2" + bs58check "^2.1.2" + ethereum-cryptography "^0.1.3" + ethereumjs-util "^7.1.2" + randombytes "^2.1.0" + scrypt-js "^3.0.1" + utf8 "^3.0.0" + uuid "^8.3.2" + +ethers@5.7.2: + 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@^5.5.3, ethers@^5.6.1, ethers@^5.7.2: + version "5.8.0" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.8.0.tgz#97858dc4d4c74afce83ea7562fe9493cedb4d377" + integrity sha512-DUq+7fHrCg1aPDFCHx6UIPb3nmt2XMpM7Y/g2gLhsl3lIBqeAfOJIl1qEvRf2uq3BiKxmh6Fh5pfp2ieyek7Kg== + dependencies: + "@ethersproject/abi" "5.8.0" + "@ethersproject/abstract-provider" "5.8.0" + "@ethersproject/abstract-signer" "5.8.0" + "@ethersproject/address" "5.8.0" + "@ethersproject/base64" "5.8.0" + "@ethersproject/basex" "5.8.0" + "@ethersproject/bignumber" "5.8.0" + "@ethersproject/bytes" "5.8.0" + "@ethersproject/constants" "5.8.0" + "@ethersproject/contracts" "5.8.0" + "@ethersproject/hash" "5.8.0" + "@ethersproject/hdnode" "5.8.0" + "@ethersproject/json-wallets" "5.8.0" + "@ethersproject/keccak256" "5.8.0" + "@ethersproject/logger" "5.8.0" + "@ethersproject/networks" "5.8.0" + "@ethersproject/pbkdf2" "5.8.0" + "@ethersproject/properties" "5.8.0" + "@ethersproject/providers" "5.8.0" + "@ethersproject/random" "5.8.0" + "@ethersproject/rlp" "5.8.0" + "@ethersproject/sha2" "5.8.0" + "@ethersproject/signing-key" "5.8.0" + "@ethersproject/solidity" "5.8.0" + "@ethersproject/strings" "5.8.0" + "@ethersproject/transactions" "5.8.0" + "@ethersproject/units" "5.8.0" + "@ethersproject/wallet" "5.8.0" + "@ethersproject/web" "5.8.0" + "@ethersproject/wordlists" "5.8.0" + +ethers@^6.13.2, ethers@^6.9.0: + version "6.16.0" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-6.16.0.tgz#fff9b4f05d7a359c774ad6e91085a800f7fccf65" + integrity sha512-U1wulmetNymijEhpSEQ7Ct/P/Jw9/e7R1j5XIbPRydgV2DjLVMsULDlNksq3RQnFgKoLlZf88ijYtWEXcPa07A== + dependencies: + "@adraffy/ens-normalize" "1.10.1" + "@noble/curves" "1.2.0" + "@noble/hashes" "1.3.2" + "@types/node" "22.7.5" + aes-js "4.0.0-beta.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: + version "0.1.6" + resolved "https://registry.yarnpkg.com/ethjs-util/-/ethjs-util-0.1.6.tgz#f308b62f185f9fe6237132fb2a9818866a5cd536" + integrity sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w== + dependencies: + is-hex-prefixed "1.0.0" + strip-hex-prefix "1.0.0" + +event-emitter@^0.3.5: + version "0.3.5" + resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39" + integrity sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA== + dependencies: + d "1" + es5-ext "~0.10.14" + +eventemitter3@4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.4.tgz#b5463ace635a083d018bdc7c917b4c5f10a85384" + integrity sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ== + +eventemitter3@5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-5.0.1.tgz#53f5ffd0a492ac800721bb42c66b841de96423c4" + integrity sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA== + +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== + +eventsource@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-2.0.2.tgz#76dfcc02930fb2ff339520b6d290da573a9e8508" + integrity sha512-IzUmBGPR3+oUG9dUeXynyNmf91/3zUSJg1lCktzKw47OXuhco54U3r9B7O4XX+Rb1Itm9OZ2b0RkTs10bICOxA== + +evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" + integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== + dependencies: + md5.js "^1.3.4" + safe-buffer "^5.1.1" + +expect-type@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/expect-type/-/expect-type-1.3.0.tgz#0d58ed361877a31bbc4dd6cf71bbfef7faf6bd68" + integrity sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA== + +exponential-backoff@~3.1.1: + version "3.1.3" + resolved "https://registry.yarnpkg.com/exponential-backoff/-/exponential-backoff-3.1.3.tgz#51cf92c1c0493c766053f9d3abee4434c244d2f6" + integrity sha512-ZgEeZXj30q+I0EN+CbSSpIyPaJ5HVQD18Z1m+u1FXbAeT94mr1zw50q4q6jiiC447Nl/YTcIYSAftiGqetwXCA== + +express@^4.14.0: + version "4.22.1" + resolved "https://registry.yarnpkg.com/express/-/express-4.22.1.tgz#1de23a09745a4fffdb39247b344bb5eaff382069" + integrity sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g== + dependencies: + accepts "~1.3.8" + array-flatten "1.1.1" + body-parser "~1.20.3" + content-disposition "~0.5.4" + content-type "~1.0.4" + cookie "~0.7.1" + cookie-signature "~1.0.6" + debug "2.6.9" + depd "2.0.0" + encodeurl "~2.0.0" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "~1.3.1" + fresh "~0.5.2" + http-errors "~2.0.0" + merge-descriptors "1.0.3" + methods "~1.1.2" + on-finished "~2.4.1" + parseurl "~1.3.3" + path-to-regexp "~0.1.12" + proxy-addr "~2.0.7" + qs "~6.14.0" + range-parser "~1.2.1" + safe-buffer "5.2.1" + send "~0.19.0" + serve-static "~1.16.2" + setprototypeof "1.2.0" + statuses "~2.0.1" + type-is "~1.6.18" + utils-merge "1.0.1" + vary "~1.1.2" + +ext@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/ext/-/ext-1.7.0.tgz#0ea4383c0103d60e70be99e9a7f11027a33c4f5f" + integrity sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw== + dependencies: + type "^2.7.2" + +extend@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + +external-editor@^3.0.3: + version "3.1.0" + resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" + integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== + dependencies: + chardet "^0.7.0" + iconv-lite "^0.4.24" + tmp "^0.0.33" + +extsprintf@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + integrity sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g== + +extsprintf@^1.2.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07" + integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA== + +fast-base64-decode@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fast-base64-decode/-/fast-base64-decode-1.0.0.tgz#b434a0dd7d92b12b43f26819300d2dafb83ee418" + integrity sha512-qwaScUgUGBYeDNRnbc/KyllVU88Jk1pRHPStuF/lO7B0/RTRLj7U0lkdTAutlBblY08rwZDff6tNU9cjv6j//Q== + +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" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-diff@^1.1.2, fast-diff@^1.2.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.3.0.tgz#ece407fa550a64d638536cd727e129c61616e0f0" + integrity sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw== + +fast-glob@^3.0.3: + 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: + 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== + +fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== + +fast-uri@^3.0.1: + version "3.1.0" + resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-3.1.0.tgz#66eecff6c764c0df9b762e62ca7edcfb53b4edfa" + integrity sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA== + +fast-xml-builder@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/fast-xml-builder/-/fast-xml-builder-1.1.4.tgz#0c407a1d9d5996336c0cd76f7ff785cac6413017" + integrity sha512-f2jhpN4Eccy0/Uz9csxh3Nu6q4ErKxf0XIsasomfOihuSUa3/xw6w8dnOtCDgEItQFJG8KyXPzQXzcODDrrbOg== + dependencies: + path-expression-matcher "^1.1.3" + +fast-xml-parser@4.2.5: + version "4.2.5" + resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-4.2.5.tgz#a6747a09296a6cb34f2ae634019bf1738f3b421f" + integrity sha512-B9/wizE4WngqQftFPmdaMYlXoJlJOYxGQOanC77fq9k8+Z0v5dDSVh+3glErdIROP//s/jgb7ZuxKfB8nVyo0g== + dependencies: + strnum "^1.0.5" + +fast-xml-parser@5.5.8: + version "5.5.8" + resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-5.5.8.tgz#929571ed8c5eb96e6d9bd572ba14fc4b84875716" + integrity sha512-Z7Fh2nVQSb2d+poDViM063ix2ZGt9jmY1nWhPfHBOK2Hgnb/OW3P4Et3P/81SEej0J7QbWtJqxO05h8QYfK7LQ== + dependencies: + fast-xml-builder "^1.1.4" + path-expression-matcher "^1.2.0" + strnum "^2.2.0" + +fastq@^1.6.0: + version "1.20.1" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.20.1.tgz#ca750a10dc925bc8b18839fd203e3ef4b3ced675" + integrity sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw== + dependencies: + reusify "^1.0.4" + +fdir@^6.2.0, fdir@^6.5.0: + version "6.5.0" + resolved "https://registry.yarnpkg.com/fdir/-/fdir-6.5.0.tgz#ed2ab967a331ade62f18d077dae192684d50d350" + integrity sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg== + +figlet@^1.5.2: + version "1.11.0" + resolved "https://registry.yarnpkg.com/figlet/-/figlet-1.11.0.tgz#17b8a438ac75bfdbfbae79ecbc422e6e98d383fa" + integrity sha512-EEx3OS/l2bFqcUNN2NM9FPJp8vAMrgbCxsbl2hbcJNNxOEwVe3mEzrhan7TbJQViZa8mMqhihlbCaqD+LyYKTQ== + dependencies: + commander "^14.0.0" + +figures@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" + integrity sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA== + dependencies: + escape-string-regexp "^1.0.5" + +file-entry-cache@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" + integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g== + dependencies: + flat-cache "^2.0.1" + +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== + dependencies: + flat-cache "^3.0.4" + +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" + +finalhandler@~1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.3.2.tgz#1ebc2228fc7673aac4a472c310cc05b77d852b88" + integrity sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg== + dependencies: + debug "2.6.9" + encodeurl "~2.0.0" + escape-html "~1.0.3" + on-finished "~2.4.1" + parseurl "~1.3.3" + statuses "~2.0.2" + unpipe "~1.0.0" + +find-replace@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-replace/-/find-replace-3.0.0.tgz#3e7e23d3b05167a76f770c9fbd5258b0def68c38" + integrity sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ== + dependencies: + array-back "^3.0.1" + +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" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +flat-cache@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" + integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA== + dependencies: + flatted "^2.0.0" + rimraf "2.6.3" + write "1.0.3" + +flat-cache@^3.0.4: + version "3.2.0" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.2.0.tgz#2c0c2d5040c99b1632771a9d105725c0115363ee" + integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw== + dependencies: + flatted "^3.2.9" + keyv "^4.5.3" + rimraf "^3.0.2" + +flat@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" + integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== + +flatted@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" + integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA== + +flatted@^3.2.9: + version "3.4.2" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.4.2.tgz#f5c23c107f0f37de8dbdf24f13722b3b98d52726" + integrity sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA== + +fmix@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/fmix/-/fmix-0.1.0.tgz#c7bbf124dec42c9d191cfb947d0a9778dd986c0c" + integrity sha512-Y6hyofImk9JdzU8k5INtTXX1cu8LDlePWDFU5sftm9H+zKCr5SGrVjdhkvsim646cw5zD0nADj8oHyXMZmCZ9w== + dependencies: + imul "^1.0.0" + +follow-redirects@^1.12.1, follow-redirects@^1.14.0, follow-redirects@^1.15.0, follow-redirects@^1.15.11: + version "1.15.11" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.11.tgz#777d73d72a92f8ec4d2e410eb47352a56b8e8340" + integrity sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ== + +for-each@^0.3.5: + version "0.3.5" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.5.tgz#d650688027826920feeb0af747ee7b9421a41d47" + integrity sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg== + dependencies: + is-callable "^1.2.7" + +foreground-child@^3.1.0, foreground-child@^3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.3.1.tgz#32e8e9ed1b68a3497befb9ac2b6adf92a638576f" + integrity sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw== + dependencies: + cross-spawn "^7.0.6" + signal-exit "^4.0.1" + +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + integrity sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw== + +form-data@^4.0.0, form-data@^4.0.4, form-data@^4.0.5: + version "4.0.5" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.5.tgz#b49e48858045ff4cbf6b03e1805cebcad3679053" + integrity sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + es-set-tostringtag "^2.1.0" + hasown "^2.0.2" + mime-types "^2.1.12" + +form-data@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" + integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + +forwarded@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" + integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== + +fp-ts@1.19.3: + version "1.19.3" + resolved "https://registry.yarnpkg.com/fp-ts/-/fp-ts-1.19.3.tgz#261a60d1088fbff01f91256f91d21d0caaaaa96f" + integrity sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg== + +fp-ts@^1.0.0: + version "1.19.5" + resolved "https://registry.yarnpkg.com/fp-ts/-/fp-ts-1.19.5.tgz#3da865e585dfa1fdfd51785417357ac50afc520a" + integrity sha512-wDNqTimnzs8QqpldiId9OavWK2NptormjXnRJTQecNjzwfyp6P/8s/zG8e4h3ja3oqkKaY72UlTjQYt/1yXf9A== + +fresh@~0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== + +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@^10.0.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" + integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-extra@^11.2.0: + version "11.3.4" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.3.4.tgz#ab6934eca8bcf6f7f6b82742e33591f86301d6fc" + integrity sha512-CTXd6rk/M3/ULNQj8FBqBWHYBVYybQ3VPBw0xGKFe3tuH7ytT6ACnvzpIQ3UZtB8yvUKC2cXn1a+x+5EVQLovA== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-extra@^4.0.2: + version "4.0.3" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94" + integrity sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg== + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-extra@^7.0.0, fs-extra@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" + integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-extra@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" + integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-minipass@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" + integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA== + dependencies: + minipass "^2.6.0" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +fsevents@~2.3.2, fsevents@~2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== + +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== + +functional-red-black-tree@^1.0.1, functional-red-black-tree@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g== + +ganache@7.4.3: + version "7.4.3" + resolved "https://registry.yarnpkg.com/ganache/-/ganache-7.4.3.tgz#e995f1250697264efbb34d4241c374a2b0271415" + integrity sha512-RpEDUiCkqbouyE7+NMXG26ynZ+7sGiODU84Kz+FVoXUnQ4qQM4M8wif3Y4qUCt+D/eM1RVeGq0my62FPD6Y1KA== + dependencies: + "@trufflesuite/bigint-buffer" "1.1.10" + "@types/bn.js" "^5.1.0" + "@types/lru-cache" "5.1.1" + "@types/seedrandom" "3.0.1" + emittery "0.10.0" + keccak "3.0.2" + leveldown "6.1.0" + secp256k1 "4.0.3" + optionalDependencies: + bufferutil "4.0.5" + utf-8-validate "5.0.7" + +generator-function@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/generator-function/-/generator-function-2.0.1.tgz#0e75dd410d1243687a0ba2e951b94eedb8f737a2" + integrity sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g== + +get-caller-file@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-func-name@^2.0.0, 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.2.4, get-intrinsic@^1.2.5, get-intrinsic@^1.2.6, get-intrinsic@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01" + integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ== + dependencies: + call-bind-apply-helpers "^1.0.2" + es-define-property "^1.0.1" + es-errors "^1.3.0" + es-object-atoms "^1.1.1" + function-bind "^1.1.2" + get-proto "^1.0.1" + gopd "^1.2.0" + has-symbols "^1.1.0" + hasown "^2.0.2" + math-intrinsics "^1.1.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-random-values@^1.2.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/get-random-values/-/get-random-values-1.2.2.tgz#f1d944d0025433d53a2bd9941b9e975d98a2f7ff" + integrity sha512-lMyPjQyl0cNNdDf2oR+IQ/fM3itDvpoHy45Ymo2r0L1EjazeSl13SfbKZs7KtZ/3MDCeueiaJiuOEfKqRTsSgA== + dependencies: + global "^4.4.0" + +get-stream@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== + dependencies: + pump "^3.0.0" + +get-stream@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== + dependencies: + pump "^3.0.0" + +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + integrity sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng== + dependencies: + assert-plus "^1.0.0" + +ghost-testrpc@^0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/ghost-testrpc/-/ghost-testrpc-0.0.2.tgz#c4de9557b1d1ae7b2d20bbe474a91378ca90ce92" + integrity sha512-i08dAEgJ2g8z5buJIrCTduwPIhih3DP+hOCTyyryikfV8T0bNvHnGXO67i0DD1H4GBDETTclPy9njZbfluQYrQ== + dependencies: + chalk "^2.4.2" + node-emoji "^1.10.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" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob-parent@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + +glob@7.1.7: + version "7.1.7" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" + integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== + 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@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@^10.3.10: + version "10.5.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-10.5.0.tgz#8ec0355919cd3338c28428a23d4f24ecc5fe738c" + integrity sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg== + dependencies: + foreground-child "^3.1.0" + jackspeak "^3.1.2" + minimatch "^9.0.4" + minipass "^7.1.2" + package-json-from-dist "^1.0.0" + path-scurry "^1.11.1" + +glob@^11.0.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-11.1.0.tgz#4f826576e4eb99c7dad383793d2f9f08f67e50a6" + integrity sha512-vuNwKSaKiqm7g0THUBu2x7ckSs3XJLXE+2ssL7/MfTGPLLcrJQ/4Uq1CjPTtO5cCIiRxqvN6Twy1qOwhL0Xjcw== + dependencies: + foreground-child "^3.3.1" + jackspeak "^4.1.1" + minimatch "^10.1.1" + minipass "^7.1.2" + package-json-from-dist "^1.0.0" + path-scurry "^2.0.0" + +glob@^5.0.15: + version "5.0.15" + resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" + integrity sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA== + dependencies: + inflight "^1.0.4" + inherits "2" + minimatch "2 || 3" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^7.0.0, glob@^7.1.1, glob@^7.1.2, 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== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^8.0.3, glob@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" + integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^5.0.1" + once "^1.3.0" + +glob@^9.2.0: + version "9.3.5" + resolved "https://registry.yarnpkg.com/glob/-/glob-9.3.5.tgz#ca2ed8ca452781a3009685607fdf025a899dfe21" + integrity sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q== + dependencies: + fs.realpath "^1.0.0" + minimatch "^8.0.2" + minipass "^4.2.4" + path-scurry "^1.6.1" + +global-modules@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" + integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A== + dependencies: + global-prefix "^3.0.0" + +global-prefix@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97" + integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg== + dependencies: + ini "^1.3.5" + kind-of "^6.0.2" + which "^1.3.1" + +global@^4.4.0, global@~4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/global/-/global-4.4.0.tgz#3e7b105179006a323ed71aafca3e9c57a5cc6406" + integrity sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w== + dependencies: + min-document "^2.19.0" + process "^0.11.10" + +globals@^11.7.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +globals@^13.19.0: + version "13.24.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171" + integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ== + dependencies: + type-fest "^0.20.2" + +globby@^10.0.1: + version "10.0.2" + resolved "https://registry.yarnpkg.com/globby/-/globby-10.0.2.tgz#277593e745acaa4646c3ab411289ec47a0392543" + integrity sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg== + dependencies: + "@types/glob" "^7.1.1" + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.0.3" + glob "^7.1.3" + ignore "^5.1.1" + merge2 "^1.2.3" + slash "^3.0.0" + +gopd@^1.0.1, 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== + +got@9.6.0: + version "9.6.0" + resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" + integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q== + dependencies: + "@sindresorhus/is" "^0.14.0" + "@szmarczak/http-timer" "^1.1.2" + cacheable-request "^6.0.0" + decompress-response "^3.3.0" + duplexer3 "^0.1.4" + get-stream "^4.1.0" + lowercase-keys "^1.0.1" + mimic-response "^1.0.1" + p-cancelable "^1.0.0" + to-readable-stream "^1.0.0" + url-parse-lax "^3.0.0" + +got@^11.8.5: + version "11.8.6" + resolved "https://registry.yarnpkg.com/got/-/got-11.8.6.tgz#276e827ead8772eddbcfc97170590b841823233a" + integrity sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g== + dependencies: + "@sindresorhus/is" "^4.0.0" + "@szmarczak/http-timer" "^4.0.5" + "@types/cacheable-request" "^6.0.1" + "@types/responselike" "^1.0.0" + cacheable-lookup "^5.0.3" + cacheable-request "^7.0.2" + decompress-response "^6.0.0" + http2-wrapper "^1.0.0-beta.5.2" + lowercase-keys "^2.0.0" + p-cancelable "^2.0.0" + responselike "^2.0.0" + +graceful-fs@^4.1.2, 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" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + +graphemer@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" + integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== + +handlebars@^4.0.1: + version "4.7.9" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.9.tgz#6f139082ab58dc4e5a0e51efe7db5ae890d56a0f" + integrity sha512-4E71E0rpOaQuJR2A3xDZ+GM1HyWYv1clR58tC8emQNeQe3RH7MAzSbat+V0wG78LQBo6m6bzSG/L4pBuCsgnUQ== + 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" + +har-schema@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + integrity sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q== + +har-validator@~5.1.3: + version "5.1.5" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" + integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== + dependencies: + ajv "^6.12.3" + har-schema "^2.0.0" + +hardhat-contract-sizer@2.10.0: + version "2.10.0" + resolved "https://registry.yarnpkg.com/hardhat-contract-sizer/-/hardhat-contract-sizer-2.10.0.tgz#72646f43bfe50e9a5702c9720c9bc3e77d93a2c9" + integrity sha512-QiinUgBD5MqJZJh1hl1jc9dNnpJg7eE/w4/4GEnrcmZJJTDbVFNe3+/3Ep24XqISSkYxRz36czcPHKHd/a0dwA== + dependencies: + chalk "^4.0.0" + cli-table3 "^0.6.0" + strip-ansi "^6.0.0" + +hardhat-deploy-ethers@0.3.0-beta.13: + version "0.3.0-beta.13" + resolved "https://registry.yarnpkg.com/hardhat-deploy-ethers/-/hardhat-deploy-ethers-0.3.0-beta.13.tgz#b96086ff768ddf69928984d5eb0a8d78cfca9366" + integrity sha512-PdWVcKB9coqWV1L7JTpfXRCI91Cgwsm7KLmBcwZ8f0COSm1xtABHZTyz3fvF6p42cTnz1VM0QnfDvMFlIRkSNw== + +hardhat-deploy@0.11.30: + version "0.11.30" + resolved "https://registry.yarnpkg.com/hardhat-deploy/-/hardhat-deploy-0.11.30.tgz#d47203b584446dce8136ac6d0a96fce2827fb532" + integrity sha512-FpMP1zSa24NEARVh/vwFCJJa9Gws3SBRZbVIDYMIvleoH3yOwFcdWY68zfGoxrm4kRHNcaiVNAXVFTm0enKR0A== + dependencies: + "@ethersproject/abi" "^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/contracts" "^5.7.0" + "@ethersproject/providers" "^5.7.2" + "@ethersproject/solidity" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + "@ethersproject/wallet" "^5.7.0" + "@types/qs" "^6.9.7" + axios "^0.21.1" + chalk "^4.1.2" + chokidar "^3.5.2" + debug "^4.3.2" + enquirer "^2.3.6" + ethers "^5.5.3" + form-data "^4.0.0" + fs-extra "^10.0.0" + match-all "^1.2.6" + murmur-128 "^0.2.1" + qs "^6.9.4" + zksync-web3 "^0.14.3" + +hardhat-gas-reporter@2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/hardhat-gas-reporter/-/hardhat-gas-reporter-2.3.0.tgz#8605131a9130925b2f19a77576f93a637a2911d8" + integrity sha512-ySdA+044xMQv1BlJu5CYXToHzMexKFfIWxlQTBNNoerx1x96+d15IMdN01iQZ/TJ7NH2V5sU73bz77LoS/PEVw== + dependencies: + "@ethersproject/abi" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/units" "^5.7.0" + "@solidity-parser/parser" "^0.20.1" + axios "^1.6.7" + brotli-wasm "^2.0.1" + chalk "4.1.2" + cli-table3 "^0.6.3" + ethereum-cryptography "^2.1.3" + glob "^10.3.10" + jsonschema "^1.4.1" + lodash "^4.17.21" + markdown-table "2.0.0" + sha1 "^1.1.1" + viem "^2.27.0" + +hardhat-tracer@3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/hardhat-tracer/-/hardhat-tracer-3.2.1.tgz#1d8172dd41229fb09d66a8dcadc73bbb19c928da" + integrity sha512-nCRCi8zQYDkNw9xDngokbmBmBDNuX9BadgvoRNVgpVpFkriRirdBVinYfBc7P+vufZhNNOjxyIDOPQs+ViRN9Q== + dependencies: + chalk "^4.1.2" + debug "^4.3.4" + ethers "^5.6.1" + semver "^7.6.2" + +hardhat@2.26.2: + version "2.26.2" + resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.26.2.tgz#e331ad9c64730d00e1c71217a0161f204796b02d" + integrity sha512-uIETdC1MAWSnu+48B+583r3b8JqHtkBGEiXoAPV5hcXYGkCW5Fnnpn7SIgPa8owhObm9oUqIqMXMJ6H92N7Pyg== + dependencies: + "@ethereumjs/util" "^9.1.0" + "@ethersproject/abi" "^5.1.2" + "@nomicfoundation/edr" "^0.11.3" + "@nomicfoundation/solidity-analyzer" "^0.1.0" + "@sentry/node" "^5.18.1" + adm-zip "^0.4.16" + aggregate-error "^3.0.0" + ansi-escapes "^4.3.0" + boxen "^5.1.2" + 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" + find-up "^5.0.0" + fp-ts "1.19.3" + fs-extra "^7.0.1" + 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" + micro-eth-signer "^0.14.0" + 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.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" + ws "^7.4.6" + +has-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" + integrity sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA== + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" + integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== + dependencies: + es-define-property "^1.0.0" + +has-symbols@^1.0.3, 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.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" + integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== + dependencies: + has-symbols "^1.0.3" + +hash-base@^3.0.0, hash-base@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.2.tgz#79d72def7611c3f6e3c3b5730652638001b10a74" + integrity sha512-Bb33KbowVTIj5s7Ked1OsqHUeCpz//tPwR+E2zJgJKo9Z5XolZ9b6bdUgjmYlwnWhoOQKoTd1TYToZGn5mAYOg== + dependencies: + inherits "^2.0.4" + readable-stream "^2.3.8" + safe-buffer "^5.2.1" + to-buffer "^1.2.1" + +hash.js@1.1.7, hash.js@^1.0.0, hash.js@^1.0.3, hash.js@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" + integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.1" + +hasown@^2.0.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, he@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" + integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + +"heap@>= 0.2.0": + version "0.2.7" + resolved "https://registry.yarnpkg.com/heap/-/heap-0.2.7.tgz#1e6adf711d3f27ce35a81fe3b7bd576c2260a8fc" + integrity sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg== + +hmac-drbg@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" + integrity sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg== + dependencies: + hash.js "^1.0.3" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.1" + +hosted-git-info@^2.6.0: + 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== + +http-cache-semantics@^4.0.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz#205f4db64f8562b76a4ff9235aa5279839a09dd5" + integrity sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ== + +http-errors@~2.0.0, http-errors@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.1.tgz#36d2f65bc909c8790018dd36fb4d93da6caae06b" + integrity sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ== + dependencies: + depd "~2.0.0" + inherits "~2.0.4" + setprototypeof "~1.2.0" + statuses "~2.0.2" + toidentifier "~1.0.1" + +http-https@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/http-https/-/http-https-1.0.0.tgz#2f908dd5f1db4068c058cd6e6d4ce392c913389b" + integrity sha512-o0PWwVCSp3O0wS6FvNr6xfBCHgt0m1tvPLFOCc2iFDKTRAXhB7m8klDf7ErowFH8POa6dVdGatKU5I1YYwzUyg== + +http-signature@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + integrity sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ== + dependencies: + assert-plus "^1.0.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +http2-wrapper@^1.0.0-beta.5.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-1.0.3.tgz#b8f55e0c1f25d4ebd08b3b0c2c079f9590800b3d" + integrity sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg== + dependencies: + quick-lru "^5.1.1" + resolve-alpn "^1.0.0" + +https-proxy-agent@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" + integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== + dependencies: + agent-base "6" + debug "4" + +husky@7.0.4: + version "7.0.4" + resolved "https://registry.yarnpkg.com/husky/-/husky-7.0.4.tgz#242048245dc49c8fb1bf0cc7cfb98dd722531535" + integrity sha512-vbaCKN2QLtP/vD4yvs6iz6hBEo6wkSzs8HpRah1Z6aGmF2KW5PdYuAd7uX5a+OyBZHBhd+TFLqgjUgytQr4RvQ== + +husky@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/husky/-/husky-6.0.0.tgz#810f11869adf51604c32ea577edbc377d7f9319e" + integrity sha512-SQS2gDTB7tBN486QSoKPKQItZw97BMOd+Kdb6ghfpBc0yXyzrddI0oDV5MkDAbuB4X2mO3/nj60TRMcYxwzZeQ== + +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" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +idna-uts46-hx@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/idna-uts46-hx/-/idna-uts46-hx-2.3.1.tgz#a1dc5c4df37eee522bf66d969cc980e00e8711f9" + integrity sha512-PWoF9Keq6laYdIRwwCdhTPl60xRqAloYNMQLiyUnG42VjT53oW07BXIRM+NK7eQjzXjAk2gUvX9caRxlnF9TAA== + dependencies: + punycode "2.1.0" + +ieee754@^1.1.13, ieee754@^1.1.4, ieee754@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + +ignore@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" + integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== + +ignore@^5.1.1, ignore@^5.2.0, ignore@^5.2.4: + version "5.3.2" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" + integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== + +immediate@^3.2.3: + version "3.3.0" + resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.3.0.tgz#1aef225517836bcdf7f2a2de2600c79ff0269266" + integrity sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q== + +immediate@~3.0.5: + version "3.0.6" + resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" + integrity sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ== + +immediate@~3.2.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.2.3.tgz#d140fa8f614659bd6541233097ddaac25cdd991c" + integrity sha512-RrGCXRm/fRVqMIhqXrGEX9rRADavPiDFSoMb/k64i9XMk8uH4r/Omi5Ctierj6XzNecwDbO4WuFbDD1zmpl3Tg== + +immutable@^4.0.0-rc.12: + version "4.3.8" + resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.8.tgz#02d183c7727fb2bb1d5d0380da0d779dce9296a7" + integrity sha512-d/Ld9aLbKpNwyl0KiM2CT1WYvkitQ1TSvmRtkcV8FKStiDoA7Slzgjmb/1G2yhKM1p0XeNOieaTbFZmU1d3Xuw== + +import-fresh@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" + integrity sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg== + dependencies: + caller-path "^2.0.0" + resolve-from "^3.0.0" + +import-fresh@^3.0.0, import-fresh@^3.2.1, import-fresh@^3.3.0: + version "3.3.1" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.1.tgz#9cecb56503c0ada1f2741dbbd6546e4b13b57ccf" + integrity sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +imul@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/imul/-/imul-1.0.1.tgz#9d5867161e8b3de96c2c38d5dc7cb102f35e2ac9" + integrity sha512-WFAgfwPLAjU66EKt6vRdTlKj4nAgIDQzh29JonLa4Bqtl6D8JrIMvWjCnx7xEjVNmP3U0fM5o8ZObk7d0f62bA== + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== + +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3, inherits@~2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +ini@^1.3.5: + version "1.3.8" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + +inquirer@^6.2.2: + version "6.5.2" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.5.2.tgz#ad50942375d036d327ff528c08bd5fab089928ca" + integrity sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ== + dependencies: + ansi-escapes "^3.2.0" + chalk "^2.4.2" + cli-cursor "^2.1.0" + cli-width "^2.0.0" + external-editor "^3.0.3" + figures "^2.0.0" + lodash "^4.17.12" + mute-stream "0.0.7" + run-async "^2.2.0" + rxjs "^6.4.0" + string-width "^2.1.0" + strip-ansi "^5.1.0" + through "^2.3.6" + +interpret@^1.0.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" + integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== + +io-ts@1.10.4: + version "1.10.4" + resolved "https://registry.yarnpkg.com/io-ts/-/io-ts-1.10.4.tgz#cd5401b138de88e4f920adbcb7026e2d1967e6e2" + integrity sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g== + dependencies: + fp-ts "^1.0.0" + +ipaddr.js@1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== + +is-arguments@^1.0.4: + version "1.2.0" + resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.2.0.tgz#ad58c6aecf563b78ef2bf04df540da8f5d7d8e1b" + integrity sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA== + dependencies: + call-bound "^1.0.2" + has-tostringtag "^1.0.2" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== + +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" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-buffer@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" + integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== + +is-callable@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" + integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== + +is-core-module@^2.16.1: + version "2.16.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.16.1.tgz#2a98801a849f43e2add644fbb6bc6229b19a4ef4" + integrity sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w== + dependencies: + hasown "^2.0.2" + +is-directory@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" + integrity sha512-yVChGzahRFvbkscn2MlwGismPO12i9+znNruC5gVEntG3qu0xQMzsGg/JFbrsqDOHtHFPci+V5aP5T9I+yeKqw== + +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-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w== + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-function@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-function/-/is-function-1.0.2.tgz#4f097f30abf6efadac9833b17ca5dc03f8144e08" + integrity sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ== + +is-generator-function@^1.0.7: + version "1.1.2" + resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.1.2.tgz#ae3b61e3d5ea4e4839b90bad22b02335051a17d5" + integrity sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA== + dependencies: + call-bound "^1.0.4" + generator-function "^2.0.0" + get-proto "^1.0.1" + has-tostringtag "^1.0.2" + safe-regex-test "^1.1.0" + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-hex-prefixed@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz#7d8d37e6ad77e5d127148913c573e082d777f554" + integrity sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA== + +is-module@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" + integrity sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g== + +is-nan@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/is-nan/-/is-nan-1.3.2.tgz#043a54adea31748b55b6cd4e09aadafa69bd9e1d" + integrity sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-path-inside@^3.0.3: + version "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@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" + integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== + +is-reference@1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/is-reference/-/is-reference-1.2.1.tgz#8b2dac0b371f4bc994fdeaba9eb542d03002d0b7" + integrity sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ== + dependencies: + "@types/estree" "*" + +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-typed-array@^1.1.14, is-typed-array@^1.1.3: + 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-typedarray@^1.0.0, is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== + +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" + integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== + +is-url@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/is-url/-/is-url-1.2.4.tgz#04a4df46d28c4cff3d73d01ff06abeb318a1aa52" + integrity sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww== + +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" + +isarray@^1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== + +isarray@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" + integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +isomorphic-unfetch@^3.0.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.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/isows/-/isows-1.0.7.tgz#1c06400b7eed216fbba3bcbd68f12490fc342915" + integrity sha512-I1fSfDCZL5P0v33sVqeTDSpcstAg/N+wF5HS033mogOVIp4B+oHC7oOCsA3axAbBSGTJ8QubbNmnIRN/h8U7hg== + +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g== + +jackspeak@^3.1.2: + version "3.4.3" + resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-3.4.3.tgz#8833a9d89ab4acde6188942bd1c53b6390ed5a8a" + integrity sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw== + dependencies: + "@isaacs/cliui" "^8.0.2" + optionalDependencies: + "@pkgjs/parseargs" "^0.11.0" + +jackspeak@^4.1.1: + version "4.2.3" + resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-4.2.3.tgz#27ef80f33b93412037c3bea4f8eddf80e1931483" + integrity sha512-ykkVRwrYvFm1nb2AJfKKYPr0emF6IiXDYUaFx4Zn9ZuIH7MrzEZ3sD5RlqGXNRpHtvUHJyOnCEFxOlNDtGo7wg== + dependencies: + "@isaacs/cliui" "^9.0.0" + +js-base64@^3.7.2: + version "3.7.8" + resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-3.7.8.tgz#af44496bc09fa178ed9c4adf67eb2b46f5c6d2a4" + integrity sha512-hNngCeKxIUQiEUN3GPJOkz4wF/YvdUdbNL9hsBcMQTkKzboD7T/q3OYOuuPZLUE6dBxSGpwhk5mwuDud7JVAow== + +js-cookie@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/js-cookie/-/js-cookie-2.2.1.tgz#69e106dc5d5806894562902aa5baec3744e9b2b8" + integrity sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ== + +js-sha3@0.8.0, js-sha3@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" + integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== + +js-sha3@^0.5.7: + version "0.5.7" + resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.5.7.tgz#0d4ffd8002d5333aabaf4a23eed2f6374c9f28e7" + integrity sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g== + +js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@3.x, js-yaml@^3.12.0, js-yaml@^3.13.0, js-yaml@^3.13.1: + version "3.14.2" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.2.tgz#77485ce1dd7f33c061fd1b16ecea23b55fcb04b0" + integrity sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +js-yaml@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +js-yaml@^4.1.0, js-yaml@~4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.1.tgz#854c292467705b699476e1a2decc0c8a3458806b" + integrity sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA== + dependencies: + argparse "^2.0.1" + +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg== + +jsencrypt@3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/jsencrypt/-/jsencrypt-3.2.1.tgz#09766983cc760088ff26b12fe7e574252af97727" + integrity sha512-k1sD5QV0KPn+D8uG9AdGzTQuamt82QZ3A3l6f7TRwMU6Oi2Vg0BsL+wZIQBONcraO1pc78ExMdvmBBJ8WhNYUA== + +json-bigint@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/json-bigint/-/json-bigint-1.0.0.tgz#ae547823ac0cad8398667f8cd9ef4730f5b01ff1" + integrity sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ== + dependencies: + bignumber.js "^9.0.0" + +json-buffer@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" + integrity sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ== + +json-buffer@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" + integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== + +json-parse-better-errors@^1.0.1: + version "1.0.2" + 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-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-schema-traverse@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" + integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== + +json-schema@0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" + integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== + +json-stable-stringify-without-jsonify@^1.0.1: + version "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== + +json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== + +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" + integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== + optionalDependencies: + graceful-fs "^4.1.6" + +jsonfile@^6.0.1: + version "6.2.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.2.0.tgz#7c265bd1b65de6977478300087c99f1c84383f62" + integrity sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg== + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +jsonschema@^1.2.4, jsonschema@^1.4.1: + version "1.5.0" + resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.5.0.tgz#f6aceb1ab9123563dd901d05f81f9d4883d3b7d8" + integrity sha512-K+A9hhqbn0f3pJX17Q/7H6yQfD/5OXgdrR5UE12gMXCiN9D5Xq2o5mddV2QEcX/bjla99ASsAAQUyMCCRWAEhw== + +jsprim@^1.2.2: + version "1.4.2" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.2.tgz#712c65533a15c878ba59e9ed5f0e26d5b77c5feb" + integrity sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw== + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.4.0" + verror "1.10.0" + +jssha@^3.2.0: + version "3.3.1" + resolved "https://registry.yarnpkg.com/jssha/-/jssha-3.3.1.tgz#c5b7fc7fb9aa745461923b87df0e247dd59c7ea8" + integrity sha512-VCMZj12FCFMQYcFLPRm/0lOBbLi8uM2BhXPTqw3U4YAfs4AZfiApOoBLoN8cQE60Z50m1MYMTQVCfgF/KaCVhQ== + +jszip@^3.10.1: + version "3.10.1" + resolved "https://registry.yarnpkg.com/jszip/-/jszip-3.10.1.tgz#34aee70eb18ea1faec2f589208a157d1feb091c2" + integrity sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g== + dependencies: + lie "~3.3.0" + pako "~1.0.2" + readable-stream "~2.3.6" + setimmediate "^1.0.5" + +keccak@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.1.tgz#ae30a0e94dbe43414f741375cff6d64c8bea0bff" + integrity sha512-epq90L9jlFWCW7+pQa6JOnKn2Xgl2mtI664seYR6MHskvI9agt7AnDqmAlp9TqU4/caMYbA08Hi5DMZAl5zdkA== + dependencies: + node-addon-api "^2.0.0" + node-gyp-build "^4.2.0" + +keccak@3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.2.tgz#4c2c6e8c54e04f2670ee49fa734eb9da152206e0" + integrity sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ== + dependencies: + node-addon-api "^2.0.0" + node-gyp-build "^4.2.0" + readable-stream "^3.6.0" + +keccak@^3.0.0, keccak@^3.0.2: + version "3.0.4" + resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.4.tgz#edc09b89e633c0549da444432ecf062ffadee86d" + integrity sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q== + dependencies: + node-addon-api "^2.0.0" + node-gyp-build "^4.2.0" + readable-stream "^3.6.0" + +keyv@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" + integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA== + dependencies: + json-buffer "3.0.0" + +keyv@^4.0.0, keyv@^4.5.3: + version "4.5.4" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" + integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== + dependencies: + json-buffer "3.0.1" + +kind-of@^6.0.2: + version "6.0.3" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + +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@^4.0.1: + version "4.1.5" + resolved "https://registry.yarnpkg.com/kleur/-/kleur-4.1.5.tgz#95106101795f7050c6c650f350c683febddb1780" + integrity sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ== + +level-codec@^9.0.0: + version "9.0.2" + resolved "https://registry.yarnpkg.com/level-codec/-/level-codec-9.0.2.tgz#fd60df8c64786a80d44e63423096ffead63d8cbc" + integrity sha512-UyIwNb1lJBChJnGfjmO0OR+ezh2iVu1Kas3nvBS/BzGnx79dv6g7unpKIDNPMhfdTEGoc7mC8uAu51XEtX+FHQ== + dependencies: + buffer "^5.6.0" + +level-concat-iterator@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/level-concat-iterator/-/level-concat-iterator-3.1.0.tgz#5235b1f744bc34847ed65a50548aa88d22e881cf" + integrity sha512-BWRCMHBxbIqPxJ8vHOvKUsaO0v1sLYZtjN3K2iZJsRBYtp+ONsY6Jfi6hy9K3+zolgQRryhIn2NRZjZnWJ9NmQ== + dependencies: + catering "^2.1.0" + +level-concat-iterator@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/level-concat-iterator/-/level-concat-iterator-2.0.1.tgz#1d1009cf108340252cb38c51f9727311193e6263" + integrity sha512-OTKKOqeav2QWcERMJR7IS9CUo1sHnke2C0gkSmcR7QuEtFNLLzHQAvnMw8ykvEcv0Qtkg0p7FOwP1v9e5Smdcw== + +level-errors@^2.0.0, level-errors@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/level-errors/-/level-errors-2.0.1.tgz#2132a677bf4e679ce029f517c2f17432800c05c8" + integrity sha512-UVprBJXite4gPS+3VznfgDSU8PTRuVX0NXwoWW50KLxd2yw4Y1t2JUR5In1itQnudZqRMT9DlAM3Q//9NCjCFw== + dependencies: + errno "~0.1.1" + +level-iterator-stream@~4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/level-iterator-stream/-/level-iterator-stream-4.0.2.tgz#7ceba69b713b0d7e22fcc0d1f128ccdc8a24f79c" + integrity sha512-ZSthfEqzGSOMWoUGhTXdX9jv26d32XJuHz/5YnuHZzH6wldfWMOVwI9TBtKcya4BKTyTt3XVA0A3cF3q5CY30Q== + dependencies: + inherits "^2.0.4" + readable-stream "^3.4.0" + xtend "^4.0.2" + +level-mem@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/level-mem/-/level-mem-5.0.1.tgz#c345126b74f5b8aa376dc77d36813a177ef8251d" + integrity sha512-qd+qUJHXsGSFoHTziptAKXoLX87QjR7v2KMbqncDXPxQuCdsQlzmyX+gwrEHhlzn08vkf8TyipYyMmiC6Gobzg== + dependencies: + level-packager "^5.0.3" + memdown "^5.0.0" + +level-packager@^5.0.3: + version "5.1.1" + resolved "https://registry.yarnpkg.com/level-packager/-/level-packager-5.1.1.tgz#323ec842d6babe7336f70299c14df2e329c18939" + integrity sha512-HMwMaQPlTC1IlcwT3+swhqf/NUO+ZhXVz6TY1zZIIZlIR0YSn8GtAAWmIvKjNY16ZkEg/JcpAuQskxsXqC0yOQ== + dependencies: + encoding-down "^6.3.0" + levelup "^4.3.2" + +level-supports@^2.0.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/level-supports/-/level-supports-2.1.0.tgz#9af908d853597ecd592293b2fad124375be79c5f" + integrity sha512-E486g1NCjW5cF78KGPrMDRBYzPuueMZ6VBXHT6gC7A8UYWGiM14fGgp+s/L1oFfDWSPV/+SFkYCmZ0SiESkRKA== + +level-supports@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/level-supports/-/level-supports-1.0.1.tgz#2f530a596834c7301622521988e2c36bb77d122d" + integrity sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg== + dependencies: + xtend "^4.0.2" + +level-ws@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/level-ws/-/level-ws-2.0.0.tgz#207a07bcd0164a0ec5d62c304b4615c54436d339" + integrity sha512-1iv7VXx0G9ec1isqQZ7y5LmoZo/ewAsyDHNA8EFDW5hqH2Kqovm33nSFkSdnLLAK+I5FlT+lo5Cw9itGe+CpQA== + dependencies: + inherits "^2.0.3" + readable-stream "^3.1.0" + xtend "^4.0.1" + +leveldown@6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/leveldown/-/leveldown-6.1.0.tgz#7ab1297706f70c657d1a72b31b40323aa612b9ee" + integrity sha512-8C7oJDT44JXxh04aSSsfcMI8YiaGRhOFI9/pMEL7nWJLVsWajDPTRxsSHTM2WcTVY5nXM+SuRHzPPi0GbnDX+w== + dependencies: + abstract-leveldown "^7.2.0" + napi-macros "~2.0.0" + node-gyp-build "^4.3.0" + +levelup@^4.3.2: + version "4.4.0" + resolved "https://registry.yarnpkg.com/levelup/-/levelup-4.4.0.tgz#f89da3a228c38deb49c48f88a70fb71f01cafed6" + integrity sha512-94++VFO3qN95cM/d6eBXvd894oJE0w3cInq9USsyQzzoJxmiYzPAocNcuGCPGGjoXqDVJcr3C1jzt1TSjyaiLQ== + dependencies: + deferred-leveldown "~5.3.0" + level-errors "~2.0.0" + level-iterator-stream "~4.0.0" + level-supports "~1.0.0" + xtend "~4.0.0" + +levn@^0.3.0, levn@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + integrity sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA== + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +libphonenumber-js@^1.9.43: + version "1.12.40" + resolved "https://registry.yarnpkg.com/libphonenumber-js/-/libphonenumber-js-1.12.40.tgz#4b743571462a0f3fdafab7a941d89ee842aa25e0" + integrity sha512-HKGs7GowShNls3Zh+7DTr6wYpPk5jC78l508yQQY3e8ZgJChM3A9JZghmMJZuK+5bogSfuTafpjksGSR3aMIEg== + +lie@~3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/lie/-/lie-3.3.0.tgz#dcf82dee545f46074daf200c7c1c5a08e0f40f6a" + integrity sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ== + dependencies: + immediate "~3.0.5" + +lightningcss-android-arm64@1.32.0: + version "1.32.0" + resolved "https://registry.yarnpkg.com/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz#f033885116dfefd9c6f54787523e3514b61e1968" + integrity sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg== + +lightningcss-darwin-arm64@1.32.0: + version "1.32.0" + resolved "https://registry.yarnpkg.com/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.32.0.tgz#50b71871b01c8199584b649e292547faea7af9b5" + integrity sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ== + +lightningcss-darwin-x64@1.32.0: + version "1.32.0" + resolved "https://registry.yarnpkg.com/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.32.0.tgz#35f3e97332d130b9ca181e11b568ded6aebc6d5e" + integrity sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w== + +lightningcss-freebsd-x64@1.32.0: + version "1.32.0" + resolved "https://registry.yarnpkg.com/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz#9777a76472b64ed6ff94342ad64c7bafd794a575" + integrity sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig== + +lightningcss-linux-arm-gnueabihf@1.32.0: + version "1.32.0" + resolved "https://registry.yarnpkg.com/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz#13ae652e1ab73b9135d7b7da172f666c410ad53d" + integrity sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw== + +lightningcss-linux-arm64-gnu@1.32.0: + version "1.32.0" + resolved "https://registry.yarnpkg.com/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz#417858795a94592f680123a1b1f9da8a0e1ef335" + integrity sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ== + +lightningcss-linux-arm64-musl@1.32.0: + version "1.32.0" + resolved "https://registry.yarnpkg.com/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz#6be36692e810b718040802fd809623cffe732133" + integrity sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg== + +lightningcss-linux-x64-gnu@1.32.0: + version "1.32.0" + resolved "https://registry.yarnpkg.com/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz#0b7803af4eb21cfd38dd39fe2abbb53c7dd091f6" + integrity sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA== + +lightningcss-linux-x64-musl@1.32.0: + version "1.32.0" + resolved "https://registry.yarnpkg.com/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz#88dc8ba865ddddb1ac5ef04b0f161804418c163b" + integrity sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg== + +lightningcss-win32-arm64-msvc@1.32.0: + version "1.32.0" + resolved "https://registry.yarnpkg.com/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz#4f30ba3fa5e925f5b79f945e8cc0d176c3b1ab38" + integrity sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw== + +lightningcss-win32-x64-msvc@1.32.0: + version "1.32.0" + resolved "https://registry.yarnpkg.com/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz#141aa5605645064928902bb4af045fa7d9f4220a" + integrity sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q== + +lightningcss@^1.32.0: + version "1.32.0" + resolved "https://registry.yarnpkg.com/lightningcss/-/lightningcss-1.32.0.tgz#b85aae96486dcb1bf49a7c8571221273f4f1e4a9" + integrity sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ== + dependencies: + detect-libc "^2.0.3" + optionalDependencies: + lightningcss-android-arm64 "1.32.0" + lightningcss-darwin-arm64 "1.32.0" + lightningcss-darwin-x64 "1.32.0" + lightningcss-freebsd-x64 "1.32.0" + lightningcss-linux-arm-gnueabihf "1.32.0" + lightningcss-linux-arm64-gnu "1.32.0" + lightningcss-linux-arm64-musl "1.32.0" + lightningcss-linux-x64-gnu "1.32.0" + lightningcss-linux-x64-musl "1.32.0" + lightningcss-win32-arm64-msvc "1.32.0" + lightningcss-win32-x64-msvc "1.32.0" + +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== + +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +lodash.camelcase@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" + integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA== + +lodash.clonedeep@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" + integrity sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ== + +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + +lodash.truncate@^4.4.2: + version "4.4.2" + resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" + integrity sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw== + +lodash@4.17.21: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.21: + version "4.17.23" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.23.tgz#f113b0378386103be4f6893388c73d0bde7f2c5a" + integrity sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w== + +log-symbols@4.1.0, log-symbols@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" + integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== + dependencies: + chalk "^4.1.0" + is-unicode-supported "^0.1.0" + +loupe@^2.3.1, loupe@^2.3.6: + version "2.3.7" + resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.7.tgz#6e69b7d4db7d3ab436328013d37d1c8c3540c697" + integrity sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA== + dependencies: + get-func-name "^2.0.1" + +lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" + integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== + +lowercase-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" + integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== + +lru-cache@^10.2.0: + 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.0: + version "11.2.7" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-11.2.7.tgz#9127402617f34cd6767b96daee98c28e74458d35" + integrity sha512-aY/R+aEsRelme17KGQa/1ZSIpLpNYYrhcrepKTZgE+W3WM16YMCaPwOHLHsmopZHELU0Ojin1lPVxKR0MihncA== + +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + +lru_map@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/lru_map/-/lru_map-0.3.3.tgz#b5c8351b9464cbd750335a79650a0ec0e56118dd" + integrity sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ== + +ltgt@~2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ltgt/-/ltgt-2.2.1.tgz#f35ca91c493f7b73da0e07495304f17b31f87ee5" + integrity sha512-AI2r85+4MquTw9ZYqabu4nMwy9Oftlfa/e/52t9IjtfG+mGBbTNdAoZ3RQKLHR6r0wQnwZnPIEh/Ya6XTWAKNA== + +magic-string@^0.30.21, magic-string@^0.30.3: + version "0.30.21" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.21.tgz#56763ec09a0fa8091df27879fd94d19078c00d91" + integrity sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ== + dependencies: + "@jridgewell/sourcemap-codec" "^1.5.5" + +markdown-table@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-2.0.0.tgz#194a90ced26d31fe753d8b9434430214c011865b" + integrity sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A== + dependencies: + repeat-string "^1.0.0" + +match-all@^1.2.6: + version "1.2.7" + resolved "https://registry.yarnpkg.com/match-all/-/match-all-1.2.7.tgz#3c03b7f7ee372ae177aac5eca08c3ad6af59633a" + integrity sha512-qSpsBKarh55r9KyXzFC3xBLRf2GlGasba2em9kbpRsSlGvdTAqjx3QD0r3FKSARiW+OE4iMHYsolM3aX9n5djw== + +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== + +mcl-wasm@^0.7.1: + version "0.7.9" + resolved "https://registry.yarnpkg.com/mcl-wasm/-/mcl-wasm-0.7.9.tgz#c1588ce90042a8700c3b60e40efb339fc07ab87f" + integrity sha512-iJIUcQWA88IJB/5L15GnJVnSQJmf/YaxxV6zRavv83HILHaJQb6y0iFyDMdDO0gN8X37tdxmAOrH/P8B6RB8sQ== + +md5.js@^1.3.4: + version "1.3.5" + resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" + integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== + +memdown@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/memdown/-/memdown-5.1.0.tgz#608e91a9f10f37f5b5fe767667a8674129a833cb" + integrity sha512-B3J+UizMRAlEArDjWHTMmadet+UKwHd3UjMgGBkZcKAxAYVPS9o0Yeiha4qvz7iGiL2Sb3igUft6p7nbFWctpw== + dependencies: + abstract-leveldown "~6.2.1" + functional-red-black-tree "~1.0.1" + immediate "~3.2.3" + inherits "~2.0.1" + ltgt "~2.2.0" + safe-buffer "~5.2.0" + +memorystream@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2" + integrity sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw== + +merge-descriptors@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.3.tgz#d80319a65f3c7935351e5cfdac8f9318504dbed5" + integrity sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ== + +merge2@^1.2.3, merge2@^1.3.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +merkle-patricia-tree@^4.2.2, merkle-patricia-tree@^4.2.4: + version "4.2.4" + resolved "https://registry.yarnpkg.com/merkle-patricia-tree/-/merkle-patricia-tree-4.2.4.tgz#ff988d045e2bf3dfa2239f7fabe2d59618d57413" + integrity sha512-eHbf/BG6eGNsqqfbLED9rIqbsF4+sykEaBn6OLNs71tjclbMcMOk1tEPmJKcNcNCLkvbpY/lwyOlizWsqPNo8w== + dependencies: + "@types/levelup" "^4.3.0" + ethereumjs-util "^7.1.4" + level-mem "^5.0.1" + level-ws "^2.0.0" + readable-stream "^3.6.0" + semaphore-async-await "^1.5.1" + +methods@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== + +micro-eth-signer@^0.14.0: + version "0.14.0" + resolved "https://registry.yarnpkg.com/micro-eth-signer/-/micro-eth-signer-0.14.0.tgz#8aa1fe997d98d6bdf42f2071cef7eb01a66ecb22" + integrity sha512-5PLLzHiVYPWClEvZIXXFu5yutzpadb73rnQCpUqIHu3No3coFuWQNfE5tkBQJ7djuLYl6aRLaS0MgWJYGoqiBw== + dependencies: + "@noble/curves" "~1.8.1" + "@noble/hashes" "~1.7.1" + micro-packed "~0.7.2" + +micro-ftch@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/micro-ftch/-/micro-ftch-0.3.1.tgz#6cb83388de4c1f279a034fb0cf96dfc050853c5f" + integrity sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg== + +micro-packed@~0.7.2: + version "0.7.3" + resolved "https://registry.yarnpkg.com/micro-packed/-/micro-packed-0.7.3.tgz#59e96b139dffeda22705c7a041476f24cabb12b6" + integrity sha512-2Milxs+WNC00TRlem41oRswvw31146GiSaoCT7s3Xi2gMUglW5QBeqlQaZeHr5tJx9nm3i57LNXPqxOOaWtTYg== + dependencies: + "@scure/base" "~1.2.5" + +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" + +miller-rabin@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" + integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== + dependencies: + bn.js "^4.0.0" + brorand "^1.0.1" + +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.12, mime-types@^2.1.16, mime-types@~2.1.19, mime-types@~2.1.24, mime-types@~2.1.34: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +mime@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + +mimic-fn@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" + integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== + +mimic-response@^1.0.0, mimic-response@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" + integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== + +mimic-response@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" + integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== + +min-document@^2.19.0: + version "2.19.2" + resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.2.tgz#f95db44639eaae3ac8ea85ae6809ae85ff7e3b81" + integrity sha512-8S5I8db/uZN8r9HSLFVWPdJCvYOejMcEC82VIzNUc6Zkklf/d1gg2psfE79/vyhWOj4+J8MtwmoOz3TmvaGu5A== + dependencies: + dom-walk "^0.1.0" + +minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== + +minimalistic-crypto-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" + integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== + +minimatch@*, minimatch@^10.1.1: + version "10.2.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-10.2.4.tgz#465b3accbd0218b8281f5301e27cedc697f96fde" + integrity sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg== + dependencies: + brace-expansion "^5.0.2" + +"minimatch@2 || 3", minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: + version "3.1.5" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.5.tgz#580c88f8d5445f2bd6aa8f3cadefa0de79fbd69e" + integrity sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w== + dependencies: + brace-expansion "^1.1.7" + +minimatch@5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.0.1.tgz#fb9022f7528125187c92bd9e9b6366be1cf3415b" + integrity sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g== + dependencies: + brace-expansion "^2.0.1" + +minimatch@^5.0.1, minimatch@^5.1.6: + version "5.1.9" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.9.tgz#1293ef15db0098b394540e8f9f744f9fda8dee4b" + integrity sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw== + dependencies: + brace-expansion "^2.0.1" + +minimatch@^8.0.2: + version "8.0.7" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-8.0.7.tgz#954766e22da88a3e0a17ad93b58c15c9d8a579de" + integrity sha512-V+1uQNdzybxa14e/p00HZnQNNcTjnRJjDxg2V8wtkjFctq4M7hXFws4oekyTP0Jebeq7QYtpFyOeBAjc88zvYg== + dependencies: + brace-expansion "^2.0.1" + +minimatch@^9.0.4, minimatch@^9.0.5: + version "9.0.9" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.9.tgz#9b0cb9fcb78087f6fd7eababe2511c4d3d60574e" + integrity sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg== + dependencies: + brace-expansion "^2.0.2" + +minimist@^1.2.5, minimist@^1.2.6, minimist@^1.2.7: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + +minipass@^2.6.0, minipass@^2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" + integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== + dependencies: + safe-buffer "^5.1.2" + yallist "^3.0.0" + +minipass@^4.2.4: + version "4.2.8" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-4.2.8.tgz#f0010f64393ecfc1d1ccb5f582bcaf45f48e1a3a" + integrity sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ== + +"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.1.2: + version "7.1.3" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.3.tgz#79389b4eb1bb2d003a9bba87d492f2bd37bdc65b" + integrity sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A== + +minizlib@^1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" + integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q== + dependencies: + minipass "^2.9.0" + +mkdirp-promise@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz#e9b8f68e552c68a9c1713b84883f7a1dd039b8a1" + integrity sha512-Hepn5kb1lJPtVW84RFT40YG1OddBNTOVUZR2bzQUHc+Z03en8/3uX0+060JDhcEzyO08HmipsN9DcnFMxhIL9w== + dependencies: + mkdirp "*" + +mkdirp@*: + version "3.0.1" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-3.0.1.tgz#e44e4c5607fb279c168241713cc6e0fea9adcb50" + integrity sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg== + +mkdirp@0.5.x, mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.5: + version "0.5.6" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" + integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== + dependencies: + minimist "^1.2.6" + +mkdirp@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + +mnemonist@^0.38.0: + version "0.38.5" + resolved "https://registry.yarnpkg.com/mnemonist/-/mnemonist-0.38.5.tgz#4adc7f4200491237fe0fa689ac0b86539685cade" + integrity sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg== + dependencies: + obliterator "^2.0.0" + +mocha@10.2.0: + version "10.2.0" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.2.0.tgz#1fd4a7c32ba5ac372e03a17eef435bd00e5c68b8" + integrity sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg== + dependencies: + ansi-colors "4.1.1" + browser-stdout "1.3.1" + chokidar "3.5.3" + debug "4.3.4" + diff "5.0.0" + escape-string-regexp "4.0.0" + find-up "5.0.0" + glob "7.2.0" + he "1.2.0" + js-yaml "4.1.0" + log-symbols "4.1.0" + minimatch "5.0.1" + ms "2.1.3" + nanoid "3.3.3" + serialize-javascript "6.0.0" + strip-json-comments "3.1.1" + supports-color "8.1.1" + workerpool "6.2.1" + yargs "16.2.0" + yargs-parser "20.2.4" + yargs-unparser "2.0.0" + +mocha@^10.0.0, mocha@^10.2.0: + version "10.8.2" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.8.2.tgz#8d8342d016ed411b12a429eb731b825f961afb96" + integrity sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg== + dependencies: + ansi-colors "^4.1.3" + browser-stdout "^1.3.1" + chokidar "^3.5.3" + debug "^4.3.5" + diff "^5.2.0" + escape-string-regexp "^4.0.0" + find-up "^5.0.0" + glob "^8.1.0" + he "^1.2.0" + js-yaml "^4.1.0" + log-symbols "^4.1.0" + minimatch "^5.1.6" + ms "^2.1.3" + serialize-javascript "^6.0.2" + strip-json-comments "^3.1.1" + supports-color "^8.1.1" + workerpool "^6.5.1" + yargs "^16.2.0" + yargs-parser "^20.2.9" + yargs-unparser "^2.0.0" + +mock-fs@^4.1.0: + version "4.14.0" + resolved "https://registry.yarnpkg.com/mock-fs/-/mock-fs-4.14.0.tgz#ce5124d2c601421255985e6e94da80a7357b1b18" + integrity sha512-qYvlv/exQ4+svI3UOvPUpLDF0OMX5euvUH0Ny4N5QyRyhNdgAgUrVH3iUINSzEPLvx0kbo/Bp28GJKIqvE7URw== + +moment@^2.29.3: + version "2.30.1" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.30.1.tgz#f8c91c07b7a786e30c59926df530b4eac96974ae" + integrity sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how== + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== + +ms@2.1.2: + version "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: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +multibase@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/multibase/-/multibase-0.7.0.tgz#1adfc1c50abe05eefeb5091ac0c2728d6b84581b" + integrity sha512-TW8q03O0f6PNFTQDvh3xxH03c8CjGaaYrjkl9UQPG6rz53TQzzxJVCIWVjzcbN/Q5Y53Zd0IBQBMVktVgNx4Fg== + dependencies: + base-x "^3.0.8" + buffer "^5.5.0" + +multibase@~0.6.0: + version "0.6.1" + resolved "https://registry.yarnpkg.com/multibase/-/multibase-0.6.1.tgz#b76df6298536cc17b9f6a6db53ec88f85f8cc12b" + integrity sha512-pFfAwyTjbbQgNc3G7D48JkJxWtoJoBMaR4xQUOuB8RnCgRqaYmWNFeJTTvrJ2w51bjLq2zTby6Rqj9TQ9elSUw== + dependencies: + base-x "^3.0.8" + buffer "^5.5.0" + +multicodec@^0.5.5: + version "0.5.7" + resolved "https://registry.yarnpkg.com/multicodec/-/multicodec-0.5.7.tgz#1fb3f9dd866a10a55d226e194abba2dcc1ee9ffd" + integrity sha512-PscoRxm3f+88fAtELwUnZxGDkduE2HD9Q6GHUOywQLjOGT/HAdhjLDYNZ1e7VR0s0TP0EwZ16LNUTFpoBGivOA== + dependencies: + varint "^5.0.0" + +multicodec@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/multicodec/-/multicodec-1.0.4.tgz#46ac064657c40380c28367c90304d8ed175a714f" + integrity sha512-NDd7FeS3QamVtbgfvu5h7fd1IlbaC4EQ0/pgU4zqE2vdHCmBGsUa0TiM8/TdSeG6BMPC92OOCf8F1ocE/Wkrrg== + dependencies: + buffer "^5.6.0" + varint "^5.0.0" + +multihashes@^0.4.15, multihashes@~0.4.15: + version "0.4.21" + resolved "https://registry.yarnpkg.com/multihashes/-/multihashes-0.4.21.tgz#dc02d525579f334a7909ade8a122dabb58ccfcb5" + integrity sha512-uVSvmeCWf36pU2nB4/1kzYZjsXD9vofZKpgudqkceYY5g2aZZXJ5r9lxuzoRLl1OAp28XljXsEJ/X/85ZsKmKw== + dependencies: + buffer "^5.5.0" + multibase "^0.7.0" + varint "^5.0.0" + +murmur-128@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/murmur-128/-/murmur-128-0.2.1.tgz#a9f6568781d2350ecb1bf80c14968cadbeaa4b4d" + integrity sha512-WseEgiRkI6aMFBbj8Cg9yBj/y+OdipwVC7zUo3W2W1JAJITwouUOtpqsmGSg67EQmwwSyod7hsVsWY5LsrfQVg== + dependencies: + encode-utf8 "^1.0.2" + fmix "^0.1.0" + imul "^1.0.0" + +mute-stream@0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" + integrity sha512-r65nCZhrbXXb6dXOACihYApHw2Q6pV0M3V0PSxd74N0+D8nzAdEAITq2oAjA1jVnKI+tGvEBUpqiMh0+rW6zDQ== + +nano-json-stream-parser@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/nano-json-stream-parser/-/nano-json-stream-parser-0.1.2.tgz#0cc8f6d0e2b622b479c40d499c46d64b755c6f5f" + integrity sha512-9MqxMH/BSJC7dnLsEMPyfN5Dvoo49IsPFYMcHw3Bcfc2kN0lpHRBSzlMSVx4HGyJ7s9B31CyBTVehWJoQ8Ctew== + +nanoid@3.3.3: + version "3.3.3" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.3.tgz#fd8e8b7aa761fe807dba2d1b98fb7241bb724a25" + integrity sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w== + +nanoid@^3.3.11: + version "3.3.11" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.11.tgz#4f4f112cefbe303202f2199838128936266d185b" + integrity sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w== + +napi-macros@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/napi-macros/-/napi-macros-2.0.0.tgz#2b6bae421e7b96eb687aa6c77a7858640670001b" + integrity sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg== + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== + +negotiator@0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" + integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== + +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-tick@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.1.0.tgz#1836ee30ad56d67ef281b22bd199f709449b35eb" + integrity sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ== + +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== + +node-addon-api@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-2.0.2.tgz#432cfa82962ce494b132e9d72a15b29f71ff5d32" + integrity sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA== + +node-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-emoji@^1.10.0: + version "1.11.0" + resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-1.11.0.tgz#69a0150e6946e2f115e9d7ea4df7971e2628301c" + integrity sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A== + dependencies: + lodash "^4.17.21" + +node-fetch@^2.6.0, node-fetch@^2.6.1, node-fetch@^2.6.7: + version "2.7.0" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" + integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== + dependencies: + whatwg-url "^5.0.0" + +node-gyp-build@4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.3.0.tgz#9f256b03e5826150be39c764bf51e993946d71a3" + integrity sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q== + +node-gyp-build@4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.4.0.tgz#42e99687ce87ddeaf3a10b99dc06abc11021f3f4" + integrity sha512-amJnQCcgtRVw9SvoebO3BKGESClrfXGCUTX9hSn1OuGQTQBOZmVd0Z0OlecpuRksKvbsUqALE8jls/ErClAPuQ== + +node-gyp-build@^4.2.0, node-gyp-build@^4.3.0: + version "4.8.4" + resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.8.4.tgz#8a70ee85464ae52327772a90d66c6077a900cfc8" + integrity sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ== + +node-jsencrypt@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/node-jsencrypt/-/node-jsencrypt-1.0.0.tgz#83ffced414ecbe12fea017c6c585c9bfc49ad19b" + integrity sha512-ANQ/XkOVS02R89MtfoelFxarMsLA12nlOT802VS4LVhl+JRSRZIvkLIjvKYZmIar+mENUkR9mBKUdcdiPy/7lA== + dependencies: + get-random-values "^1.2.0" + +nofilter@^3.0.2, nofilter@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/nofilter/-/nofilter-3.1.0.tgz#c757ba68801d41ff930ba2ec55bab52ca184aa66" + integrity sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g== + +nopt@3.x: + version "3.0.6" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" + integrity sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg== + 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" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +normalize-url@^4.1.0: + version "4.5.1" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.1.tgz#0dd90cf1288ee1d1313b87081c9a5932ee48518a" + integrity sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA== + +normalize-url@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" + integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== + +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" + +oauth-sign@~0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" + integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== + +object-assign@^4, object-assign@^4.1.0, 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== + +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-is@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.6.tgz#1a6a53aed2dd8f7e6775ff870bea58545956ab07" + integrity sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + +object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object.assign@^4.1.4: + version "4.1.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" + +obliterator@^2.0.0: + version "2.0.5" + resolved "https://registry.yarnpkg.com/obliterator/-/obliterator-2.0.5.tgz#031e0145354b0c18840336ae51d41e7d6d2c76aa" + integrity sha512-42CPE9AhahZRsMNslczq0ctAEtqk8Eka26QofnqC346BZdHDySk3LWka23LI7ULIw11NmltpiLagIq8gBozxTw== + +oboe@2.1.5: + version "2.1.5" + resolved "https://registry.yarnpkg.com/oboe/-/oboe-2.1.5.tgz#5554284c543a2266d7a38f17e073821fbde393cd" + integrity sha512-zRFWiF+FoicxEs3jNI/WYUrVEgA7DeET/InK0XQuudGHRg8iIob3cNPrJTKaz4004uaA9Pbe+Dwa8iluhjLZWA== + dependencies: + http-https "^1.0.0" + +obug@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/obug/-/obug-2.1.1.tgz#2cba74ff241beb77d63055ddf4cd1e9f90b538be" + integrity sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ== + +on-finished@~2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" + integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== + dependencies: + ee-first "1.1.1" + +once@1.x, once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +onetime@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" + integrity sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ== + dependencies: + mimic-fn "^1.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" + +optionator@^0.8.1, optionator@^0.8.2: + version "0.8.3" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" + integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.6" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + word-wrap "~1.2.3" + +optionator@^0.9.3: + version "0.9.4" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.4.tgz#7ea1c1a5d91d764fb282139c88fe11e182a3a734" + integrity sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g== + dependencies: + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.5" + +os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== + +ox@0.14.7: + version "0.14.7" + resolved "https://registry.yarnpkg.com/ox/-/ox-0.14.7.tgz#efe6770f7a138f823fb2df26001b679c2565b0a4" + integrity sha512-zSQ/cfBdolj7U4++NAvH7sI+VG0T3pEohITCgcQj8KlawvTDY4vGVhDT64Atsm0d6adWfIYHDpu88iUBMMp+AQ== + dependencies: + "@adraffy/ens-normalize" "^1.11.0" + "@noble/ciphers" "^1.3.0" + "@noble/curves" "1.9.1" + "@noble/hashes" "^1.8.0" + "@scure/bip32" "^1.7.0" + "@scure/bip39" "^1.6.0" + abitype "^1.2.3" + eventemitter3 "5.0.1" + +p-cancelable@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" + integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== + +p-cancelable@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-2.1.1.tgz#aab7fbd416582fa32a3db49859c122487c5ed2cf" + integrity sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg== + +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +p-map@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" + integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== + dependencies: + aggregate-error "^3.0.0" + +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== + +pako@~1.0.2: + version "1.0.11" + resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" + integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== + +papaparse@5.4.1: + version "5.4.1" + resolved "https://registry.yarnpkg.com/papaparse/-/papaparse-5.4.1.tgz#f45c0f871853578bd3a30f92d96fdcfb6ebea127" + integrity sha512-HipMsgJkZu8br23pW15uvo6sib6wne/4woLZPlFf3rpDyMe9ywEXUsuD7+6K9PRkJlVT51j/sCOYDKGGS3ZJrw== + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +parse-asn1@^5.0.0, parse-asn1@^5.1.9: + version "5.1.9" + resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.9.tgz#8dd24c3ea8da77dffbc708d94eaf232fd6156e95" + integrity sha512-fIYNuZ/HastSb80baGOuPRo1O9cf4baWw5WsAp7dBuUzeTD/BoaG8sVTdlPFksBE2lF21dN+A1AnrpIjSWqHHg== + dependencies: + asn1.js "^4.10.1" + browserify-aes "^1.2.0" + evp_bytestokey "^1.0.3" + pbkdf2 "^3.1.5" + safe-buffer "^5.2.1" + +parse-headers@^2.0.0: + version "2.0.6" + resolved "https://registry.yarnpkg.com/parse-headers/-/parse-headers-2.0.6.tgz#7940f0abe5fe65df2dd25d4ce8800cb35b49d01c" + integrity sha512-Tz11t3uKztEW5FEVZnj1ox8GKblWn+PvHY9TmJV5Mll2uHEwRdR/5Li1OlXoECjLYkApdhWy44ocONwXLiKO5A== + +parse-json@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" + integrity sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw== + dependencies: + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + +parse-json@^5.2.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" + +parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + +path-browserify@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-1.0.1.tgz#d98454a9c3753d5790860f16f68867b9e46be1fd" + integrity sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g== + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-expression-matcher@^1.1.3, path-expression-matcher@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/path-expression-matcher/-/path-expression-matcher-1.2.0.tgz#9bdae3787f43b0857b0269e9caaa586c12c8abee" + integrity sha512-DwmPWeFn+tq7TiyJ2CxezCAirXjFxvaiD03npak3cRjlP9+OjTmSy1EpIrEbh+l6JgUundniloMLDQ/6VTdhLQ== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-is-inside@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + integrity sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w== + +path-key@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + integrity sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw== + +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== + +path-parse@^1.0.6, path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-scurry@^1.11.1, path-scurry@^1.6.1: + version "1.11.1" + resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.11.1.tgz#7960a668888594a0720b12a911d1a742ab9f11d2" + integrity sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA== + dependencies: + lru-cache "^10.2.0" + minipass "^5.0.0 || ^6.0.2 || ^7.0.0" + +path-scurry@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-2.0.2.tgz#6be0d0ee02a10d9e0de7a98bae65e182c9061f85" + integrity sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg== + dependencies: + lru-cache "^11.0.0" + minipass "^7.1.2" + +path-to-regexp@~0.1.12: + version "0.1.13" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.13.tgz#9b22ec16bc3ab88d05a0c7e369869421401ab17d" + integrity sha512-A/AGNMFN3c8bOlvV9RreMdrv7jsmF9XIfDeCd87+I8RNg6s78BhJxMu69NEMHBSJFxKidViTEdruRwEk/WIKqA== + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +pathe@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/pathe/-/pathe-2.0.3.tgz#3ecbec55421685b70a9da872b2cff3e1cbed1716" + integrity sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w== + +pathval@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d" + integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== + +pbkdf2@^3.0.17, pbkdf2@^3.0.3, pbkdf2@^3.0.9, pbkdf2@^3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.5.tgz#444a59d7a259a95536c56e80c89de31cc01ed366" + integrity sha512-Q3CG/cYvCO1ye4QKkuH7EXxs3VC/rI1/trd+qX2+PolbaKG0H+bgcZzrTt96mMyRtejk+JMCiLUn3y29W8qmFQ== + dependencies: + create-hash "^1.2.0" + create-hmac "^1.1.7" + ripemd160 "^2.0.3" + safe-buffer "^5.2.1" + sha.js "^2.4.12" + to-buffer "^1.2.1" + +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow== + +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== + +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: + version "2.3.2" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.2.tgz#5a942915e26b372dc0f0e6753149a16e6b1c5601" + integrity sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA== + +picomatch@^4.0.2, picomatch@^4.0.3, picomatch@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.4.tgz#fd6f5e00a143086e074dffe4c924b8fb293b0589" + integrity sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A== + +pify@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" + integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== + +platform-deploy-client@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/platform-deploy-client/-/platform-deploy-client-0.6.0.tgz#1f7a59d0cbae2e78f65ad253d7cc1aff67e3de0e" + integrity sha512-mBfnOvF2gb9acGJjlXBQ6VOAkKFRdljsNKHUVY5xKqzKP2PNh/RqCIvi5AR5NqLMrQ3XaMIwRvmwAjtGw7JhYg== + dependencies: + "@ethersproject/abi" "^5.6.3" + axios "^0.21.2" + defender-base-client "^1.44.0" + lodash "^4.17.19" + node-fetch "^2.6.0" + +pluralize@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-8.0.0.tgz#1a6fa16a38d12a1901e0320fa017051c539ce3b1" + integrity sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA== + +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@^8.5.8: + version "8.5.8" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.5.8.tgz#6230ecc8fb02e7a0f6982e53990937857e13f399" + integrity sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg== + dependencies: + nanoid "^3.3.11" + picocolors "^1.1.1" + source-map-js "^1.2.1" + +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== + +prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + integrity sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w== + +prepend-http@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" + integrity sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA== + +prettier-plugin-solidity@1.0.0-beta.17: + version "1.0.0-beta.17" + resolved "https://registry.yarnpkg.com/prettier-plugin-solidity/-/prettier-plugin-solidity-1.0.0-beta.17.tgz#fc0fe977202b6503763a338383efeceaa6c7661e" + integrity sha512-YFkxV/rHi1mphi17/XKcJ9QjZlb+L/J0yY2erix21BZfzPv2BN9dfmSRGr/poDp/FBOFSW+jteP2BCMe7HndVQ== + dependencies: + "@solidity-parser/parser" "^0.13.2" + emoji-regex "^9.2.2" + escape-string-regexp "^4.0.0" + semver "^7.3.5" + solidity-comments-extractor "^0.0.7" + string-width "^4.2.2" + +prettier@2.8.8, prettier@^2.3.1, prettier@^2.8.3: + version "2.8.8" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" + integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== + +prettier@^1.14.3: + version "1.19.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb" + integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew== + +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" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +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== + +progress@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" + integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== + +"prompts@git+https://github.com/meshin-blox/prompts.git": + version "2.4.2" + resolved "git+https://github.com/meshin-blox/prompts.git#a22bdac044f6b32ba67adb4eacc2e58322512a2d" + dependencies: + kleur "^4.0.1" + sisteransi "^1.0.5" + +proper-lockfile@^4.1.1: + version "4.1.2" + resolved "https://registry.yarnpkg.com/proper-lockfile/-/proper-lockfile-4.1.2.tgz#c8b9de2af6b2f1601067f98e01ac66baa223141f" + integrity sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA== + dependencies: + graceful-fs "^4.2.4" + retry "^0.12.0" + signal-exit "^3.0.2" + +proxy-addr@~2.0.7: + version "2.0.7" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" + integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== + dependencies: + forwarded "0.2.0" + ipaddr.js "1.9.1" + +proxy-from-env@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + +prr@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" + integrity sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw== + +psl@^1.1.28: + version "1.15.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.15.0.tgz#bdace31896f1d97cec6a79e8224898ce93d974c6" + integrity sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w== + dependencies: + punycode "^2.3.1" + +public-encrypt@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" + integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== + dependencies: + bn.js "^4.1.0" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + parse-asn1 "^5.0.0" + randombytes "^2.0.1" + safe-buffer "^5.1.2" + +pump@^3.0.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.4.tgz#1f313430527fa8b905622ebd22fe1444e757ab3c" + integrity sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +punycode@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.0.tgz#5f863edc89b96db09074bad7947bf09056ca4e7d" + integrity sha512-Yxz2kRwT90aPiWEMHVYnEf4+rhwF1tBmmZ4KepCP+Wkium9JxtWnUm1nqGwpiAHr/tnTSeHqr3wb++jgSkXjhA== + +punycode@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + integrity sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ== + +punycode@^2.1.0, punycode@^2.1.1, punycode@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" + integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== + +qs@^6.11.1, qs@^6.12.3, qs@^6.9.4: + version "6.15.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.15.0.tgz#db8fd5d1b1d2d6b5b33adaf87429805f1909e7b3" + integrity sha512-mAZTtNCeetKMH+pSjrb76NAM8V9a05I9aBZOHztWy/UqcJdQYNsf59vrRKWnojAT9Y+GbIvoTBC++CPHqpDBhQ== + dependencies: + side-channel "^1.1.0" + +qs@~6.14.0: + version "6.14.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.14.2.tgz#b5634cf9d9ad9898e31fba3504e866e8efb6798c" + integrity sha512-V/yCWTTF7VJ9hIh18Ugr2zhJMP01MY7c5kh4J870L7imm6/DIzBsNLTXzMwUA3yZ5b/KBqLx8Kp3uRvd7xSe3Q== + dependencies: + side-channel "^1.1.0" + +qs@~6.5.2: + version "6.5.5" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.5.tgz#7c9442fc3f1c58bb52ac57ad09db63ba68916395" + integrity sha512-mzR4sElr1bfCaPJe7m8ilJ6ZXdDaGoObcYR0ZHSsktM/Lt21MVHj5De30GQH2eiZ1qGRTO7LCAzQsUeXTNexWQ== + +query-string@^5.0.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/query-string/-/query-string-5.1.1.tgz#a78c012b71c17e05f2e3fa2319dd330682efb3cb" + integrity sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw== + dependencies: + decode-uri-component "^0.2.0" + object-assign "^4.1.0" + strict-uri-encode "^1.0.0" + +queue-microtask@^1.2.2, queue-microtask@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +quick-lru@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" + integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== + +randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +randomfill@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" + integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== + dependencies: + randombytes "^2.0.5" + safe-buffer "^5.1.0" + +range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + +raw-body@^2.4.1, raw-body@~2.5.3: + version "2.5.3" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.3.tgz#11c6650ee770a7de1b494f197927de0c923822e2" + integrity sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA== + dependencies: + bytes "~3.1.2" + http-errors "~2.0.1" + iconv-lite "~0.4.24" + unpipe "~1.0.0" + +readable-stream@^2.3.8, 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== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readable-stream@^3.1.0, readable-stream@^3.4.0, readable-stream@^3.6.0: + version "3.6.2" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readdirp@^4.0.1: + version "4.1.2" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-4.1.2.tgz#eb85801435fbf2a7ee58f19e0921b068fc69948d" + integrity sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg== + +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + +rechoir@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" + integrity sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw== + dependencies: + resolve "^1.1.6" + +recursive-readdir@^2.2.2: + version "2.2.3" + resolved "https://registry.yarnpkg.com/recursive-readdir/-/recursive-readdir-2.2.3.tgz#e726f328c0d69153bcabd5c322d3195252379372" + integrity sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA== + dependencies: + minimatch "^3.0.5" + +reduce-flatten@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/reduce-flatten/-/reduce-flatten-2.0.0.tgz#734fd84e65f375d7ca4465c69798c25c9d10ae27" + integrity sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w== + +regexpp@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" + integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw== + +repeat-string@^1.0.0: + version "1.6.1" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + integrity sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w== + +request@^2.79.0, request@^2.85.0: + version "2.88.2" + resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" + integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.8.0" + caseless "~0.12.0" + combined-stream "~1.0.6" + extend "~3.0.2" + forever-agent "~0.6.1" + form-data "~2.3.2" + har-validator "~5.1.3" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.19" + oauth-sign "~0.9.0" + performance-now "^2.1.0" + qs "~6.5.2" + safe-buffer "^5.1.2" + tough-cookie "~2.5.0" + tunnel-agent "^0.6.0" + uuid "^3.3.2" + +require-directory@^2.1.1: + version "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: + 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== + +resolve-alpn@^1.0.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.2.1.tgz#b7adbdac3546aaaec20b45e7d8265927072726f9" + integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g== + +resolve-from@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" + integrity sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw== + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve@1.1.x: + version "1.1.7" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" + integrity sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg== + +resolve@1.17.0: + version "1.17.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" + integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== + dependencies: + path-parse "^1.0.6" + +resolve@^1.1.6, resolve@^1.22.1, resolve@^1.3.2: + version "1.22.11" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.11.tgz#aad857ce1ffb8bfa9b0b1ac29f1156383f68c262" + integrity sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ== + dependencies: + is-core-module "^2.16.1" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +responselike@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" + integrity sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ== + dependencies: + lowercase-keys "^1.0.0" + +responselike@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/responselike/-/responselike-2.0.1.tgz#9a0bc8fdc252f3fb1cca68b016591059ba1422bc" + integrity sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw== + dependencies: + lowercase-keys "^2.0.0" + +restore-cursor@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" + integrity sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q== + dependencies: + onetime "^2.0.0" + signal-exit "^3.0.2" + +retry@0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658" + integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg== + +retry@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" + integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== + +reusify@^1.0.4: + version "1.1.0" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.1.0.tgz#0fe13b9522e1473f51b558ee796e08f11f9b489f" + integrity sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw== + +rimraf@2.6.3: + version "2.6.3" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" + integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== + dependencies: + glob "^7.1.3" + +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" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +rimraf@^4.4.1: + version "4.4.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-4.4.1.tgz#bd33364f67021c5b79e93d7f4fa0568c7c21b755" + integrity sha512-Gk8NlF062+T9CqNGn6h4tls3k6T1+/nXdOcSZVikNVtlRdYpA7wRJJMoXmuvOnLW844rPjdQ7JgXCYM6PPC/og== + dependencies: + glob "^9.2.0" + +ripemd160@^2.0.0, ripemd160@^2.0.1, ripemd160@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.3.tgz#9be54e4ba5e3559c8eee06a25cd7648bbccdf5a8" + integrity sha512-5Di9UC0+8h1L6ZD2d7awM7E/T4uA1fJRlx6zk/NvdCCVEoAnFqvHmCuNeIKoCeIixBX/q8uM+6ycDvF8woqosA== + dependencies: + hash-base "^3.1.2" + inherits "^2.0.4" + +rlp@2.2.6: + version "2.2.6" + resolved "https://registry.yarnpkg.com/rlp/-/rlp-2.2.6.tgz#c80ba6266ac7a483ef1e69e8e2f056656de2fb2c" + integrity sha512-HAfAmL6SDYNWPUOJNrM500x4Thn4PZsEy5pijPh40U9WfNk0z15hUYzO9xVIMAdIHdFtD8CBDHd75Td1g36Mjg== + dependencies: + bn.js "^4.11.1" + +rlp@^2.2.3, rlp@^2.2.4: + version "2.2.7" + resolved "https://registry.yarnpkg.com/rlp/-/rlp-2.2.7.tgz#33f31c4afac81124ac4b283e2bd4d9720b30beaf" + integrity sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ== + dependencies: + bn.js "^5.2.0" + +rolldown@1.0.0-rc.12: + version "1.0.0-rc.12" + resolved "https://registry.yarnpkg.com/rolldown/-/rolldown-1.0.0-rc.12.tgz#e226fa74a4c21c71a13f8e44f778f81d58853ad5" + integrity sha512-yP4USLIMYrwpPHEFB5JGH1uxhcslv6/hL0OyvTuY+3qlOSJvZ7ntYnoWpehBxufkgN0cvXxppuTu5hHa/zPh+A== + dependencies: + "@oxc-project/types" "=0.122.0" + "@rolldown/pluginutils" "1.0.0-rc.12" + optionalDependencies: + "@rolldown/binding-android-arm64" "1.0.0-rc.12" + "@rolldown/binding-darwin-arm64" "1.0.0-rc.12" + "@rolldown/binding-darwin-x64" "1.0.0-rc.12" + "@rolldown/binding-freebsd-x64" "1.0.0-rc.12" + "@rolldown/binding-linux-arm-gnueabihf" "1.0.0-rc.12" + "@rolldown/binding-linux-arm64-gnu" "1.0.0-rc.12" + "@rolldown/binding-linux-arm64-musl" "1.0.0-rc.12" + "@rolldown/binding-linux-ppc64-gnu" "1.0.0-rc.12" + "@rolldown/binding-linux-s390x-gnu" "1.0.0-rc.12" + "@rolldown/binding-linux-x64-gnu" "1.0.0-rc.12" + "@rolldown/binding-linux-x64-musl" "1.0.0-rc.12" + "@rolldown/binding-openharmony-arm64" "1.0.0-rc.12" + "@rolldown/binding-wasm32-wasi" "1.0.0-rc.12" + "@rolldown/binding-win32-arm64-msvc" "1.0.0-rc.12" + "@rolldown/binding-win32-x64-msvc" "1.0.0-rc.12" + +rollup-plugin-visualizer@5.12.0: + 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.54.0: + version "4.54.0" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.54.0.tgz#930f4dfc41ff94d720006f9f62503612a6c319b8" + integrity sha512-3nk8Y3a9Ea8szgKhinMlGMhGMw89mqule3KWczxhIzqudyHdCIOHw8WJlj/r329fACjKLEh13ZSk7oE22kyeIw== + dependencies: + "@types/estree" "1.0.8" + optionalDependencies: + "@rollup/rollup-android-arm-eabi" "4.54.0" + "@rollup/rollup-android-arm64" "4.54.0" + "@rollup/rollup-darwin-arm64" "4.54.0" + "@rollup/rollup-darwin-x64" "4.54.0" + "@rollup/rollup-freebsd-arm64" "4.54.0" + "@rollup/rollup-freebsd-x64" "4.54.0" + "@rollup/rollup-linux-arm-gnueabihf" "4.54.0" + "@rollup/rollup-linux-arm-musleabihf" "4.54.0" + "@rollup/rollup-linux-arm64-gnu" "4.54.0" + "@rollup/rollup-linux-arm64-musl" "4.54.0" + "@rollup/rollup-linux-loong64-gnu" "4.54.0" + "@rollup/rollup-linux-ppc64-gnu" "4.54.0" + "@rollup/rollup-linux-riscv64-gnu" "4.54.0" + "@rollup/rollup-linux-riscv64-musl" "4.54.0" + "@rollup/rollup-linux-s390x-gnu" "4.54.0" + "@rollup/rollup-linux-x64-gnu" "4.54.0" + "@rollup/rollup-linux-x64-musl" "4.54.0" + "@rollup/rollup-openharmony-arm64" "4.54.0" + "@rollup/rollup-win32-arm64-msvc" "4.54.0" + "@rollup/rollup-win32-ia32-msvc" "4.54.0" + "@rollup/rollup-win32-x64-gnu" "4.54.0" + "@rollup/rollup-win32-x64-msvc" "4.54.0" + fsevents "~2.3.2" + +run-async@^2.2.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" + integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +rustbn.js@~0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/rustbn.js/-/rustbn.js-0.2.0.tgz#8082cb886e707155fd1cb6f23bd591ab8d55d0ca" + integrity sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA== + +rxjs@^6.4.0: + version "6.6.7" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9" + integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== + dependencies: + tslib "^1.9.0" + +safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.1, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +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" + +"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +sc-istanbul@^0.4.5: + version "0.4.6" + resolved "https://registry.yarnpkg.com/sc-istanbul/-/sc-istanbul-0.4.6.tgz#cf6784355ff2076f92d70d59047d71c13703e839" + integrity sha512-qJFF/8tW/zJsbyfh/iT/ZM5QNHE3CXxtLJbZsL+CzdJLBsPD7SedJZoUA4d8iAcN2IoMp/Dx80shOOd2x96X/g== + dependencies: + abbrev "1.0.x" + async "1.x" + escodegen "1.8.x" + esprima "2.7.x" + glob "^5.0.15" + handlebars "^4.0.1" + js-yaml "3.x" + mkdirp "0.5.x" + nopt "3.x" + once "1.x" + resolve "1.1.x" + supports-color "^3.1.0" + which "^1.1.1" + wordwrap "^1.0.0" + +scrypt-js@3.0.1, scrypt-js@^3.0.0, scrypt-js@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-3.0.1.tgz#d314a57c2aef69d1ad98a138a21fe9eafa9ee312" + integrity sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA== + +secp256k1@4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-4.0.3.tgz#c4559ecd1b8d3c1827ed2d1b94190d69ce267303" + integrity sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA== + dependencies: + elliptic "^6.5.4" + node-addon-api "^2.0.0" + node-gyp-build "^4.2.0" + +secp256k1@^4.0.1: + version "4.0.4" + resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-4.0.4.tgz#58f0bfe1830fe777d9ca1ffc7574962a8189f8ab" + integrity sha512-6JfvwvjUOn8F/jUoBY2Q1v5WY5XS+rj8qSe0v8Y4ezH4InLgTEeOOPQsRll9OV429Pvo6BCHGavIyJfr3TAhsw== + dependencies: + elliptic "^6.5.7" + node-addon-api "^5.0.0" + node-gyp-build "^4.2.0" + +seedrandom@3.0.5: + version "3.0.5" + resolved "https://registry.yarnpkg.com/seedrandom/-/seedrandom-3.0.5.tgz#54edc85c95222525b0c7a6f6b3543d8e0b3aa0a7" + integrity sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg== + +semaphore-async-await@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/semaphore-async-await/-/semaphore-async-await-1.5.1.tgz#857bef5e3644601ca4b9570b87e9df5ca12974fa" + integrity sha512-b/ptP11hETwYWpeilHXXQiV5UJNJl7ZWWooKRE5eBIYWoom6dZ0SluCIdCtKycsMtZgKWE01/qAw6jblw1YVhg== + +semver@^5.3.0, semver@^5.5.0, semver@^5.5.1: + version "5.7.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" + integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== + +semver@^6.3.0: + version "6.3.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== + +semver@^7.3.4, semver@^7.3.5, semver@^7.5.1, semver@^7.6.2: + version "7.7.4" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.4.tgz#28464e36060e991fa7a11d0279d2d3f3b57a7e8a" + integrity sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA== + +send@~0.19.0, send@~0.19.1: + version "0.19.2" + resolved "https://registry.yarnpkg.com/send/-/send-0.19.2.tgz#59bc0da1b4ea7ad42736fd642b1c4294e114ff29" + integrity sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg== + dependencies: + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + encodeurl "~2.0.0" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "~0.5.2" + http-errors "~2.0.1" + mime "1.6.0" + ms "2.1.3" + on-finished "~2.4.1" + range-parser "~1.2.1" + statuses "~2.0.2" + +serialize-javascript@6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" + integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== + dependencies: + randombytes "^2.1.0" + +serialize-javascript@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.2.tgz#defa1e055c83bf6d59ea805d8da862254eb6a6c2" + integrity sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g== + dependencies: + randombytes "^2.1.0" + +serve-static@~1.16.2: + version "1.16.3" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.16.3.tgz#a97b74d955778583f3862a4f0b841eb4d5d78cf9" + integrity sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA== + dependencies: + encodeurl "~2.0.0" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "~0.19.1" + +servify@^0.1.12: + version "0.1.12" + resolved "https://registry.yarnpkg.com/servify/-/servify-0.1.12.tgz#142ab7bee1f1d033b66d0707086085b17c06db95" + integrity sha512-/xE6GvsKKqyo1BAY+KxOWXcLpPsUUyji7Qg3bVD7hh1eRze5bR1uYiuDA/k3Gof1s9BTzQZEJK8sNcNGFIzeWw== + dependencies: + body-parser "^1.16.0" + cors "^2.8.1" + express "^4.14.0" + request "^2.79.0" + xhr "^2.3.3" + +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" + +setimmediate@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== + +setprototypeof@1.2.0, setprototypeof@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" + integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== + +sha.js@^2.4.0, sha.js@^2.4.12, sha.js@^2.4.8: + version "2.4.12" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.12.tgz#eb8b568bf383dfd1867a32c3f2b74eb52bdbf23f" + integrity sha512-8LzC5+bvI45BjpfXU8V5fdU2mfeKiQe1D1gIMn7XUlF3OTUrpdJpPPH4EMAnF0DsHHdSZqCdSss5qCmJKuiO3w== + dependencies: + inherits "^2.0.4" + safe-buffer "^5.2.1" + to-buffer "^1.2.0" + +sha1@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/sha1/-/sha1-1.1.1.tgz#addaa7a93168f393f19eb2b15091618e2700f848" + integrity sha512-dZBS6OrMjtgVkopB1Gmo4RQCDKiZsqcpAQpkV/aaj+FCrCg8r4I4qMkDPQjBgLIxlmu9k4nUbWq6ohXahOneYA== + dependencies: + charenc ">= 0.0.1" + crypt ">= 0.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" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + 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" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +shelljs@^0.8.3: + version "0.8.5" + resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.5.tgz#de055408d8361bed66c669d2f000538ced8ee20c" + integrity sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow== + dependencies: + glob "^7.0.0" + interpret "^1.0.0" + rechoir "^0.6.2" + +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.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" + integrity sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g== + +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== + +signal-exit@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" + integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== + +simple-concat@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" + integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== + +simple-get@^2.7.0: + version "2.8.2" + resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-2.8.2.tgz#5708fb0919d440657326cd5fe7d2599d07705019" + integrity sha512-Ijd/rV5o+mSBBs4F/x9oDPtTx9Zb6X9brmnXvMW4J7IR15ngi9q5xxqWBKU744jTZiaXtxaPL7uHG6vtN8kUkw== + dependencies: + decompress-response "^3.3.0" + once "^1.3.1" + simple-concat "^1.0.0" + +sisteransi@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" + integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +slice-ansi@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" + integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== + dependencies: + ansi-styles "^3.2.0" + astral-regex "^1.0.0" + is-fullwidth-code-point "^2.0.0" + +slice-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" + integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== + dependencies: + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" + +snappyjs@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/snappyjs/-/snappyjs-0.7.0.tgz#6096eac06382700ae7fdefa579dea5e2aa20f51c" + integrity sha512-u5iEEXkMe2EInQio6Wv9LWHOQYRDbD2O9hzS27GpT/lwfIQhTCnHCTqedqHIHe9ZcvQo+9au6vngQayipz1NYw== + +solc@0.8.15: + version "0.8.15" + resolved "https://registry.yarnpkg.com/solc/-/solc-0.8.15.tgz#d274dca4d5a8b7d3c9295d4cbdc9291ee1c52152" + integrity sha512-Riv0GNHNk/SddN/JyEuFKwbcWcEeho15iyupTSHw5Np6WuXA5D8kEHbyzDHi6sqmvLzu2l+8b1YmL8Ytple+8w== + dependencies: + command-exists "^1.2.8" + commander "^8.1.0" + follow-redirects "^1.12.1" + js-sha3 "0.8.0" + memorystream "^0.3.1" + semver "^5.5.0" + tmp "0.0.33" + +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 "^8.1.0" + follow-redirects "^1.12.1" + js-sha3 "0.8.0" + memorystream "^0.3.1" + semver "^5.5.0" + tmp "0.0.33" + +solc@0.8.6: + version "0.8.6" + resolved "https://registry.yarnpkg.com/solc/-/solc-0.8.6.tgz#e4341fa6780137df97b94a0cfbd59b3f2037d0e0" + integrity sha512-miiDaWdaUnD7A6Cktb/2ug9f+ajcOCDYRr7vgbPEsMoutSlBtp5rca57oMg8iHSuM7jilwdxePujWI/+rbNftQ== + dependencies: + command-exists "^1.2.8" + commander "3.0.2" + 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" + +solhint@3.4.1: + version "3.4.1" + resolved "https://registry.yarnpkg.com/solhint/-/solhint-3.4.1.tgz#8ea15b21c13d1be0b53fd46d605a24d0b36a0c46" + integrity sha512-pzZn2RlZhws1XwvLPVSsxfHrwsteFf5eySOhpAytzXwKQYbTCJV6z8EevYDiSVKMpWrvbKpEtJ055CuEmzp4Xg== + dependencies: + "@solidity-parser/parser" "^0.16.0" + ajv "^6.12.6" + antlr4 "^4.11.0" + ast-parents "^0.0.1" + chalk "^4.1.2" + commander "^10.0.0" + cosmiconfig "^8.0.0" + fast-diff "^1.2.0" + glob "^8.0.3" + ignore "^5.2.4" + js-yaml "^4.1.0" + lodash "^4.17.21" + pluralize "^8.0.0" + semver "^6.3.0" + strip-ansi "^6.0.1" + table "^6.8.1" + text-table "^0.2.0" + optionalDependencies: + prettier "^2.8.3" + +solhint@^2.0.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/solhint/-/solhint-2.3.1.tgz#6fee8fc2635112bf5812f7cba8359c14e9d9a491" + integrity sha512-wP/G+Dqj8LNWlCI9Mt6XiQRWQfZwv1rkZe/V+HKtip5SAZJVvp144PdH28KE45ZvR99Hhrp/Mujt74fSmXsFiw== + dependencies: + ajv "^6.6.1" + antlr4 "4.7.1" + chalk "^2.4.2" + commander "2.18.0" + cosmiconfig "^5.0.7" + eslint "^5.6.0" + fast-diff "^1.1.2" + glob "^7.1.3" + ignore "^4.0.6" + js-yaml "^3.12.0" + lodash "^4.17.11" + semver "^6.3.0" + optionalDependencies: + prettier "^1.14.3" + +solidifier@2.2.3: + version "2.2.3" + resolved "https://registry.yarnpkg.com/solidifier/-/solidifier-2.2.3.tgz#8f50b80bf0506eaa44ba04e4c289380614faa57c" + integrity sha512-5xpR931zT+DWu/xuLUtWjlABMuqE8jvk8hTxpBAXZBf9JQJzQo9eSZ5Sa3Rqwua4UJHOVNTdt8pzm9SuQWX07w== + dependencies: + "@solidity-parser/parser" "0.12.1" + +solidity-ast@^0.4.60: + version "0.4.62" + resolved "https://registry.yarnpkg.com/solidity-ast/-/solidity-ast-0.4.62.tgz#dda2cc377da4cbffe150d056610c186e35b6cc81" + integrity sha512-jSC7msQCkJXIzM8LlDjRZ5cif5w40g6THlXHFk3zchbL5dm3YLoBETvqPGo5KndYkftjhcs5kz1fnTu4d34lVQ== + +solidity-bytes-utils@0.8.4: + version "0.8.4" + resolved "https://registry.yarnpkg.com/solidity-bytes-utils/-/solidity-bytes-utils-0.8.4.tgz#646588b7031153770350f982665b8c9033f7dc26" + integrity sha512-/bjac5YR12i0plOKvGlhE51F5IWGP6rI8DJetCQlXcnwKWz/Hgf/vr+Qlk1BWz56xVcwVhmhCaDkTMnx5xvt0g== + +solidity-comments-extractor@^0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/solidity-comments-extractor/-/solidity-comments-extractor-0.0.7.tgz#99d8f1361438f84019795d928b931f4e5c39ca19" + integrity sha512-wciNMLg/Irp8OKGrh3S2tfvZiZ0NEyILfcRCXCD4mp7SgK/i9gzLfhY2hY7VMCQJ3kH9UB9BzNdibIVMchzyYw== + +solidity-coverage@0.8.14: + version "0.8.14" + resolved "https://registry.yarnpkg.com/solidity-coverage/-/solidity-coverage-0.8.14.tgz#db9bfcc10e3bc369fc074b35b267d665bcc6ae2e" + integrity sha512-ItAAObe5GaEOp20kXC2BZRnph+9P7Rtoqg2mQc2SXGEHgSDF2wWd1Wxz3ntzQWXkbCtIIGdJT918HG00cObwbA== + dependencies: + "@ethersproject/abi" "^5.0.9" + "@solidity-parser/parser" "^0.19.0" + chalk "^2.4.2" + death "^1.1.0" + difflib "^0.2.4" + fs-extra "^8.1.0" + ghost-testrpc "^0.0.2" + global-modules "^2.0.0" + globby "^10.0.1" + jsonschema "^1.2.4" + lodash "^4.17.21" + mocha "^10.2.0" + node-emoji "^1.10.0" + pify "^4.0.1" + recursive-readdir "^2.2.2" + sc-istanbul "^0.4.5" + semver "^7.3.4" + shelljs "^0.8.3" + web3-utils "^1.3.6" + +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" + integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map@^0.6.0, source-map@^0.6.1: + 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.6" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.6.tgz#a3658ab87e5b6429c8a1f3ba0083d4c61ca3ef02" + integrity sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ== + +source-map@~0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.2.0.tgz#dab73fbcfc2ba819b4de03bd6f6eaa48164b3f9d" + integrity sha512-CBdZ2oa/BHhS4xj5DlhjWNHcan57/5YuvfdLf17iVmIpd9KRm+DFLmC6nBNj+6Ua7Kt3TmOjDpQT1aTYOQtoUA== + dependencies: + amdefine ">=0.0.4" + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== + +sshpk@^1.7.0: + version "1.18.0" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.18.0.tgz#1663e55cddf4d688b86a46b77f0d5fe363aba028" + integrity sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ== + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + bcrypt-pbkdf "^1.0.0" + dashdash "^1.12.0" + ecc-jsbn "~0.1.1" + getpass "^0.1.1" + jsbn "~0.1.0" + safer-buffer "^2.0.2" + tweetnacl "~0.14.0" + +ssv-keys@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/ssv-keys/-/ssv-keys-1.1.0.tgz#bbd5f7c0c51cb16899938c8ea6aab543f1ef6963" + integrity sha512-nKxKbGkqhw3pPHfDvwOgOSD5IYLRx7WPxBJQRMorzv0q6FIFUl7T+sBbBzL0AHvv4H/BBNUFQyHBRSo6TIrRyA== + dependencies: + "@types/figlet" "^1.5.4" + "@types/underscore" "^1.11.4" + "@types/yargs" "^17.0.12" + argparse "^2.0.1" + assert "^2.0.0" + atob "^2.1.2" + bls-eth-wasm "^1.0.4" + bls-signatures "^0.2.5" + btoa "^1.2.1" + class-validator "^0.13.2" + colors "^1.4.0" + crypto "^1.0.1" + eth2-keystore-js "^1.0.8" + ethereumjs-util "^7.1.5" + ethereumjs-wallet "^1.0.1" + ethers "^5.7.2" + events "^3.3.0" + figlet "^1.5.2" + js-base64 "^3.7.2" + jsencrypt "3.2.1" + minimist "^1.2.6" + moment "^2.29.3" + node-jsencrypt "^1.0.0" + prompts "https://github.com/meshin-blox/prompts.git" + scrypt-js "^3.0.1" + semver "^7.5.1" + stream "^0.0.2" + underscore "^1.13.4" + web3 "1.7.3" + yargs "^17.5.1" + +"ssv-scanner@github:bloxapp/ssv-scanner#v1.0.5": + version "1.0.4" + resolved "https://codeload.github.com/bloxapp/ssv-scanner/tar.gz/45068c93b3de84495f6cfad2767787c91d98aa8f" + dependencies: + "@types/figlet" "^1.5.4" + argparse "^2.0.1" + cli-progress "^3.11.2" + ethers "^6.13.2" + figlet "^1.5.2" + +stackback@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/stackback/-/stackback-0.0.2.tgz#1ac8a0d9483848d1695e418b6d031a3c3ce68e3b" + integrity sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw== + +stacktrace-parser@^0.1.10: + version "0.1.11" + resolved "https://registry.yarnpkg.com/stacktrace-parser/-/stacktrace-parser-0.1.11.tgz#c7c08f9b29ef566b9a6f7b255d7db572f66fabc4" + integrity sha512-WjlahMgHmCJpqzU8bIBy4qtsZdU9lRlcZE3Lvyej6t4tuOuv1vk57OW3MBrj6hXBFx/nNoC9MPMTcr5YA7NQbg== + dependencies: + type-fest "^0.7.1" + +statuses@~2.0.1, statuses@~2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.2.tgz#8f75eecef765b5e1cfcdc080da59409ed424e382" + integrity sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw== + +std-env@^4.0.0-rc.1: + version "4.0.0" + resolved "https://registry.yarnpkg.com/std-env/-/std-env-4.0.0.tgz#ba3dc31c3a46bc5ba21138aa20a6a4ceb5bb9b7e" + integrity sha512-zUMPtQ/HBY3/50VbpkupYHbRroTRZJPRLvreamgErJVys0ceuzMkD44J/QjqhHjOzK42GQ3QZIeFG1OYfOtKqQ== + +stream@^0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/stream/-/stream-0.0.2.tgz#7f5363f057f6592c5595f00bc80a27f5cec1f0ef" + integrity sha512-gCq3NDI2P35B2n6t76YJuOp7d6cN/C7Rt0577l91wllh0sY9ZBuw9KaSGqH/b0hzn3CWWJbpbW0W0WvQ1H/Q7g== + dependencies: + emitter-component "^1.1.1" + +strict-uri-encode@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" + integrity sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ== + +string-format@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/string-format/-/string-format-2.0.0.tgz#f2df2e7097440d3b65de31b6d40d54c96eaffb9b" + integrity sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA== + +"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@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + +string-width@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" + integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== + dependencies: + emoji-regex "^7.0.1" + is-fullwidth-code-point "^2.0.0" + strip-ansi "^5.1.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: + 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@^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== + dependencies: + eastasianwidth "^0.2.0" + emoji-regex "^9.2.2" + strip-ansi "^7.0.1" + +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +"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== + dependencies: + ansi-regex "^5.0.1" + +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + integrity sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow== + dependencies: + ansi-regex "^3.0.0" + +strip-ansi@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" + integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== + dependencies: + ansi-regex "^4.1.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: + version "7.2.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.2.0.tgz#d22a269522836a627af8d04b5c3fd2c7fa3e32e3" + integrity sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w== + dependencies: + ansi-regex "^6.2.2" + +strip-hex-prefix@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz#0c5f155fef1151373377de9dbb588da05500e36f" + integrity sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A== + dependencies: + is-hex-prefixed "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" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +strip-json-comments@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== + +strnum@^1.0.5: + version "1.1.2" + resolved "https://registry.yarnpkg.com/strnum/-/strnum-1.1.2.tgz#57bca4fbaa6f271081715dbc9ed7cee5493e28e4" + integrity sha512-vrN+B7DBIoTTZjnPNewwhx6cBA/H+IS7rfW68n7XxC1y7uoiGQBxaKzqucGUgavX15dJgiGztLJ8vxuEzwqBdA== + +strnum@^2.2.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/strnum/-/strnum-2.2.2.tgz#f11fd94ab62b536ba2ecc615858f3747c2881b3f" + integrity sha512-DnR90I+jtXNSTXWdwrEy9FakW7UX+qUZg28gj5fk2vxxl7uS/3bpI4fjFYVmdK9etptYBPNkpahuQnEwhwECqA== + +supports-color@8.1.1, supports-color@^8.1.1: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + +supports-color@^3.1.0: + version "3.2.3" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" + integrity sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A== + dependencies: + has-flag "^1.0.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== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +swarm-js@^0.1.40: + version "0.1.42" + resolved "https://registry.yarnpkg.com/swarm-js/-/swarm-js-0.1.42.tgz#497995c62df6696f6e22372f457120e43e727979" + integrity sha512-BV7c/dVlA3R6ya1lMlSSNPLYrntt0LUq4YMgy3iwpCIc6rZnS5W2wUoctarZ5pXlpKtxDDf9hNziEkcfrxdhqQ== + dependencies: + bluebird "^3.5.0" + buffer "^5.0.5" + eth-lib "^0.1.26" + fs-extra "^4.0.2" + got "^11.8.5" + mime-types "^2.1.16" + mkdirp-promise "^5.0.1" + mock-fs "^4.1.0" + setimmediate "^1.0.5" + tar "^4.0.2" + xhr-request "^1.0.1" + +sync-fetch@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/sync-fetch/-/sync-fetch-0.5.2.tgz#65e7ae1133219938dc92eb19aa21d5eb79ebadec" + integrity sha512-6gBqqkHrYvkH65WI2bzrDwrIKmt3U10s4Exnz3dYuE5Ah62FIfNv/F63inrNhu2Nyh3GH5f42GKU3RrSJoaUyQ== + dependencies: + node-fetch "^2.6.1" + +table-layout@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/table-layout/-/table-layout-1.0.2.tgz#c4038a1853b0136d63365a734b6931cf4fad4a04" + integrity sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A== + dependencies: + array-back "^4.0.1" + deep-extend "~0.6.0" + typical "^5.2.0" + wordwrapjs "^4.0.0" + +table@^5.2.3: + version "5.4.6" + resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" + integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug== + dependencies: + ajv "^6.10.2" + lodash "^4.17.14" + slice-ansi "^2.1.0" + string-width "^3.0.0" + +table@^6.8.0, table@^6.8.1: + version "6.9.0" + resolved "https://registry.yarnpkg.com/table/-/table-6.9.0.tgz#50040afa6264141c7566b3b81d4d82c47a8668f5" + integrity sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A== + dependencies: + ajv "^8.0.1" + lodash.truncate "^4.4.2" + slice-ansi "^4.0.0" + string-width "^4.2.3" + strip-ansi "^6.0.1" + +tar@^4.0.2: + version "4.4.19" + resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.19.tgz#2e4d7263df26f2b914dee10c825ab132123742f3" + integrity sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA== + dependencies: + chownr "^1.1.4" + fs-minipass "^1.2.7" + minipass "^2.9.0" + minizlib "^1.3.3" + mkdirp "^0.5.5" + safe-buffer "^5.2.1" + yallist "^3.1.1" + +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== + +through@^2.3.6: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== + +timed-out@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" + integrity sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA== + +tiny-invariant@^1.3.1: + version "1.3.3" + resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.3.3.tgz#46680b7a873a0d5d10005995eb90a70d74d60127" + integrity sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg== + +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== + +tinyexec@^1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/tinyexec/-/tinyexec-1.0.4.tgz#6c60864fe1d01331b2f17c6890f535d7e5385408" + integrity sha512-u9r3uZC0bdpGOXtlxUIdwf9pkmvhqJdrVCH9fapQtgy/OeTTMZ1nqH7agtvEfmGui6e1XxjcdrlxvxJvc3sMqw== + +tinyglobby@^0.2.15, tinyglobby@^0.2.6: + version "0.2.15" + resolved "https://registry.yarnpkg.com/tinyglobby/-/tinyglobby-0.2.15.tgz#e228dd1e638cea993d2fdb4fcd2d4602a79951c2" + integrity sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ== + dependencies: + fdir "^6.5.0" + picomatch "^4.0.3" + +tinyrainbow@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/tinyrainbow/-/tinyrainbow-3.1.0.tgz#1d8a623893f95cf0a2ddb9e5d11150e191409421" + integrity sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw== + +tmp@0.0.33, tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== + dependencies: + os-tmpdir "~1.0.2" + +to-buffer@^1.2.0, to-buffer@^1.2.1, to-buffer@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/to-buffer/-/to-buffer-1.2.2.tgz#ffe59ef7522ada0a2d1cb5dfe03bb8abc3cdc133" + integrity sha512-db0E3UJjcFhpDhAF4tLo03oli3pwl3dbnzXOUIlRKrp+ldk/VUxzpWYZENsw2SZiuBjHAk7DfB0VU7NKdpb6sw== + dependencies: + isarray "^2.0.5" + safe-buffer "^5.2.1" + typed-array-buffer "^1.0.3" + +to-readable-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771" + integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q== + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +toidentifier@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" + integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== + +tough-cookie@~2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" + integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== + dependencies: + psl "^1.1.28" + punycode "^2.1.1" + +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== + +ts-command-line-args@^2.2.0: + version "2.5.1" + resolved "https://registry.yarnpkg.com/ts-command-line-args/-/ts-command-line-args-2.5.1.tgz#e64456b580d1d4f6d948824c274cf6fa5f45f7f0" + integrity sha512-H69ZwTw3rFHb5WYpQya40YAX2/w7Ut75uUECbgBIsLmM+BNuYnxsltfyyLMxy6sEeKxgijLTnQtLd0nKd6+IYw== + dependencies: + chalk "^4.1.0" + command-line-args "^5.1.1" + command-line-usage "^6.1.0" + string-format "^2.0.0" + +ts-essentials@^7.0.1: + version "7.0.3" + resolved "https://registry.yarnpkg.com/ts-essentials/-/ts-essentials-7.0.3.tgz#686fd155a02133eedcc5362dc8b5056cde3e5a38" + integrity sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ== + +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@^1.11.1, tslib@^1.13.0, tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3: + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tslib@^2.3.1, tslib@^2.4.0, tslib@^2.6.0, tslib@^2.6.2: + version "2.8.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" + integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== + +tslint-config-prettier@^1.18.0: + version "1.18.0" + resolved "https://registry.yarnpkg.com/tslint-config-prettier/-/tslint-config-prettier-1.18.0.tgz#75f140bde947d35d8f0d238e0ebf809d64592c37" + integrity sha512-xPw9PgNPLG3iKRxmK7DWr+Ea/SzrvfHtjFt5LBl61gk2UBG/DB9kCXRjv+xyIU1rUtnayLeMUVJBcMX8Z17nDg== + +tslint@^6.1.3: + version "6.1.3" + resolved "https://registry.yarnpkg.com/tslint/-/tslint-6.1.3.tgz#5c23b2eccc32487d5523bd3a470e9aa31789d904" + integrity sha512-IbR4nkT96EQOvKE2PW/djGz8iGNeJ4rF2mBfiYaR/nvUWYKJhLwimoJKgjIFEIDibBtOevj7BqCRL4oHeWWUCg== + dependencies: + "@babel/code-frame" "^7.0.0" + builtin-modules "^1.1.1" + chalk "^2.3.0" + commander "^2.12.1" + diff "^4.0.1" + glob "^7.1.1" + js-yaml "^3.13.1" + minimatch "^3.0.4" + mkdirp "^0.5.3" + resolve "^1.3.2" + semver "^5.3.0" + tslib "^1.13.0" + tsutils "^2.29.0" + +tsort@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/tsort/-/tsort-0.0.1.tgz#e2280f5e817f8bf4275657fd0f9aebd44f5a2786" + integrity sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw== + +tsutils@^2.29.0: + version "2.29.0" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.29.0.tgz#32b488501467acbedd4b85498673a0812aca0b99" + integrity sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA== + dependencies: + tslib "^1.8.1" + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== + dependencies: + safe-buffer "^5.0.1" + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + integrity sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA== + +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + +type-check@~0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + integrity sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg== + dependencies: + prelude-ls "~1.1.2" + +type-detect@^4.0.0, type-detect@^4.0.5, type-detect@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.1.0.tgz#deb2453e8f08dcae7ae98c626b13dddb0155906c" + integrity sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw== + +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + +type-fest@^0.21.3: + version "0.21.3" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== + +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-is@~1.6.18: + version "1.6.18" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + +type@^2.7.2: + version "2.7.3" + resolved "https://registry.yarnpkg.com/type/-/type-2.7.3.tgz#436981652129285cc3ba94f392886c2637ea0486" + integrity sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ== + +typechain@^8.0.0: + version "8.3.2" + resolved "https://registry.yarnpkg.com/typechain/-/typechain-8.3.2.tgz#1090dd8d9c57b6ef2aed3640a516bdbf01b00d73" + integrity sha512-x/sQYr5w9K7yv3es7jo4KTX05CLxOf7TRWwoHlrjRh8H82G64g+k7VuWPJlgMo6qrjfCulOdfBjiaDtmhFYD/Q== + dependencies: + "@types/prettier" "^2.1.1" + debug "^4.3.1" + fs-extra "^7.0.0" + glob "7.1.7" + js-sha3 "^0.8.0" + lodash "^4.17.15" + mkdirp "^1.0.4" + prettier "^2.3.1" + ts-command-line-args "^2.2.0" + ts-essentials "^7.0.1" + +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" + +typedarray-to-buffer@^3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" + integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== + dependencies: + is-typedarray "^1.0.0" + +typescript@^4.3.2: + version "4.9.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" + integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== + +typical@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/typical/-/typical-4.0.0.tgz#cbeaff3b9d7ae1e2bbfaf5a4e6f11eccfde94fc4" + integrity sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw== + +typical@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/typical/-/typical-5.2.0.tgz#4daaac4f2b5315460804f0acf6cb69c52bb93066" + integrity sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg== + +uglify-js@^3.1.4: + version "3.19.3" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.19.3.tgz#82315e9bbc6f2b25888858acd1fff8441035b77f" + integrity sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ== + +ultron@~1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c" + integrity sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og== + +underscore@^1.13.4: + version "1.13.8" + resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.13.8.tgz#a93a21186c049dbf0e847496dba72b7bd8c1e92b" + integrity sha512-DXtD3ZtEQzc7M8m4cXotyHR+FAS18C64asBYY5vqZexfYryNNnDc02W4hKg3rdQuqOYas1jkseX0+nZXjTXnvQ== + +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@~7.18.0: + version "7.18.2" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-7.18.2.tgz#29357a89e7b7ca4aef3bf0fd3fd0cd73884229e9" + integrity sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w== + +undici@^5.14.0: + version "5.29.0" + resolved "https://registry.yarnpkg.com/undici/-/undici-5.29.0.tgz#419595449ae3f2cdcba3580a2e8903399bd1f5a3" + integrity sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg== + dependencies: + "@fastify/busboy" "^2.0.0" + +unfetch@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/unfetch/-/unfetch-4.2.0.tgz#7e21b0ef7d363d8d9af0fb929a5555f6ef97a3be" + integrity sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA== + +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + +universalify@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" + integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== + +unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +url-parse-lax@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" + integrity sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ== + dependencies: + prepend-http "^2.0.0" + +url-set-query@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/url-set-query/-/url-set-query-1.0.0.tgz#016e8cfd7c20ee05cafe7795e892bd0702faa339" + integrity sha512-3AChu4NiXquPfeckE5R5cGdiHCMWJx1dwCWOmWIL4KHAziJNOFIYJlpGFeKDvwLPHovZRCxK3cYlwzqI9Vp+Gg== + +url@^0.11.0: + version "0.11.4" + resolved "https://registry.yarnpkg.com/url/-/url-0.11.4.tgz#adca77b3562d56b72746e76b330b7f27b6721f3c" + integrity sha512-oCwdVC7mTuWiPyjLUz/COz5TLk6wgp0RCsN+wHZ2Ekneac9w8uuV0njcbbie2ME+Vs+d6duwmYuR3HgQXs1fOg== + dependencies: + punycode "^1.4.1" + qs "^6.12.3" + +utf-8-validate@5.0.7: + version "5.0.7" + resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.7.tgz#c15a19a6af1f7ad9ec7ddc425747ca28c3644922" + integrity sha512-vLt1O5Pp+flcArHGIyKEQq883nBt8nN8tVBcoL0qUXj2XT1n7p70yGIq2VK98I5FdZ1YHc0wk/koOnHjnXWk1Q== + dependencies: + node-gyp-build "^4.3.0" + +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" + +utf8@3.0.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.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + +util@^0.12.0, util@^0.12.5: + version "0.12.5" + resolved "https://registry.yarnpkg.com/util/-/util-0.12.5.tgz#5f17a6059b73db61a875668781a1c2b136bd6fbc" + integrity sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA== + dependencies: + inherits "^2.0.3" + is-arguments "^1.0.4" + is-generator-function "^1.0.7" + is-typed-array "^1.1.3" + which-typed-array "^1.1.2" + +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== + +uuid@3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" + integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA== + +uuid@9.0.1, uuid@^9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30" + integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== + +uuid@^3.3.2: + version "3.4.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" + integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== + +uuid@^8.3.2: + version "8.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + +validator@^13.7.0: + version "13.15.26" + resolved "https://registry.yarnpkg.com/validator/-/validator-13.15.26.tgz#36c3deeab30e97806a658728a155c66fcaa5b944" + integrity sha512-spH26xU080ydGggxRyR1Yhcbgx+j3y5jbNXk/8L+iRvdIEQ4uTRH2Sgf2dokud6Q4oAtsbNvJ1Ft+9xmm6IZcA== + +varint@^5.0.0: + version "5.0.2" + resolved "https://registry.yarnpkg.com/varint/-/varint-5.0.2.tgz#5b47f8a947eb668b848e034dcfa87d0ff8a7f7a4" + integrity sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow== + +vary@^1, vary@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== + +verror@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + integrity sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw== + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + +viem@^2.27.0: + version "2.47.6" + resolved "https://registry.yarnpkg.com/viem/-/viem-2.47.6.tgz#0249c166d5e0555074ffd3d320f2be2057551796" + integrity sha512-zExmbI99NGvMdYa7fmqSTLgkwh48dmhgEqFrUgkpL4kfG4XkVefZ8dZqIKVUhZo6Uhf0FrrEXOsHm9LUyIvI2Q== + dependencies: + "@noble/curves" "1.9.1" + "@noble/hashes" "1.8.0" + "@scure/bip32" "1.7.0" + "@scure/bip39" "1.6.0" + abitype "1.2.3" + isows "1.0.7" + ox "0.14.7" + ws "8.18.3" + +"vite@^6.0.0 || ^7.0.0 || ^8.0.0": + version "8.0.3" + resolved "https://registry.yarnpkg.com/vite/-/vite-8.0.3.tgz#036d9e3b077ff57b128660b3e3a5d2d12bac9b42" + integrity sha512-B9ifbFudT1TFhfltfaIPgjo9Z3mDynBTJSUYxTjOQruf/zHH+ezCQKcoqO+h7a9Pw9Nm/OtlXAiGT1axBgwqrQ== + dependencies: + lightningcss "^1.32.0" + picomatch "^4.0.4" + postcss "^8.5.8" + rolldown "1.0.0-rc.12" + tinyglobby "^0.2.15" + optionalDependencies: + fsevents "~2.3.3" + +"vitest@catalog:": + version "4.1.2" + resolved "https://registry.yarnpkg.com/vitest/-/vitest-4.1.2.tgz#3f7b36838ddf1067160489bea9a21ef465496265" + integrity sha512-xjR1dMTVHlFLh98JE3i/f/WePqJsah4A0FK9cc8Ehp9Udk0AZk6ccpIZhh1qJ/yxVWRZ+Q54ocnD8TXmkhspGg== + dependencies: + "@vitest/expect" "4.1.2" + "@vitest/mocker" "4.1.2" + "@vitest/pretty-format" "4.1.2" + "@vitest/runner" "4.1.2" + "@vitest/snapshot" "4.1.2" + "@vitest/spy" "4.1.2" + "@vitest/utils" "4.1.2" + es-module-lexer "^2.0.0" + expect-type "^1.3.0" + magic-string "^0.30.21" + obug "^2.1.1" + pathe "^2.0.3" + picomatch "^4.0.3" + std-env "^4.0.0-rc.1" + tinybench "^2.9.0" + tinyexec "^1.0.2" + tinyglobby "^0.2.15" + tinyrainbow "^3.1.0" + vite "^6.0.0 || ^7.0.0 || ^8.0.0" + why-is-node-running "^2.3.0" + +web3-bzz@1.7.3: + version "1.7.3" + resolved "https://registry.yarnpkg.com/web3-bzz/-/web3-bzz-1.7.3.tgz#6860a584f748838af5e3932b6798e024ab8ae951" + integrity sha512-y2i2IW0MfSqFc1JBhBSQ59Ts9xE30hhxSmLS13jLKWzie24/An5dnoGarp2rFAy20tevJu1zJVPYrEl14jiL5w== + dependencies: + "@types/node" "^12.12.6" + got "9.6.0" + swarm-js "^0.1.40" + +web3-core-helpers@1.7.3: + version "1.7.3" + resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.7.3.tgz#9a8d7830737d0e9c48694b244f4ce0f769ba67b9" + integrity sha512-qS2t6UKLhRV/6C7OFHtMeoHphkcA+CKUr2vfpxy4hubs3+Nj28K9pgiqFuvZiXmtEEwIAE2A28GBOC3RdcSuFg== + dependencies: + web3-eth-iban "1.7.3" + web3-utils "1.7.3" + +web3-core-method@1.7.3: + version "1.7.3" + resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.7.3.tgz#eb2a4f140448445c939518c0fa6216b3d265c5e9" + integrity sha512-SeF8YL/NVFbj/ddwLhJeS0io8y7wXaPYA2AVT0h2C2ESYkpvOtQmyw2Bc3aXxBmBErKcbOJjE2ABOKdUmLSmMA== + dependencies: + "@ethersproject/transactions" "^5.0.0-beta.135" + web3-core-helpers "1.7.3" + web3-core-promievent "1.7.3" + web3-core-subscriptions "1.7.3" + web3-utils "1.7.3" + +web3-core-promievent@1.7.3: + version "1.7.3" + resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.7.3.tgz#2d0eeef694569b61355054c721578f67df925b80" + integrity sha512-+mcfNJLP8h2JqcL/UdMGdRVfTdm+bsoLzAFtLpazE4u9kU7yJUgMMAqnK59fKD3Zpke3DjaUJKwz1TyiGM5wig== + dependencies: + eventemitter3 "4.0.4" + +web3-core-requestmanager@1.7.3: + version "1.7.3" + resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.7.3.tgz#226f79d16e546c9157d00908de215e984cae84e9" + integrity sha512-bC+jeOjPbagZi2IuL1J5d44f3zfPcgX+GWYUpE9vicNkPUxFBWRG+olhMo7L+BIcD57cTmukDlnz+1xBULAjFg== + dependencies: + util "^0.12.0" + web3-core-helpers "1.7.3" + web3-providers-http "1.7.3" + web3-providers-ipc "1.7.3" + web3-providers-ws "1.7.3" + +web3-core-subscriptions@1.7.3: + version "1.7.3" + resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.7.3.tgz#ca456dfe2c219a0696c5cf34c13b03c3599ec5d5" + integrity sha512-/i1ZCLW3SDxEs5mu7HW8KL4Vq7x4/fDXY+yf/vPoDljlpvcLEOnI8y9r7om+0kYwvuTlM6DUHHafvW0221TyRQ== + dependencies: + eventemitter3 "4.0.4" + web3-core-helpers "1.7.3" + +web3-core@1.7.3: + version "1.7.3" + resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.7.3.tgz#2ef25c4cc023997f43af9f31a03b571729ff3cda" + integrity sha512-4RNxueGyevD1XSjdHE57vz/YWRHybpcd3wfQS33fgMyHZBVLFDNwhn+4dX4BeofVlK/9/cmPAokLfBUStZMLdw== + dependencies: + "@types/bn.js" "^4.11.5" + "@types/node" "^12.12.6" + bignumber.js "^9.0.0" + web3-core-helpers "1.7.3" + web3-core-method "1.7.3" + web3-core-requestmanager "1.7.3" + web3-utils "1.7.3" + +web3-eth-abi@1.7.3: + version "1.7.3" + resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.7.3.tgz#2a1123c7252c37100eecd0b1fb2fb2c51366071f" + integrity sha512-ZlD8DrJro0ocnbZViZpAoMX44x5aYAb73u2tMq557rMmpiluZNnhcCYF/NnVMy6UIkn7SF/qEA45GXA1ne6Tnw== + dependencies: + "@ethersproject/abi" "5.0.7" + web3-utils "1.7.3" + +web3-eth-accounts@1.7.3: + version "1.7.3" + resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.7.3.tgz#cd1789000f13ed3c438e96b3e80ee7be8d3f1a9b" + integrity sha512-aDaWjW1oJeh0LeSGRVyEBiTe/UD2/cMY4dD6pQYa8dOhwgMtNQjxIQ7kacBBXe7ZKhjbIFZDhvXN4mjXZ82R2Q== + dependencies: + "@ethereumjs/common" "^2.5.0" + "@ethereumjs/tx" "^3.3.2" + crypto-browserify "3.12.0" + eth-lib "0.2.8" + ethereumjs-util "^7.0.10" + scrypt-js "^3.0.1" + uuid "3.3.2" + web3-core "1.7.3" + web3-core-helpers "1.7.3" + web3-core-method "1.7.3" + web3-utils "1.7.3" + +web3-eth-contract@1.7.3: + version "1.7.3" + resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.7.3.tgz#c4efc118ed7adafbc1270b633f33e696a39c7fc7" + integrity sha512-7mjkLxCNMWlQrlfM/MmNnlKRHwFk5XrZcbndoMt3KejcqDP6dPHi2PZLutEcw07n/Sk8OMpSamyF3QiGfmyRxw== + dependencies: + "@types/bn.js" "^4.11.5" + web3-core "1.7.3" + web3-core-helpers "1.7.3" + web3-core-method "1.7.3" + web3-core-promievent "1.7.3" + web3-core-subscriptions "1.7.3" + web3-eth-abi "1.7.3" + web3-utils "1.7.3" + +web3-eth-ens@1.7.3: + version "1.7.3" + resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-1.7.3.tgz#ebc56a4dc7007f4f899259bbae1237d3095e2f3f" + integrity sha512-q7+hFGHIc0mBI3LwgRVcLCQmp6GItsWgUtEZ5bjwdjOnJdbjYddm7PO9RDcTDQ6LIr7hqYaY4WTRnDHZ6BEt5Q== + dependencies: + content-hash "^2.5.2" + eth-ens-namehash "2.0.8" + web3-core "1.7.3" + web3-core-helpers "1.7.3" + web3-core-promievent "1.7.3" + web3-eth-abi "1.7.3" + web3-eth-contract "1.7.3" + web3-utils "1.7.3" + +web3-eth-iban@1.7.3: + version "1.7.3" + resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.7.3.tgz#47433a73380322bba04e17b91fccd4a0e63a390a" + integrity sha512-1GPVWgajwhh7g53mmYDD1YxcftQniIixMiRfOqlnA1w0mFGrTbCoPeVaSQ3XtSf+rYehNJIZAUeDBnONVjXXmg== + dependencies: + bn.js "^4.11.9" + web3-utils "1.7.3" + +web3-eth-personal@1.7.3: + version "1.7.3" + resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.7.3.tgz#ca2464dca356d4335aa8141cf75a6947f10f45a6" + integrity sha512-iTLz2OYzEsJj2qGE4iXC1Gw+KZN924fTAl0ESBFs2VmRhvVaM7GFqZz/wx7/XESl3GVxGxlRje3gNK0oGIoYYQ== + dependencies: + "@types/node" "^12.12.6" + web3-core "1.7.3" + web3-core-helpers "1.7.3" + web3-core-method "1.7.3" + web3-net "1.7.3" + web3-utils "1.7.3" + +web3-eth@1.7.3: + version "1.7.3" + resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.7.3.tgz#9e92785ea18d682548b6044551abe7f2918fc0b5" + integrity sha512-BCIRMPwaMlTCbswXyGT6jj9chCh9RirbDFkPtvqozfQ73HGW7kP78TXXf9+Xdo1GjutQfxi/fQ9yPdxtDJEpDA== + dependencies: + web3-core "1.7.3" + web3-core-helpers "1.7.3" + web3-core-method "1.7.3" + web3-core-subscriptions "1.7.3" + web3-eth-abi "1.7.3" + web3-eth-accounts "1.7.3" + web3-eth-contract "1.7.3" + web3-eth-ens "1.7.3" + web3-eth-iban "1.7.3" + web3-eth-personal "1.7.3" + web3-net "1.7.3" + web3-utils "1.7.3" + +web3-net@1.7.3: + version "1.7.3" + resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.7.3.tgz#54e35bcc829fdc40cf5001a3870b885d95069810" + integrity sha512-zAByK0Qrr71k9XW0Adtn+EOuhS9bt77vhBO6epAeQ2/VKl8rCGLAwrl3GbeEl7kWa8s/su72cjI5OetG7cYR0g== + dependencies: + web3-core "1.7.3" + web3-core-method "1.7.3" + web3-utils "1.7.3" + +web3-providers-http@1.7.3: + version "1.7.3" + resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.7.3.tgz#8ea5e39f6ceee0b5bc4e45403fae75cad8ff4cf7" + integrity sha512-TQJfMsDQ5Uq9zGMYlu7azx1L7EvxW+Llks3MaWn3cazzr5tnrDbGh6V17x6LN4t8tFDHWx0rYKr3mDPqyTjOZw== + dependencies: + web3-core-helpers "1.7.3" + xhr2-cookies "1.1.0" + +web3-providers-ipc@1.7.3: + version "1.7.3" + resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.7.3.tgz#a34872103a8d37a03795fa2f9b259e869287dcaa" + integrity sha512-Z4EGdLKzz6I1Bw+VcSyqVN4EJiT2uAro48Am1eRvxUi4vktGoZtge1ixiyfrRIVb6nPe7KnTFl30eQBtMqS0zA== + dependencies: + oboe "2.1.5" + web3-core-helpers "1.7.3" + +web3-providers-ws@1.7.3: + version "1.7.3" + resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.7.3.tgz#87564facc47387c9004a043a6686e4881ed6acfe" + integrity sha512-PpykGbkkkKtxPgv7U4ny4UhnkqSZDfLgBEvFTXuXLAngbX/qdgfYkhIuz3MiGplfL7Yh93SQw3xDjImXmn2Rgw== + dependencies: + eventemitter3 "4.0.4" + web3-core-helpers "1.7.3" + websocket "^1.0.32" + +web3-shh@1.7.3: + version "1.7.3" + resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.7.3.tgz#84e10adf628556798244b58f73cda1447bb7075e" + integrity sha512-bQTSKkyG7GkuULdZInJ0osHjnmkHij9tAySibpev1XjYdjLiQnd0J9YGF4HjvxoG3glNROpuCyTaRLrsLwaZuw== + dependencies: + web3-core "1.7.3" + web3-core-method "1.7.3" + web3-core-subscriptions "1.7.3" + web3-net "1.7.3" + +web3-utils@1.7.3: + version "1.7.3" + resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.7.3.tgz#b214d05f124530d8694ad364509ac454d05f207c" + integrity sha512-g6nQgvb/bUpVUIxJE+ezVN+rYwYmlFyMvMIRSuqpi1dk6ApDD00YNArrk7sPcZnjvxOJ76813Xs2vIN2rgh4lg== + dependencies: + bn.js "^4.11.9" + ethereum-bloom-filters "^1.0.6" + ethereumjs-util "^7.1.0" + ethjs-unit "0.1.6" + number-to-bn "1.7.0" + randombytes "^2.1.0" + utf8 "3.0.0" + +web3-utils@^1.3.6: + version "1.10.4" + resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.10.4.tgz#0daee7d6841641655d8b3726baf33b08eda1cbec" + integrity sha512-tsu8FiKJLk2PzhDl9fXbGUWTkkVXYhtTA+SmEFkKft+9BgwLxfCRpU96sWv7ICC8zixBNd3JURVoiR3dUXgP8A== + 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" + +web3@1.7.3: + version "1.7.3" + resolved "https://registry.yarnpkg.com/web3/-/web3-1.7.3.tgz#30fe786338b2cc775881cb28c056ee5da4be65b8" + integrity sha512-UgBvQnKIXncGYzsiGacaiHtm0xzQ/JtGqcSO/ddzQHYxnNuwI72j1Pb4gskztLYihizV9qPNQYHMSCiBlStI9A== + dependencies: + web3-bzz "1.7.3" + web3-core "1.7.3" + web3-eth "1.7.3" + web3-eth-personal "1.7.3" + web3-net "1.7.3" + web3-shh "1.7.3" + web3-utils "1.7.3" + +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== + +websocket@^1.0.32: + version "1.0.35" + resolved "https://registry.yarnpkg.com/websocket/-/websocket-1.0.35.tgz#374197207d7d4cc4c36cbf8a1bb886ee52a07885" + integrity sha512-/REy6amwPZl44DDzvRCkaI1q1bIiQB0mEFQLUrhz3z2EK91cp3n72rAjUlrTP0zV22HJIUOVHQGPxhFRjxjt+Q== + dependencies: + bufferutil "^4.0.1" + debug "^2.2.0" + es5-ext "^0.10.63" + typedarray-to-buffer "^3.1.5" + utf-8-validate "^5.0.2" + yaeti "^0.0.6" + +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + +which-typed-array@^1.1.16, which-typed-array@^1.1.2: + version "1.1.20" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.20.tgz#3fdb7adfafe0ea69157b1509f3a1cd892bd1d122" + integrity sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg== + dependencies: + available-typed-arrays "^1.0.7" + call-bind "^1.0.8" + call-bound "^1.0.4" + for-each "^0.3.5" + get-proto "^1.0.1" + gopd "^1.2.0" + has-tostringtag "^1.0.2" + +which@^1.1.1, which@^1.2.9, which@^1.3.1: + 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" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +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" + +widest-line@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca" + integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg== + dependencies: + string-width "^4.0.0" + +word-wrap@^1.2.5, word-wrap@~1.2.3: + version "1.2.5" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" + integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== + +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== + +wordwrapjs@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/wordwrapjs/-/wordwrapjs-4.0.1.tgz#d9790bccfb110a0fc7836b5ebce0937b37a8b98f" + integrity sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA== + dependencies: + reduce-flatten "^2.0.0" + typical "^5.2.0" + +workerpool@6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.1.tgz#46fc150c17d826b86a008e5a4508656777e9c343" + integrity sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw== + +workerpool@^6.5.1: + version "6.5.1" + resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.5.1.tgz#060f73b39d0caf97c6db64da004cd01b4c099544" + integrity sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA== + +"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== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.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" + integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== + dependencies: + ansi-styles "^6.1.0" + string-width "^5.0.1" + strip-ansi "^7.0.1" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +write@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" + integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig== + dependencies: + mkdirp "^0.5.1" + +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.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.18.3: + version "8.18.3" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.3.tgz#b56b88abffde62791c639170400c93dcb0c95472" + integrity sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg== + +ws@^3.0.0: + version "3.3.3" + resolved "https://registry.yarnpkg.com/ws/-/ws-3.3.3.tgz#f1cf84fe2d5e901ebce94efaece785f187a228f2" + integrity sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA== + dependencies: + async-limiter "~1.0.0" + safe-buffer "~5.1.0" + ultron "~1.1.0" + +ws@^7.4.6: + version "7.5.10" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.10.tgz#58b5c20dc281633f6c19113f39b349bd8bd558d9" + integrity sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ== + +xhr-request-promise@^0.1.2: + version "0.1.3" + resolved "https://registry.yarnpkg.com/xhr-request-promise/-/xhr-request-promise-0.1.3.tgz#2d5f4b16d8c6c893be97f1a62b0ed4cf3ca5f96c" + integrity sha512-YUBytBsuwgitWtdRzXDDkWAXzhdGB8bYm0sSzMPZT7Z2MBjMSTHFsyCT1yCRATY+XC69DUrQraRAEgcoCRaIPg== + dependencies: + xhr-request "^1.1.0" + +xhr-request@^1.0.1, xhr-request@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/xhr-request/-/xhr-request-1.1.0.tgz#f4a7c1868b9f198723444d82dcae317643f2e2ed" + integrity sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA== + dependencies: + buffer-to-arraybuffer "^0.0.5" + object-assign "^4.1.1" + query-string "^5.0.1" + simple-get "^2.7.0" + timed-out "^4.0.1" + url-set-query "^1.0.0" + xhr "^2.0.4" + +xhr2-cookies@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/xhr2-cookies/-/xhr2-cookies-1.1.0.tgz#7d77449d0999197f155cb73b23df72505ed89d48" + integrity sha512-hjXUA6q+jl/bd8ADHcVfFsSPIf+tyLIjuO9TwJC9WI6JP2zKcS7C+p56I9kCLLsaCiNT035iYvEUUzdEFj/8+g== + dependencies: + cookiejar "^2.1.1" + +xhr@^2.0.4, xhr@^2.3.3: + version "2.6.0" + resolved "https://registry.yarnpkg.com/xhr/-/xhr-2.6.0.tgz#b69d4395e792b4173d6b7df077f0fc5e4e2b249d" + integrity sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA== + dependencies: + global "~4.4.0" + is-function "^1.0.1" + parse-headers "^2.0.0" + xtend "^4.0.0" + +xtend@^4.0.0, xtend@^4.0.1, xtend@^4.0.2, xtend@~4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + +yaeti@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/yaeti/-/yaeti-0.0.6.tgz#f26f484d72684cf42bedfb76970aa1608fbf9577" + integrity sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug== + +yallist@^3.0.0, yallist@^3.0.2, yallist@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + +yargs-parser@20.2.4: + version "20.2.4" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" + integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== + +yargs-parser@^20.2.2, yargs-parser@^20.2.9: + version "20.2.9" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" + integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== + +yargs-parser@^21.1.1: + version "21.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" + integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== + +yargs-unparser@2.0.0, yargs-unparser@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb" + integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== + dependencies: + camelcase "^6.0.0" + decamelize "^4.0.0" + flat "^5.0.2" + is-plain-obj "^2.1.0" + +yargs@16.2.0, yargs@^16.2.0: + version "16.2.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" + +yargs@^17.5.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" + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + +zksync-web3@^0.14.3: + version "0.14.4" + resolved "https://registry.yarnpkg.com/zksync-web3/-/zksync-web3-0.14.4.tgz#0b70a7e1a9d45cc57c0971736079185746d46b1f" + integrity sha512-kYehMD/S6Uhe1g434UnaMN+sBr9nQm23Ywn0EUP5BfQCsbjcr3ORuS68PosZw8xUTu3pac7G6YMSnNHk+fwzvg== From cb262f168f45e6d6f51f74e9fb33b4564fdbf881 Mon Sep 17 00:00:00 2001 From: Christopher Jacobs Date: Thu, 26 Mar 2026 17:46:04 -0700 Subject: [PATCH 07/62] rename/upgrade ts --- ...{cron-supervisor.js => cron-supervisor.ts} | 188 +++++++++--------- .../{render-crontab.js => render-crontab.ts} | 0 2 files changed, 89 insertions(+), 99 deletions(-) rename contracts/scripts/{cron-supervisor.js => cron-supervisor.ts} (63%) rename contracts/scripts/{render-crontab.js => render-crontab.ts} (100%) diff --git a/contracts/scripts/cron-supervisor.js b/contracts/scripts/cron-supervisor.ts similarity index 63% rename from contracts/scripts/cron-supervisor.js rename to contracts/scripts/cron-supervisor.ts index 57776abfe7..5da4276b1e 100644 --- a/contracts/scripts/cron-supervisor.js +++ b/contracts/scripts/cron-supervisor.ts @@ -1,21 +1,17 @@ -#!/usr/bin/env node +import { type ChildProcess, spawn } from "node:child_process"; +import { randomUUID, timingSafeEqual } from "node:crypto"; +import fs from "node:fs"; +import http from "node:http"; +import { type CronConfig, type CronJob, renderCrontab } from "./render-crontab"; -const fs = require("node:fs"); -const http = require("node:http"); -const { spawn } = require("node:child_process"); -const { randomUUID, timingSafeEqual } = require("node:crypto"); -const { renderCrontab } = require("./render-crontab"); +// --- Configuration --- const host = process.env.HOST || "0.0.0.0"; const port = Number.parseInt(process.env.PORT || "8080", 10); -const cronConfigPath = - process.env.CRON_CONFIG_PATH || "/app/cron/cron-jobs.json"; +const cronConfigPath = process.env.CRON_CONFIG_PATH || "/app/cron/cron-jobs.json"; const cronOutputPath = process.env.CRON_OUTPUT_PATH || "/etc/cronjob"; const supercronicBin = process.env.SUPERCRONIC_BIN || "supercronic"; -const runHistoryLimit = Number.parseInt( - process.env.ACTION_RUN_HISTORY_LIMIT || "500", - 10 -); +const runHistoryLimit = Number.parseInt(process.env.ACTION_RUN_HISTORY_LIMIT || "500", 10); const actionApiToken = process.env.ACTION_API_BEARER_TOKEN; const configuredActionWorkdir = process.env.ACTION_WORKDIR || "/app"; @@ -24,14 +20,12 @@ if (!Number.isInteger(port) || port < 1 || port > 65535) { process.exit(1); } if (!actionApiToken || actionApiToken.trim().length === 0) { - console.error( - "[cron-supervisor] ACTION_API_BEARER_TOKEN must be set and non-empty" - ); + console.error("[cron-supervisor] ACTION_API_BEARER_TOKEN must be set and non-empty"); process.exit(1); } if (!Number.isInteger(runHistoryLimit) || runHistoryLimit < 1) { console.error( - `[cron-supervisor] Invalid ACTION_RUN_HISTORY_LIMIT value "${process.env.ACTION_RUN_HISTORY_LIMIT}"` + `[cron-supervisor] Invalid ACTION_RUN_HISTORY_LIMIT value "${process.env.ACTION_RUN_HISTORY_LIMIT}"`, ); process.exit(1); } @@ -43,80 +37,93 @@ const actionWorkdir = fs.existsSync(configuredActionWorkdir) if (!fs.existsSync(configuredActionWorkdir)) { console.warn( - `[cron-supervisor] ACTION_WORKDIR "${configuredActionWorkdir}" does not exist, using "${actionWorkdir}" instead` + `[cron-supervisor] ACTION_WORKDIR "${configuredActionWorkdir}" does not exist, using "${actionWorkdir}" instead`, ); } -const json = (res, statusCode, payload, extraHeaders = {}) => { - res.writeHead(statusCode, { - "Content-Type": "application/json", - ...extraHeaders, - }); +// --- HTTP helpers --- + +const json = ( + res: http.ServerResponse, + statusCode: number, + payload: unknown, + extraHeaders: Record = {}, +) => { + res.writeHead(statusCode, { "Content-Type": "application/json", ...extraHeaders }); res.end(JSON.stringify(payload)); }; -const expectedTokenBuffer = Buffer.from(actionApiToken); -const isAuthorized = (headerValue) => { - if (typeof headerValue !== "string") { - return false; - } +const expectedTokenBuffer = Buffer.from(actionApiToken!); +const isAuthorized = (headerValue: string | string[] | undefined): boolean => { + if (typeof headerValue !== "string") return false; const prefix = "Bearer "; - if (!headerValue.startsWith(prefix)) { - return false; - } + if (!headerValue.startsWith(prefix)) return false; const provided = headerValue.slice(prefix.length).trim(); const providedBuffer = Buffer.from(provided); - if (providedBuffer.length !== expectedTokenBuffer.length) { - return false; - } + if (providedBuffer.length !== expectedTokenBuffer.length) return false; return timingSafeEqual(providedBuffer, expectedTokenBuffer); }; -const runStore = new Map(); -const runOrder = []; -const storeRun = (run) => { +// --- Run tracking --- + +type RunStatus = "queued" | "running" | "succeeded" | "failed"; + +interface ActionRun { + runId: string; + action: string; + schedule: string; + enabled: boolean; + command?: string; + status: RunStatus; + queuedAt: string; + startedAt: string; + finishedAt: string | null; + exitCode: number | null; + signal: string | null; + pid: number | null; + error?: string; +} + +const runStore = new Map(); +const runOrder: string[] = []; +const storeRun = (run: ActionRun) => { runStore.set(run.runId, run); runOrder.push(run.runId); while (runOrder.length > runHistoryLimit) { - const removedRunId = runOrder.shift(); + const removedRunId = runOrder.shift()!; runStore.delete(removedRunId); } }; -let renderedConfig; -let enabledJobs; +// --- Cron setup --- + +let renderedConfig: CronConfig; +let enabledJobs: CronJob[]; try { - const renderResult = renderCrontab({ - configPath: cronConfigPath, - outputPath: cronOutputPath, - }); + const renderResult = renderCrontab({ configPath: cronConfigPath, outputPath: cronOutputPath }); renderedConfig = renderResult.config; enabledJobs = renderResult.enabledJobs; } catch (error) { - console.error(`[cron-supervisor] ${error.message}`); + console.error(`[cron-supervisor] ${(error as Error).message}`); process.exit(1); } console.log( - `[cron-supervisor] Generated ${enabledJobs.length} enabled cron jobs at ${cronOutputPath}` + `[cron-supervisor] Generated ${enabledJobs!.length} enabled cron jobs at ${cronOutputPath}`, ); console.log("[cron-supervisor] Generated /etc/cronjob:"); console.log(fs.readFileSync(cronOutputPath, "utf8")); -const jobsByName = new Map( - renderedConfig.jobs.map((job) => { - return [job.name, job]; - }) -); +const jobsByName = new Map(renderedConfig!.jobs.map((job) => [job.name, job])); + +// --- Action execution --- -const runAction = (action, run) => { +const runAction = (action: CronJob, run: ActionRun) => { run.status = "running"; run.startedAt = nowIso(); run.command = action.command; - console.log( - `[cron-supervisor] Starting run ${run.runId} for action "${action.name}"` - ); + console.log(`[cron-supervisor] Starting run ${run.runId} for action "${action.name}"`); const child = spawn("/bin/sh", ["-lc", action.command], { cwd: actionWorkdir, @@ -131,9 +138,7 @@ const runAction = (action, run) => { run.exitCode = null; run.signal = null; run.error = error.message; - console.error( - `[cron-supervisor] Run ${run.runId} failed to start: ${error.message}` - ); + console.error(`[cron-supervisor] Run ${run.runId} failed to start: ${error.message}`); }); child.on("exit", (code, signal) => { @@ -141,20 +146,17 @@ const runAction = (action, run) => { run.exitCode = code; run.signal = signal; run.status = code === 0 ? "succeeded" : "failed"; - console.log( - `[cron-supervisor] Run ${run.runId} for "${action.name}" finished with status=${run.status}, code=${code}, signal=${signal}` + `[cron-supervisor] Run ${run.runId} for "${action.name}" finished with status=${run.status}, code=${code}, signal=${signal}`, ); }); }; -const triggerAction = (actionName) => { +const triggerAction = (actionName: string): ActionRun | undefined => { const action = jobsByName.get(actionName); - if (!action) { - return undefined; - } + if (!action) return undefined; - const run = { + const run: ActionRun = { runId: randomUUID(), action: action.name, schedule: action.schedule, @@ -170,11 +172,12 @@ const triggerAction = (actionName) => { storeRun(run); setImmediate(() => runAction(action, run)); - return run; }; -let supercronic = spawn(supercronicBin, [cronOutputPath], { +// --- Supercronic process --- + +const supercronic: ChildProcess = spawn(supercronicBin, [cronOutputPath], { env: process.env, stdio: "inherit", }); @@ -189,9 +192,7 @@ let shuttingDown = false; let serverClosed = false; let supercronicClosed = false; const maybeExit = () => { - if (shuttingDown && serverClosed && supercronicClosed) { - process.exit(0); - } + if (shuttingDown && serverClosed && supercronicClosed) process.exit(0); }; supercronic.on("exit", (code, signal) => { @@ -199,13 +200,15 @@ supercronic.on("exit", (code, signal) => { supercronicClosed = true; if (!shuttingDown) { console.error( - `[cron-supervisor] supercronic exited unexpectedly (code=${code}, signal=${signal})` + `[cron-supervisor] supercronic exited unexpectedly (code=${code}, signal=${signal})`, ); process.exit(typeof code === "number" ? code : 1); } maybeExit(); }); +// --- HTTP API --- + const server = http.createServer((req, res) => { const method = req.method || "GET"; const forwardedProto = req.headers["x-forwarded-proto"]; @@ -217,18 +220,17 @@ const server = http.createServer((req, res) => { const origin = `${proto}://${reqHost}`; const requestUrl = new URL(req.url || "/", origin); + // Health check (unauthenticated) if (method === "GET" && requestUrl.pathname === "/healthz") { json(res, 200, { status: "ok", api: "up", - supercronic: { - running: supercronicAlive, - pid: supercronic.pid ?? null, - }, + supercronic: { running: supercronicAlive, pid: supercronic.pid ?? null }, }); return; } + // Auth gate for /api/v1/* if (requestUrl.pathname.startsWith("/api/v1/")) { if (!isAuthorized(req.headers.authorization)) { json(res, 401, { error: "Unauthorized" }); @@ -236,9 +238,10 @@ const server = http.createServer((req, res) => { } } + // List actions if (method === "GET" && requestUrl.pathname === "/api/v1/actions") { json(res, 200, { - actions: renderedConfig.jobs.map((job) => ({ + actions: renderedConfig!.jobs.map((job) => ({ name: job.name, schedule: job.schedule, enabled: job.enabled, @@ -247,9 +250,8 @@ const server = http.createServer((req, res) => { return; } - const runTriggerMatch = requestUrl.pathname.match( - /^\/api\/v1\/actions\/([^/]+)\/runs$/ - ); + // Trigger action + const runTriggerMatch = requestUrl.pathname.match(/^\/api\/v1\/actions\/([^/]+)\/runs$/); if (method === "POST" && runTriggerMatch) { const actionName = decodeURIComponent(runTriggerMatch[1]); const run = triggerAction(actionName); @@ -257,7 +259,6 @@ const server = http.createServer((req, res) => { json(res, 404, { error: `Unknown action "${actionName}"` }); return; } - const statusUrl = `${origin}/api/v1/runs/${encodeURIComponent(run.runId)}`; json( res, @@ -269,14 +270,13 @@ const server = http.createServer((req, res) => { statusUrl, startedAt: run.startedAt, }, - { Location: statusUrl } + { Location: statusUrl }, ); return; } - const runStatusMatch = requestUrl.pathname.match( - /^\/api\/v1\/runs\/([^/]+)$/ - ); + // Run status + const runStatusMatch = requestUrl.pathname.match(/^\/api\/v1\/runs\/([^/]+)$/); if (method === "GET" && runStatusMatch) { const runId = decodeURIComponent(runStatusMatch[1]); const run = runStore.get(runId); @@ -284,7 +284,6 @@ const server = http.createServer((req, res) => { json(res, 404, { error: `Run "${runId}" not found` }); return; } - json(res, 200, { runId: run.runId, action: run.action, @@ -297,11 +296,6 @@ const server = http.createServer((req, res) => { return; } - if (requestUrl.pathname.startsWith("/api/v1/")) { - json(res, 404, { error: "Not found" }); - return; - } - json(res, 404, { error: "Not found" }); }); @@ -315,10 +309,10 @@ server.on("close", () => { maybeExit(); }); -const shutdown = (signal) => { - if (shuttingDown) { - return; - } +// --- Graceful shutdown --- + +const shutdown = (signal: string) => { + if (shuttingDown) return; shuttingDown = true; console.log(`[cron-supervisor] Shutting down (signal=${signal})`); @@ -327,15 +321,11 @@ const shutdown = (signal) => { if (supercronicAlive && supercronic.exitCode === null) { supercronic.kill("SIGTERM"); setTimeout(() => { - if (supercronic.exitCode === null) { - supercronic.kill("SIGKILL"); - } + if (supercronic.exitCode === null) supercronic.kill("SIGKILL"); }, 10_000).unref(); } - setTimeout(() => { - process.exit(0); - }, 12_000).unref(); + setTimeout(() => process.exit(0), 12_000).unref(); }; process.on("SIGTERM", () => shutdown("SIGTERM")); diff --git a/contracts/scripts/render-crontab.js b/contracts/scripts/render-crontab.ts similarity index 100% rename from contracts/scripts/render-crontab.js rename to contracts/scripts/render-crontab.ts From 6858bbd1ad420356617c801d9af33824af8875b9 Mon Sep 17 00:00:00 2001 From: Domen Grabec Date: Fri, 27 Mar 2026 16:55:36 +0100 Subject: [PATCH 08/62] make github build the image instead of docker --- .github/workflows/contracts-actions-image.yml | 42 ++++++++++++++ contracts/dockerfile | 12 +++- contracts/dockerfile-actions | 57 +++++++++++++++++++ 3 files changed, 109 insertions(+), 2 deletions(-) create mode 100644 .github/workflows/contracts-actions-image.yml create mode 100644 contracts/dockerfile-actions diff --git a/.github/workflows/contracts-actions-image.yml b/.github/workflows/contracts-actions-image.yml new file mode 100644 index 0000000000..10c6acd998 --- /dev/null +++ b/.github/workflows/contracts-actions-image.yml @@ -0,0 +1,42 @@ +name: Contracts Actions Image + +on: + push: + branches: + - origin-automaton-production + workflow_dispatch: + +permissions: + contents: read + packages: write + +jobs: + build-and-push: + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Log in to GitHub Container Registry + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Prepare image metadata + id: prep + run: | + IMAGE_NAME="ghcr.io/${{ github.repository_owner }}/contracts-actions" + IMAGE_NAME="$(echo "${IMAGE_NAME}" | tr '[:upper:]' '[:lower:]')" + echo "image_name=${IMAGE_NAME}" >> "${GITHUB_OUTPUT}" + + - name: Build and push image + uses: docker/build-push-action@v5 + with: + context: ./contracts + file: ./contracts/dockerfile-actions + push: true + tags: | + ${{ steps.prep.outputs.image_name }}:latest + ${{ steps.prep.outputs.image_name }}:${{ github.sha }} diff --git a/contracts/dockerfile b/contracts/dockerfile index 3497444265..465d38c82f 100644 --- a/contracts/dockerfile +++ b/contracts/dockerfile @@ -52,6 +52,14 @@ ENV PROVIDER_URL="" \ DEFENDER_API_SECRET="" \ HARDHAT_NETWORK="" -RUN chmod +x /app/scripts/cron-entrypoint.sh +# Cron configuration for supercronic. +# Each Hardhat task runs with a 7 minute offset, ensuring sequential execution. +RUN cat <<'EOF' > /etc/cronjob +0 * * * * cd /app && pnpm hardhat snapBalances --network ${HARDHAT_NETWORK:-mainnet} +8 * * * * cd /app && pnpm hardhat verifyBalances --network ${HARDHAT_NETWORK:-mainnet} +10 * * * * cd /app && pnpm hardhat verifyDeposits --network ${HARDHAT_NETWORK:-mainnet} +12 * * * * cd /app && pnpm hardhat autoValidatorDeposits --network ${HARDHAT_NETWORK:-mainnet} +14 * * * * cd /app && pnpm hardhat autoValidatorWithdrawals --network ${HARDHAT_NETWORK:-mainnet} +EOF -ENTRYPOINT ["/app/scripts/cron-entrypoint.sh"] +ENTRYPOINT ["supercronic", "/etc/cronjob"] \ No newline at end of file diff --git a/contracts/dockerfile-actions b/contracts/dockerfile-actions new file mode 100644 index 0000000000..3497444265 --- /dev/null +++ b/contracts/dockerfile-actions @@ -0,0 +1,57 @@ +FROM node:22 + +ENV DEBIAN_FRONTEND=noninteractive \ + DEBUG=origin* \ + DEBUG_HIDE_DATE=true + +RUN apt-get update \ + && apt-get install -y --no-install-recommends \ + ca-certificates \ + curl \ + git \ + openssh-client \ + build-essential \ + python3 \ + bsdutils \ + && rm -rf /var/lib/apt/lists/*◄ + +# Preload GitHub host key for SSH-based dependencies. +RUN mkdir -p /root/.ssh \ + && ssh-keyscan -t rsa github.com >> /root/.ssh/known_hosts + +RUN git config --global url."https://github.com/".insteadOf "git@github.com:" + +ENV SUPERCRONIC_URL=https://github.com/aptible/supercronic/releases/download/v0.2.39/supercronic-linux-amd64 \ + SUPERCRONIC_SHA1SUM=c98bbf82c5f648aaac8708c182cc83046fe48423 \ + SUPERCRONIC=supercronic-linux-amd64 + +RUN curl -fsSLO "$SUPERCRONIC_URL" \ + && echo "${SUPERCRONIC_SHA1SUM} ${SUPERCRONIC}" | sha1sum -c - \ + && chmod +x "$SUPERCRONIC" \ + && mv "$SUPERCRONIC" "/usr/local/bin/${SUPERCRONIC}" \ + && ln -s "/usr/local/bin/${SUPERCRONIC}" /usr/local/bin/supercronic + +WORKDIR /app + +# Enable pnpm via corepack and install dependencies first for better caching. +COPY pnpm-lock.yaml package.json pnpm-workspace.yaml ./ +RUN corepack enable \ + && pnpm install --frozen-lockfile + +# Copy the rest of the contracts workspace. +COPY . . + +RUN pnpm hardhat compile + +ENV PROVIDER_URL="" \ + SONIC_PROVIDER_URL="" \ + PLUME_PROVIDER_URL="" \ + HOODI_PROVIDER_URL="" \ + BEACON_PROVIDER_URL="" \ + DEFENDER_API_KEY="" \ + DEFENDER_API_SECRET="" \ + HARDHAT_NETWORK="" + +RUN chmod +x /app/scripts/cron-entrypoint.sh + +ENTRYPOINT ["/app/scripts/cron-entrypoint.sh"] From adcb5001b1d4cb2464405a9f12e4f12515000b00 Mon Sep 17 00:00:00 2001 From: Domen Grabec Date: Fri, 27 Mar 2026 17:02:03 +0100 Subject: [PATCH 09/62] fix node issue --- contracts/dockerfile-actions | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/contracts/dockerfile-actions b/contracts/dockerfile-actions index 3497444265..8bb42c6edc 100644 --- a/contracts/dockerfile-actions +++ b/contracts/dockerfile-actions @@ -1,4 +1,4 @@ -FROM node:22 +FROM public.ecr.aws/docker/library/node:22 ENV DEBIAN_FRONTEND=noninteractive \ DEBUG=origin* \ @@ -13,7 +13,7 @@ RUN apt-get update \ build-essential \ python3 \ bsdutils \ - && rm -rf /var/lib/apt/lists/*◄ + && rm -rf /var/lib/apt/lists/* # Preload GitHub host key for SSH-based dependencies. RUN mkdir -p /root/.ssh \ From 80f660ad25068d866253d595c8d84c6564368d35 Mon Sep 17 00:00:00 2001 From: Domen Grabec Date: Fri, 27 Mar 2026 17:11:07 +0100 Subject: [PATCH 10/62] rename image --- .github/workflows/contracts-cron-image.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/contracts-cron-image.yml b/.github/workflows/contracts-cron-image.yml index 61bd123cec..00c44fcf59 100644 --- a/.github/workflows/contracts-cron-image.yml +++ b/.github/workflows/contracts-cron-image.yml @@ -27,7 +27,7 @@ jobs: - name: Prepare image metadata id: prep run: | - IMAGE_NAME="ghcr.io/${{ github.repository_owner }}/contracts-cron" + IMAGE_NAME="ghcr.io/${{ github.repository_owner }}/contracts-automaton-actions" IMAGE_NAME="$(echo "${IMAGE_NAME}" | tr '[:upper:]' '[:lower:]')" echo "image_name=${IMAGE_NAME}" >> "${GITHUB_OUTPUT}" From 0371df6d8a2c644791dbd27184ba9788c47edda7 Mon Sep 17 00:00:00 2001 From: Domen Grabec Date: Fri, 27 Mar 2026 17:11:42 +0100 Subject: [PATCH 11/62] another rename --- .github/workflows/contracts-cron-image.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/contracts-cron-image.yml b/.github/workflows/contracts-cron-image.yml index 00c44fcf59..e6eac2f555 100644 --- a/.github/workflows/contracts-cron-image.yml +++ b/.github/workflows/contracts-cron-image.yml @@ -27,7 +27,7 @@ jobs: - name: Prepare image metadata id: prep run: | - IMAGE_NAME="ghcr.io/${{ github.repository_owner }}/contracts-automaton-actions" + IMAGE_NAME="ghcr.io/${{ github.repository_owner }}/contracts-automaton-prod" IMAGE_NAME="$(echo "${IMAGE_NAME}" | tr '[:upper:]' '[:lower:]')" echo "image_name=${IMAGE_NAME}" >> "${GITHUB_OUTPUT}" From 9c91e7425f3d18fa6412783e583ac3773adbfdf9 Mon Sep 17 00:00:00 2001 From: Domen Grabec Date: Fri, 27 Mar 2026 17:27:55 +0100 Subject: [PATCH 12/62] fix naming mistakes --- ...cts-actions-image.yml => contracts-automaton-prod-image.yml} | 2 +- .github/workflows/contracts-cron-image.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename .github/workflows/{contracts-actions-image.yml => contracts-automaton-prod-image.yml} (97%) diff --git a/.github/workflows/contracts-actions-image.yml b/.github/workflows/contracts-automaton-prod-image.yml similarity index 97% rename from .github/workflows/contracts-actions-image.yml rename to .github/workflows/contracts-automaton-prod-image.yml index 10c6acd998..186a9b7437 100644 --- a/.github/workflows/contracts-actions-image.yml +++ b/.github/workflows/contracts-automaton-prod-image.yml @@ -27,7 +27,7 @@ jobs: - name: Prepare image metadata id: prep run: | - IMAGE_NAME="ghcr.io/${{ github.repository_owner }}/contracts-actions" + IMAGE_NAME="ghcr.io/${{ github.repository_owner }}/contracts-automaton-prod" IMAGE_NAME="$(echo "${IMAGE_NAME}" | tr '[:upper:]' '[:lower:]')" echo "image_name=${IMAGE_NAME}" >> "${GITHUB_OUTPUT}" diff --git a/.github/workflows/contracts-cron-image.yml b/.github/workflows/contracts-cron-image.yml index e6eac2f555..61bd123cec 100644 --- a/.github/workflows/contracts-cron-image.yml +++ b/.github/workflows/contracts-cron-image.yml @@ -27,7 +27,7 @@ jobs: - name: Prepare image metadata id: prep run: | - IMAGE_NAME="ghcr.io/${{ github.repository_owner }}/contracts-automaton-prod" + IMAGE_NAME="ghcr.io/${{ github.repository_owner }}/contracts-cron" IMAGE_NAME="$(echo "${IMAGE_NAME}" | tr '[:upper:]' '[:lower:]')" echo "image_name=${IMAGE_NAME}" >> "${GITHUB_OUTPUT}" From 79075e5a7b47844107ee4325a2606d0ef3ab8517 Mon Sep 17 00:00:00 2001 From: Christopher Jacobs Date: Fri, 27 Mar 2026 13:27:15 -0700 Subject: [PATCH 13/62] Migrate Defender actions to TypeScript hardhat tasks MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add TypeScript, ESLint TS, and Prettier TS support to contracts/ - Create action() registration pattern for hardhat tasks with Winston logging - Convert 13 Defender actions to self-registering TS hardhat tasks - Add Loki transport for centralized logging - Add healthcheck task for validation - Fix ssv-scanner dependency (bloxapp → ssvlabs) - Fix @lodestar/types ESM compatibility via ts-node skipProject --- TYPESCRIPT_MIGRATION.md | 124 - contracts/.eslintrc.js | 21 + contracts/biome.json | 29 - contracts/cron/cron-jobs.json | 6 + contracts/dev.env | 7 +- contracts/dockerfile | 23 +- contracts/hardhat.config.js | 3 + contracts/package.json | 12 +- contracts/pnpm-lock.yaml | 661 +- contracts/scripts/cron-entrypoint.sh | 2 +- contracts/scripts/cron-supervisor.ts | 193 +- .../defender-actions/rollup.config.cjs | 57 - contracts/scripts/render-crontab.ts | 136 +- contracts/tasks/actions/claimBribes.ts | 80 +- contracts/tasks/actions/crossChainRelay.ts | 112 +- .../tasks/actions/crossChainRelayHyperEVM.ts | 112 +- contracts/tasks/actions/doAccounting.ts | 74 +- contracts/tasks/actions/harvest.ts | 88 +- contracts/tasks/actions/healthcheck.ts | 15 + contracts/tasks/actions/manageBribeOnSonic.ts | 48 +- contracts/tasks/actions/manageBribes.ts | 72 +- contracts/tasks/actions/manageMerklBribes.ts | 45 +- contracts/tasks/actions/managePassThrough.ts | 21 +- contracts/tasks/actions/registerValidators.ts | 116 +- .../tasks/actions/sonicClaimWithdrawals.ts | 20 +- .../tasks/actions/sonicRequestWithdrawal.ts | 59 +- contracts/tasks/actions/stakeValidators.ts | 58 +- contracts/tasks/lib/action.ts | 80 + contracts/tasks/lib/client.ts | 12 +- contracts/tasks/lib/env.ts | 5 +- contracts/tasks/lib/logger.ts | 29 +- contracts/tasks/lib/signer.ts | 48 +- contracts/tasks/lib/store.ts | 1 + contracts/tasks/lib/transaction.ts | 18 +- contracts/tasks/tasks.js | 11 +- contracts/tsconfig.json | 6 +- contracts/utils/validator.js | 4 +- contracts/yarn.lock | 12090 ---------------- 38 files changed, 1393 insertions(+), 13105 deletions(-) delete mode 100644 TYPESCRIPT_MIGRATION.md delete mode 100644 contracts/biome.json delete mode 100644 contracts/scripts/defender-actions/rollup.config.cjs create mode 100644 contracts/tasks/actions/healthcheck.ts create mode 100644 contracts/tasks/lib/action.ts delete mode 100644 contracts/yarn.lock diff --git a/TYPESCRIPT_MIGRATION.md b/TYPESCRIPT_MIGRATION.md deleted file mode 100644 index 810ffc7714..0000000000 --- a/TYPESCRIPT_MIGRATION.md +++ /dev/null @@ -1,124 +0,0 @@ -# TypeScript Migration Plan - -This document outlines the plan for incrementally migrating JavaScript files in `contracts/` to TypeScript. - -## Current State - -- **~311 JS files**, **~66K lines of code** in `contracts/` -- No TypeScript infrastructure (no `tsconfig.json`, no `.ts` files, no type definitions) -- All CommonJS (`require`/`module.exports`) -- Heavy use of Hardhat globals (`ethers`, `deployments`, `getNamedAccounts`) - -## Scope by Category - - -| Category | Files | LOC | Migration Difficulty | -| ---------------- | ----- | ------- | -------------------- | -| Defender Actions | 13 | ~780 | Low | -| Utils | 36 | ~7,050 | Low-Medium | -| Config | 4 | ~600 | Low | -| Deploy Scripts | 121 | ~7,300 | Medium | -| Tasks | 35 | ~10,000 | Medium | -| Tests | 87 | ~38,900 | High | - - -## Strategy - -Use `allowJs: true` in `tsconfig.json` so existing JS continues to work. Migrate files incrementally — no big bang required. The codebase can remain mixed JS/TS indefinitely. - -CommonJS module format is retained (`require`/`module.exports`). TypeScript will be configured to emit CommonJS output, so migrated files stay compatible with non-migrated ones. - -## Phase 1 — Foundation + Defender Actions (~1 day) - -**Goal:** Establish TypeScript infrastructure and migrate the highest-priority files. - -### Setup - -- Add `tsconfig.json` with `allowJs: true`, targeting ES2020, CommonJS output -- Install dependencies: `typescript`, `ts-node`, `@types/node` -- Update `hardhat.config.js` → `hardhat.config.ts` (Hardhat natively supports this) -- Update rollup config (`scripts/defender-actions/rollup.config.cjs`) to handle `.ts` input - -### Defender Actions (13 files, ~780 LOC) - -Located in `scripts/defender-actions/`. These are small, isolated async handler functions for OpenZeppelin Defender automation. Average ~60 LOC each. - -Files to migrate: - -- `doAccounting.js` (91 LOC) -- `registerValidators.js` (96 LOC) -- `stakeValidators.js` (88 LOC) -- `harvest.js` (77 LOC) -- `crossChainRelay.js` (~72 LOC) -- `crossChainRelayHyperEVM.js` (~72 LOC) -- Remaining smaller utilities (21-42 LOC each) - -Work involved: - -1. Rename `.js` → `.ts` -2. Add types to function parameters and return values -3. Type ethers contract interactions -4. Verify rollup bundling still works - -## Phase 2 — Utils (~2-3 days) - -**Goal:** Type the shared foundation that all other code depends on. - -Located in `utils/`. Key files: - -- `addresses.js` (32KB) — Master address registry. Strong candidate for types: network-keyed maps of contract addresses -- `deploy.js` (44KB) — Core deployment helpers (`deployWithConfirmation`, `withConfirmation`) -- `validator.js` (25KB) — Validator management -- `beacon.js` (14KB) — Beacon-related utilities -- `deploy-l2.js` (14KB) — L2-specific deployment logic -- `hardhat-helpers.js` (7.9KB) — Hardhat utilities -- Remaining ~30 smaller utility files - -Benefits: - -- `addresses.js` gets compile-time validation of network/contract name lookups -- Shared helper function signatures become self-documenting -- Downstream code (deploy scripts, tasks) gets better IDE support even before migration - -## Phase 3 — Deploy Scripts & Tasks (1-2 weeks, or ongoing) - -**Goal:** Migrate operational scripts as they are touched. - -### Deploy Scripts (121 files, ~7,300 LOC) - -Located in `deploy/` with network-specific subdirectories (mainnet, base, sonic, plume, hoodi, arbitrum, holesky, hyperevm). All follow `hardhat-deploy` conventions. - -Note: `hardhat-deploy` has limited TypeScript type definitions. Custom type helpers may be needed for the deploy function signature and `DeploymentsExtension`. - -### Tasks (35 files, ~10,000 LOC) - -Located in `tasks/`. Hardhat `task()` API with ethers contract interactions. - -Key files by size: `tasks.js` (2,753 LOC), `beacon.js` (1,137 LOC), `validatorCompound.js` (888 LOC). - -Both categories can be migrated file-by-file. No need to do them all at once. - -## Phase 4 — Tests (ongoing, as files are touched) - -**Goal:** Migrate test infrastructure first, then individual test files over time. - -Located in `test/`. By far the largest category at ~39K LOC across 87 files. - -Recommended order: - -1. Fixture files (`_fixture.js`, `_fixture-base.js`, `_fixture-sonic.js`) — these are imported by everything -2. Helper files (`helpers.js`, `_hot-deploy.js`) -3. Behavioral test suites (`test/behaviour/`) — shared across strategies -4. Individual test files as they are modified - -Dependencies: `chai`, `ethereum-waffle`, `ethers`, `hardhat`. All have TypeScript type definitions available. - -## Key Considerations - -- **ethers v5 has built-in types** — contract calls, signers, and BigNumber operations all benefit from TS -- **Hardhat has native TS support** — config, tasks, and scripts can all be `.ts` without extra setup beyond `ts-node` -- `**hardhat-deploy` typing is limited** — may need custom `.d.ts` declarations for deploy function patterns -- **Rollup bundling** for defender actions needs a TypeScript plugin (e.g., `@rollup/plugin-typescript`) -- **No ESM migration required** — TS can emit CommonJS, keeping compatibility with existing code -- **Prettier and ESLint** need updates: add `@typescript-eslint/parser` and `@typescript-eslint/eslint-plugin` - diff --git a/contracts/.eslintrc.js b/contracts/.eslintrc.js index eaf475fb2c..2a28cef97f 100644 --- a/contracts/.eslintrc.js +++ b/contracts/.eslintrc.js @@ -24,4 +24,25 @@ module.exports = { "no-only-tests/no-only-tests": "error", "no-unused-vars": [2, { vars: "all", args: "after-used" }], }, + overrides: [ + { + files: ["**/*.ts"], + parser: "@typescript-eslint/parser", + parserOptions: { + project: "./tsconfig.json", + sourceType: "module", + }, + plugins: ["@typescript-eslint"], + extends: [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + ], + rules: { + "no-unused-vars": "off", + "@typescript-eslint/no-unused-vars": [2, { vars: "all", args: "after-used" }], + "@typescript-eslint/no-explicit-any": "off", + "@typescript-eslint/no-require-imports": "off", + }, + }, + ], }; diff --git a/contracts/biome.json b/contracts/biome.json deleted file mode 100644 index 1eb9d2b309..0000000000 --- a/contracts/biome.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "$schema": "https://biomejs.dev/schemas/2.4.9/schema.json", - "files": { - "includes": ["tasks/actions/**/*.ts", "tasks/lib/**/*.ts"] - }, - "formatter": { - "indentStyle": "space", - "indentWidth": 2, - "lineWidth": 100 - }, - "javascript": { - "formatter": { - "quoteStyle": "double", - "semicolons": "always", - "trailingCommas": "all" - } - }, - "linter": { - "rules": { - "recommended": true, - "style": { - "noNonNullAssertion": "off" - }, - "suspicious": { - "noExplicitAny": "off" - } - } - } -} diff --git a/contracts/cron/cron-jobs.json b/contracts/cron/cron-jobs.json index a586808ce7..42ce266884 100644 --- a/contracts/cron/cron-jobs.json +++ b/contracts/cron/cron-jobs.json @@ -1,5 +1,11 @@ { "jobs": [ + { + "name": "healthcheck", + "schedule": "*/5 * * * *", + "enabled": true, + "command": "cd /app && pnpm hardhat healthcheck" + }, { "name": "hourly_snap_balances", "schedule": "0 * * * *", diff --git a/contracts/dev.env b/contracts/dev.env index 3548a2a64c..5cbed3b657 100644 --- a/contracts/dev.env +++ b/contracts/dev.env @@ -70,4 +70,9 @@ VALIDATOR_KEYS_S3_BUCKET_NAME=[validator-keys-test | validator-keys] VALIDATOR_MASTER_ENCRYPTED_PRIVATE_KEY= # Tenderly access token required to upload newly deployed and verified contracts to Tenderly -TENDERLY_ACCESS_TOKEN= \ No newline at end of file +TENDERLY_ACCESS_TOKEN= + +# Loki Logging +LOKI_URL= +LOKI_USER= +LOKI_API_KEY= \ No newline at end of file diff --git a/contracts/dockerfile b/contracts/dockerfile index 3497444265..f2b7b6d74b 100644 --- a/contracts/dockerfile +++ b/contracts/dockerfile @@ -1,4 +1,4 @@ -FROM node:22 +FROM node:20 ENV DEBIAN_FRONTEND=noninteractive \ DEBUG=origin* \ @@ -21,15 +21,21 @@ RUN mkdir -p /root/.ssh \ RUN git config --global url."https://github.com/".insteadOf "git@github.com:" -ENV SUPERCRONIC_URL=https://github.com/aptible/supercronic/releases/download/v0.2.39/supercronic-linux-amd64 \ - SUPERCRONIC_SHA1SUM=c98bbf82c5f648aaac8708c182cc83046fe48423 \ - SUPERCRONIC=supercronic-linux-amd64 +ARG TARGETARCH +ENV SUPERCRONIC_URL=https://github.com/aptible/supercronic/releases/download/v0.2.39/supercronic-linux-${TARGETARCH} \ + SUPERCRONIC=supercronic-linux-${TARGETARCH} + +# sha1sums from https://github.com/aptible/supercronic/releases/tag/v0.2.39 +COPY <<'EOF' /tmp/supercronic-checksums.txt +c98bbf82c5f648aaac8708c182cc83046fe48423 supercronic-linux-amd64 +5ef4ccc3d43f12d0f6c3763758bc37cc4e5af76e supercronic-linux-arm64 +EOF RUN curl -fsSLO "$SUPERCRONIC_URL" \ - && echo "${SUPERCRONIC_SHA1SUM} ${SUPERCRONIC}" | sha1sum -c - \ + && grep "$SUPERCRONIC" /tmp/supercronic-checksums.txt | sha1sum -c - \ && chmod +x "$SUPERCRONIC" \ - && mv "$SUPERCRONIC" "/usr/local/bin/${SUPERCRONIC}" \ - && ln -s "/usr/local/bin/${SUPERCRONIC}" /usr/local/bin/supercronic + && mv "$SUPERCRONIC" /usr/local/bin/supercronic \ + && rm /tmp/supercronic-checksums.txt WORKDIR /app @@ -41,7 +47,8 @@ RUN corepack enable \ # Copy the rest of the contracts workspace. COPY . . -RUN pnpm hardhat compile +# Compile contracts on amd64 (production). Skip on arm64 (Mac) where solcjs WASM crashes. +RUN if [ "$TARGETARCH" = "amd64" ]; then pnpm hardhat compile; else echo "Skipping compile on $TARGETARCH"; fi ENV PROVIDER_URL="" \ SONIC_PROVIDER_URL="" \ diff --git a/contracts/hardhat.config.js b/contracts/hardhat.config.js index ce57746655..7331c1927a 100644 --- a/contracts/hardhat.config.js +++ b/contracts/hardhat.config.js @@ -1,5 +1,8 @@ require("ts-node").register({ transpileOnly: true, + // Use inline compilerOptions instead of tsconfig.json to avoid + // interfering with ESM-only packages (e.g. @lodestar/types). + skipProject: true, compilerOptions: { module: "CommonJS", target: "ES2020", diff --git a/contracts/package.json b/contracts/package.json index aebf5a82d9..75cdff5b99 100644 --- a/contracts/package.json +++ b/contracts/package.json @@ -33,12 +33,12 @@ "lint": "yarn run lint:js && yarn run lint:sol", "lint:js": "eslint \"test/**/*.js\" \"tasks/**/*.js\" \"deploy/**/*.js\"", "lint:sol": "solhint \"contracts/**/*.sol\"", - "lint:ts": "biome check tasks/actions/ tasks/lib/", + "lint:ts": "eslint \"tasks/actions/**/*.ts\" \"tasks/lib/**/*.ts\" \"scripts/**/*.ts\"", "prettier": "yarn run prettier:js && yarn run prettier:sol", "prettier:check": "prettier -c \"*.js\" \"deploy/**/*.js\" \"scripts/**/*.js\" \"scripts/**/*.js\" \"tasks/**/*.js\" \"test/**/*.js\" \"utils/**/*.js\"", "prettier:js": "prettier --write \"*.js\" \"deploy/**/*.js\" \"scripts/**/*.js\" \"scripts/**/*.js\" \"tasks/**/*.js\" \"test/**/*.js\" \"utils/**/*.js\"", "prettier:sol": "prettier --write --plugin=prettier-plugin-solidity \"contracts/**/*.sol\"", - "prettier:ts": "biome format --write tasks/actions/ tasks/lib/", + "prettier:ts": "prettier --write \"tasks/actions/**/*.ts\" \"tasks/lib/**/*.ts\" \"scripts/**/*.ts\"", "typecheck": "tsc --noEmit", "test": "rm -rf deployments/hardhat && IS_TEST=true npx hardhat test", "test:base": "rm -rf deployments/hardhat && UNIT_TESTS_NETWORK=base IS_TEST=true npx hardhat test", @@ -75,10 +75,10 @@ "author": "Origin Protocol Inc ", "license": "MIT", "devDependencies": { - "@biomejs/biome": "^2.4.9", "@aws-sdk/client-kms": "^3.675.0", "@aws-sdk/client-s3": "3.600.0", "@chainsafe/persistent-merkle-tree": "^1.2.1", + "@lastdotnet/purrikey": "^1.0.0", "@layerzerolabs/oft-evm": "3.1.4", "@nomicfoundation/hardhat-network-helpers": "1.0.9", "@nomicfoundation/hardhat-verify": "2.1.1", @@ -88,11 +88,12 @@ "@openzeppelin/contracts": "4.4.2", "@openzeppelin/defender-sdk": "2.7.0", "@openzeppelin/hardhat-upgrades": "1.27.0", - "@lastdotnet/purrikey": "^1.0.0", "@rigidity/bls-signatures": "2.0.5", "@rollup/plugin-commonjs": "29.0.0", "@rollup/plugin-json": "6.1.0", "@rollup/plugin-node-resolve": "16.0.3 ", + "@typescript-eslint/eslint-plugin": "^8.57.2", + "@typescript-eslint/parser": "^8.57.2", "@uniswap/v3-core": "1.0.1", "@uniswap/v3-periphery": "1.4.3", "axios": "1.4.0", @@ -129,7 +130,8 @@ "typescript": "^5.7.0", "uuid": "9.0.1", "viem": "^2.27.0", - "winston": "^3.19.0" + "winston": "^3.19.0", + "winston-loki": "^6.1.4" }, "husky": { "hooks": { diff --git a/contracts/pnpm-lock.yaml b/contracts/pnpm-lock.yaml index 5ac22be2e3..b064d16cbb 100644 --- a/contracts/pnpm-lock.yaml +++ b/contracts/pnpm-lock.yaml @@ -57,9 +57,6 @@ importers: '@aws-sdk/client-s3': specifier: 3.600.0 version: 3.600.0 - '@biomejs/biome': - specifier: ^2.4.9 - version: 2.4.9 '@chainsafe/persistent-merkle-tree': specifier: ^1.2.1 version: 1.2.1 @@ -105,6 +102,12 @@ importers: '@rollup/plugin-node-resolve': specifier: '16.0.3 ' version: 16.0.3(rollup@4.54.0) + '@typescript-eslint/eslint-plugin': + specifier: ^8.57.2 + version: 8.57.2(@typescript-eslint/parser@8.57.2(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(typescript@5.9.3) + '@typescript-eslint/parser': + specifier: ^8.57.2 + version: 8.57.2(eslint@8.57.1)(typescript@5.9.3) '@uniswap/v3-core': specifier: 1.0.1 version: 1.0.1 @@ -196,8 +199,8 @@ importers: specifier: 1.1.0 version: 1.1.0(bufferutil@4.1.0)(utf-8-validate@5.0.10) ssv-scanner: - specifier: github:bloxapp/ssv-scanner#v1.0.5 - version: git+https://github.com/bloxapp/ssv-scanner.git#45068c93b3de84495f6cfad2767787c91d98aa8f(bufferutil@4.1.0)(utf-8-validate@5.0.10) + specifier: github:ssvlabs/ssv-scanner#v1.0.5 + version: https://codeload.github.com/ssvlabs/ssv-scanner/tar.gz/45068c93b3de84495f6cfad2767787c91d98aa8f(bufferutil@4.1.0)(utf-8-validate@5.0.10) sync-fetch: specifier: 0.5.2 version: 0.5.2 @@ -216,6 +219,9 @@ importers: winston: specifier: ^3.19.0 version: 3.19.0 + winston-loki: + specifier: ^6.1.4 + version: 6.1.4 packages: @@ -603,59 +609,6 @@ packages: resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} engines: {node: '>=6.9.0'} - '@biomejs/biome@2.4.9': - resolution: {integrity: sha512-wvZW92FrwitTcacvCBT8xdAbfbxWfDLwjYMmU3djjqQTh7Ni4ZdiWIT/x5VcZ+RQuxiKzIOzi5D+dcyJDFZMsA==} - engines: {node: '>=14.21.3'} - hasBin: true - - '@biomejs/cli-darwin-arm64@2.4.9': - resolution: {integrity: sha512-d5G8Gf2RpH5pYwiHLPA+UpG3G9TLQu4WM+VK6sfL7K68AmhcEQ9r+nkj/DvR/GYhYox6twsHUtmWWWIKfcfQQA==} - engines: {node: '>=14.21.3'} - cpu: [arm64] - os: [darwin] - - '@biomejs/cli-darwin-x64@2.4.9': - resolution: {integrity: sha512-LNCLNgqDMG7BLdc3a8aY/dwKPK7+R8/JXJoXjCvZh2gx8KseqBdFDKbhrr7HCWF8SzNhbTaALhTBoh/I6rf9lA==} - engines: {node: '>=14.21.3'} - cpu: [x64] - os: [darwin] - - '@biomejs/cli-linux-arm64-musl@2.4.9': - resolution: {integrity: sha512-8RCww5xnPn2wpK4L/QDGDOW0dq80uVWfppPxHIUg6mOs9B6gRmqPp32h1Ls3T8GnW8Wo5A8u7vpTwz4fExN+sw==} - engines: {node: '>=14.21.3'} - cpu: [arm64] - os: [linux] - - '@biomejs/cli-linux-arm64@2.4.9': - resolution: {integrity: sha512-4adnkAUi6K4C/emPRgYznMOcLlUqZdXWM6aIui4VP4LraE764g6Q4YguygnAUoxKjKIXIWPteKMgRbN0wsgwcg==} - engines: {node: '>=14.21.3'} - cpu: [arm64] - os: [linux] - - '@biomejs/cli-linux-x64-musl@2.4.9': - resolution: {integrity: sha512-5TD+WS9v5vzXKzjetF0hgoaNFHMcpQeBUwKKVi3JbG1e9UCrFuUK3Gt185fyTzvRdwYkJJEMqglRPjmesmVv4A==} - engines: {node: '>=14.21.3'} - cpu: [x64] - os: [linux] - - '@biomejs/cli-linux-x64@2.4.9': - resolution: {integrity: sha512-L10na7POF0Ks/cgLFNF1ZvIe+X4onLkTi5oP9hY+Rh60Q+7fWzKDDCeGyiHUFf1nGIa9dQOOUPGe2MyYg8nMSQ==} - engines: {node: '>=14.21.3'} - cpu: [x64] - os: [linux] - - '@biomejs/cli-win32-arm64@2.4.9': - resolution: {integrity: sha512-aDZr0RBC3sMGJOU10BvG7eZIlWLK/i51HRIfScE2lVhfts2dQTreowLiJJd+UYg/tHKxS470IbzpuKmd0MiD6g==} - engines: {node: '>=14.21.3'} - cpu: [arm64] - os: [win32] - - '@biomejs/cli-win32-x64@2.4.9': - resolution: {integrity: sha512-NS4g/2G9SoQ4ktKtz31pvyc/rmgzlcIDCGU/zWbmHJAqx6gcRj2gj5Q/guXhoWTzCUaQZDIqiCQXHS7BcGYc0w==} - engines: {node: '>=14.21.3'} - cpu: [x64] - os: [win32] - '@bytecodealliance/preview2-shim@0.17.0': resolution: {integrity: sha512-JorcEwe4ud0x5BS/Ar2aQWOQoFzjq/7jcnxYXCvSMh0oRm0dQXzOA+hqLDBnOMks1LLBA7dmiLLsEBl09Yd6iQ==} @@ -894,6 +847,15 @@ packages: '@dabh/diagnostics@2.0.8': resolution: {integrity: sha512-R4MSXTVnuMzGD7bzHdW2ZhhdPC/igELENcq5IjEverBvq5hn1SXCWcsi6eSsdWP0/Ur+SItRRjAktmdoX/8R/Q==} + '@emnapi/core@1.9.1': + resolution: {integrity: sha512-mukuNALVsoix/w1BJwFzwXBN/dHeejQtuVzcDsfOEsdpCumXb/E9j8w11h5S54tT1xhifGfbbSm/ICrObRb3KA==} + + '@emnapi/runtime@1.9.1': + resolution: {integrity: sha512-VYi5+ZVLhpgK4hQ0TAjiQiZ6ol0oe4mBx7mVv7IflsiEp0OWoVsp/+f9Vc1hOhE0TtkORVrI1GvzyreqpgWtkA==} + + '@emnapi/wasi-threads@1.2.0': + resolution: {integrity: sha512-N10dEJNSsUx41Z6pZsXU8FjPjpBEplgH24sfkmITrBED1/U2Esum9F3lfLrMjKHHjmi557zQn7kR9R+XWXu5Rg==} + '@ensdomains/ens@0.4.5': resolution: {integrity: sha512-JSvpj1iNMFjK6K+uVl4unqMoa9rf5jopb8cya5UGBWz23Nw8hSNT7efgUx4BTlAPAgpNlEioUfeTyQ6J9ZvTVw==} deprecated: Please use @ensdomains/ens-contracts @@ -908,6 +870,12 @@ packages: peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + '@eslint-community/eslint-utils@4.9.1': + resolution: {integrity: sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + '@eslint-community/regexpp@4.12.2': resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} @@ -1354,6 +1322,116 @@ packages: '@lodestar/utils@1.39.1': resolution: {integrity: sha512-PHEt50aODY4ZLV20vw12Z9nh130Q+4SCcAIiY4GZP5ktMLJ12gkgAj/P8VfATHsJRjjASDIS4/nhynjLK53tHw==} + '@napi-rs/snappy-android-arm-eabi@7.3.3': + resolution: {integrity: sha512-d4vUFFzNBvazGfB/KU8MnEax6itTIgRWXodPdZDnWKHy9HwVBndpCiedQDcSNHcZNYV36rx034rpn7SAuTL2NA==} + engines: {node: '>= 10'} + cpu: [arm] + os: [android] + + '@napi-rs/snappy-android-arm64@7.3.3': + resolution: {integrity: sha512-Uh+w18dhzjVl85MGhRnojb7OLlX2ErvMsYIunO/7l3Frvc2zQvfqsWsFJanu2dwqlE2YDooeNP84S+ywgN9sxg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [android] + + '@napi-rs/snappy-darwin-arm64@7.3.3': + resolution: {integrity: sha512-AmJn+6yOu/0V0YNHLKmRUNYkn93iv/1wtPayC7O1OHtfY6YqHQ31/MVeeRBiEYtQW9TwVZxXrDirxSB1PxRdtw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + + '@napi-rs/snappy-darwin-x64@7.3.3': + resolution: {integrity: sha512-biLTXBmPjPmO7HIpv+5BaV9Gy/4+QJSUNJW8Pjx1UlWAVnocPy7um+zbvAWStZssTI5sfn/jOClrAegD4w09UA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + + '@napi-rs/snappy-freebsd-x64@7.3.3': + resolution: {integrity: sha512-E3R3ewm8Mrjm0yL2TC3VgnphDsQaCPixNJqBbGiz3NTshVDhlPlOgPKF0NGYqKiKaDGdD9PKtUgOR4vagUtn7g==} + engines: {node: '>= 10'} + cpu: [x64] + os: [freebsd] + + '@napi-rs/snappy-linux-arm-gnueabihf@7.3.3': + resolution: {integrity: sha512-ZuNgtmk9j0KyT7TfLyEnvZJxOhbkyNR761nk04F0Q4NTHMICP28wQj0xgEsnCHUsEeA9OXrRL4R7waiLn+rOQA==} + engines: {node: '>= 10'} + cpu: [arm] + os: [linux] + + '@napi-rs/snappy-linux-arm64-gnu@7.3.3': + resolution: {integrity: sha512-KIzwtq0dAzshzpqZWjg0Q9lUx93iZN7wCCUzCdLYIQ+mvJZKM10VCdn0RcuQze1R3UJTPwpPLXQIVskNMBYyPA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@napi-rs/snappy-linux-arm64-musl@7.3.3': + resolution: {integrity: sha512-AAED4cQS74xPvktsyVmz5sy8vSxG/+3d7Rq2FDBZzj3Fv6v5vux6uZnECPCAqpALCdTtJ61unqpOyqO7hZCt1Q==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@napi-rs/snappy-linux-ppc64-gnu@7.3.3': + resolution: {integrity: sha512-pofO5eSLg8ZTBwVae4WHHwJxJGZI8NEb4r5Mppvq12J/1/Hq1HecClXmfY3A7bdT2fsS2Td+Q7CI9VdBOj2sbA==} + engines: {node: '>= 10'} + cpu: [ppc64] + os: [linux] + + '@napi-rs/snappy-linux-riscv64-gnu@7.3.3': + resolution: {integrity: sha512-OiHYdeuwj0TVBXADUmmQDQ4lL1TB+8EwmXnFgOutoDVXHaUl0CJFyXLa6tYUXe+gRY8hs1v7eb0vyE97LKY06Q==} + engines: {node: '>= 10'} + cpu: [riscv64] + os: [linux] + + '@napi-rs/snappy-linux-s390x-gnu@7.3.3': + resolution: {integrity: sha512-66QdmuV9CTq/S/xifZXlMy3PsZTviAgkqqpZ+7vPCmLtuP+nqhaeupShOFf/sIDsS0gZePazPosPTeTBbhkLHg==} + engines: {node: '>= 10'} + cpu: [s390x] + os: [linux] + + '@napi-rs/snappy-linux-x64-gnu@7.3.3': + resolution: {integrity: sha512-g6KURjOxrgb8yXDEZMuIcHkUr/7TKlDwSiydEQtMtP3n4iI4sNjkcE/WNKlR3+t9bZh1pFGAq7NFRBtouQGHpQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@napi-rs/snappy-linux-x64-musl@7.3.3': + resolution: {integrity: sha512-6UvOyczHknpaKjrlKKSlX3rwpOrfJwiMG6qA0NRKJFgbcCAEUxmN9A8JvW4inP46DKdQ0bekdOxwRtAhFiTDfg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@napi-rs/snappy-openharmony-arm64@7.3.3': + resolution: {integrity: sha512-I5mak/5rTprobf7wMCk0vFhClmWOL/QiIJM4XontysnadmP/R9hAcmuFmoMV2GaxC9MblqLA7Z++gy8ou5hJVw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [openharmony] + + '@napi-rs/snappy-wasm32-wasi@7.3.3': + resolution: {integrity: sha512-+EroeygVYo9RksOchjF206frhMkfD2PaIun3yH4Zp5j/Y0oIEgs/+VhAYx/f+zHRylQYUIdLzDRclcoepvlR8Q==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + + '@napi-rs/snappy-win32-arm64-msvc@7.3.3': + resolution: {integrity: sha512-rxqfntBsCfzgOha/OlG8ld2hs6YSMGhpMUbFjeQLyVDbooY041fRXv3S7yk52DfO6H4QQhLT5+p7cW0mYdhyiQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + + '@napi-rs/snappy-win32-ia32-msvc@7.3.3': + resolution: {integrity: sha512-joRV16DsRtqjGt0CdSpxGCkO0UlHGeTZ/GqvdscoALpRKbikR2Top4C61dxEchmOd3lSYsXutuwWWGg3Nr++WA==} + engines: {node: '>= 10'} + cpu: [ia32] + os: [win32] + + '@napi-rs/snappy-win32-x64-msvc@7.3.3': + resolution: {integrity: sha512-cEnQwcsdJyOU7HSZODWsHpKuQoSYM4jaqw/hn9pOXYbRN1+02WxYppD3fdMuKN6TOA6YG5KA5PHRNeVilNX86Q==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + + '@napi-rs/wasm-runtime@1.1.1': + resolution: {integrity: sha512-p64ah1M1ld8xjWv3qbvFwHiFVWrq1yFvV4f7w+mzaqiR4IlSgkqhcRdHwsGgomwzBH51sRY4NEowLxnaBjcW/A==} + '@noble/ciphers@1.3.0': resolution: {integrity: sha512-2I0gnIVPtfnMw9ee9h1dJG7tp81+8Ob3OJb3Mv37rx5L40/b0i7djjCVvGOVqc9AEIQyvyu1i6ypKdFw8R8gQw==} engines: {node: ^14.21.3 || >=16} @@ -1589,6 +1667,36 @@ packages: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} + '@protobufjs/aspromise@1.1.2': + resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==} + + '@protobufjs/base64@1.1.2': + resolution: {integrity: sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==} + + '@protobufjs/codegen@2.0.4': + resolution: {integrity: sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==} + + '@protobufjs/eventemitter@1.1.0': + resolution: {integrity: sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==} + + '@protobufjs/fetch@1.1.0': + resolution: {integrity: sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==} + + '@protobufjs/float@1.0.2': + resolution: {integrity: sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==} + + '@protobufjs/inquire@1.1.0': + resolution: {integrity: sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==} + + '@protobufjs/path@1.1.2': + resolution: {integrity: sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==} + + '@protobufjs/pool@1.1.0': + resolution: {integrity: sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==} + + '@protobufjs/utf8@1.1.0': + resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==} + '@resolver-engine/core@0.3.3': resolution: {integrity: sha512-eB8nEbKDJJBi5p5SrvrvILn4a0h42bKtbCTri3ZxCGt6UvoQyp7HnGOfki944bUjBSHKK3RvgfViHn+kqdXtnQ==} @@ -2406,6 +2514,9 @@ packages: '@tsconfig/node16@1.0.4': resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} + '@tybys/wasm-util@0.10.1': + resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==} + '@typechain/ethers-v5@10.2.1': resolution: {integrity: sha512-n3tQmCZjRE6IU4h6lqUGiQ1j866n5MTCBJreNEHHVWXa2u9GJTaeYyU1/k+1qLutkyw+sS6VAN+AbeiTqsxd/A==} peerDependencies: @@ -2518,6 +2629,65 @@ packages: '@types/yargs@17.0.35': resolution: {integrity: sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==} + '@typescript-eslint/eslint-plugin@8.57.2': + resolution: {integrity: sha512-NZZgp0Fm2IkD+La5PR81sd+g+8oS6JwJje+aRWsDocxHkjyRw0J5L5ZTlN3LI1LlOcGL7ph3eaIUmTXMIjLk0w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + '@typescript-eslint/parser': ^8.57.2 + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/parser@8.57.2': + resolution: {integrity: sha512-30ScMRHIAD33JJQkgfGW1t8CURZtjc2JpTrq5n2HFhOefbAhb7ucc7xJwdWcrEtqUIYJ73Nybpsggii6GtAHjA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/project-service@8.57.2': + resolution: {integrity: sha512-FuH0wipFywXRTHf+bTTjNyuNQQsQC3qh/dYzaM4I4W0jrCqjCVuUh99+xd9KamUfmCGPvbO8NDngo/vsnNVqgw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/scope-manager@8.57.2': + resolution: {integrity: sha512-snZKH+W4WbWkrBqj4gUNRIGb/jipDW3qMqVJ4C9rzdFc+wLwruxk+2a5D+uoFcKPAqyqEnSb4l2ULuZf95eSkw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/tsconfig-utils@8.57.2': + resolution: {integrity: sha512-3Lm5DSM+DCowsUOJC+YqHHnKEfFh5CoGkj5Z31NQSNF4l5wdOwqGn99wmwN/LImhfY3KJnmordBq/4+VDe2eKw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/type-utils@8.57.2': + resolution: {integrity: sha512-Co6ZCShm6kIbAM/s+oYVpKFfW7LBc6FXoPXjTRQ449PPNBY8U0KZXuevz5IFuuUj2H9ss40atTaf9dlGLzbWZg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/types@8.57.2': + resolution: {integrity: sha512-/iZM6FnM4tnx9csuTxspMW4BOSegshwX5oBDznJ7S4WggL7Vczz5d2W11ecc4vRrQMQHXRSxzrCsyG5EsPPTbA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/typescript-estree@8.57.2': + resolution: {integrity: sha512-2MKM+I6g8tJxfSmFKOnHv2t8Sk3T6rF20A1Puk0svLK+uVapDZB/4pfAeB7nE83uAZrU6OxW+HmOd5wHVdXwXA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/utils@8.57.2': + resolution: {integrity: sha512-krRIbvPK1ju1WBKIefiX+bngPs+odIQUtR7kymzPfo1POVw3jlF+nLkmexdSSd4UCbDcQn+wMBATOOmpBbqgKg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/visitor-keys@8.57.2': + resolution: {integrity: sha512-zhahknjobV2FiD6Ee9iLbS7OV9zi10rG26odsQdfBO/hjSzUQbkIYgda+iNKK1zNiW2ey+Lf8MU5btN17V3dUw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@ungap/structured-clone@1.3.0': resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} @@ -2752,6 +2922,10 @@ packages: async-eventemitter@0.2.4: resolution: {integrity: sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw==} + async-exit-hook@2.0.1: + resolution: {integrity: sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw==} + engines: {node: '>=0.12.0'} + async-limiter@1.0.1: resolution: {integrity: sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==} @@ -2797,6 +2971,10 @@ packages: balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + balanced-match@4.0.4: + resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} + engines: {node: 18 || 20 || >=22} + base-x@3.0.11: resolution: {integrity: sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA==} @@ -2873,6 +3051,10 @@ packages: brace-expansion@2.0.2: resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} + brace-expansion@5.0.5: + resolution: {integrity: sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==} + engines: {node: 18 || 20 || >=22} + braces@3.0.3: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} @@ -3322,6 +3504,15 @@ packages: supports-color: optional: true + debug@4.4.3: + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + decamelize@1.2.0: resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} engines: {node: '>=0.10.0'} @@ -3577,6 +3768,10 @@ packages: resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + eslint-visitor-keys@5.0.1: + resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + eslint@5.16.0: resolution: {integrity: sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg==} engines: {node: ^6.14.0 || ^8.10.0 || >=9.10.0} @@ -4240,6 +4435,10 @@ packages: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} + ignore@7.0.5: + resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==} + engines: {node: '>= 4'} + immediate@3.0.6: resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==} @@ -4656,6 +4855,9 @@ packages: resolution: {integrity: sha512-TFYA4jnP7PVbmlBIfhlSe+WKxs9dklXMTEGcBCIvLhE/Tn3H6Gk1norupVW7m5Cnd4bLcr08AytbyV/xj7f/kQ==} engines: {node: '>= 12.0.0'} + long@5.3.2: + resolution: {integrity: sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==} + loupe@2.3.7: resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} @@ -4792,6 +4994,10 @@ packages: resolution: {integrity: sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==} engines: {node: 20 || >=22} + minimatch@10.2.4: + resolution: {integrity: sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==} + engines: {node: 18 || 20 || >=22} + minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} @@ -5254,6 +5460,10 @@ packages: proper-lockfile@4.1.2: resolution: {integrity: sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==} + protobufjs@7.5.4: + resolution: {integrity: sha512-CvexbZtbov6jW2eXAvLukXjXUW1TzFaivC46BpWc/3BpcCysb5Vffu+B3XHMm8lVEuy2Mm4XGex8hBSg1yapPg==} + engines: {node: '>=12.0.0'} + proxy-addr@2.0.7: resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} engines: {node: '>= 0.10'} @@ -5629,6 +5839,10 @@ packages: resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} engines: {node: '>=10'} + snappy@7.3.3: + resolution: {integrity: sha512-UDJVCunvgblRpfTOjo/uT7pQzfrTsSICJ4yVS4aq7SsGBaUSpJwaVP15nF//jqinSLpN7boe/BqbUmtWMTQ5MQ==} + engines: {node: '>= 10'} + solc@0.4.26: resolution: {integrity: sha512-o+c6FpkiHd+HPjmjEVpQgH7fqZ14tJpXhho+/bQXlXbliLIS/xjXb42Vxh+qQY1WCSTMQ0+a5vR9vi0MfhU6mA==} hasBin: true @@ -5716,8 +5930,8 @@ packages: engines: {node: '>=12'} hasBin: true - ssv-scanner@git+https://github.com/bloxapp/ssv-scanner.git#45068c93b3de84495f6cfad2767787c91d98aa8f: - resolution: {commit: 45068c93b3de84495f6cfad2767787c91d98aa8f, repo: https://github.com/bloxapp/ssv-scanner.git, type: git} + ssv-scanner@https://codeload.github.com/ssvlabs/ssv-scanner/tar.gz/45068c93b3de84495f6cfad2767787c91d98aa8f: + resolution: {tarball: https://codeload.github.com/ssvlabs/ssv-scanner/tar.gz/45068c93b3de84495f6cfad2767787c91d98aa8f} version: 1.0.4 engines: {node: '>=18'} hasBin: true @@ -5913,6 +6127,12 @@ packages: resolution: {integrity: sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==} engines: {node: '>= 14.0.0'} + ts-api-utils@2.5.0: + resolution: {integrity: sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==} + engines: {node: '>=18.12'} + peerDependencies: + typescript: '>=4.8.4' + ts-command-line-args@2.5.1: resolution: {integrity: sha512-H69ZwTw3rFHb5WYpQya40YAX2/w7Ut75uUECbgBIsLmM+BNuYnxsltfyyLMxy6sEeKxgijLTnQtLd0nKd6+IYw==} hasBin: true @@ -6077,6 +6297,9 @@ packages: resolution: {integrity: sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==} engines: {node: '>=4'} + url-polyfill@1.1.14: + resolution: {integrity: sha512-p4f3TTAG6ADVF3mwbXw7hGw+QJyw5CnNGvYh5fCuQQZIiuKUswqcznyV3pGDP9j0TSmC4UvRKm8kl1QsX1diiQ==} + url-set-query@1.0.0: resolution: {integrity: sha512-3AChu4NiXquPfeckE5R5cGdiHCMWJx1dwCWOmWIL4KHAziJNOFIYJlpGFeKDvwLPHovZRCxK3cYlwzqI9Vp+Gg==} @@ -6355,6 +6578,9 @@ packages: engines: {node: '>= 0.10.0'} hasBin: true + winston-loki@6.1.4: + resolution: {integrity: sha512-/j/Zf7TGLjgSBck29BkPnpJlEnGQr5xqlx8A0N6LZnXYYYvyK7lFk6FPpWiD+VMO8xjaxOu1KNF9SzWaRDsigA==} + winston-transport@4.9.0: resolution: {integrity: sha512-8drMJ4rkgaPo1Me4zD/3WLfI/zPdA9o2IipKODunnGDcuqbHwjsbB79ylv04LCGGzU0xQ6vTznOMpQGaLhhm6A==} engines: {node: '>= 12.0.0'} @@ -7704,41 +7930,6 @@ snapshots: '@babel/helper-validator-identifier@7.28.5': {} - '@biomejs/biome@2.4.9': - optionalDependencies: - '@biomejs/cli-darwin-arm64': 2.4.9 - '@biomejs/cli-darwin-x64': 2.4.9 - '@biomejs/cli-linux-arm64': 2.4.9 - '@biomejs/cli-linux-arm64-musl': 2.4.9 - '@biomejs/cli-linux-x64': 2.4.9 - '@biomejs/cli-linux-x64-musl': 2.4.9 - '@biomejs/cli-win32-arm64': 2.4.9 - '@biomejs/cli-win32-x64': 2.4.9 - - '@biomejs/cli-darwin-arm64@2.4.9': - optional: true - - '@biomejs/cli-darwin-x64@2.4.9': - optional: true - - '@biomejs/cli-linux-arm64-musl@2.4.9': - optional: true - - '@biomejs/cli-linux-arm64@2.4.9': - optional: true - - '@biomejs/cli-linux-x64-musl@2.4.9': - optional: true - - '@biomejs/cli-linux-x64@2.4.9': - optional: true - - '@biomejs/cli-win32-arm64@2.4.9': - optional: true - - '@biomejs/cli-win32-x64@2.4.9': - optional: true - '@bytecodealliance/preview2-shim@0.17.0': {} '@chainlink/contracts-ccip@1.2.1(bufferutil@4.1.0)(ethers@5.7.2(bufferutil@4.1.0)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10)': @@ -7925,6 +8116,22 @@ snapshots: enabled: 2.0.0 kuler: 2.0.0 + '@emnapi/core@1.9.1': + dependencies: + '@emnapi/wasi-threads': 1.2.0 + tslib: 2.8.1 + optional: true + + '@emnapi/runtime@1.9.1': + dependencies: + tslib: 2.8.1 + optional: true + + '@emnapi/wasi-threads@1.2.0': + dependencies: + tslib: 2.8.1 + optional: true + '@ensdomains/ens@0.4.5': dependencies: bluebird: 3.7.2 @@ -7940,6 +8147,11 @@ snapshots: eslint: 8.57.1 eslint-visitor-keys: 3.4.3 + '@eslint-community/eslint-utils@4.9.1(eslint@8.57.1)': + dependencies: + eslint: 8.57.1 + eslint-visitor-keys: 3.4.3 + '@eslint-community/regexpp@4.12.2': {} '@eslint/eslintrc@2.1.4': @@ -8872,6 +9084,69 @@ snapshots: case: 1.6.3 js-yaml: 4.1.1 + '@napi-rs/snappy-android-arm-eabi@7.3.3': + optional: true + + '@napi-rs/snappy-android-arm64@7.3.3': + optional: true + + '@napi-rs/snappy-darwin-arm64@7.3.3': + optional: true + + '@napi-rs/snappy-darwin-x64@7.3.3': + optional: true + + '@napi-rs/snappy-freebsd-x64@7.3.3': + optional: true + + '@napi-rs/snappy-linux-arm-gnueabihf@7.3.3': + optional: true + + '@napi-rs/snappy-linux-arm64-gnu@7.3.3': + optional: true + + '@napi-rs/snappy-linux-arm64-musl@7.3.3': + optional: true + + '@napi-rs/snappy-linux-ppc64-gnu@7.3.3': + optional: true + + '@napi-rs/snappy-linux-riscv64-gnu@7.3.3': + optional: true + + '@napi-rs/snappy-linux-s390x-gnu@7.3.3': + optional: true + + '@napi-rs/snappy-linux-x64-gnu@7.3.3': + optional: true + + '@napi-rs/snappy-linux-x64-musl@7.3.3': + optional: true + + '@napi-rs/snappy-openharmony-arm64@7.3.3': + optional: true + + '@napi-rs/snappy-wasm32-wasi@7.3.3': + dependencies: + '@napi-rs/wasm-runtime': 1.1.1 + optional: true + + '@napi-rs/snappy-win32-arm64-msvc@7.3.3': + optional: true + + '@napi-rs/snappy-win32-ia32-msvc@7.3.3': + optional: true + + '@napi-rs/snappy-win32-x64-msvc@7.3.3': + optional: true + + '@napi-rs/wasm-runtime@1.1.1': + dependencies: + '@emnapi/core': 1.9.1 + '@emnapi/runtime': 1.9.1 + '@tybys/wasm-util': 0.10.1 + optional: true + '@noble/ciphers@1.3.0': {} '@noble/curves@1.2.0': @@ -9258,6 +9533,29 @@ snapshots: '@pkgjs/parseargs@0.11.0': optional: true + '@protobufjs/aspromise@1.1.2': {} + + '@protobufjs/base64@1.1.2': {} + + '@protobufjs/codegen@2.0.4': {} + + '@protobufjs/eventemitter@1.1.0': {} + + '@protobufjs/fetch@1.1.0': + dependencies: + '@protobufjs/aspromise': 1.1.2 + '@protobufjs/inquire': 1.1.0 + + '@protobufjs/float@1.0.2': {} + + '@protobufjs/inquire@1.1.0': {} + + '@protobufjs/path@1.1.2': {} + + '@protobufjs/pool@1.1.0': {} + + '@protobufjs/utf8@1.1.0': {} + '@resolver-engine/core@0.3.3': dependencies: debug: 3.2.7 @@ -10428,6 +10726,11 @@ snapshots: '@tsconfig/node16@1.0.4': {} + '@tybys/wasm-util@0.10.1': + dependencies: + tslib: 2.8.1 + optional: true + '@typechain/ethers-v5@10.2.1(@ethersproject/abi@5.8.0)(@ethersproject/providers@5.8.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(ethers@5.7.2(bufferutil@4.1.0)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.9.3))(typescript@5.9.3)': dependencies: '@ethersproject/abi': 5.8.0 @@ -10551,6 +10854,97 @@ snapshots: dependencies: '@types/yargs-parser': 21.0.3 + '@typescript-eslint/eslint-plugin@8.57.2(@typescript-eslint/parser@8.57.2(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(typescript@5.9.3)': + dependencies: + '@eslint-community/regexpp': 4.12.2 + '@typescript-eslint/parser': 8.57.2(eslint@8.57.1)(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.57.2 + '@typescript-eslint/type-utils': 8.57.2(eslint@8.57.1)(typescript@5.9.3) + '@typescript-eslint/utils': 8.57.2(eslint@8.57.1)(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.57.2 + eslint: 8.57.1 + ignore: 7.0.5 + natural-compare: 1.4.0 + ts-api-utils: 2.5.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/parser@8.57.2(eslint@8.57.1)(typescript@5.9.3)': + dependencies: + '@typescript-eslint/scope-manager': 8.57.2 + '@typescript-eslint/types': 8.57.2 + '@typescript-eslint/typescript-estree': 8.57.2(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.57.2 + debug: 4.4.3 + eslint: 8.57.1 + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/project-service@8.57.2(typescript@5.9.3)': + dependencies: + '@typescript-eslint/tsconfig-utils': 8.57.2(typescript@5.9.3) + '@typescript-eslint/types': 8.57.2 + debug: 4.4.3 + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/scope-manager@8.57.2': + dependencies: + '@typescript-eslint/types': 8.57.2 + '@typescript-eslint/visitor-keys': 8.57.2 + + '@typescript-eslint/tsconfig-utils@8.57.2(typescript@5.9.3)': + dependencies: + typescript: 5.9.3 + + '@typescript-eslint/type-utils@8.57.2(eslint@8.57.1)(typescript@5.9.3)': + dependencies: + '@typescript-eslint/types': 8.57.2 + '@typescript-eslint/typescript-estree': 8.57.2(typescript@5.9.3) + '@typescript-eslint/utils': 8.57.2(eslint@8.57.1)(typescript@5.9.3) + debug: 4.4.3 + eslint: 8.57.1 + ts-api-utils: 2.5.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/types@8.57.2': {} + + '@typescript-eslint/typescript-estree@8.57.2(typescript@5.9.3)': + dependencies: + '@typescript-eslint/project-service': 8.57.2(typescript@5.9.3) + '@typescript-eslint/tsconfig-utils': 8.57.2(typescript@5.9.3) + '@typescript-eslint/types': 8.57.2 + '@typescript-eslint/visitor-keys': 8.57.2 + debug: 4.4.3 + minimatch: 10.2.4 + semver: 7.7.3 + tinyglobby: 0.2.15 + ts-api-utils: 2.5.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@8.57.2(eslint@8.57.1)(typescript@5.9.3)': + dependencies: + '@eslint-community/eslint-utils': 4.9.1(eslint@8.57.1) + '@typescript-eslint/scope-manager': 8.57.2 + '@typescript-eslint/types': 8.57.2 + '@typescript-eslint/typescript-estree': 8.57.2(typescript@5.9.3) + eslint: 8.57.1 + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/visitor-keys@8.57.2': + dependencies: + '@typescript-eslint/types': 8.57.2 + eslint-visitor-keys: 5.0.1 + '@ungap/structured-clone@1.3.0': {} '@uniswap/lib@4.0.1-alpha': {} @@ -10758,6 +11152,8 @@ snapshots: dependencies: async: 2.6.4 + async-exit-hook@2.0.1: {} + async-limiter@1.0.1: {} async-retry@1.3.3: @@ -10808,6 +11204,8 @@ snapshots: balanced-match@1.0.2: {} + balanced-match@4.0.4: {} + base-x@3.0.11: dependencies: safe-buffer: 5.2.1 @@ -10898,6 +11296,10 @@ snapshots: dependencies: balanced-match: 1.0.2 + brace-expansion@5.0.5: + dependencies: + balanced-match: 4.0.4 + braces@3.0.3: dependencies: fill-range: 7.1.1 @@ -11402,6 +11804,10 @@ snapshots: optionalDependencies: supports-color: 8.1.1 + debug@4.4.3: + dependencies: + ms: 2.1.3 + decamelize@1.2.0: {} decamelize@4.0.0: {} @@ -11650,6 +12056,8 @@ snapshots: eslint-visitor-keys@3.4.3: {} + eslint-visitor-keys@5.0.1: {} + eslint@5.16.0: dependencies: '@babel/code-frame': 7.27.1 @@ -12697,6 +13105,8 @@ snapshots: ignore@5.3.2: {} + ignore@7.0.5: {} + immediate@3.0.6: {} immediate@3.2.3: {} @@ -13092,6 +13502,8 @@ snapshots: safe-stable-stringify: 2.5.0 triple-beam: 1.4.1 + long@5.3.2: {} + loupe@2.3.7: dependencies: get-func-name: 2.0.2 @@ -13212,6 +13624,10 @@ snapshots: dependencies: '@isaacs/brace-expansion': 5.0.0 + minimatch@10.2.4: + dependencies: + brace-expansion: 5.0.5 + minimatch@3.1.2: dependencies: brace-expansion: 1.1.12 @@ -13657,6 +14073,21 @@ snapshots: retry: 0.12.0 signal-exit: 3.0.7 + protobufjs@7.5.4: + dependencies: + '@protobufjs/aspromise': 1.1.2 + '@protobufjs/base64': 1.1.2 + '@protobufjs/codegen': 2.0.4 + '@protobufjs/eventemitter': 1.1.0 + '@protobufjs/fetch': 1.1.0 + '@protobufjs/float': 1.0.2 + '@protobufjs/inquire': 1.1.0 + '@protobufjs/path': 1.1.2 + '@protobufjs/pool': 1.1.0 + '@protobufjs/utf8': 1.1.0 + '@types/node': 25.0.3 + long: 5.3.2 + proxy-addr@2.0.7: dependencies: forwarded: 0.2.0 @@ -14103,6 +14534,28 @@ snapshots: astral-regex: 2.0.0 is-fullwidth-code-point: 3.0.0 + snappy@7.3.3: + optionalDependencies: + '@napi-rs/snappy-android-arm-eabi': 7.3.3 + '@napi-rs/snappy-android-arm64': 7.3.3 + '@napi-rs/snappy-darwin-arm64': 7.3.3 + '@napi-rs/snappy-darwin-x64': 7.3.3 + '@napi-rs/snappy-freebsd-x64': 7.3.3 + '@napi-rs/snappy-linux-arm-gnueabihf': 7.3.3 + '@napi-rs/snappy-linux-arm64-gnu': 7.3.3 + '@napi-rs/snappy-linux-arm64-musl': 7.3.3 + '@napi-rs/snappy-linux-ppc64-gnu': 7.3.3 + '@napi-rs/snappy-linux-riscv64-gnu': 7.3.3 + '@napi-rs/snappy-linux-s390x-gnu': 7.3.3 + '@napi-rs/snappy-linux-x64-gnu': 7.3.3 + '@napi-rs/snappy-linux-x64-musl': 7.3.3 + '@napi-rs/snappy-openharmony-arm64': 7.3.3 + '@napi-rs/snappy-wasm32-wasi': 7.3.3 + '@napi-rs/snappy-win32-arm64-msvc': 7.3.3 + '@napi-rs/snappy-win32-ia32-msvc': 7.3.3 + '@napi-rs/snappy-win32-x64-msvc': 7.3.3 + optional: true + solc@0.4.26: dependencies: fs-extra: 0.30.0 @@ -14304,7 +14757,7 @@ snapshots: - supports-color - utf-8-validate - ssv-scanner@git+https://github.com/bloxapp/ssv-scanner.git#45068c93b3de84495f6cfad2767787c91d98aa8f(bufferutil@4.1.0)(utf-8-validate@5.0.10): + ssv-scanner@https://codeload.github.com/ssvlabs/ssv-scanner/tar.gz/45068c93b3de84495f6cfad2767787c91d98aa8f(bufferutil@4.1.0)(utf-8-validate@5.0.10): dependencies: '@types/figlet': 1.7.0 argparse: 2.0.1 @@ -14530,6 +14983,10 @@ snapshots: triple-beam@1.4.1: {} + ts-api-utils@2.5.0(typescript@5.9.3): + dependencies: + typescript: 5.9.3 + ts-command-line-args@2.5.1: dependencies: chalk: 4.1.2 @@ -14685,6 +15142,8 @@ snapshots: dependencies: prepend-http: 2.0.0 + url-polyfill@1.1.14: {} + url-set-query@1.0.0: {} url@0.11.4: @@ -15203,6 +15662,16 @@ snapshots: window-size@0.2.0: {} + winston-loki@6.1.4: + dependencies: + async-exit-hook: 2.0.1 + btoa: 1.2.1 + protobufjs: 7.5.4 + url-polyfill: 1.1.14 + winston-transport: 4.9.0 + optionalDependencies: + snappy: 7.3.3 + winston-transport@4.9.0: dependencies: logform: 2.7.0 diff --git a/contracts/scripts/cron-entrypoint.sh b/contracts/scripts/cron-entrypoint.sh index da993efaca..008412ebda 100644 --- a/contracts/scripts/cron-entrypoint.sh +++ b/contracts/scripts/cron-entrypoint.sh @@ -1,4 +1,4 @@ #!/bin/sh set -eu -exec node /app/scripts/cron-supervisor.js +exec node -r ts-node/register /app/scripts/cron-supervisor.ts diff --git a/contracts/scripts/cron-supervisor.ts b/contracts/scripts/cron-supervisor.ts index 5da4276b1e..9047538476 100644 --- a/contracts/scripts/cron-supervisor.ts +++ b/contracts/scripts/cron-supervisor.ts @@ -1,17 +1,21 @@ -import { type ChildProcess, spawn } from "node:child_process"; +import { spawn } from "node:child_process"; import { randomUUID, timingSafeEqual } from "node:crypto"; import fs from "node:fs"; import http from "node:http"; -import { type CronConfig, type CronJob, renderCrontab } from "./render-crontab"; +import { type CronJob, renderCrontab } from "./render-crontab"; // --- Configuration --- const host = process.env.HOST || "0.0.0.0"; const port = Number.parseInt(process.env.PORT || "8080", 10); -const cronConfigPath = process.env.CRON_CONFIG_PATH || "/app/cron/cron-jobs.json"; +const cronConfigPath = + process.env.CRON_CONFIG_PATH || "/app/cron/cron-jobs.json"; const cronOutputPath = process.env.CRON_OUTPUT_PATH || "/etc/cronjob"; const supercronicBin = process.env.SUPERCRONIC_BIN || "supercronic"; -const runHistoryLimit = Number.parseInt(process.env.ACTION_RUN_HISTORY_LIMIT || "500", 10); +const runHistoryLimit = Number.parseInt( + process.env.ACTION_RUN_HISTORY_LIMIT || "500", + 10 +); const actionApiToken = process.env.ACTION_API_BEARER_TOKEN; const configuredActionWorkdir = process.env.ACTION_WORKDIR || "/app"; @@ -20,12 +24,14 @@ if (!Number.isInteger(port) || port < 1 || port > 65535) { process.exit(1); } if (!actionApiToken || actionApiToken.trim().length === 0) { - console.error("[cron-supervisor] ACTION_API_BEARER_TOKEN must be set and non-empty"); + console.error( + "[cron-supervisor] ACTION_API_BEARER_TOKEN must be set and non-empty" + ); process.exit(1); } if (!Number.isInteger(runHistoryLimit) || runHistoryLimit < 1) { console.error( - `[cron-supervisor] Invalid ACTION_RUN_HISTORY_LIMIT value "${process.env.ACTION_RUN_HISTORY_LIMIT}"`, + `[cron-supervisor] Invalid ACTION_RUN_HISTORY_LIMIT value "${process.env.ACTION_RUN_HISTORY_LIMIT}"` ); process.exit(1); } @@ -37,44 +43,43 @@ const actionWorkdir = fs.existsSync(configuredActionWorkdir) if (!fs.existsSync(configuredActionWorkdir)) { console.warn( - `[cron-supervisor] ACTION_WORKDIR "${configuredActionWorkdir}" does not exist, using "${actionWorkdir}" instead`, + `[cron-supervisor] ACTION_WORKDIR "${configuredActionWorkdir}" does not exist, using "${actionWorkdir}" instead` ); } // --- HTTP helpers --- -const json = ( +function json( res: http.ServerResponse, statusCode: number, - payload: unknown, - extraHeaders: Record = {}, -) => { - res.writeHead(statusCode, { "Content-Type": "application/json", ...extraHeaders }); + payload: any, + extraHeaders: Record = {} +) { + res.writeHead(statusCode, { + "Content-Type": "application/json", + ...extraHeaders, + }); res.end(JSON.stringify(payload)); -}; +} -const expectedTokenBuffer = Buffer.from(actionApiToken!); -const isAuthorized = (headerValue: string | string[] | undefined): boolean => { +const expectedTokenBuffer = Buffer.from(actionApiToken); +function isAuthorized(headerValue: string | string[] | undefined): boolean { if (typeof headerValue !== "string") return false; - const prefix = "Bearer "; - if (!headerValue.startsWith(prefix)) return false; - const provided = headerValue.slice(prefix.length).trim(); - const providedBuffer = Buffer.from(provided); + if (!headerValue.startsWith("Bearer ")) return false; + const providedBuffer = Buffer.from(headerValue.slice(7).trim()); if (providedBuffer.length !== expectedTokenBuffer.length) return false; return timingSafeEqual(providedBuffer, expectedTokenBuffer); -}; +} // --- Run tracking --- -type RunStatus = "queued" | "running" | "succeeded" | "failed"; - interface ActionRun { runId: string; action: string; schedule: string; enabled: boolean; command?: string; - status: RunStatus; + status: "queued" | "running" | "succeeded" | "failed"; queuedAt: string; startedAt: string; finishedAt: string | null; @@ -86,44 +91,52 @@ interface ActionRun { const runStore = new Map(); const runOrder: string[] = []; -const storeRun = (run: ActionRun) => { + +function storeRun(run: ActionRun) { runStore.set(run.runId, run); runOrder.push(run.runId); while (runOrder.length > runHistoryLimit) { - const removedRunId = runOrder.shift()!; - runStore.delete(removedRunId); + runStore.delete(runOrder.shift()!); } -}; +} // --- Cron setup --- -let renderedConfig: CronConfig; -let enabledJobs: CronJob[]; -try { - const renderResult = renderCrontab({ configPath: cronConfigPath, outputPath: cronOutputPath }); - renderedConfig = renderResult.config; - enabledJobs = renderResult.enabledJobs; -} catch (error) { - console.error(`[cron-supervisor] ${(error as Error).message}`); - process.exit(1); +function initCron() { + try { + const result = renderCrontab({ + configPath: cronConfigPath, + outputPath: cronOutputPath, + }); + return result; + } catch (e: any) { + console.error(`[cron-supervisor] ${e.message}`); + process.exit(1); + } } +const { config: renderedConfig, enabledJobs } = initCron(); + console.log( - `[cron-supervisor] Generated ${enabledJobs!.length} enabled cron jobs at ${cronOutputPath}`, + `[cron-supervisor] Generated ${enabledJobs.length} enabled cron jobs at ${cronOutputPath}` ); console.log("[cron-supervisor] Generated /etc/cronjob:"); console.log(fs.readFileSync(cronOutputPath, "utf8")); -const jobsByName = new Map(renderedConfig!.jobs.map((job) => [job.name, job])); +const jobsByName = new Map( + renderedConfig.jobs.map((job) => [job.name, job]) +); // --- Action execution --- -const runAction = (action: CronJob, run: ActionRun) => { +function runAction(action: CronJob, run: ActionRun) { run.status = "running"; run.startedAt = nowIso(); run.command = action.command; - console.log(`[cron-supervisor] Starting run ${run.runId} for action "${action.name}"`); + console.log( + `[cron-supervisor] Starting run ${run.runId} for action "${action.name}"` + ); const child = spawn("/bin/sh", ["-lc", action.command], { cwd: actionWorkdir, @@ -132,13 +145,15 @@ const runAction = (action: CronJob, run: ActionRun) => { }); run.pid = child.pid ?? null; - child.on("error", (error) => { + child.on("error", (err) => { run.status = "failed"; run.finishedAt = nowIso(); run.exitCode = null; run.signal = null; - run.error = error.message; - console.error(`[cron-supervisor] Run ${run.runId} failed to start: ${error.message}`); + run.error = err.message; + console.error( + `[cron-supervisor] Run ${run.runId} failed to start: ${err.message}` + ); }); child.on("exit", (code, signal) => { @@ -147,12 +162,12 @@ const runAction = (action: CronJob, run: ActionRun) => { run.signal = signal; run.status = code === 0 ? "succeeded" : "failed"; console.log( - `[cron-supervisor] Run ${run.runId} for "${action.name}" finished with status=${run.status}, code=${code}, signal=${signal}`, + `[cron-supervisor] Run ${run.runId} for "${action.name}" finished with status=${run.status}, code=${code}, signal=${signal}` ); }); -}; +} -const triggerAction = (actionName: string): ActionRun | undefined => { +function triggerAction(actionName: string): ActionRun | undefined { const action = jobsByName.get(actionName); if (!action) return undefined; @@ -173,34 +188,35 @@ const triggerAction = (actionName: string): ActionRun | undefined => { storeRun(run); setImmediate(() => runAction(action, run)); return run; -}; +} // --- Supercronic process --- -const supercronic: ChildProcess = spawn(supercronicBin, [cronOutputPath], { +const supercronic = spawn(supercronicBin, [cronOutputPath], { env: process.env, stdio: "inherit", }); let supercronicAlive = true; -supercronic.on("error", (error) => { - console.error(`[cron-supervisor] supercronic start error: ${error.message}`); +supercronic.on("error", (err) => { + console.error(`[cron-supervisor] supercronic start error: ${err.message}`); process.exit(1); }); let shuttingDown = false; let serverClosed = false; let supercronicClosed = false; -const maybeExit = () => { + +function maybeExit() { if (shuttingDown && serverClosed && supercronicClosed) process.exit(0); -}; +} supercronic.on("exit", (code, signal) => { supercronicAlive = false; supercronicClosed = true; if (!shuttingDown) { console.error( - `[cron-supervisor] supercronic exited unexpectedly (code=${code}, signal=${signal})`, + `[cron-supervisor] supercronic exited unexpectedly (code=${code}, signal=${signal})` ); process.exit(typeof code === "number" ? code : 1); } @@ -218,49 +234,46 @@ const server = http.createServer((req, res) => { : "http"; const reqHost = req.headers.host || `${host}:${port}`; const origin = `${proto}://${reqHost}`; - const requestUrl = new URL(req.url || "/", origin); + const url = new URL(req.url || "/", origin); // Health check (unauthenticated) - if (method === "GET" && requestUrl.pathname === "/healthz") { - json(res, 200, { + if (method === "GET" && url.pathname === "/healthz") { + return json(res, 200, { status: "ok", api: "up", supercronic: { running: supercronicAlive, pid: supercronic.pid ?? null }, }); - return; } // Auth gate for /api/v1/* - if (requestUrl.pathname.startsWith("/api/v1/")) { - if (!isAuthorized(req.headers.authorization)) { - json(res, 401, { error: "Unauthorized" }); - return; - } + if ( + url.pathname.startsWith("/api/v1/") && + !isAuthorized(req.headers.authorization) + ) { + return json(res, 401, { error: "Unauthorized" }); } // List actions - if (method === "GET" && requestUrl.pathname === "/api/v1/actions") { - json(res, 200, { - actions: renderedConfig!.jobs.map((job) => ({ + if (method === "GET" && url.pathname === "/api/v1/actions") { + return json(res, 200, { + actions: renderedConfig.jobs.map((job) => ({ name: job.name, schedule: job.schedule, enabled: job.enabled, })), }); - return; } - // Trigger action - const runTriggerMatch = requestUrl.pathname.match(/^\/api\/v1\/actions\/([^/]+)\/runs$/); - if (method === "POST" && runTriggerMatch) { - const actionName = decodeURIComponent(runTriggerMatch[1]); - const run = triggerAction(actionName); - if (!run) { - json(res, 404, { error: `Unknown action "${actionName}"` }); - return; - } + // Trigger action run + const triggerMatch = url.pathname.match( + /^\/api\/v1\/actions\/([^/]+)\/runs$/ + ); + if (method === "POST" && triggerMatch) { + const run = triggerAction(decodeURIComponent(triggerMatch[1])); + if (!run) + return json(res, 404, { error: `Unknown action "${triggerMatch[1]}"` }); const statusUrl = `${origin}/api/v1/runs/${encodeURIComponent(run.runId)}`; - json( + return json( res, 202, { @@ -270,21 +283,16 @@ const server = http.createServer((req, res) => { statusUrl, startedAt: run.startedAt, }, - { Location: statusUrl }, + { Location: statusUrl } ); - return; } - // Run status - const runStatusMatch = requestUrl.pathname.match(/^\/api\/v1\/runs\/([^/]+)$/); - if (method === "GET" && runStatusMatch) { - const runId = decodeURIComponent(runStatusMatch[1]); - const run = runStore.get(runId); - if (!run) { - json(res, 404, { error: `Run "${runId}" not found` }); - return; - } - json(res, 200, { + // Get run status + const statusMatch = url.pathname.match(/^\/api\/v1\/runs\/([^/]+)$/); + if (method === "GET" && statusMatch) { + const run = runStore.get(decodeURIComponent(statusMatch[1])); + if (!run) return json(res, 404, { error: `Run not found` }); + return json(res, 200, { runId: run.runId, action: run.action, status: run.status, @@ -293,14 +301,13 @@ const server = http.createServer((req, res) => { exitCode: run.exitCode, signal: run.signal, }); - return; } json(res, 404, { error: "Not found" }); }); -server.on("error", (error) => { - console.error(`[cron-supervisor] HTTP server error: ${error.message}`); +server.on("error", (err) => { + console.error(`[cron-supervisor] HTTP server error: ${err.message}`); process.exit(1); }); @@ -311,7 +318,7 @@ server.on("close", () => { // --- Graceful shutdown --- -const shutdown = (signal: string) => { +function shutdown(signal: string) { if (shuttingDown) return; shuttingDown = true; @@ -326,7 +333,7 @@ const shutdown = (signal: string) => { } setTimeout(() => process.exit(0), 12_000).unref(); -}; +} process.on("SIGTERM", () => shutdown("SIGTERM")); process.on("SIGINT", () => shutdown("SIGINT")); diff --git a/contracts/scripts/defender-actions/rollup.config.cjs b/contracts/scripts/defender-actions/rollup.config.cjs deleted file mode 100644 index d7f6a53346..0000000000 --- a/contracts/scripts/defender-actions/rollup.config.cjs +++ /dev/null @@ -1,57 +0,0 @@ -const path = require("path"); -const resolve = require("@rollup/plugin-node-resolve"); -const commonjs = require("@rollup/plugin-commonjs"); -const json = require("@rollup/plugin-json"); -const builtins = require("builtin-modules"); -const { visualizer } = require("rollup-plugin-visualizer"); - -const commonConfig = { - plugins: [ - resolve({ preferBuiltins: true, exportConditions: ["node"] }), - commonjs(), - json({ compact: true }), - visualizer(), - ], - // Do not bundle these packages. - // ethers is required to be bundled even though its an Autotask package. - external: [ - ...builtins, - "axios", - "chai", - "@openzeppelin/defender-relay-client/lib/ethers", - "@openzeppelin/defender-sdk", - "@openzeppelin/defender-autotask-client", - "@openzeppelin/defender-kvstore-client", - "@openzeppelin/defender-relay-client/lib/ethers", - "@nomicfoundation/solidity-analyzer-darwin-arm64", - "@nomicfoundation/solidity-analyzer-darwin-x64", - "fsevents", - "ethers", - "web3", - "mocha", - ], -}; - -const actions = [ - "doAccounting", - "harvest", - "manageBribeOnSonic", - "managePassThrough", - "sonicRequestWithdrawal", - "sonicClaimWithdrawals", - "claimBribes", - "crossChainRelay", - "crossChainRelayHyperEVM", - "manageBribes", - "manageMerklBribes" -]; - -module.exports = actions.map((action) => ({ - input: path.resolve(__dirname, `${action}.js`), - output: { - file: path.resolve(__dirname, `dist/${action}/index.js`), - inlineDynamicImports: true, - format: "cjs", - }, - ...commonConfig, -})); diff --git a/contracts/scripts/render-crontab.ts b/contracts/scripts/render-crontab.ts index 3bc3630144..5d4e0f7587 100644 --- a/contracts/scripts/render-crontab.ts +++ b/contracts/scripts/render-crontab.ts @@ -1,82 +1,88 @@ -#!/usr/bin/env node - -const fs = require("node:fs"); -const path = require("node:path"); +import fs from "node:fs"; +import path from "node:path"; const DEFAULT_CONFIG_PATH = process.env.CRON_CONFIG_PATH || "/app/cron/cron-jobs.json"; const DEFAULT_OUTPUT_PATH = process.env.CRON_OUTPUT_PATH || "/etc/cronjob"; -class RenderCrontabError extends Error {} +export class RenderCrontabError extends Error {} -const isNonEmptyString = (value) => - typeof value === "string" && value.trim().length > 0; +export interface CronJob { + name: string; + schedule: string; + enabled: boolean; + command: string; +} -const hasFiveCronFields = (value) => - isNonEmptyString(value) && value.trim().split(/\s+/).length === 5; +export interface CronConfig { + jobs: CronJob[]; +} -const validateJob = (job, index, names) => { - if (!job || typeof job !== "object" || Array.isArray(job)) { - throw new RenderCrontabError(`jobs[${index}] must be an object`); - } - if (!isNonEmptyString(job.name)) { - throw new RenderCrontabError( - `jobs[${index}].name must be a non-empty string` - ); - } - if (names.has(job.name)) { - throw new RenderCrontabError(`duplicate job name "${job.name}"`); - } - names.add(job.name); - if (!hasFiveCronFields(job.schedule)) { - throw new RenderCrontabError( - `jobs[${index}].schedule must be a valid 5-field cron expression` - ); +function assertCronConfig(data: any): asserts data is CronConfig { + if (!data || typeof data !== "object" || Array.isArray(data)) { + throw new RenderCrontabError("config root must be an object"); } - if (typeof job.enabled !== "boolean") { - throw new RenderCrontabError(`jobs[${index}].enabled must be a boolean`); + if (!Array.isArray(data.jobs)) { + throw new RenderCrontabError('config must include a "jobs" array'); } - if (!isNonEmptyString(job.command)) { - throw new RenderCrontabError( - `jobs[${index}].command must be a non-empty string` - ); + const names = new Set(); + for (let i = 0; i < data.jobs.length; i++) { + const job = data.jobs[i]; + if (!job || typeof job !== "object" || Array.isArray(job)) { + throw new RenderCrontabError(`jobs[${i}] must be an object`); + } + if (typeof job.name !== "string" || !job.name.trim()) { + throw new RenderCrontabError( + `jobs[${i}].name must be a non-empty string` + ); + } + if (names.has(job.name)) { + throw new RenderCrontabError(`duplicate job name "${job.name}"`); + } + names.add(job.name); + if ( + typeof job.schedule !== "string" || + job.schedule.trim().split(/\s+/).length !== 5 + ) { + throw new RenderCrontabError( + `jobs[${i}].schedule must be a valid 5-field cron expression` + ); + } + if (typeof job.enabled !== "boolean") { + throw new RenderCrontabError(`jobs[${i}].enabled must be a boolean`); + } + if (typeof job.command !== "string" || !job.command.trim()) { + throw new RenderCrontabError( + `jobs[${i}].command must be a non-empty string` + ); + } } -}; +} -const loadCronConfig = (configPath = DEFAULT_CONFIG_PATH) => { - let parsed; +export function loadCronConfig(configPath = DEFAULT_CONFIG_PATH): CronConfig { + let parsed: any; try { - const raw = fs.readFileSync(configPath, "utf8"); - parsed = JSON.parse(raw); - } catch (error) { + parsed = JSON.parse(fs.readFileSync(configPath, "utf8")); + } catch (e: any) { throw new RenderCrontabError( - `failed to read or parse config "${configPath}": ${error.message}` + `failed to read or parse config "${configPath}": ${e.message}` ); } - - if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) { - throw new RenderCrontabError("config root must be an object"); - } - if (!Array.isArray(parsed.jobs)) { - throw new RenderCrontabError('config must include a "jobs" array'); - } - - const names = new Set(); - parsed.jobs.forEach((job, index) => validateJob(job, index, names)); + assertCronConfig(parsed); return parsed; -}; +} -const renderCrontab = ({ +export function renderCrontab({ configPath = DEFAULT_CONFIG_PATH, outputPath = DEFAULT_OUTPUT_PATH, -} = {}) => { +} = {}) { const config = loadCronConfig(configPath); const enabledJobs = config.jobs.filter((job) => job.enabled); if (enabledJobs.length === 0) { throw new RenderCrontabError("config has zero enabled jobs"); } - const lines = []; + const lines: string[] = []; for (const job of enabledJobs) { lines.push(`# ${job.name}`); lines.push(`${job.schedule} ${job.command}`); @@ -85,31 +91,17 @@ const renderCrontab = ({ fs.mkdirSync(path.dirname(outputPath), { recursive: true }); fs.writeFileSync(outputPath, `${lines.join("\n")}\n`, "utf8"); - return { - config, - enabledJobs, - outputPath, - }; -}; + return { config, enabledJobs, outputPath }; +} -const main = () => { +if (require.main === module) { try { const result = renderCrontab(); console.log( `[render-crontab] wrote ${result.enabledJobs.length} enabled jobs to ${result.outputPath}` ); - } catch (error) { - console.error(`[render-crontab] ${error.message}`); + } catch (e: any) { + console.error(`[render-crontab] ${e.message}`); process.exit(1); } -}; - -if (require.main === module) { - main(); } - -module.exports = { - RenderCrontabError, - loadCronConfig, - renderCrontab, -}; diff --git a/contracts/tasks/actions/claimBribes.ts b/contracts/tasks/actions/claimBribes.ts index c304441d4b..8fc170ace6 100644 --- a/contracts/tasks/actions/claimBribes.ts +++ b/contracts/tasks/actions/claimBribes.ts @@ -1,9 +1,10 @@ import { ethers } from "ethers"; -import { subtask, task } from "hardhat/config"; -import { getSigner } from "../../utils/signers"; +import type { Logger } from "winston"; import { logTxDetails } from "../../utils/txLogger"; +import { action } from "../lib/action"; -const COINBASE_AERO_LOCKER_MODULE = "0x60d3d6ec213d84dea193dbd79673340061178893"; +const COINBASE_AERO_LOCKER_MODULE = + "0x60d3d6ec213d84dea193dbd79673340061178893"; const OLD_GUARDIAN_MODULE = "0x26179ada0f7cb714c11a8190e1f517988c28e759"; const moduleLabels: Record = { @@ -23,60 +24,63 @@ const MODULE_ABI = [ "function claimBribes(uint256 nftIndexStart, uint256 nftIndexEnd, bool silent) external", ]; -async function manageNFTsOnModule(module: ethers.Contract, signer: ethers.Signer) { +async function manageNFTsOnModule( + module: ethers.Contract, + signer: ethers.Signer, + log: Logger +) { const label = moduleLabels[module.address.toLowerCase()]; - console.log(`Running removeAllNFTIds on module ${label}`); - let tx = await module.connect(signer).removeAllNFTIds({ - gasLimit: 20000000, - }); + log.info(`Running removeAllNFTIds on module ${label}`); + let tx = await module.connect(signer).removeAllNFTIds({ gasLimit: 20000000 }); logTxDetails(tx, "removeAllNFTIds"); await tx.wait(); - console.log(`Running fetchNFTIds on module ${label}`); - tx = await module.connect(signer).fetchNFTIds({ - gasLimit: 20000000, - }); + log.info(`Running fetchNFTIds on module ${label}`); + tx = await module.connect(signer).fetchNFTIds({ gasLimit: 20000000 }); logTxDetails(tx, "fetchNFTIds"); await tx.wait(); } -async function claimBribesFromModule(module: ethers.Contract, signer: ethers.Signer) { - const nftIdsLength = (await module.connect(signer).getNFTIdsLength()).toNumber(); +async function claimBribesFromModule( + module: ethers.Contract, + signer: ethers.Signer, + log: Logger +) { + const nftIdsLength = ( + await module.connect(signer).getNFTIdsLength() + ).toNumber(); const batchSize = batchSizes[module.address.toLowerCase()] || 50; const batchCount = Math.ceil(nftIdsLength / batchSize); - console.log(`Found ${nftIdsLength} NFTs on the module`); - console.log(`Claiming bribes in ${batchCount} batches of ${batchSize}`); + log.info(`Found ${nftIdsLength} NFTs on the module`); + log.info(`Claiming bribes in ${batchCount} batches of ${batchSize}`); for (let i = 0; i < batchCount; i++) { const start = i * batchSize; const end = Math.min(start + batchSize, nftIdsLength); - const tx = await module.connect(signer).claimBribes(start, end, true, { gasLimit: 20000000 }); - console.log(`claimBribes (batch ${i + 1} of ${batchCount})`); + const tx = await module.connect(signer).claimBribes(start, end, true, { + gasLimit: 20000000, + }); await logTxDetails(tx, `claimBribes (batch ${i + 1} of ${batchCount})`); } } -subtask("claimBribes", "Claim bribes from Aerodrome veNFT lockers on Base").setAction(async () => { - const signer = await getSigner(); - const { chainId } = await signer.provider?.getNetwork(); - if (chainId !== 8453) { - throw new Error("Only supported on Base"); - } - - const modules = [COINBASE_AERO_LOCKER_MODULE, OLD_GUARDIAN_MODULE]; - - for (const moduleAddr of modules) { - const module = new ethers.Contract(moduleAddr, MODULE_ABI, signer); - - console.log(`Claiming bribes from ${moduleLabels[moduleAddr.toLowerCase()]}`); - await manageNFTsOnModule(module, signer); - await claimBribesFromModule(module, signer); - } -}); - -task("claimBribes").setAction(async (_, __, runSuper) => { - return runSuper(); +action({ + name: "claimBribes", + description: "Claim bribes from Aerodrome veNFT lockers on Base", + chains: [8453], + run: async ({ signer, log }) => { + const modules = [COINBASE_AERO_LOCKER_MODULE, OLD_GUARDIAN_MODULE]; + + for (const moduleAddr of modules) { + const module = new ethers.Contract(moduleAddr, MODULE_ABI, signer); + log.info( + `Claiming bribes from ${moduleLabels[moduleAddr.toLowerCase()]}` + ); + await manageNFTsOnModule(module, signer, log); + await claimBribesFromModule(module, signer, log); + } + }, }); diff --git a/contracts/tasks/actions/crossChainRelay.ts b/contracts/tasks/actions/crossChainRelay.ts index 7b5b09a249..b7f7855e77 100644 --- a/contracts/tasks/actions/crossChainRelay.ts +++ b/contracts/tasks/actions/crossChainRelay.ts @@ -1,72 +1,60 @@ import { ethers } from "ethers"; -import { subtask, task } from "hardhat/config"; import { configuration } from "../../utils/cctp"; import { keyValueStoreLocalClient } from "../../utils/defender"; import { getNetworkName } from "../../utils/hardhat-helpers"; -import { getSigner } from "../../utils/signers"; import { processCctpBridgeTransactions } from "../crossChain"; - -const log = require("../../utils/logger")("action:crossChainRelay"); - -subtask( - "crossChainRelay", - "Relay CCTP bridge transactions between mainnet and Base" -).setAction(async () => { - const signer = await getSigner(); - const { chainId } = await signer.provider?.getNetwork(); - - let sourceProvider: ethers.providers.JsonRpcProvider; - - if (chainId === 1) { - if (!process.env.BASE_PROVIDER_URL) { - throw new Error("BASE_PROVIDER_URL env var required"); - } - sourceProvider = new ethers.providers.JsonRpcProvider( - process.env.BASE_PROVIDER_URL - ); - } else if (chainId === 8453) { - if (!process.env.PROVIDER_URL) { - throw new Error("PROVIDER_URL env var required"); +import { action } from "../lib/action"; + +action({ + name: "crossChainRelay", + description: "Relay CCTP bridge transactions between mainnet and Base", + chains: [1, 8453], + run: async ({ signer, chainId, log }) => { + let sourceProvider: ethers.providers.JsonRpcProvider; + + if (chainId === 1) { + if (!process.env.BASE_PROVIDER_URL) { + throw new Error("BASE_PROVIDER_URL env var required"); + } + sourceProvider = new ethers.providers.JsonRpcProvider( + process.env.BASE_PROVIDER_URL + ); + } else { + if (!process.env.PROVIDER_URL) { + throw new Error("PROVIDER_URL env var required"); + } + sourceProvider = new ethers.providers.JsonRpcProvider( + process.env.PROVIDER_URL + ); } - sourceProvider = new ethers.providers.JsonRpcProvider( - process.env.PROVIDER_URL - ); - } else { - throw new Error(`Unsupported chain id: ${chainId}`); - } - const networkName = await getNetworkName(sourceProvider); - const isMainnet = networkName === "mainnet"; - const isBase = networkName === "base"; + const networkName = await getNetworkName(sourceProvider); - let config: any; - if (isMainnet) { - config = configuration.mainnetBaseMorpho.mainnet; - } else if (isBase) { - config = configuration.mainnetBaseMorpho.base; - } else { - throw new Error(`Unsupported network name: ${networkName}`); - } - - log(`Relaying CCTP from ${networkName}`); - const store = keyValueStoreLocalClient({ - _storePath: ".store/crossChainRelay.json", - }); - - await processCctpBridgeTransactions({ - destinationChainSigner: signer, - sourceChainProvider: sourceProvider, - store, - networkName, - blockLookback: config.blockLookback, - cctpDestinationDomainId: config.cctpDestinationDomainId, - cctpSourceDomainId: config.cctpSourceDomainId, - cctpIntegrationContractAddress: config.cctpIntegrationContractAddress, - cctpIntegrationContractAddressDestination: - config.cctpIntegrationContractAddressDestination, - }); -}); + let config: any; + if (networkName === "mainnet") { + config = configuration.mainnetBaseMorpho.mainnet; + } else if (networkName === "base") { + config = configuration.mainnetBaseMorpho.base; + } else { + throw new Error(`Unsupported source network: ${networkName}`); + } -task("crossChainRelay").setAction(async (_, __, runSuper) => { - return runSuper(); + log.info(`Relaying CCTP from ${networkName}`); + const store = keyValueStoreLocalClient({ + _storePath: ".store/crossChainRelay.json", + }); + + await processCctpBridgeTransactions({ + destinationChainSigner: signer, + sourceChainProvider: sourceProvider, + store, + networkName, + blockLookback: config.blockLookback, + cctpDestinationDomainId: config.cctpDestinationDomainId, + cctpSourceDomainId: config.cctpSourceDomainId, + cctpIntegrationContractAddress: config.cctpIntegrationContractAddress, + cctpIntegrationContractAddressDestination: + config.cctpIntegrationContractAddressDestination, + }); + }, }); diff --git a/contracts/tasks/actions/crossChainRelayHyperEVM.ts b/contracts/tasks/actions/crossChainRelayHyperEVM.ts index ffe9ad88f9..0729a48614 100644 --- a/contracts/tasks/actions/crossChainRelayHyperEVM.ts +++ b/contracts/tasks/actions/crossChainRelayHyperEVM.ts @@ -1,72 +1,60 @@ import { ethers } from "ethers"; -import { subtask, task } from "hardhat/config"; import { configuration } from "../../utils/cctp"; import { keyValueStoreLocalClient } from "../../utils/defender"; import { getNetworkName } from "../../utils/hardhat-helpers"; -import { getSigner } from "../../utils/signers"; import { processCctpBridgeTransactions } from "../crossChain"; - -const log = require("../../utils/logger")("action:crossChainRelayHyperEVM"); - -subtask( - "crossChainRelayHyperEVM", - "Relay CCTP bridge transactions between mainnet and HyperEVM" -).setAction(async () => { - const signer = await getSigner(); - const { chainId } = await signer.provider?.getNetwork(); - - let sourceProvider: ethers.providers.JsonRpcProvider; - - if (chainId === 1) { - if (!process.env.HYPEREVM_PROVIDER_URL) { - throw new Error("HYPEREVM_PROVIDER_URL env var required"); - } - sourceProvider = new ethers.providers.JsonRpcProvider( - process.env.HYPEREVM_PROVIDER_URL - ); - } else if (chainId === 999) { - if (!process.env.PROVIDER_URL) { - throw new Error("PROVIDER_URL env var required"); +import { action } from "../lib/action"; + +action({ + name: "crossChainRelayHyperEVM", + description: "Relay CCTP bridge transactions between mainnet and HyperEVM", + chains: [1, 999], + run: async ({ signer, chainId, log }) => { + let sourceProvider: ethers.providers.JsonRpcProvider; + + if (chainId === 1) { + if (!process.env.HYPEREVM_PROVIDER_URL) { + throw new Error("HYPEREVM_PROVIDER_URL env var required"); + } + sourceProvider = new ethers.providers.JsonRpcProvider( + process.env.HYPEREVM_PROVIDER_URL + ); + } else { + if (!process.env.PROVIDER_URL) { + throw new Error("PROVIDER_URL env var required"); + } + sourceProvider = new ethers.providers.JsonRpcProvider( + process.env.PROVIDER_URL + ); } - sourceProvider = new ethers.providers.JsonRpcProvider( - process.env.PROVIDER_URL - ); - } else { - throw new Error(`Unsupported chain id: ${chainId}`); - } - const networkName = await getNetworkName(sourceProvider); - const isMainnet = networkName === "mainnet"; - const isHyperEVM = networkName === "hyperevm"; + const networkName = await getNetworkName(sourceProvider); - let config: any; - if (isMainnet) { - config = configuration.mainnetHyperEVMMorpho.mainnet; - } else if (isHyperEVM) { - config = configuration.mainnetHyperEVMMorpho.hyperevm; - } else { - throw new Error(`Unsupported network name: ${networkName}`); - } - - log(`Relaying CCTP from ${networkName}`); - const store = keyValueStoreLocalClient({ - _storePath: ".store/crossChainRelayHyperEVM.json", - }); - - await processCctpBridgeTransactions({ - destinationChainSigner: signer, - sourceChainProvider: sourceProvider, - store, - networkName, - blockLookback: config.blockLookback, - cctpDestinationDomainId: config.cctpDestinationDomainId, - cctpSourceDomainId: config.cctpSourceDomainId, - cctpIntegrationContractAddress: config.cctpIntegrationContractAddress, - cctpIntegrationContractAddressDestination: - config.cctpIntegrationContractAddressDestination, - }); -}); + let config: any; + if (networkName === "mainnet") { + config = configuration.mainnetHyperEVMMorpho.mainnet; + } else if (networkName === "hyperevm") { + config = configuration.mainnetHyperEVMMorpho.hyperevm; + } else { + throw new Error(`Unsupported source network: ${networkName}`); + } -task("crossChainRelayHyperEVM").setAction(async (_, __, runSuper) => { - return runSuper(); + log.info(`Relaying CCTP from ${networkName}`); + const store = keyValueStoreLocalClient({ + _storePath: ".store/crossChainRelayHyperEVM.json", + }); + + await processCctpBridgeTransactions({ + destinationChainSigner: signer, + sourceChainProvider: sourceProvider, + store, + networkName, + blockLookback: config.blockLookback, + cctpDestinationDomainId: config.cctpDestinationDomainId, + cctpSourceDomainId: config.cctpSourceDomainId, + cctpIntegrationContractAddress: config.cctpIntegrationContractAddress, + cctpIntegrationContractAddressDestination: + config.cctpIntegrationContractAddressDestination, + }); + }, }); diff --git a/contracts/tasks/actions/doAccounting.ts b/contracts/tasks/actions/doAccounting.ts index ad7dfcdba9..e9cf303646 100644 --- a/contracts/tasks/actions/doAccounting.ts +++ b/contracts/tasks/actions/doAccounting.ts @@ -1,27 +1,27 @@ import { ethers } from "ethers"; -import { subtask, task, types } from "hardhat/config"; +import { types } from "hardhat/config"; +import type { Logger } from "winston"; import { address as hoodiConsolidationControllerAddress } from "../../deployments/hoodi/ConsolidationController.json"; import { abi as consolidationControllerAbi, address as mainnetConsolidationControllerAddress, } from "../../deployments/mainnet/ConsolidationController.json"; import addresses from "../../utils/addresses"; -import { getSigner } from "../../utils/signers"; import { logTxDetails } from "../../utils/txLogger"; - -const log = require("../../utils/logger")("action:doAccounting"); +import { action } from "../lib/action"; async function doAccountingForProxy( proxyName: string, networkName: string, signer: ethers.Signer, - consolidationController: ethers.Contract + consolidationController: ethers.Contract, + log: Logger ) { const nativeStakingProxyAddress = (addresses as any)[networkName][proxyName]; if (!nativeStakingProxyAddress) { throw new Error(`Failed to resolve ${proxyName} on ${networkName}`); } - log(`Resolved ${proxyName} address to ${nativeStakingProxyAddress}`); + log.info(`Resolved ${proxyName} address to ${nativeStakingProxyAddress}`); const tx = await consolidationController .connect(signer) @@ -29,40 +29,31 @@ async function doAccountingForProxy( await logTxDetails(tx, `doAccounting for ${proxyName} via controller`); } -subtask( - "doAccounting", - "Account for consensus rewards and validator exits in the Native Staking Strategy" -) - .addOptionalParam( - "index", - "The number of the Native Staking Contract deployed.", - undefined, - types.int - ) - .addOptionalParam( - "consol", - "Call the consolidation controller instead of the strategy", - false, - types.boolean - ) - .setAction(async () => { - const signer = await getSigner(); - const { chainId } = await signer.provider?.getNetwork(); - - const networkName = - chainId === 1 ? "mainnet" : chainId === 560048 ? "hoodi" : undefined; - if (!networkName) { - throw new Error( - `Action only supports mainnet and hoodi, not chainId ${chainId}` - ); - } - log(`Network: ${networkName} (${chainId})`); - +action({ + name: "doAccounting", + description: + "Account for consensus rewards and validator exits in the Native Staking Strategy", + chains: [1, 560048], + params: (t) => { + t.addOptionalParam( + "index", + "The number of the Native Staking Contract deployed.", + undefined, + types.int + ); + t.addOptionalParam( + "consol", + "Call the consolidation controller instead of the strategy", + false, + types.boolean + ); + }, + run: async ({ signer, networkName, log }) => { const controllerAddress = networkName === "mainnet" ? mainnetConsolidationControllerAddress : hoodiConsolidationControllerAddress; - log(`ConsolidationController: ${controllerAddress}`); + log.info(`ConsolidationController: ${controllerAddress}`); const consolidationController = new ethers.Contract( controllerAddress, @@ -74,16 +65,15 @@ subtask( "NativeStakingSSVStrategy2Proxy", networkName, signer, - consolidationController + consolidationController, + log ); await doAccountingForProxy( "NativeStakingSSVStrategy3Proxy", networkName, signer, - consolidationController + consolidationController, + log ); - }); - -task("doAccounting").setAction(async (_, __, runSuper) => { - return runSuper(); + }, }); diff --git a/contracts/tasks/actions/harvest.ts b/contracts/tasks/actions/harvest.ts index ed4050bdda..de525cf39a 100644 --- a/contracts/tasks/actions/harvest.ts +++ b/contracts/tasks/actions/harvest.ts @@ -1,65 +1,59 @@ import { ethers } from "ethers"; -import { subtask, task } from "hardhat/config"; - import addresses from "../../utils/addresses"; import { claimStrategyRewards, shouldHarvestFromNativeStakingStrategy, } from "../../utils/harvest"; -import { getSigner } from "../../utils/signers"; import { logTxDetails } from "../../utils/txLogger"; +import { action } from "../lib/action"; import { claimMerklRewards } from "../merkl"; const harvesterAbi = require("../../abi/harvester.json"); -const log = require("../../utils/logger")("action:harvest"); -subtask( - "harvest", - "Harvest and swap rewards from native staking strategies" -).setAction(async () => { - const signer = await getSigner(); - const { chainId } = await signer.provider?.getNetwork(); - if (chainId !== 1) { - throw new Error( - `Action should only be run on mainnet, not chainId ${chainId}` +action({ + name: "harvest", + description: "Harvest and swap rewards from native staking strategies", + chains: [1], + run: async ({ signer, log }) => { + const harvesterAddress = addresses.mainnet.OETHHarvesterSimpleProxy; + log.info(`Resolved OETH Harvester Simple address to ${harvesterAddress}`); + const harvester = new ethers.Contract( + harvesterAddress, + harvesterAbi, + signer ); - } - const harvesterAddress = addresses.mainnet.OETHHarvesterSimpleProxy; - log(`Resolved OETH Harvester Simple address to ${harvesterAddress}`); - const harvester = new ethers.Contract(harvesterAddress, harvesterAbi, signer); + const nativeStakingStrategies = [ + addresses.mainnet.NativeStakingSSVStrategy2Proxy, + addresses.mainnet.NativeStakingSSVStrategy3Proxy, + ]; + + const strategiesToHarvest: string[] = []; + for (const strategy of nativeStakingStrategies) { + log.info(`Checking strategy ${strategy}`); + const shouldHarvest = await shouldHarvestFromNativeStakingStrategy( + strategy, + signer + ); + if (shouldHarvest) { + log.info(`Will harvest from ${strategy}`); + strategiesToHarvest.push(strategy); + } + } - const nativeStakingStrategies = [ - addresses.mainnet.NativeStakingSSVStrategy2Proxy, - addresses.mainnet.NativeStakingSSVStrategy3Proxy, - ]; + if (strategiesToHarvest.length > 0) { + const tx = await harvester.connect(signer)["harvestAndTransfer(address[])"]( + strategiesToHarvest, + ); + await logTxDetails(tx, "harvestAndTransfer"); + } else { + log.info("No native staking strategies require harvesting at this time"); + } - const strategiesToHarvest: string[] = []; - for (const strategy of nativeStakingStrategies) { - log(`Checking strategy ${strategy}`); - const shouldHarvest = await shouldHarvestFromNativeStakingStrategy( - strategy, + await claimMerklRewards( + addresses.mainnet.MorphoOUSDv2StrategyProxy, signer ); - if (shouldHarvest) { - log(`Will harvest from ${strategy}`); - strategiesToHarvest.push(strategy); - } - } - - if (strategiesToHarvest.length > 0) { - const tx = await harvester - .connect(signer) - ["harvestAndTransfer(address[])"](strategiesToHarvest); - await logTxDetails(tx, "harvestAndTransfer"); - } else { - log("No native staking strategies require harvesting at this time"); - } - - await claimMerklRewards(addresses.mainnet.MorphoOUSDv2StrategyProxy, signer); - await claimStrategyRewards(signer); -}); - -task("harvest").setAction(async (_, __, runSuper) => { - return runSuper(); + await claimStrategyRewards(signer); + }, }); diff --git a/contracts/tasks/actions/healthcheck.ts b/contracts/tasks/actions/healthcheck.ts new file mode 100644 index 0000000000..b32e701791 --- /dev/null +++ b/contracts/tasks/actions/healthcheck.ts @@ -0,0 +1,15 @@ +import { action } from "../lib/action"; + +action({ + name: "healthcheck", + description: "Simple test task to verify the action execution pipeline", + run: async ({ log, chainId, networkName }) => { + log.info(`Network: ${networkName} (${chainId})`); + log.info(`Node version: ${process.version}`); + log.info( + `AWS KMS available: ${!!( + process.env.AWS_ACCESS_KEY_ID && process.env.AWS_SECRET_ACCESS_KEY + )}` + ); + }, +}); diff --git a/contracts/tasks/actions/manageBribeOnSonic.ts b/contracts/tasks/actions/manageBribeOnSonic.ts index 04fdd3cdee..13f2581ab1 100644 --- a/contracts/tasks/actions/manageBribeOnSonic.ts +++ b/contracts/tasks/actions/manageBribeOnSonic.ts @@ -1,36 +1,30 @@ import { ethers } from "ethers"; -import { subtask, task } from "hardhat/config"; -import { getSigner } from "../../utils/signers"; import { logTxDetails } from "../../utils/txLogger"; +import { action } from "../lib/action"; const poolBoosterSwapXAbi = require("../../abi/poolBoosterSwapX.json"); const poolBoosterCentralRegistryAbi = require("../../abi/poolBoosterCentralRegistry.json"); -const log = require("../../utils/logger")("action:manageBribeOnSonic"); -subtask( - "manageBribeOnSonic", - "Manage bribes on all Sonic pool booster factories" -).setAction(async () => { - const signer = await getSigner(); +action({ + name: "manageBribeOnSonic", + description: "Manage bribes on all Sonic pool booster factories", + chains: [146], + run: async ({ signer, log }) => { + const poolBoosterCentralRegistryProxyAddress = + "0x4F3B656Aa5Fb5E708bF7B63D6ff71623eb4a218A"; + const poolBoosterCentralRegistryProxy = new ethers.Contract( + poolBoosterCentralRegistryProxyAddress, + poolBoosterCentralRegistryAbi, + signer + ); - const poolBoosterCentralRegistryProxyAddress = - "0x4F3B656Aa5Fb5E708bF7B63D6ff71623eb4a218A"; - const poolBoosterCentralRegistryProxy = new ethers.Contract( - poolBoosterCentralRegistryProxyAddress, - poolBoosterCentralRegistryAbi, - signer - ); + const factories = await poolBoosterCentralRegistryProxy.getAllFactories(); + log.info(`Factories: ${factories}`); - const factories = await poolBoosterCentralRegistryProxy.getAllFactories(); - log(`Factories: ${factories}`); - - for (const f of factories) { - const factory = new ethers.Contract(f, poolBoosterSwapXAbi, signer); - const tx = await factory.connect(signer).bribeAll([]); - await logTxDetails(tx, `Bribed all pools in factory ${f}`); - } -}); - -task("manageBribeOnSonic").setAction(async (_, __, runSuper) => { - return runSuper(); + for (const f of factories) { + const factory = new ethers.Contract(f, poolBoosterSwapXAbi, signer); + const tx = await factory.connect(signer).bribeAll([]); + await logTxDetails(tx, `Bribed all pools in factory ${f}`); + } + }, }); diff --git a/contracts/tasks/actions/manageBribes.ts b/contracts/tasks/actions/manageBribes.ts index 938b0c5137..18591b4655 100644 --- a/contracts/tasks/actions/manageBribes.ts +++ b/contracts/tasks/actions/manageBribes.ts @@ -1,46 +1,42 @@ -import { subtask, task, types } from "hardhat/config"; -import { getSigner } from "../../utils/signers"; +import { types } from "hardhat/config"; +import { action } from "../lib/action"; import { manageBribes } from "../poolBooster"; -const log = require("../../utils/logger")("action:manageBribes"); - -subtask( - "manageCurvePoolBoosterBribes", - "Calls manageBribes on the CurvePoolBoosterBribesModule and calculates the rewards per vote based on the target efficiency" -) - .addOptionalParam( - "efficiency", - "Target efficiency (0-10, e.g. 1 for 100%, 0.5 for 50%)", - "1", - types.string - ) - .addOptionalParam( - "skipRewardPerVote", - "Skip setting RewardPerVote (pass array of zeros)", - false, - types.boolean - ) - .addOptionalParam( - "chunkSize", - "Number of pool boosters to manage per transaction", - 4, - types.int - ) - .setAction(async (taskArgs: any) => { - const signer = await getSigner(); - - log( - `Managing max reward per vote with target efficiency ${taskArgs.efficiency}, skip reward per vote ${taskArgs.skipRewardPerVote}, and chunk size ${taskArgs.chunkSize}` +action({ + name: "manageCurvePoolBoosterBribes", + description: + "Calls manageBribes on the CurvePoolBoosterBribesModule and calculates the rewards per vote based on the target efficiency", + chains: [1], + params: (t) => { + t.addOptionalParam( + "efficiency", + "Target efficiency (0-10, e.g. 1 for 100%, 0.5 for 50%)", + "1", + types.string + ); + t.addOptionalParam( + "skipRewardPerVote", + "Skip setting RewardPerVote (pass array of zeros)", + false, + types.boolean + ); + t.addOptionalParam( + "chunkSize", + "Number of pool boosters to manage per transaction", + 4, + types.int + ); + }, + run: async ({ signer, log, args }) => { + log.info( + `Managing max reward per vote with target efficiency ${args.efficiency}, skip reward per vote ${args.skipRewardPerVote}, chunk size ${args.chunkSize}` ); await manageBribes({ signer, provider: signer.provider!, - targetEfficiency: taskArgs.efficiency, - skipRewardPerVote: taskArgs.skipRewardPerVote, - chunkSize: taskArgs.chunkSize, + targetEfficiency: args.efficiency, + skipRewardPerVote: args.skipRewardPerVote, + chunkSize: args.chunkSize, }); - }); - -task("manageCurvePoolBoosterBribes").setAction(async (_, __, runSuper) => { - return runSuper(); + }, }); diff --git a/contracts/tasks/actions/manageMerklBribes.ts b/contracts/tasks/actions/manageMerklBribes.ts index 577dc32c27..95e9cba6ec 100644 --- a/contracts/tasks/actions/manageMerklBribes.ts +++ b/contracts/tasks/actions/manageMerklBribes.ts @@ -1,33 +1,32 @@ -import { subtask, task, types } from "hardhat/config"; -import { getSigner } from "../../utils/signers"; +import { types } from "hardhat/config"; +import { action } from "../lib/action"; import { manageMerklBribes } from "../merklPoolBooster"; -const log = require("../../utils/logger")("action:manageMerklBribes"); - -subtask( - "manageMerklPoolBoosterBribes", - "Calls bribeAll on the MerklPoolBoosterBribesModule through the Gnosis Safe" -) - .addOptionalParam( - "exclusionList", - "Comma-separated list of pool booster addresses to exclude", - "", - types.string - ) - .setAction(async (taskArgs: any) => { - const signer = await getSigner(); - const exclusionList = taskArgs.exclusionList - ? taskArgs.exclusionList.split(",").map((s: string) => s.trim()) +action({ + name: "manageMerklPoolBoosterBribes", + description: + "Calls bribeAll on the MerklPoolBoosterBribesModule through the Gnosis Safe", + chains: [1], + params: (t) => { + t.addOptionalParam( + "exclusionList", + "Comma-separated list of pool booster addresses to exclude", + "", + types.string + ); + }, + run: async ({ signer, log, args }) => { + const exclusionList = args.exclusionList + ? args.exclusionList.split(",").map((s: string) => s.trim()) : []; - log(`Calling bribeAll with exclusion list: [${exclusionList.join(", ")}]`); + log.info( + `Calling bribeAll with exclusion list: [${exclusionList.join(", ")}]` + ); await manageMerklBribes({ provider: signer.provider!, signer, exclusionList, }); - }); - -task("manageMerklPoolBoosterBribes").setAction(async (_, __, runSuper) => { - return runSuper(); + }, }); diff --git a/contracts/tasks/actions/managePassThrough.ts b/contracts/tasks/actions/managePassThrough.ts index 2617107d5c..9b4a97078d 100644 --- a/contracts/tasks/actions/managePassThrough.ts +++ b/contracts/tasks/actions/managePassThrough.ts @@ -1,16 +1,11 @@ -import { subtask, task } from "hardhat/config"; - import { transferTokens } from "../../utils/managePassThrough"; -import { getSigner } from "../../utils/signers"; - -subtask( - "managePassThrough", - "Transfer tokens via pass-through mechanism" -).setAction(async () => { - const signer = await getSigner(); - await transferTokens({ signer }); -}); +import { action } from "../lib/action"; -task("managePassThrough").setAction(async (_, __, runSuper) => { - return runSuper(); +action({ + name: "managePassThrough", + description: "Transfer tokens via pass-through mechanism", + chains: [1], + run: async ({ signer }) => { + await transferTokens({ signer }); + }, }); diff --git a/contracts/tasks/actions/registerValidators.ts b/contracts/tasks/actions/registerValidators.ts index 635d2dd037..9eb3694ad9 100644 --- a/contracts/tasks/actions/registerValidators.ts +++ b/contracts/tasks/actions/registerValidators.ts @@ -1,68 +1,59 @@ import { ethers } from "ethers"; -import { subtask, task, types } from "hardhat/config"; +import { types } from "hardhat/config"; import addresses from "../../utils/addresses"; import { keyValueStoreLocalClient } from "../../utils/defender"; -import { getSigner } from "../../utils/signers"; import { registerValidators } from "../../utils/validator"; +import { action } from "../lib/action"; const nativeStakingStrategyAbi = require("../../abi/native_staking_SSV_strategy.json"); const IWETH9Abi = require("../../abi/IWETH9.json"); -const log = require("../../utils/logger")("action:registerValidators"); - -subtask( - "registerValidators", - "Creates the required amount of new SSV validators and stakes ETH" -) - .addOptionalParam( - "days", - "SSV Cluster operational time in days", - 2, - types.int - ) - .addOptionalParam( - "validators", - "The number of validators to register. defaults to the max that can be registered", - undefined, - types.int - ) - .addOptionalParam("clear", "Clear storage", false, types.boolean) - .addOptionalParam( - "eth", - "Override the days option and set the amount of ETH to deposit to the cluster.", - undefined, - types.float - ) - .addOptionalParam( - "uuid", - "uuid of P2P's request SSV validator API call.", - undefined, - types.string - ) - .addOptionalParam( - "index", - "The number of the Native Staking Contract deployed.", - undefined, - types.int - ) - .addOptionalParam( - "ssvAmount", - "Amount of SSV to deposit to the cluster. Overrides days.", - 0, - types.float - ) - .setAction(async (taskArgs: any) => { - const signer = await getSigner(); - const { chainId } = await signer.provider?.getNetwork(); - const networkName = chainId === 1 ? "mainnet" : "hoodi"; - log(`Network: ${networkName} (${chainId})`); +action({ + name: "registerValidators", + description: + "Creates the required amount of new SSV validators and stakes ETH", + chains: [1, 560048], + params: (t) => { + t.addOptionalParam( + "days", + "SSV Cluster operational time in days", + 2, + types.int + ); + t.addOptionalParam( + "validators", + "The number of validators to register. defaults to the max that can be registered", + undefined, + types.int + ); + t.addOptionalParam("clear", "Clear storage", false, types.boolean); + t.addOptionalParam( + "eth", + "Override the days option and set the amount of ETH to deposit to the cluster.", + undefined, + types.float + ); + t.addOptionalParam( + "uuid", + "uuid of P2P's request SSV validator API call.", + undefined, + types.string + ); + t.addOptionalParam( + "index", + "The number of the Native Staking Contract deployed.", + undefined, + types.int + ); + }, + run: async ({ signer, chainId, networkName, log, args }) => { const store = keyValueStoreLocalClient({ _storePath: ".store/registerValidators.json", }); const nativeStakingProxyAddress = (addresses as any)[networkName] .NativeStakingSSVStrategy3Proxy; - log(`NativeStakingStrategy: ${nativeStakingProxyAddress}`); + log.info(`NativeStakingStrategy: ${nativeStakingProxyAddress}`); const nativeStakingStrategy = new ethers.Contract( nativeStakingProxyAddress, nativeStakingStrategyAbi, @@ -70,7 +61,7 @@ subtask( ); const wethAddress = (addresses as any)[networkName].WETH; - log(`WETH: ${wethAddress}`); + log.info(`WETH: ${wethAddress}`); const WETH = new ethers.Contract(wethAddress, IWETH9Abi, signer); const feeAccumulatorAddress = @@ -89,11 +80,11 @@ subtask( chainId === 1 ? "api.p2p.org" : "api-test-holesky.p2p.org"; const awsS3AccessKeyId = process.env.AWS_ACCESS_S3_KEY_ID; - const awsS3SexcretAccessKeyId = process.env.AWS_SECRET_S3_ACCESS_KEY; + const awsS3SecretAccessKeyId = process.env.AWS_SECRET_S3_ACCESS_KEY; const s3BucketName = process.env.VALIDATOR_KEYS_S3_BUCKET_NAME; if (!awsS3AccessKeyId) throw new Error("AWS_ACCESS_S3_KEY_ID not set"); - if (!awsS3SexcretAccessKeyId) + if (!awsS3SecretAccessKeyId) throw new Error("AWS_SECRET_S3_ACCESS_KEY not set"); if (!s3BucketName) throw new Error("VALIDATOR_KEYS_S3_BUCKET_NAME not set"); @@ -105,17 +96,14 @@ subtask( feeAccumulatorAddress, p2p_api_key, p2p_base_url, - validatorSpawnOperationalPeriodInDays: taskArgs.days, - clear: taskArgs.clear, - uuid: taskArgs.uuid, - maxValidatorsToRegister: taskArgs.validators, - ethAmount: taskArgs.eth, + validatorSpawnOperationalPeriodInDays: args.days, + clear: args.clear, + uuid: args.uuid, + maxValidatorsToRegister: args.validators, + ethAmount: args.eth, awsS3AccessKeyId, - awsS3SexcretAccessKeyId, + awsS3SecretAccessKeyId, s3BucketName, }); - }); - -task("registerValidators").setAction(async (_, __, runSuper) => { - return runSuper(); + }, }); diff --git a/contracts/tasks/actions/sonicClaimWithdrawals.ts b/contracts/tasks/actions/sonicClaimWithdrawals.ts index 755831dd3f..34057f9032 100644 --- a/contracts/tasks/actions/sonicClaimWithdrawals.ts +++ b/contracts/tasks/actions/sonicClaimWithdrawals.ts @@ -1,15 +1,11 @@ -import { subtask, task } from "hardhat/config"; -import { getSigner } from "../../utils/signers"; import { withdrawFromSFC } from "../../utils/sonicActions"; +import { action } from "../lib/action"; -subtask( - "sonicWithdraw", - "Withdraw native S from a previously undelegated validator" -).setAction(async () => { - const signer = await getSigner(); - await withdrawFromSFC({ signer }); -}); - -task("sonicWithdraw").setAction(async (_, __, runSuper) => { - return runSuper(); +action({ + name: "sonicWithdraw", + description: "Withdraw native S from a previously undelegated validator", + chains: [146], + run: async ({ signer }) => { + await withdrawFromSFC({ signer }); + }, }); diff --git a/contracts/tasks/actions/sonicRequestWithdrawal.ts b/contracts/tasks/actions/sonicRequestWithdrawal.ts index 22350e91cb..7a5055e1d2 100644 --- a/contracts/tasks/actions/sonicRequestWithdrawal.ts +++ b/contracts/tasks/actions/sonicRequestWithdrawal.ts @@ -1,35 +1,36 @@ -import { subtask, task, types } from "hardhat/config"; -import { getSigner } from "../../utils/signers"; +import { types } from "hardhat/config"; import { undelegateValidator } from "../../utils/sonicActions"; +import { action } from "../lib/action"; -subtask("sonicUndelegate", "Remove liquidity from a Sonic validator") - .addOptionalParam( - "id", - "Validator identifier. 15, 16, 17 or 18", - undefined, - types.int - ) - .addOptionalParam( - "amount", - "Amount of liquidity to remove", - undefined, - types.float - ) - .addOptionalParam( - "buffer", - "Percentage of total assets to keep as buffer in basis points. 100 = 1%", - 50, - types.float - ) - .setAction(async (taskArgs: any) => { - const signer = await getSigner(); +action({ + name: "sonicUndelegate", + description: "Remove liquidity from a Sonic validator", + chains: [146], + params: (t) => { + t.addOptionalParam( + "id", + "Validator identifier. 15, 16, 17 or 18", + undefined, + types.int + ); + t.addOptionalParam( + "amount", + "Amount of liquidity to remove", + undefined, + types.float + ); + t.addOptionalParam( + "buffer", + "Percentage of total assets to keep as buffer in basis points. 100 = 1%", + 50, + types.float + ); + }, + run: async ({ signer, args }) => { await undelegateValidator({ - ...taskArgs, - bufferPct: taskArgs.buffer, + ...args, + bufferPct: args.buffer, signer, }); - }); - -task("sonicUndelegate").setAction(async (_, __, runSuper) => { - return runSuper(); + }, }); diff --git a/contracts/tasks/actions/stakeValidators.ts b/contracts/tasks/actions/stakeValidators.ts index 76b5ec72ba..21dfd927d0 100644 --- a/contracts/tasks/actions/stakeValidators.ts +++ b/contracts/tasks/actions/stakeValidators.ts @@ -1,43 +1,40 @@ import { ethers } from "ethers"; -import { subtask, task, types } from "hardhat/config"; +import { types } from "hardhat/config"; import addresses from "../../utils/addresses"; import { keyValueStoreLocalClient } from "../../utils/defender"; -import { getSigner } from "../../utils/signers"; import { stakeValidators } from "../../utils/validator"; +import { action } from "../lib/action"; const nativeStakingStrategyAbi = require("../../abi/native_staking_SSV_strategy.json"); const IWETH9Abi = require("../../abi/IWETH9.json"); -const log = require("../../utils/logger")("action:stakeValidators"); - -subtask( - "stakeValidators", - "Creates the required amount of new SSV validators and stakes ETH" -) - .addOptionalParam( - "uuid", - "uuid of P2P's request SSV validator API call", - undefined, - types.string - ) - .addOptionalParam( - "index", - "The number of the Native Staking Contract deployed.", - undefined, - types.int - ) - .setAction(async (taskArgs: any) => { - const signer = await getSigner(); - const { chainId } = await signer.provider?.getNetwork(); - const networkName = chainId === 1 ? "mainnet" : "holesky"; - log(`Network: ${networkName} (${chainId})`); +action({ + name: "stakeValidators", + description: + "Creates the required amount of new SSV validators and stakes ETH", + chains: [1, 17000], + params: (t) => { + t.addOptionalParam( + "uuid", + "uuid of P2P's request SSV validator API call", + undefined, + types.string + ); + t.addOptionalParam( + "index", + "The number of the Native Staking Contract deployed.", + undefined, + types.int + ); + }, + run: async ({ signer, chainId, networkName, log, args }) => { const store = keyValueStoreLocalClient({ _storePath: ".store/stakeValidators.json", }); const nativeStakingProxyAddress = (addresses as any)[networkName] .NativeStakingSSVStrategy3Proxy; - log(`NativeStakingStrategy: ${nativeStakingProxyAddress}`); + log.info(`NativeStakingStrategy: ${nativeStakingProxyAddress}`); const nativeStakingStrategy = new ethers.Contract( nativeStakingProxyAddress, nativeStakingStrategyAbi, @@ -45,7 +42,7 @@ subtask( ); const wethAddress = (addresses as any)[networkName].WETH; - log(`WETH: ${wethAddress}`); + log.info(`WETH: ${wethAddress}`); const WETH = new ethers.Contract(wethAddress, IWETH9Abi, signer); const p2p_api_key = @@ -76,13 +73,10 @@ subtask( WETH, p2p_api_key, p2p_base_url, - uuid: taskArgs.uuid, + uuid: args.uuid, awsS3AccessKeyId, awsS3SexcretAccessKeyId, s3BucketName, }); - }); - -task("stakeValidators").setAction(async (_, __, runSuper) => { - return runSuper(); + }, }); diff --git a/contracts/tasks/lib/action.ts b/contracts/tasks/lib/action.ts new file mode 100644 index 0000000000..a1fea1aac9 --- /dev/null +++ b/contracts/tasks/lib/action.ts @@ -0,0 +1,80 @@ +import type { ethers } from "ethers"; +import { subtask, task } from "hardhat/config"; +import type { ConfigurableTaskDefinition } from "hardhat/types"; +import type { Logger } from "winston"; + +import { getSigner } from "../../utils/signers"; +import logger from "./logger"; + +export interface ActionContext { + signer: ethers.Signer; + chainId: number; + networkName: string; + log: Logger; + args: Record; +} + +interface ActionConfig { + name: string; + description: string; + chains?: number[]; + params?: (t: ConfigurableTaskDefinition) => void; + run: (ctx: ActionContext) => Promise; +} + +const CHAIN_NAMES: Record = { + 1: "mainnet", + 8453: "base", + 146: "sonic", + 560048: "hoodi", + 999: "hyperevm", + 17000: "holesky", + 42161: "arbitrum", +}; + +export function action(config: ActionConfig) { + const { name, description, chains, params, run } = config; + + const definition = subtask(name, description); + + if (params) { + params(definition); + } + + definition.setAction(async (taskArgs: Record) => { + const log = logger.child({ action: name }); + const startTime = Date.now(); + + log.info("Starting"); + + const signer = await getSigner(); + const network = await signer.provider!.getNetwork(); + const chainId = network.chainId; + const networkName = CHAIN_NAMES[chainId] ?? `unknown-${chainId}`; + + if (chains && !chains.includes(chainId)) { + const valid = chains + .map((id) => `${CHAIN_NAMES[id] ?? id} (${id})`) + .join(", "); + throw new Error( + `${name} only supports ${valid}, not ${networkName} (${chainId})` + ); + } + + log.info(`Running on ${networkName} (${chainId})`); + + try { + await run({ signer, chainId, networkName, log, args: taskArgs }); + const elapsed = ((Date.now() - startTime) / 1000).toFixed(1); + log.info(`Completed in ${elapsed}s`); + } catch (err: any) { + const elapsed = ((Date.now() - startTime) / 1000).toFixed(1); + log.error(`Failed after ${elapsed}s: ${err.message}`); + throw err; + } + }); + + task(name).setAction(async (_, __, runSuper) => { + return runSuper(); + }); +} diff --git a/contracts/tasks/lib/client.ts b/contracts/tasks/lib/client.ts index b6fc251942..87e46aec6d 100644 --- a/contracts/tasks/lib/client.ts +++ b/contracts/tasks/lib/client.ts @@ -1,4 +1,10 @@ -import { type Chain, createPublicClient, createWalletClient, http, type LocalAccount } from "viem"; +import { + type Chain, + createPublicClient, + createWalletClient, + http, + type LocalAccount, +} from "viem"; import { base, holesky, hoodi, hyperEvm, mainnet, sonic } from "viem/chains"; import { requireEnv } from "./env"; @@ -12,10 +18,10 @@ const CHAIN_CONFIG: Record = { }; const CHAIN_BY_NAME: Record = Object.fromEntries( - Object.values(CHAIN_CONFIG).map((c) => [c.chain.name.toLowerCase(), c.chain]), + Object.values(CHAIN_CONFIG).map((c) => [c.chain.name.toLowerCase(), c.chain]) ); const CHAIN_BY_ID: Record = Object.fromEntries( - Object.values(CHAIN_CONFIG).map((c) => [c.chain.id, c.chain]), + Object.values(CHAIN_CONFIG).map((c) => [c.chain.id, c.chain]) ); /** diff --git a/contracts/tasks/lib/env.ts b/contracts/tasks/lib/env.ts index 70d8ef924b..70eff0a0a4 100644 --- a/contracts/tasks/lib/env.ts +++ b/contracts/tasks/lib/env.ts @@ -10,6 +10,9 @@ export function requireEnv(name: string): string { return value; } -export function optionalEnv(name: string, fallback?: string): string | undefined { +export function optionalEnv( + name: string, + fallback?: string +): string | undefined { return process.env[name] ?? fallback; } diff --git a/contracts/tasks/lib/logger.ts b/contracts/tasks/lib/logger.ts index 008ca9be4c..493ae72541 100644 --- a/contracts/tasks/lib/logger.ts +++ b/contracts/tasks/lib/logger.ts @@ -1,4 +1,29 @@ import { createLogger, format, transports } from "winston"; +import LokiTransport from "winston-loki"; + +const lokiUrl = process.env.LOKI_URL; +const lokiUser = process.env.LOKI_USER; +const lokiApiKey = process.env.LOKI_API_KEY; + +const logTransports: InstanceType< + typeof transports.Console | typeof LokiTransport +>[] = [new transports.Console()]; + +if (lokiUrl) { + logTransports.push( + new LokiTransport({ + host: lokiUrl, + basicAuth: + lokiUser && lokiApiKey ? `${lokiUser}:${lokiApiKey}` : undefined, + labels: { app: "origin-dollar" }, + json: true, + replaceTimestamp: true, + onConnectionError: (err: Error) => { + console.error("Loki connection error:", err.message); + }, + }) + ); +} const logger = createLogger({ level: process.env.LOG_LEVEL ?? "info", @@ -9,9 +34,9 @@ const logger = createLogger({ const prefix = action ? `[${action}] ` : ""; const extra = Object.keys(rest).length ? ` ${JSON.stringify(rest)}` : ""; return `${timestamp} ${level}: ${prefix}${message}${extra}`; - }), + }) ), - transports: [new transports.Console()], + transports: logTransports, }); export default logger; diff --git a/contracts/tasks/lib/signer.ts b/contracts/tasks/lib/signer.ts index 82a4e048c9..489c431902 100644 --- a/contracts/tasks/lib/signer.ts +++ b/contracts/tasks/lib/signer.ts @@ -1,4 +1,8 @@ -import { GetPublicKeyCommand, KMSClient, SignCommand } from "@aws-sdk/client-kms"; +import { + GetPublicKeyCommand, + KMSClient, + SignCommand, +} from "@aws-sdk/client-kms"; import { DirectKmsTransactionSigner } from "@lastdotnet/purrikey"; import { ethers } from "ethers"; import { @@ -21,7 +25,8 @@ const DEFAULT_KMS_RELAYER_ID = "mrk-248128595151466bb7f7b9a56501a98f"; const AWS_KMS_REGION = "us-east-1"; // secp256k1 curve order -const SECP256K1_N = 0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141n; +const SECP256K1_N = + 0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141n; function getKmsKeyId(): string { return optionalEnv("KMS_RELAYER_ID") ?? DEFAULT_KMS_RELAYER_ID; @@ -33,15 +38,18 @@ function getKmsKeyId(): string { function decodeDerSignature(der: Uint8Array): { r: bigint; s: bigint } { let pos = 0; - if (der[pos++] !== 0x30) throw new Error("Invalid DER: expected SEQUENCE (0x30)"); + if (der[pos++] !== 0x30) + throw new Error("Invalid DER: expected SEQUENCE (0x30)"); pos++; // skip sequence length - if (der[pos++] !== 0x02) throw new Error("Invalid DER: expected INTEGER (0x02) for r"); + if (der[pos++] !== 0x02) + throw new Error("Invalid DER: expected INTEGER (0x02) for r"); const rLen = der[pos++]; let rBytes = der.slice(pos, pos + rLen); pos += rLen; - if (der[pos++] !== 0x02) throw new Error("Invalid DER: expected INTEGER (0x02) for s"); + if (der[pos++] !== 0x02) + throw new Error("Invalid DER: expected INTEGER (0x02) for s"); const sLen = der[pos++]; let sBytes = der.slice(pos, pos + sLen); @@ -69,7 +77,9 @@ function extractPublicKeyFromDer(der: Uint8Array): Uint8Array { const pubKey = der.slice(-65); if (pubKey[0] !== 0x04) { throw new Error( - `Expected uncompressed public key prefix 0x04, got 0x${pubKey[0].toString(16)}`, + `Expected uncompressed public key prefix 0x04, got 0x${pubKey[0].toString( + 16 + )}` ); } return pubKey; @@ -91,8 +101,13 @@ function publicKeyToAddress(uncompressedKey: Uint8Array): `0x${string}` { /** * Resolve the Ethereum address for a KMS key via GetPublicKey. */ -async function resolveKmsAddress(kmsClient: KMSClient, keyId: string): Promise<`0x${string}`> { - const response = await kmsClient.send(new GetPublicKeyCommand({ KeyId: keyId })); +async function resolveKmsAddress( + kmsClient: KMSClient, + keyId: string +): Promise<`0x${string}`> { + const response = await kmsClient.send( + new GetPublicKeyCommand({ KeyId: keyId }) + ); if (!response.PublicKey) { throw new Error("No public key returned from KMS"); } @@ -112,7 +127,7 @@ async function kmsSign( kmsClient: KMSClient, keyId: string, digest: Hex, - expectedAddress: `0x${string}`, + expectedAddress: `0x${string}` ): Promise<{ r: Hex; s: Hex; yParity: 0 | 1 }> { const response = await kmsClient.send( new SignCommand({ @@ -120,14 +135,15 @@ async function kmsSign( Message: Buffer.from(hexToBytes(digest)), MessageType: "DIGEST", SigningAlgorithm: "ECDSA_SHA_256", - }), + }) ); if (!response.Signature) { throw new Error("No signature returned from KMS"); } - let { r, s } = decodeDerSignature(new Uint8Array(response.Signature)); + const { r, s: rawS } = decodeDerSignature(new Uint8Array(response.Signature)); + let s = rawS; // EIP-2: canonicalize s to lower half of curve order if (s > SECP256K1_N / 2n) { @@ -149,7 +165,9 @@ async function kmsSign( } } - throw new Error(`KMS signature recovery failed: could not recover ${expectedAddress}`); + throw new Error( + `KMS signature recovery failed: could not recover ${expectedAddress}` + ); } /** @@ -203,7 +221,7 @@ export async function getKmsAccount(): Promise { * Used for contracts/ utility functions that expect ethers.Signer. */ export function getEthersSigner( - provider: ethers.providers.JsonRpcProvider, + provider: ethers.providers.JsonRpcProvider ): DirectKmsTransactionSigner { const keyId = getKmsKeyId(); return new DirectKmsTransactionSigner(keyId, provider, AWS_KMS_REGION); @@ -212,6 +230,8 @@ export function getEthersSigner( /** * Create an ethers v5 JsonRpcProvider from an RPC URL. */ -export function getEthersProvider(rpcUrl: string): ethers.providers.JsonRpcProvider { +export function getEthersProvider( + rpcUrl: string +): ethers.providers.JsonRpcProvider { return new ethers.providers.JsonRpcProvider(rpcUrl); } diff --git a/contracts/tasks/lib/store.ts b/contracts/tasks/lib/store.ts index fe766bf9e3..02ece0cb5d 100644 --- a/contracts/tasks/lib/store.ts +++ b/contracts/tasks/lib/store.ts @@ -7,6 +7,7 @@ export interface KeyValueStore { del(key: string): Promise; } +// WARNING // TODO: Replace with persistent KV storage. /** diff --git a/contracts/tasks/lib/transaction.ts b/contracts/tasks/lib/transaction.ts index 391ea3d0ba..4bff888495 100644 --- a/contracts/tasks/lib/transaction.ts +++ b/contracts/tasks/lib/transaction.ts @@ -1,4 +1,9 @@ -import { formatEther, type Hash, type PublicClient, type TransactionReceipt } from "viem"; +import { + formatEther, + type Hash, + type PublicClient, + type TransactionReceipt, +} from "viem"; import type { Logger } from "winston"; /** @@ -8,13 +13,13 @@ export async function validateTransaction( client: PublicClient, hash: Hash, method: string, - log: Logger, + log: Logger ): Promise { const tx = await client.getTransaction({ hash }); log.info( `Sent ${method} tx ${hash} from ${tx.from} (${ tx.gasPrice ? Number(tx.gasPrice) / 1e9 : "unknown" - } Gwei)`, + } Gwei)` ); const receipt = await client.waitForTransactionReceipt({ hash }); @@ -23,9 +28,12 @@ export async function validateTransaction( throw new Error(`Transaction ${method} failed`); } - const txCost = receipt.gasUsed * (receipt.effectiveGasPrice ?? tx.gasPrice ?? 0n); + const txCost = + receipt.gasUsed * (receipt.effectiveGasPrice ?? tx.gasPrice ?? 0n); log.info( - `Processed ${method} in block ${receipt.blockNumber}, ${receipt.gasUsed} gas, ${formatEther(txCost)} ETH`, + `Processed ${method} in block ${receipt.blockNumber}, ${ + receipt.gasUsed + } gas, ${formatEther(txCost)} ETH` ); return receipt; diff --git a/contracts/tasks/tasks.js b/contracts/tasks/tasks.js index 3e84ee9372..77816c3e35 100644 --- a/contracts/tasks/tasks.js +++ b/contracts/tasks/tasks.js @@ -66,8 +66,7 @@ const { curveSwapTask, curvePoolTask, } = require("./curve"); -const { calculateMaxPricePerVoteTask, manageBribes } = require("./poolBooster"); -const { manageMerklBribesTask } = require("./merklPoolBooster"); +const { calculateMaxPricePerVoteTask } = require("./poolBooster"); const { depositSSV, migrateClusterToETH, @@ -93,9 +92,7 @@ const { transferToken, } = require("./strategy"); const { - validatorOperationsConfig, exitValidator, - doAccounting, manuallyFixAccounting, resetStakeETHTally, setStakeETHThreshold, @@ -120,12 +117,6 @@ const { } = require("./validatorCompound"); const { tenderlySync, tenderlyUpload } = require("./tenderly"); const { setDefaultValidator, snapSonicStaking } = require("../utils/sonic"); -const { - undelegateValidator, - withdrawFromSFC, -} = require("../utils/sonicActions"); -const { registerValidators, stakeValidators } = require("../utils/validator"); -const { harvestAndSwap } = require("./harvest"); const { deployForceEtherSender, forceSend } = require("./simulation"); const { sleep } = require("../utils/time"); const { lzBridgeToken, lzSetConfig } = require("./layerzero"); diff --git a/contracts/tsconfig.json b/contracts/tsconfig.json index 3ddf709722..29ca948372 100644 --- a/contracts/tsconfig.json +++ b/contracts/tsconfig.json @@ -1,6 +1,6 @@ { "compilerOptions": { - "target": "ES2020", + "target": "ES2022", "module": "CommonJS", "moduleResolution": "node", "strict": true, @@ -10,8 +10,8 @@ "resolveJsonModule": true, "skipLibCheck": true, "outDir": "dist", - "types": [] + "types": ["node"] }, - "include": ["tasks/actions/**/*.ts", "tasks/lib/**/*.ts"], + "include": ["tasks/actions/**/*.ts", "tasks/lib/**/*.ts", "scripts/**/*.ts"], "exclude": ["node_modules", "dist"] } diff --git a/contracts/utils/validator.js b/contracts/utils/validator.js index 733d24dc1c..aab18dabf5 100644 --- a/contracts/utils/validator.js +++ b/contracts/utils/validator.js @@ -57,7 +57,7 @@ const registerValidators = async ({ maxValidatorsToRegister, ethAmount, awsS3AccessKeyId, - awsS3SexcretAccessKeyId, + awsS3SecretAccessKeyId, s3BucketName, }) => { if (uuid && clear) { @@ -135,7 +135,7 @@ const registerValidators = async ({ p2p_api_key, p2p_base_url, awsS3AccessKeyId, - awsS3SexcretAccessKeyId, + awsS3SecretAccessKeyId, s3BucketName ); currentState = await getState(store); diff --git a/contracts/yarn.lock b/contracts/yarn.lock deleted file mode 100644 index 6934ee503b..0000000000 --- a/contracts/yarn.lock +++ /dev/null @@ -1,12090 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@adraffy/ens-normalize@1.10.1": - version "1.10.1" - 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.11.0": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@adraffy/ens-normalize/-/ens-normalize-1.11.1.tgz#6c2d657d4b2dfb37f8ea811dcb3e60843d4ac24a" - integrity sha512-nhCBV3quEgesuf7c7KYfperqSS14T8bYuvJ8PcLJp6znkZpFc0AuW4qBtr8eKVyPPe/8RSr7sglCWPU5eaxwKQ== - -"@aws-crypto/crc32@5.2.0": - version "5.2.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/crc32/-/crc32-5.2.0.tgz#cfcc22570949c98c6689cfcbd2d693d36cdae2e1" - integrity sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg== - dependencies: - "@aws-crypto/util" "^5.2.0" - "@aws-sdk/types" "^3.222.0" - tslib "^2.6.2" - -"@aws-crypto/crc32c@5.2.0": - version "5.2.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/crc32c/-/crc32c-5.2.0.tgz#4e34aab7f419307821509a98b9b08e84e0c1917e" - integrity sha512-+iWb8qaHLYKrNvGRbiYRHSdKRWhto5XlZUEBwDjYNf+ly5SVYG6zEoYIdxvf5R3zyeP16w4PLBn3rH1xc74Rag== - dependencies: - "@aws-crypto/util" "^5.2.0" - "@aws-sdk/types" "^3.222.0" - tslib "^2.6.2" - -"@aws-crypto/sha1-browser@5.2.0": - version "5.2.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/sha1-browser/-/sha1-browser-5.2.0.tgz#b0ee2d2821d3861f017e965ef3b4cb38e3b6a0f4" - integrity sha512-OH6lveCFfcDjX4dbAvCFSYUjJZjDr/3XJ3xHtjn3Oj5b9RjojQo8npoLeA/bNwkOkrSQ0wgrHzXk4tDRxGKJeg== - dependencies: - "@aws-crypto/supports-web-crypto" "^5.2.0" - "@aws-crypto/util" "^5.2.0" - "@aws-sdk/types" "^3.222.0" - "@aws-sdk/util-locate-window" "^3.0.0" - "@smithy/util-utf8" "^2.0.0" - tslib "^2.6.2" - -"@aws-crypto/sha256-browser@5.2.0": - version "5.2.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz#153895ef1dba6f9fce38af550e0ef58988eb649e" - integrity sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw== - dependencies: - "@aws-crypto/sha256-js" "^5.2.0" - "@aws-crypto/supports-web-crypto" "^5.2.0" - "@aws-crypto/util" "^5.2.0" - "@aws-sdk/types" "^3.222.0" - "@aws-sdk/util-locate-window" "^3.0.0" - "@smithy/util-utf8" "^2.0.0" - tslib "^2.6.2" - -"@aws-crypto/sha256-js@1.2.2": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-js/-/sha256-js-1.2.2.tgz#02acd1a1fda92896fc5a28ec7c6e164644ea32fc" - integrity sha512-Nr1QJIbW/afYYGzYvrF70LtaHrIRtd4TNAglX8BvlfxJLZ45SAmueIKYl5tWoNBPzp65ymXGFK0Bb1vZUpuc9g== - dependencies: - "@aws-crypto/util" "^1.2.2" - "@aws-sdk/types" "^3.1.0" - tslib "^1.11.1" - -"@aws-crypto/sha256-js@5.2.0", "@aws-crypto/sha256-js@^5.2.0": - version "5.2.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz#c4fdb773fdbed9a664fc1a95724e206cf3860042" - integrity sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA== - dependencies: - "@aws-crypto/util" "^5.2.0" - "@aws-sdk/types" "^3.222.0" - tslib "^2.6.2" - -"@aws-crypto/supports-web-crypto@^5.2.0": - version "5.2.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz#a1e399af29269be08e695109aa15da0a07b5b5fb" - integrity sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg== - dependencies: - tslib "^2.6.2" - -"@aws-crypto/util@^1.2.2": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@aws-crypto/util/-/util-1.2.2.tgz#b28f7897730eb6538b21c18bd4de22d0ea09003c" - integrity sha512-H8PjG5WJ4wz0UXAFXeJjWCW1vkvIJ3qUUD+rGRwJ2/hj+xT58Qle2MTql/2MGzkU+1JLAFuR6aJpLAjHwhmwwg== - dependencies: - "@aws-sdk/types" "^3.1.0" - "@aws-sdk/util-utf8-browser" "^3.0.0" - tslib "^1.11.1" - -"@aws-crypto/util@^5.2.0": - version "5.2.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/util/-/util-5.2.0.tgz#71284c9cffe7927ddadac793c14f14886d3876da" - integrity sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ== - dependencies: - "@aws-sdk/types" "^3.222.0" - "@smithy/util-utf8" "^2.0.0" - tslib "^2.6.2" - -"@aws-sdk/client-kms@^3.400.0", "@aws-sdk/client-kms@^3.675.0": - version "3.1018.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-kms/-/client-kms-3.1018.0.tgz#d80d1d1f5cb1947a50291d45dec454843f620681" - integrity sha512-CAWH8nTzbeWDolybD2u1tDbJWVOkOosOcbxDhG1e/mP6h3ZVwryNR8GGYcVNpU5kPGPh8OjccTt0qdF9bJXr/Q== - dependencies: - "@aws-crypto/sha256-browser" "5.2.0" - "@aws-crypto/sha256-js" "5.2.0" - "@aws-sdk/core" "^3.973.25" - "@aws-sdk/credential-provider-node" "^3.972.26" - "@aws-sdk/middleware-host-header" "^3.972.8" - "@aws-sdk/middleware-logger" "^3.972.8" - "@aws-sdk/middleware-recursion-detection" "^3.972.9" - "@aws-sdk/middleware-user-agent" "^3.972.26" - "@aws-sdk/region-config-resolver" "^3.972.10" - "@aws-sdk/types" "^3.973.6" - "@aws-sdk/util-endpoints" "^3.996.5" - "@aws-sdk/util-user-agent-browser" "^3.972.8" - "@aws-sdk/util-user-agent-node" "^3.973.12" - "@smithy/config-resolver" "^4.4.13" - "@smithy/core" "^3.23.12" - "@smithy/fetch-http-handler" "^5.3.15" - "@smithy/hash-node" "^4.2.12" - "@smithy/invalid-dependency" "^4.2.12" - "@smithy/middleware-content-length" "^4.2.12" - "@smithy/middleware-endpoint" "^4.4.27" - "@smithy/middleware-retry" "^4.4.44" - "@smithy/middleware-serde" "^4.2.15" - "@smithy/middleware-stack" "^4.2.12" - "@smithy/node-config-provider" "^4.3.12" - "@smithy/node-http-handler" "^4.5.0" - "@smithy/protocol-http" "^5.3.12" - "@smithy/smithy-client" "^4.12.7" - "@smithy/types" "^4.13.1" - "@smithy/url-parser" "^4.2.12" - "@smithy/util-base64" "^4.3.2" - "@smithy/util-body-length-browser" "^4.2.2" - "@smithy/util-body-length-node" "^4.2.3" - "@smithy/util-defaults-mode-browser" "^4.3.43" - "@smithy/util-defaults-mode-node" "^4.2.47" - "@smithy/util-endpoints" "^3.3.3" - "@smithy/util-middleware" "^4.2.12" - "@smithy/util-retry" "^4.2.12" - "@smithy/util-utf8" "^4.2.2" - tslib "^2.6.2" - -"@aws-sdk/client-lambda@^3.563.0": - version "3.1018.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-lambda/-/client-lambda-3.1018.0.tgz#a8c15fcdee0f57f19154531c79396fcc095b75c9" - integrity sha512-VXnYMYXhkP0C7bVKmfPjzCPEW2hefeTFwgm0egSNqFWPt0llFov1ScKAG6ukI/4N29oGp6ZSuUaaMkmC2p7rRw== - dependencies: - "@aws-crypto/sha256-browser" "5.2.0" - "@aws-crypto/sha256-js" "5.2.0" - "@aws-sdk/core" "^3.973.25" - "@aws-sdk/credential-provider-node" "^3.972.26" - "@aws-sdk/middleware-host-header" "^3.972.8" - "@aws-sdk/middleware-logger" "^3.972.8" - "@aws-sdk/middleware-recursion-detection" "^3.972.9" - "@aws-sdk/middleware-user-agent" "^3.972.26" - "@aws-sdk/region-config-resolver" "^3.972.10" - "@aws-sdk/types" "^3.973.6" - "@aws-sdk/util-endpoints" "^3.996.5" - "@aws-sdk/util-user-agent-browser" "^3.972.8" - "@aws-sdk/util-user-agent-node" "^3.973.12" - "@smithy/config-resolver" "^4.4.13" - "@smithy/core" "^3.23.12" - "@smithy/eventstream-serde-browser" "^4.2.12" - "@smithy/eventstream-serde-config-resolver" "^4.3.12" - "@smithy/eventstream-serde-node" "^4.2.12" - "@smithy/fetch-http-handler" "^5.3.15" - "@smithy/hash-node" "^4.2.12" - "@smithy/invalid-dependency" "^4.2.12" - "@smithy/middleware-content-length" "^4.2.12" - "@smithy/middleware-endpoint" "^4.4.27" - "@smithy/middleware-retry" "^4.4.44" - "@smithy/middleware-serde" "^4.2.15" - "@smithy/middleware-stack" "^4.2.12" - "@smithy/node-config-provider" "^4.3.12" - "@smithy/node-http-handler" "^4.5.0" - "@smithy/protocol-http" "^5.3.12" - "@smithy/smithy-client" "^4.12.7" - "@smithy/types" "^4.13.1" - "@smithy/url-parser" "^4.2.12" - "@smithy/util-base64" "^4.3.2" - "@smithy/util-body-length-browser" "^4.2.2" - "@smithy/util-body-length-node" "^4.2.3" - "@smithy/util-defaults-mode-browser" "^4.3.43" - "@smithy/util-defaults-mode-node" "^4.2.47" - "@smithy/util-endpoints" "^3.3.3" - "@smithy/util-middleware" "^4.2.12" - "@smithy/util-retry" "^4.2.12" - "@smithy/util-stream" "^4.5.20" - "@smithy/util-utf8" "^4.2.2" - "@smithy/util-waiter" "^4.2.13" - tslib "^2.6.2" - -"@aws-sdk/client-s3@3.600.0": - version "3.600.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-s3/-/client-s3-3.600.0.tgz#3ce415d9257b8d1c8385bc26c6c86e6403aff83c" - integrity sha512-iYoKbJTputbf+ubkX6gSK/y/4uJEBRaXZ18jykLdBQ8UJuGrk2gqvV8h7OlGAhToCeysmmMqM0vDWyLt6lP8nw== - dependencies: - "@aws-crypto/sha1-browser" "5.2.0" - "@aws-crypto/sha256-browser" "5.2.0" - "@aws-crypto/sha256-js" "5.2.0" - "@aws-sdk/client-sso-oidc" "3.600.0" - "@aws-sdk/client-sts" "3.600.0" - "@aws-sdk/core" "3.598.0" - "@aws-sdk/credential-provider-node" "3.600.0" - "@aws-sdk/middleware-bucket-endpoint" "3.598.0" - "@aws-sdk/middleware-expect-continue" "3.598.0" - "@aws-sdk/middleware-flexible-checksums" "3.598.0" - "@aws-sdk/middleware-host-header" "3.598.0" - "@aws-sdk/middleware-location-constraint" "3.598.0" - "@aws-sdk/middleware-logger" "3.598.0" - "@aws-sdk/middleware-recursion-detection" "3.598.0" - "@aws-sdk/middleware-sdk-s3" "3.598.0" - "@aws-sdk/middleware-signing" "3.598.0" - "@aws-sdk/middleware-ssec" "3.598.0" - "@aws-sdk/middleware-user-agent" "3.598.0" - "@aws-sdk/region-config-resolver" "3.598.0" - "@aws-sdk/signature-v4-multi-region" "3.598.0" - "@aws-sdk/types" "3.598.0" - "@aws-sdk/util-endpoints" "3.598.0" - "@aws-sdk/util-user-agent-browser" "3.598.0" - "@aws-sdk/util-user-agent-node" "3.598.0" - "@aws-sdk/xml-builder" "3.598.0" - "@smithy/config-resolver" "^3.0.2" - "@smithy/core" "^2.2.1" - "@smithy/eventstream-serde-browser" "^3.0.2" - "@smithy/eventstream-serde-config-resolver" "^3.0.1" - "@smithy/eventstream-serde-node" "^3.0.2" - "@smithy/fetch-http-handler" "^3.0.2" - "@smithy/hash-blob-browser" "^3.1.0" - "@smithy/hash-node" "^3.0.1" - "@smithy/hash-stream-node" "^3.1.0" - "@smithy/invalid-dependency" "^3.0.1" - "@smithy/md5-js" "^3.0.1" - "@smithy/middleware-content-length" "^3.0.1" - "@smithy/middleware-endpoint" "^3.0.2" - "@smithy/middleware-retry" "^3.0.4" - "@smithy/middleware-serde" "^3.0.1" - "@smithy/middleware-stack" "^3.0.1" - "@smithy/node-config-provider" "^3.1.1" - "@smithy/node-http-handler" "^3.0.1" - "@smithy/protocol-http" "^4.0.1" - "@smithy/smithy-client" "^3.1.2" - "@smithy/types" "^3.1.0" - "@smithy/url-parser" "^3.0.1" - "@smithy/util-base64" "^3.0.0" - "@smithy/util-body-length-browser" "^3.0.0" - "@smithy/util-body-length-node" "^3.0.0" - "@smithy/util-defaults-mode-browser" "^3.0.4" - "@smithy/util-defaults-mode-node" "^3.0.4" - "@smithy/util-endpoints" "^2.0.2" - "@smithy/util-retry" "^3.0.1" - "@smithy/util-stream" "^3.0.2" - "@smithy/util-utf8" "^3.0.0" - "@smithy/util-waiter" "^3.0.1" - tslib "^2.6.2" - -"@aws-sdk/client-sso-oidc@3.600.0": - version "3.600.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.600.0.tgz#37966020af55a052822b9ef21adc38d2afcb0f34" - integrity sha512-7+I8RWURGfzvChyNQSyj5/tKrqRbzRl7H+BnTOf/4Vsw1nFOi5ROhlhD4X/Y0QCTacxnaoNcIrqnY7uGGvVRzw== - dependencies: - "@aws-crypto/sha256-browser" "5.2.0" - "@aws-crypto/sha256-js" "5.2.0" - "@aws-sdk/client-sts" "3.600.0" - "@aws-sdk/core" "3.598.0" - "@aws-sdk/credential-provider-node" "3.600.0" - "@aws-sdk/middleware-host-header" "3.598.0" - "@aws-sdk/middleware-logger" "3.598.0" - "@aws-sdk/middleware-recursion-detection" "3.598.0" - "@aws-sdk/middleware-user-agent" "3.598.0" - "@aws-sdk/region-config-resolver" "3.598.0" - "@aws-sdk/types" "3.598.0" - "@aws-sdk/util-endpoints" "3.598.0" - "@aws-sdk/util-user-agent-browser" "3.598.0" - "@aws-sdk/util-user-agent-node" "3.598.0" - "@smithy/config-resolver" "^3.0.2" - "@smithy/core" "^2.2.1" - "@smithy/fetch-http-handler" "^3.0.2" - "@smithy/hash-node" "^3.0.1" - "@smithy/invalid-dependency" "^3.0.1" - "@smithy/middleware-content-length" "^3.0.1" - "@smithy/middleware-endpoint" "^3.0.2" - "@smithy/middleware-retry" "^3.0.4" - "@smithy/middleware-serde" "^3.0.1" - "@smithy/middleware-stack" "^3.0.1" - "@smithy/node-config-provider" "^3.1.1" - "@smithy/node-http-handler" "^3.0.1" - "@smithy/protocol-http" "^4.0.1" - "@smithy/smithy-client" "^3.1.2" - "@smithy/types" "^3.1.0" - "@smithy/url-parser" "^3.0.1" - "@smithy/util-base64" "^3.0.0" - "@smithy/util-body-length-browser" "^3.0.0" - "@smithy/util-body-length-node" "^3.0.0" - "@smithy/util-defaults-mode-browser" "^3.0.4" - "@smithy/util-defaults-mode-node" "^3.0.4" - "@smithy/util-endpoints" "^2.0.2" - "@smithy/util-middleware" "^3.0.1" - "@smithy/util-retry" "^3.0.1" - "@smithy/util-utf8" "^3.0.0" - tslib "^2.6.2" - -"@aws-sdk/client-sso@3.598.0": - version "3.598.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.598.0.tgz#aef58e198e504d3b3d1ba345355650a67d21facb" - integrity sha512-nOI5lqPYa+YZlrrzwAJywJSw3MKVjvu6Ge2fCqQUNYMfxFB0NAaDFnl0EPjXi+sEbtCuz/uWE77poHbqiZ+7Iw== - dependencies: - "@aws-crypto/sha256-browser" "5.2.0" - "@aws-crypto/sha256-js" "5.2.0" - "@aws-sdk/core" "3.598.0" - "@aws-sdk/middleware-host-header" "3.598.0" - "@aws-sdk/middleware-logger" "3.598.0" - "@aws-sdk/middleware-recursion-detection" "3.598.0" - "@aws-sdk/middleware-user-agent" "3.598.0" - "@aws-sdk/region-config-resolver" "3.598.0" - "@aws-sdk/types" "3.598.0" - "@aws-sdk/util-endpoints" "3.598.0" - "@aws-sdk/util-user-agent-browser" "3.598.0" - "@aws-sdk/util-user-agent-node" "3.598.0" - "@smithy/config-resolver" "^3.0.2" - "@smithy/core" "^2.2.1" - "@smithy/fetch-http-handler" "^3.0.2" - "@smithy/hash-node" "^3.0.1" - "@smithy/invalid-dependency" "^3.0.1" - "@smithy/middleware-content-length" "^3.0.1" - "@smithy/middleware-endpoint" "^3.0.2" - "@smithy/middleware-retry" "^3.0.4" - "@smithy/middleware-serde" "^3.0.1" - "@smithy/middleware-stack" "^3.0.1" - "@smithy/node-config-provider" "^3.1.1" - "@smithy/node-http-handler" "^3.0.1" - "@smithy/protocol-http" "^4.0.1" - "@smithy/smithy-client" "^3.1.2" - "@smithy/types" "^3.1.0" - "@smithy/url-parser" "^3.0.1" - "@smithy/util-base64" "^3.0.0" - "@smithy/util-body-length-browser" "^3.0.0" - "@smithy/util-body-length-node" "^3.0.0" - "@smithy/util-defaults-mode-browser" "^3.0.4" - "@smithy/util-defaults-mode-node" "^3.0.4" - "@smithy/util-endpoints" "^2.0.2" - "@smithy/util-middleware" "^3.0.1" - "@smithy/util-retry" "^3.0.1" - "@smithy/util-utf8" "^3.0.0" - tslib "^2.6.2" - -"@aws-sdk/client-sts@3.600.0": - version "3.600.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sts/-/client-sts-3.600.0.tgz#8a437f8cf626cf652f99628105576213dbba48b2" - integrity sha512-KQG97B7LvTtTiGmjlrG1LRAY8wUvCQzrmZVV5bjrJ/1oXAU7DITYwVbSJeX9NWg6hDuSk0VE3MFwIXS2SvfLIA== - dependencies: - "@aws-crypto/sha256-browser" "5.2.0" - "@aws-crypto/sha256-js" "5.2.0" - "@aws-sdk/client-sso-oidc" "3.600.0" - "@aws-sdk/core" "3.598.0" - "@aws-sdk/credential-provider-node" "3.600.0" - "@aws-sdk/middleware-host-header" "3.598.0" - "@aws-sdk/middleware-logger" "3.598.0" - "@aws-sdk/middleware-recursion-detection" "3.598.0" - "@aws-sdk/middleware-user-agent" "3.598.0" - "@aws-sdk/region-config-resolver" "3.598.0" - "@aws-sdk/types" "3.598.0" - "@aws-sdk/util-endpoints" "3.598.0" - "@aws-sdk/util-user-agent-browser" "3.598.0" - "@aws-sdk/util-user-agent-node" "3.598.0" - "@smithy/config-resolver" "^3.0.2" - "@smithy/core" "^2.2.1" - "@smithy/fetch-http-handler" "^3.0.2" - "@smithy/hash-node" "^3.0.1" - "@smithy/invalid-dependency" "^3.0.1" - "@smithy/middleware-content-length" "^3.0.1" - "@smithy/middleware-endpoint" "^3.0.2" - "@smithy/middleware-retry" "^3.0.4" - "@smithy/middleware-serde" "^3.0.1" - "@smithy/middleware-stack" "^3.0.1" - "@smithy/node-config-provider" "^3.1.1" - "@smithy/node-http-handler" "^3.0.1" - "@smithy/protocol-http" "^4.0.1" - "@smithy/smithy-client" "^3.1.2" - "@smithy/types" "^3.1.0" - "@smithy/url-parser" "^3.0.1" - "@smithy/util-base64" "^3.0.0" - "@smithy/util-body-length-browser" "^3.0.0" - "@smithy/util-body-length-node" "^3.0.0" - "@smithy/util-defaults-mode-browser" "^3.0.4" - "@smithy/util-defaults-mode-node" "^3.0.4" - "@smithy/util-endpoints" "^2.0.2" - "@smithy/util-middleware" "^3.0.1" - "@smithy/util-retry" "^3.0.1" - "@smithy/util-utf8" "^3.0.0" - tslib "^2.6.2" - -"@aws-sdk/core@3.598.0": - version "3.598.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/core/-/core-3.598.0.tgz#82a069d703be0cafe3ddeacb1de51981ee4faa25" - integrity sha512-HaSjt7puO5Cc7cOlrXFCW0rtA0BM9lvzjl56x0A20Pt+0wxXGeTOZZOkXQIepbrFkV2e/HYukuT9e99vXDm59g== - dependencies: - "@smithy/core" "^2.2.1" - "@smithy/protocol-http" "^4.0.1" - "@smithy/signature-v4" "^3.1.0" - "@smithy/smithy-client" "^3.1.2" - "@smithy/types" "^3.1.0" - fast-xml-parser "4.2.5" - tslib "^2.6.2" - -"@aws-sdk/core@^3.973.25": - version "3.973.25" - resolved "https://registry.yarnpkg.com/@aws-sdk/core/-/core-3.973.25.tgz#7fbfa463458c4b9e0d5d7b2f77d21e7a8a55fcf6" - integrity sha512-TNrx7eq6nKNOO62HWPqoBqPLXEkW6nLZQGwjL6lq1jZtigWYbK1NbCnT7mKDzbLMHZfuOECUt3n6CzxjUW9HWQ== - dependencies: - "@aws-sdk/types" "^3.973.6" - "@aws-sdk/xml-builder" "^3.972.16" - "@smithy/core" "^3.23.12" - "@smithy/node-config-provider" "^4.3.12" - "@smithy/property-provider" "^4.2.12" - "@smithy/protocol-http" "^5.3.12" - "@smithy/signature-v4" "^5.3.12" - "@smithy/smithy-client" "^4.12.7" - "@smithy/types" "^4.13.1" - "@smithy/util-base64" "^4.3.2" - "@smithy/util-middleware" "^4.2.12" - "@smithy/util-utf8" "^4.2.2" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-env@3.598.0": - version "3.598.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.598.0.tgz#ea1f30cfc9948017dd0608518868d3f50074164f" - integrity sha512-vi1khgn7yXzLCcgSIzQrrtd2ilUM0dWodxj3PQ6BLfP0O+q1imO3hG1nq7DVyJtq7rFHs6+9N8G4mYvTkxby2w== - dependencies: - "@aws-sdk/types" "3.598.0" - "@smithy/property-provider" "^3.1.1" - "@smithy/types" "^3.1.0" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-env@^3.972.23": - version "3.972.23" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.972.23.tgz#567c0c227610707ef2c3a56bf79752cf696a0327" - integrity sha512-EamaclJcCEaPHp6wiVknNMM2RlsPMjAHSsYSFLNENBM8Wz92QPc6cOn3dif6vPDQt0Oo4IEghDy3NMDCzY/IvA== - dependencies: - "@aws-sdk/core" "^3.973.25" - "@aws-sdk/types" "^3.973.6" - "@smithy/property-provider" "^4.2.12" - "@smithy/types" "^4.13.1" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-http@3.598.0": - version "3.598.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-http/-/credential-provider-http-3.598.0.tgz#58144440e698aef63b5cb459780325817c0acf10" - integrity sha512-N7cIafi4HVlQvEgvZSo1G4T9qb/JMLGMdBsDCT5XkeJrF0aptQWzTFH0jIdZcLrMYvzPcuEyO3yCBe6cy/ba0g== - dependencies: - "@aws-sdk/types" "3.598.0" - "@smithy/fetch-http-handler" "^3.0.2" - "@smithy/node-http-handler" "^3.0.1" - "@smithy/property-provider" "^3.1.1" - "@smithy/protocol-http" "^4.0.1" - "@smithy/smithy-client" "^3.1.2" - "@smithy/types" "^3.1.0" - "@smithy/util-stream" "^3.0.2" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-http@^3.972.25": - version "3.972.25" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-http/-/credential-provider-http-3.972.25.tgz#f5f08c6e3e68c5a0b750f6a7a10a005354af4d01" - integrity sha512-qPymamdPcLp6ugoVocG1y5r69ScNiRzb0hogX25/ij+Wz7c7WnsgjLTaz7+eB5BfRxeyUwuw5hgULMuwOGOpcw== - dependencies: - "@aws-sdk/core" "^3.973.25" - "@aws-sdk/types" "^3.973.6" - "@smithy/fetch-http-handler" "^5.3.15" - "@smithy/node-http-handler" "^4.5.0" - "@smithy/property-provider" "^4.2.12" - "@smithy/protocol-http" "^5.3.12" - "@smithy/smithy-client" "^4.12.7" - "@smithy/types" "^4.13.1" - "@smithy/util-stream" "^4.5.20" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-ini@3.598.0": - version "3.598.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.598.0.tgz#fd0ba8ab5c3701e05567d1c6f7752cfd9f4ba111" - integrity sha512-/ppcIVUbRwDIwJDoYfp90X3+AuJo2mvE52Y1t2VSrvUovYn6N4v95/vXj6LS8CNDhz2jvEJYmu+0cTMHdhI6eA== - dependencies: - "@aws-sdk/credential-provider-env" "3.598.0" - "@aws-sdk/credential-provider-http" "3.598.0" - "@aws-sdk/credential-provider-process" "3.598.0" - "@aws-sdk/credential-provider-sso" "3.598.0" - "@aws-sdk/credential-provider-web-identity" "3.598.0" - "@aws-sdk/types" "3.598.0" - "@smithy/credential-provider-imds" "^3.1.1" - "@smithy/property-provider" "^3.1.1" - "@smithy/shared-ini-file-loader" "^3.1.1" - "@smithy/types" "^3.1.0" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-ini@^3.972.25": - version "3.972.25" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.972.25.tgz#b476a9fcf2563a20362604ac7d874716f82f49bd" - integrity sha512-G/v/PicYn4qs7xCv4vT6I4QKdvMyRvsgIFNBkUueCGlbLo7/PuKcNKgUozmLSsaYnE7jIl6UrfkP07EUubr48w== - dependencies: - "@aws-sdk/core" "^3.973.25" - "@aws-sdk/credential-provider-env" "^3.972.23" - "@aws-sdk/credential-provider-http" "^3.972.25" - "@aws-sdk/credential-provider-login" "^3.972.25" - "@aws-sdk/credential-provider-process" "^3.972.23" - "@aws-sdk/credential-provider-sso" "^3.972.25" - "@aws-sdk/credential-provider-web-identity" "^3.972.25" - "@aws-sdk/nested-clients" "^3.996.15" - "@aws-sdk/types" "^3.973.6" - "@smithy/credential-provider-imds" "^4.2.12" - "@smithy/property-provider" "^4.2.12" - "@smithy/shared-ini-file-loader" "^4.4.7" - "@smithy/types" "^4.13.1" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-login@^3.972.25": - version "3.972.25" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-login/-/credential-provider-login-3.972.25.tgz#6bb2ccf1d611ab698b14c1005fe62230ce7c6efe" - integrity sha512-bUdmyJeVua7SmD+g2a65x2/0YqsGn4K2k4GawI43js0odaNaIzpIhLtHehUnPnfLuyhPWbJR1NyuIO4iMVfM0w== - dependencies: - "@aws-sdk/core" "^3.973.25" - "@aws-sdk/nested-clients" "^3.996.15" - "@aws-sdk/types" "^3.973.6" - "@smithy/property-provider" "^4.2.12" - "@smithy/protocol-http" "^5.3.12" - "@smithy/shared-ini-file-loader" "^4.4.7" - "@smithy/types" "^4.13.1" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-node@3.600.0": - version "3.600.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.600.0.tgz#33b32364972bd7167d000cdded92b9398346a3ca" - integrity sha512-1pC7MPMYD45J7yFjA90SxpR0yaSvy+yZiq23aXhAPZLYgJBAxHLu0s0mDCk/piWGPh8+UGur5K0bVdx4B1D5hw== - dependencies: - "@aws-sdk/credential-provider-env" "3.598.0" - "@aws-sdk/credential-provider-http" "3.598.0" - "@aws-sdk/credential-provider-ini" "3.598.0" - "@aws-sdk/credential-provider-process" "3.598.0" - "@aws-sdk/credential-provider-sso" "3.598.0" - "@aws-sdk/credential-provider-web-identity" "3.598.0" - "@aws-sdk/types" "3.598.0" - "@smithy/credential-provider-imds" "^3.1.1" - "@smithy/property-provider" "^3.1.1" - "@smithy/shared-ini-file-loader" "^3.1.1" - "@smithy/types" "^3.1.0" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-node@^3.972.26": - version "3.972.26" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.972.26.tgz#52a8a099bf94b1214499f963d6a784951c55cf10" - integrity sha512-5XSK74rCXxCNj+UWv5bjq1EccYkiyW4XOHFU9NXnsCcQF8dJuHdua1qFg0m/LIwVOWklbKsrcnMtfxIXwgvwzQ== - dependencies: - "@aws-sdk/credential-provider-env" "^3.972.23" - "@aws-sdk/credential-provider-http" "^3.972.25" - "@aws-sdk/credential-provider-ini" "^3.972.25" - "@aws-sdk/credential-provider-process" "^3.972.23" - "@aws-sdk/credential-provider-sso" "^3.972.25" - "@aws-sdk/credential-provider-web-identity" "^3.972.25" - "@aws-sdk/types" "^3.973.6" - "@smithy/credential-provider-imds" "^4.2.12" - "@smithy/property-provider" "^4.2.12" - "@smithy/shared-ini-file-loader" "^4.4.7" - "@smithy/types" "^4.13.1" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-process@3.598.0": - version "3.598.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.598.0.tgz#f48ff6f964cd6726499b207f45bfecda4be922ce" - integrity sha512-rM707XbLW8huMk722AgjVyxu2tMZee++fNA8TJVNgs1Ma02Wx6bBrfIvlyK0rCcIRb0WdQYP6fe3Xhiu4e8IBA== - dependencies: - "@aws-sdk/types" "3.598.0" - "@smithy/property-provider" "^3.1.1" - "@smithy/shared-ini-file-loader" "^3.1.1" - "@smithy/types" "^3.1.0" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-process@^3.972.23": - version "3.972.23" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.972.23.tgz#78436ebbc1b2970cf78834c61eea44a1c7b7bd62" - integrity sha512-IL/TFW59++b7MpHserjUblGrdP5UXy5Ekqqx1XQkERXBFJcZr74I7VaSrQT5dxdRMU16xGK4L0RQ5fQG1pMgnA== - dependencies: - "@aws-sdk/core" "^3.973.25" - "@aws-sdk/types" "^3.973.6" - "@smithy/property-provider" "^4.2.12" - "@smithy/shared-ini-file-loader" "^4.4.7" - "@smithy/types" "^4.13.1" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-sso@3.598.0": - version "3.598.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.598.0.tgz#52781e2b60b1f61752829c44a5e0b9fedd0694d6" - integrity sha512-5InwUmrAuqQdOOgxTccRayMMkSmekdLk6s+az9tmikq0QFAHUCtofI+/fllMXSR9iL6JbGYi1940+EUmS4pHJA== - dependencies: - "@aws-sdk/client-sso" "3.598.0" - "@aws-sdk/token-providers" "3.598.0" - "@aws-sdk/types" "3.598.0" - "@smithy/property-provider" "^3.1.1" - "@smithy/shared-ini-file-loader" "^3.1.1" - "@smithy/types" "^3.1.0" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-sso@^3.972.25": - version "3.972.25" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.972.25.tgz#218773959891a7f36684bd67e5f71f54ab831399" - integrity sha512-r4OGAfHmlEa1QBInHWz+/dOD4tRljcjVNQe9wJ/AJNXEj1d2WdsRLppvRFImRV6FIs+bTpjtL0a23V5ELQpRPw== - dependencies: - "@aws-sdk/core" "^3.973.25" - "@aws-sdk/nested-clients" "^3.996.15" - "@aws-sdk/token-providers" "3.1018.0" - "@aws-sdk/types" "^3.973.6" - "@smithy/property-provider" "^4.2.12" - "@smithy/shared-ini-file-loader" "^4.4.7" - "@smithy/types" "^4.13.1" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-web-identity@3.598.0": - version "3.598.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.598.0.tgz#d737e9c2b7c4460b8e31a55b4979bf4d88913900" - integrity sha512-GV5GdiMbz5Tz9JO4NJtRoFXjW0GPEujA0j+5J/B723rTN+REHthJu48HdBKouHGhdzkDWkkh1bu52V02Wprw8w== - dependencies: - "@aws-sdk/types" "3.598.0" - "@smithy/property-provider" "^3.1.1" - "@smithy/types" "^3.1.0" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-web-identity@^3.972.25": - version "3.972.25" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.972.25.tgz#10e00ccab3bf01bfbce41eb694de81e001db0410" - integrity sha512-uM1OtoJgj+yK3MlAmda8uR9WJJCdm5HB25JyCeFL5a5q1Fbafalf4uKidFO3/L0Pgd+Fsflkb4cM6jHIswi3QQ== - dependencies: - "@aws-sdk/core" "^3.973.25" - "@aws-sdk/nested-clients" "^3.996.15" - "@aws-sdk/types" "^3.973.6" - "@smithy/property-provider" "^4.2.12" - "@smithy/shared-ini-file-loader" "^4.4.7" - "@smithy/types" "^4.13.1" - tslib "^2.6.2" - -"@aws-sdk/middleware-bucket-endpoint@3.598.0": - version "3.598.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.598.0.tgz#033b08921f9f284483a7337ed165743ee0dc598d" - integrity sha512-PM7BcFfGUSkmkT6+LU9TyJiB4S8yI7dfuKQDwK5ZR3P7MKaK4Uj4yyDiv0oe5xvkF6+O2+rShj+eh8YuWkOZ/Q== - dependencies: - "@aws-sdk/types" "3.598.0" - "@aws-sdk/util-arn-parser" "3.568.0" - "@smithy/node-config-provider" "^3.1.1" - "@smithy/protocol-http" "^4.0.1" - "@smithy/types" "^3.1.0" - "@smithy/util-config-provider" "^3.0.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-expect-continue@3.598.0": - version "3.598.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.598.0.tgz#5b08b8cae70d1e7cc082d3627b31856f6ba20d17" - integrity sha512-ZuHW18kaeHR8TQyhEOYMr8VwiIh0bMvF7J1OTqXHxDteQIavJWA3CbfZ9sgS4XGtrBZDyHJhjZKeCfLhN2rq3w== - dependencies: - "@aws-sdk/types" "3.598.0" - "@smithy/protocol-http" "^4.0.1" - "@smithy/types" "^3.1.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-flexible-checksums@3.598.0": - version "3.598.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.598.0.tgz#8e40734d5fb1b116816f885885f16db9b5e39032" - integrity sha512-xukAzds0GQXvMEY9G6qt+CzwVzTx8NyKKh04O2Q+nOch6QQ8Rs+2kTRy3Z4wQmXq2pK9hlOWb5nXA7HWpmz6Ng== - dependencies: - "@aws-crypto/crc32" "5.2.0" - "@aws-crypto/crc32c" "5.2.0" - "@aws-sdk/types" "3.598.0" - "@smithy/is-array-buffer" "^3.0.0" - "@smithy/protocol-http" "^4.0.1" - "@smithy/types" "^3.1.0" - "@smithy/util-utf8" "^3.0.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-host-header@3.598.0": - version "3.598.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.598.0.tgz#0a7c4d5a95657bea2d7c4e29b9a8b379952d09b1" - integrity sha512-WiaG059YBQwQraNejLIi0gMNkX7dfPZ8hDIhvMr5aVPRbaHH8AYF3iNSsXYCHvA2Cfa1O9haYXsuMF9flXnCmA== - dependencies: - "@aws-sdk/types" "3.598.0" - "@smithy/protocol-http" "^4.0.1" - "@smithy/types" "^3.1.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-host-header@^3.972.8": - version "3.972.8" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.972.8.tgz#72186e96500b49b38fb5482d6b7bf95e5b985281" - integrity sha512-wAr2REfKsqoKQ+OkNqvOShnBoh+nkPurDKW7uAeVSu6kUECnWlSJiPvnoqxGlfousEY/v9LfS9sNc46hjSYDIQ== - dependencies: - "@aws-sdk/types" "^3.973.6" - "@smithy/protocol-http" "^5.3.12" - "@smithy/types" "^4.13.1" - tslib "^2.6.2" - -"@aws-sdk/middleware-location-constraint@3.598.0": - version "3.598.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.598.0.tgz#45564d5119468e3ac97949431c249e8b6e00ec09" - integrity sha512-8oybQxN3F1ISOMULk7JKJz5DuAm5hCUcxMW9noWShbxTJuStNvuHf/WLUzXrf8oSITyYzIHPtf8VPlKR7I3orQ== - dependencies: - "@aws-sdk/types" "3.598.0" - "@smithy/types" "^3.1.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-logger@3.598.0": - version "3.598.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-logger/-/middleware-logger-3.598.0.tgz#0c0692d2f4f9007c915734ab319db377ca9a3b1b" - integrity sha512-bxBjf/VYiu3zfu8SYM2S9dQQc3tz5uBAOcPz/Bt8DyyK3GgOpjhschH/2XuUErsoUO1gDJqZSdGOmuHGZQn00Q== - dependencies: - "@aws-sdk/types" "3.598.0" - "@smithy/types" "^3.1.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-logger@^3.972.8": - version "3.972.8" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-logger/-/middleware-logger-3.972.8.tgz#7fee4223afcb6f7828dbdf4ea745ce15027cf384" - integrity sha512-CWl5UCM57WUFaFi5kB7IBY1UmOeLvNZAZ2/OZ5l20ldiJ3TiIz1pC65gYj8X0BCPWkeR1E32mpsCk1L1I4n+lA== - dependencies: - "@aws-sdk/types" "^3.973.6" - "@smithy/types" "^4.13.1" - tslib "^2.6.2" - -"@aws-sdk/middleware-recursion-detection@3.598.0": - version "3.598.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.598.0.tgz#94015d41f8174bd41298fd13f8fb0a8c4576d7c8" - integrity sha512-vjT9BeFY9FeN0f8hm2l6F53tI0N5bUq6RcDkQXKNabXBnQxKptJRad6oP2X5y3FoVfBLOuDkQgiC2940GIPxtQ== - dependencies: - "@aws-sdk/types" "3.598.0" - "@smithy/protocol-http" "^4.0.1" - "@smithy/types" "^3.1.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-recursion-detection@^3.972.9": - version "3.972.9" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.972.9.tgz#53a2cc0cf827863163b2351209212f642015c2e2" - integrity sha512-/Wt5+CT8dpTFQxEJ9iGy/UGrXr7p2wlIOEHvIr/YcHYByzoLjrqkYqXdJjd9UIgWjv7eqV2HnFJen93UTuwfTQ== - dependencies: - "@aws-sdk/types" "^3.973.6" - "@aws/lambda-invoke-store" "^0.2.2" - "@smithy/protocol-http" "^5.3.12" - "@smithy/types" "^4.13.1" - tslib "^2.6.2" - -"@aws-sdk/middleware-sdk-s3@3.598.0": - version "3.598.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.598.0.tgz#308604f8a38959ad65ec5674c643c7032d678f43" - integrity sha512-5AGtLAh9wyK6ANPYfaKTqJY1IFJyePIxsEbxa7zS6REheAqyVmgJFaGu3oQ5XlxfGr5Uq59tFTRkyx26G1HkHA== - dependencies: - "@aws-sdk/types" "3.598.0" - "@aws-sdk/util-arn-parser" "3.568.0" - "@smithy/node-config-provider" "^3.1.1" - "@smithy/protocol-http" "^4.0.1" - "@smithy/signature-v4" "^3.1.0" - "@smithy/smithy-client" "^3.1.2" - "@smithy/types" "^3.1.0" - "@smithy/util-config-provider" "^3.0.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-signing@3.598.0": - version "3.598.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-signing/-/middleware-signing-3.598.0.tgz#b90eef6a9fe3f76777c9cd4890dcae8e1febd249" - integrity sha512-XKb05DYx/aBPqz6iCapsCbIl8aD8EihTuPCs51p75QsVfbQoVr4TlFfIl5AooMSITzojdAQqxt021YtvxjtxIQ== - dependencies: - "@aws-sdk/types" "3.598.0" - "@smithy/property-provider" "^3.1.1" - "@smithy/protocol-http" "^4.0.1" - "@smithy/signature-v4" "^3.1.0" - "@smithy/types" "^3.1.0" - "@smithy/util-middleware" "^3.0.1" - tslib "^2.6.2" - -"@aws-sdk/middleware-ssec@3.598.0": - version "3.598.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-ssec/-/middleware-ssec-3.598.0.tgz#d6a3c64ce77bd7379653b46b58ded32a7b0fe6f4" - integrity sha512-f0p2xP8IC1uJ5e/tND1l81QxRtRFywEdnbtKCE0H6RSn4UIt2W3Dohe1qQDbnh27okF0PkNW6BJGdSAz3p7qbA== - dependencies: - "@aws-sdk/types" "3.598.0" - "@smithy/types" "^3.1.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-user-agent@3.598.0": - version "3.598.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.598.0.tgz#6fa26849d256434ca4884c42c1c4755aa2f1556e" - integrity sha512-4tjESlHG5B5MdjUaLK7tQs/miUtHbb6deauQx8ryqSBYOhfHVgb1ZnzvQR0bTrhpqUg0WlybSkDaZAICf9xctg== - dependencies: - "@aws-sdk/types" "3.598.0" - "@aws-sdk/util-endpoints" "3.598.0" - "@smithy/protocol-http" "^4.0.1" - "@smithy/types" "^3.1.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-user-agent@^3.972.26": - version "3.972.26" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.972.26.tgz#b37d7913e527a655e6aa6f22dfc3ce6abb04d010" - integrity sha512-AilFIh4rI/2hKyyGN6XrB0yN96W2o7e7wyrPWCM6QjZM1mcC/pVkW3IWWRvuBWMpVP8Fg+rMpbzeLQ6dTM4gig== - dependencies: - "@aws-sdk/core" "^3.973.25" - "@aws-sdk/types" "^3.973.6" - "@aws-sdk/util-endpoints" "^3.996.5" - "@smithy/core" "^3.23.12" - "@smithy/protocol-http" "^5.3.12" - "@smithy/types" "^4.13.1" - "@smithy/util-retry" "^4.2.12" - tslib "^2.6.2" - -"@aws-sdk/nested-clients@^3.996.15": - version "3.996.15" - resolved "https://registry.yarnpkg.com/@aws-sdk/nested-clients/-/nested-clients-3.996.15.tgz#794f5a88c985541b50a9c314c83c6048910e2390" - integrity sha512-k6WAVNkub5DrU46iPQvH1m0xc1n+0dX79+i287tYJzf5g1yU2rX3uf4xNeL5JvK1NtYgfwMnsxHqhOXFBn367A== - dependencies: - "@aws-crypto/sha256-browser" "5.2.0" - "@aws-crypto/sha256-js" "5.2.0" - "@aws-sdk/core" "^3.973.25" - "@aws-sdk/middleware-host-header" "^3.972.8" - "@aws-sdk/middleware-logger" "^3.972.8" - "@aws-sdk/middleware-recursion-detection" "^3.972.9" - "@aws-sdk/middleware-user-agent" "^3.972.26" - "@aws-sdk/region-config-resolver" "^3.972.10" - "@aws-sdk/types" "^3.973.6" - "@aws-sdk/util-endpoints" "^3.996.5" - "@aws-sdk/util-user-agent-browser" "^3.972.8" - "@aws-sdk/util-user-agent-node" "^3.973.12" - "@smithy/config-resolver" "^4.4.13" - "@smithy/core" "^3.23.12" - "@smithy/fetch-http-handler" "^5.3.15" - "@smithy/hash-node" "^4.2.12" - "@smithy/invalid-dependency" "^4.2.12" - "@smithy/middleware-content-length" "^4.2.12" - "@smithy/middleware-endpoint" "^4.4.27" - "@smithy/middleware-retry" "^4.4.44" - "@smithy/middleware-serde" "^4.2.15" - "@smithy/middleware-stack" "^4.2.12" - "@smithy/node-config-provider" "^4.3.12" - "@smithy/node-http-handler" "^4.5.0" - "@smithy/protocol-http" "^5.3.12" - "@smithy/smithy-client" "^4.12.7" - "@smithy/types" "^4.13.1" - "@smithy/url-parser" "^4.2.12" - "@smithy/util-base64" "^4.3.2" - "@smithy/util-body-length-browser" "^4.2.2" - "@smithy/util-body-length-node" "^4.2.3" - "@smithy/util-defaults-mode-browser" "^4.3.43" - "@smithy/util-defaults-mode-node" "^4.2.47" - "@smithy/util-endpoints" "^3.3.3" - "@smithy/util-middleware" "^4.2.12" - "@smithy/util-retry" "^4.2.12" - "@smithy/util-utf8" "^4.2.2" - tslib "^2.6.2" - -"@aws-sdk/region-config-resolver@3.598.0": - version "3.598.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/region-config-resolver/-/region-config-resolver-3.598.0.tgz#fd8fd6b7bc11b5f81def4db0db9e835d40a8f86e" - integrity sha512-oYXhmTokSav4ytmWleCr3rs/1nyvZW/S0tdi6X7u+dLNL5Jee+uMxWGzgOrWK6wrQOzucLVjS4E/wA11Kv2GTw== - dependencies: - "@aws-sdk/types" "3.598.0" - "@smithy/node-config-provider" "^3.1.1" - "@smithy/types" "^3.1.0" - "@smithy/util-config-provider" "^3.0.0" - "@smithy/util-middleware" "^3.0.1" - tslib "^2.6.2" - -"@aws-sdk/region-config-resolver@^3.972.10": - version "3.972.10" - resolved "https://registry.yarnpkg.com/@aws-sdk/region-config-resolver/-/region-config-resolver-3.972.10.tgz#cbabd969a2d4fedb652273403e64d98b79d0144c" - integrity sha512-1dq9ToC6e070QvnVhhbAs3bb5r6cQ10gTVc6cyRV5uvQe7P138TV2uG2i6+Yok4bAkVAcx5AqkTEBUvWEtBlsQ== - dependencies: - "@aws-sdk/types" "^3.973.6" - "@smithy/config-resolver" "^4.4.13" - "@smithy/node-config-provider" "^4.3.12" - "@smithy/types" "^4.13.1" - tslib "^2.6.2" - -"@aws-sdk/signature-v4-multi-region@3.598.0": - version "3.598.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.598.0.tgz#1716022e31dcbc5821aeca85204718f523a1ddbf" - integrity sha512-1r/EyTrO1gSa1FirnR8V7mabr7gk+l+HkyTI0fcTSr8ucB7gmYyW6WjkY8JCz13VYHFK62usCEDS7yoJoJOzTA== - dependencies: - "@aws-sdk/middleware-sdk-s3" "3.598.0" - "@aws-sdk/types" "3.598.0" - "@smithy/protocol-http" "^4.0.1" - "@smithy/signature-v4" "^3.1.0" - "@smithy/types" "^3.1.0" - tslib "^2.6.2" - -"@aws-sdk/token-providers@3.1018.0": - version "3.1018.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.1018.0.tgz#4754f882abc9ec7426e45918ce34c22fa86e2128" - integrity sha512-97OPNJHy37wmGOX44xAcu6E9oSTiqK9uPcy/fWpmN5uB3JuEp1f6x60Xot/jp+FxwhQWIFUsVJFnm3QKqt7T6Q== - dependencies: - "@aws-sdk/core" "^3.973.25" - "@aws-sdk/nested-clients" "^3.996.15" - "@aws-sdk/types" "^3.973.6" - "@smithy/property-provider" "^4.2.12" - "@smithy/shared-ini-file-loader" "^4.4.7" - "@smithy/types" "^4.13.1" - tslib "^2.6.2" - -"@aws-sdk/token-providers@3.598.0": - version "3.598.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.598.0.tgz#49a94c14ce2e392bb0e84b69986c33ecfad5b804" - integrity sha512-TKY1EVdHVBnZqpyxyTHdpZpa1tUpb6nxVeRNn1zWG8QB5MvH4ALLd/jR+gtmWDNQbIG4cVuBOZFVL8hIYicKTA== - dependencies: - "@aws-sdk/types" "3.598.0" - "@smithy/property-provider" "^3.1.1" - "@smithy/shared-ini-file-loader" "^3.1.1" - "@smithy/types" "^3.1.0" - tslib "^2.6.2" - -"@aws-sdk/types@3.598.0": - version "3.598.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.598.0.tgz#b840d2446dee19a2a4731e6166f2327915d846db" - integrity sha512-742uRl6z7u0LFmZwDrFP6r1wlZcgVPw+/TilluDJmCAR8BgRw3IR+743kUXKBGd8QZDRW2n6v/PYsi/AWCDDMQ== - dependencies: - "@smithy/types" "^3.1.0" - tslib "^2.6.2" - -"@aws-sdk/types@^3.1.0", "@aws-sdk/types@^3.222.0", "@aws-sdk/types@^3.973.6": - version "3.973.6" - resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.973.6.tgz#1964a7c01b5cb18befa445998ad1d02f86c5432d" - integrity sha512-Atfcy4E++beKtwJHiDln2Nby8W/mam64opFPTiHEqgsthqeydFS1pY+OUlN1ouNOmf8ArPU/6cDS65anOP3KQw== - dependencies: - "@smithy/types" "^4.13.1" - tslib "^2.6.2" - -"@aws-sdk/util-arn-parser@3.568.0": - version "3.568.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-arn-parser/-/util-arn-parser-3.568.0.tgz#6a19a8c6bbaa520b6be1c278b2b8c17875b91527" - integrity sha512-XUKJWWo+KOB7fbnPP0+g/o5Ulku/X53t7i/h+sPHr5xxYTJJ9CYnbToo95mzxe7xWvkLrsNtJ8L+MnNn9INs2w== - dependencies: - tslib "^2.6.2" - -"@aws-sdk/util-endpoints@3.598.0": - version "3.598.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-endpoints/-/util-endpoints-3.598.0.tgz#7f78d68524babac7fdacf381590470353d45b959" - integrity sha512-Qo9UoiVVZxcOEdiOMZg3xb1mzkTxrhd4qSlg5QQrfWPJVx/QOg+Iy0NtGxPtHtVZNHZxohYwDwV/tfsnDSE2gQ== - dependencies: - "@aws-sdk/types" "3.598.0" - "@smithy/types" "^3.1.0" - "@smithy/util-endpoints" "^2.0.2" - tslib "^2.6.2" - -"@aws-sdk/util-endpoints@^3.996.5": - version "3.996.5" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-endpoints/-/util-endpoints-3.996.5.tgz#6b12e80869ae6e84075bc24c2a4e6273ea87dfc2" - integrity sha512-Uh93L5sXFNbyR5sEPMzUU8tJ++Ku97EY4udmC01nB8Zu+xfBPwpIwJ6F7snqQeq8h2pf+8SGN5/NoytfKgYPIw== - dependencies: - "@aws-sdk/types" "^3.973.6" - "@smithy/types" "^4.13.1" - "@smithy/url-parser" "^4.2.12" - "@smithy/util-endpoints" "^3.3.3" - tslib "^2.6.2" - -"@aws-sdk/util-locate-window@^3.0.0": - version "3.965.5" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-locate-window/-/util-locate-window-3.965.5.tgz#e30e6ff2aff6436209ed42c765dec2d2a48df7c0" - integrity sha512-WhlJNNINQB+9qtLtZJcpQdgZw3SCDCpXdUJP7cToGwHbCWCnRckGlc6Bx/OhWwIYFNAn+FIydY8SZ0QmVu3xTQ== - dependencies: - tslib "^2.6.2" - -"@aws-sdk/util-user-agent-browser@3.598.0": - version "3.598.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.598.0.tgz#5039d0335f8a06af5be73c960df85009dda59090" - integrity sha512-36Sxo6F+ykElaL1mWzWjlg+1epMpSe8obwhCN1yGE7Js9ywy5U6k6l+A3q3YM9YRbm740sNxncbwLklMvuhTKw== - dependencies: - "@aws-sdk/types" "3.598.0" - "@smithy/types" "^3.1.0" - bowser "^2.11.0" - tslib "^2.6.2" - -"@aws-sdk/util-user-agent-browser@^3.972.8": - version "3.972.8" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.972.8.tgz#1044845c97c898cd68fc3f9c773494a6a98cdf80" - integrity sha512-B3KGXJviV2u6Cdw2SDY2aDhoJkVfY/Q/Trwk2CMSkikE1Oi6gRzxhvhIfiRpHfmIsAhV4EA54TVEX8K6CbHbkA== - dependencies: - "@aws-sdk/types" "^3.973.6" - "@smithy/types" "^4.13.1" - bowser "^2.11.0" - tslib "^2.6.2" - -"@aws-sdk/util-user-agent-node@3.598.0": - version "3.598.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.598.0.tgz#f9bdf1b7cc3a40787c379f7c2ff028de2612c177" - integrity sha512-oyWGcOlfTdzkC6SVplyr0AGh54IMrDxbhg5RxJ5P+V4BKfcDoDcZV9xenUk9NsOi9MuUjxMumb9UJGkDhM1m0A== - dependencies: - "@aws-sdk/types" "3.598.0" - "@smithy/node-config-provider" "^3.1.1" - "@smithy/types" "^3.1.0" - tslib "^2.6.2" - -"@aws-sdk/util-user-agent-node@^3.973.12": - version "3.973.12" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.973.12.tgz#63442fd7d6d2bcec825755874522c3c2b1535d17" - integrity sha512-8phW0TS8ntENJgDcFewYT/Q8dOmarpvSxEjATu2GUBAutiHr++oEGCiBUwxslCMNvwW2cAPZNT53S/ym8zm/gg== - dependencies: - "@aws-sdk/middleware-user-agent" "^3.972.26" - "@aws-sdk/types" "^3.973.6" - "@smithy/node-config-provider" "^4.3.12" - "@smithy/types" "^4.13.1" - "@smithy/util-config-provider" "^4.2.2" - tslib "^2.6.2" - -"@aws-sdk/util-utf8-browser@^3.0.0": - version "3.259.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz#3275a6f5eb334f96ca76635b961d3c50259fd9ff" - integrity sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw== - dependencies: - tslib "^2.3.1" - -"@aws-sdk/xml-builder@3.598.0": - version "3.598.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/xml-builder/-/xml-builder-3.598.0.tgz#ee591c5d80a34d9c5bc14326f1a62e9a0649c587" - integrity sha512-ZIa2RK7CHFTZ4gwK77WRtsZ6vF7xwRXxJ8KQIxK2duhoTVcn0xYxpFLdW9WZZZvdP9GIF3Loqvf8DRdeU5Jc7Q== - dependencies: - "@smithy/types" "^3.1.0" - tslib "^2.6.2" - -"@aws-sdk/xml-builder@^3.972.16": - version "3.972.16" - resolved "https://registry.yarnpkg.com/@aws-sdk/xml-builder/-/xml-builder-3.972.16.tgz#ea22fe022cf12d12b07f6faf75c4fa214dea00bc" - integrity sha512-iu2pyvaqmeatIJLURLqx9D+4jKAdTH20ntzB6BFwjyN7V960r4jK32mx0Zf7YbtOYAbmbtQfDNuL60ONinyw7A== - dependencies: - "@smithy/types" "^4.13.1" - fast-xml-parser "5.5.8" - tslib "^2.6.2" - -"@aws/lambda-invoke-store@^0.2.2": - version "0.2.4" - resolved "https://registry.yarnpkg.com/@aws/lambda-invoke-store/-/lambda-invoke-store-0.2.4.tgz#802f6a50f6b6589063ef63ba8acdee86fcb9f395" - integrity sha512-iY8yvjE0y651BixKNPgmv1WrQc+GZ142sb0z4gYnChDDY2YqI4P/jsSopBWrKfAt7LOJAkOXt7rC/hms+WclQQ== - -"@babel/code-frame@^7.0.0": - version "7.29.0" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.29.0.tgz#7cd7a59f15b3cc0dcd803038f7792712a7d0b15c" - integrity sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw== - dependencies: - "@babel/helper-validator-identifier" "^7.28.5" - js-tokens "^4.0.0" - picocolors "^1.1.1" - -"@babel/helper-validator-identifier@^7.28.5": - version "7.28.5" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz#010b6938fab7cb7df74aa2bbc06aa503b8fe5fb4" - integrity sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q== - -"@bytecodealliance/preview2-shim@0.17.0": - version "0.17.0" - resolved "https://registry.yarnpkg.com/@bytecodealliance/preview2-shim/-/preview2-shim-0.17.0.tgz#9bc1cadbb9f86c446c6f579d3431c08a06a6672e" - integrity sha512-JorcEwe4ud0x5BS/Ar2aQWOQoFzjq/7jcnxYXCvSMh0oRm0dQXzOA+hqLDBnOMks1LLBA7dmiLLsEBl09Yd6iQ== - -"@chainlink/contracts-ccip@1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@chainlink/contracts-ccip/-/contracts-ccip-1.2.1.tgz#534e7fb13d066cc4e1902e6d7bca189c24092b36" - integrity sha512-8lVod5Gclx25ZSLqX40zzhMwN7unnvj9AMKOE/LYIP5DjyiTDs/3BeXTw6GakeIkQF5v3FILnMIz8emF5FdSpQ== - dependencies: - "@eth-optimism/contracts" "^0.5.21" - "@openzeppelin/contracts" "~4.3.3" - "@openzeppelin/contracts-upgradeable-4.7.3" "npm:@openzeppelin/contracts-upgradeable@v4.7.3" - "@openzeppelin/contracts-v0.7" "npm:@openzeppelin/contracts@v3.4.2" - -"@chainsafe/as-sha256@1.2.0", "@chainsafe/as-sha256@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@chainsafe/as-sha256/-/as-sha256-1.2.0.tgz#5764ac9959e147fe0908dd0f66c0cce525a633b3" - integrity sha512-H2BNHQ5C3RS+H0ZvOdovK6GjFAyq5T6LClad8ivwj9Oaiy28uvdsGVS7gNJKuZmg0FGHAI+n7F0Qju6U0QkKDA== - -"@chainsafe/bls-hd-key@^0.3.0": - version "0.3.0" - resolved "https://registry.yarnpkg.com/@chainsafe/bls-hd-key/-/bls-hd-key-0.3.0.tgz#2de2649d5daa76f7460fc23caacf4ed3ebd2c02a" - integrity sha512-LsYYnfBEEmqGFPDm8hQN3Kc+v9wPFnhn+CToD403KEynUiUSHKLAf5B6UCY5eooShDOcaGCUgAUhIw1CmpEf3Q== - dependencies: - "@noble/hashes" "^1.0.0" - -"@chainsafe/bls-keygen@^0.4.0": - version "0.4.0" - resolved "https://registry.yarnpkg.com/@chainsafe/bls-keygen/-/bls-keygen-0.4.0.tgz#782c6555cfb05b9efa6f144d782799e8695ca1b0" - integrity sha512-wqtuj4G/sWpIugJW1mb/nSTwcTuZKqB3DS3ANUIOn7pva8EB6LfxgIL34o4qk3lti/8Mdxqtqc2n4xRszrNdzA== - dependencies: - "@chainsafe/bls-hd-key" "^0.3.0" - "@noble/hashes" "^1.0.0" - "@scure/bip39" "^1.0.0" - -"@chainsafe/bls@^8.2.0": - version "8.2.0" - resolved "https://registry.yarnpkg.com/@chainsafe/bls/-/bls-8.2.0.tgz#6f72c39e5f255435ba1a192b09eef89416bb9c82" - integrity sha512-onCMG4K5GRWTHPf5T9DrOLsd5VoiOoL0NEpRoAigXVPqr+Gi2GyOncbvc9Vf4RjhmZGgtIJKKB4WJQbRV9Pddw== - dependencies: - "@chainsafe/bls-keygen" "^0.4.0" - bls-eth-wasm "^1.1.1" - -"@chainsafe/blst-darwin-arm64@2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@chainsafe/blst-darwin-arm64/-/blst-darwin-arm64-2.2.0.tgz#0ab9083805c308106c2f2107df1e6376d9190b1b" - integrity sha512-BOOy2KHbV028cioPWaAMqHdLRKd6/3XyEmUEcQC2E/SpyYLdNcaKiBUYIU4pT9CrWBbJJxX68UI+3vZVg0M8/w== - -"@chainsafe/blst-darwin-x64@2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@chainsafe/blst-darwin-x64/-/blst-darwin-x64-2.2.0.tgz#231943a7736f3f89d35e03fec890b7809c98ff1a" - integrity sha512-jG64cwIdPT7u/haRrW26tWCpfMfHBQCfGY169mFQifCwO4VEwvaiVBPOh5olFis6LjpcmD+O0jpM8GqrnsmUHQ== - -"@chainsafe/blst-linux-arm64-gnu@2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@chainsafe/blst-linux-arm64-gnu/-/blst-linux-arm64-gnu-2.2.0.tgz#721aeec63e8e02aba3358a0084c095403a5438fa" - integrity sha512-L8xV2uuLn8we76vdzfryS9ePdheuZrmY6yArGUFaF1Uzcwml6V1/VvyPl9/uooo/YfVRIrvF/D+lQfI2GFAnhw== - -"@chainsafe/blst-linux-arm64-musl@2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@chainsafe/blst-linux-arm64-musl/-/blst-linux-arm64-musl-2.2.0.tgz#dbbabaab93156548c86e2b2b3a1d27160b715000" - integrity sha512-0Vn0luxLYVgC3lvWT1MapFHSAoz99PldqjhilXTGv0AcAk/X5LXPH2RC9Dp2KJGqthyUkpbk1j47jUBfBI+BIg== - -"@chainsafe/blst-linux-x64-gnu@2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@chainsafe/blst-linux-x64-gnu/-/blst-linux-x64-gnu-2.2.0.tgz#9f8ab825621b75227c75bb75d369d3d42e91fa74" - integrity sha512-gEY/z2SDBA7kXtFEI9VNhWTJAIjx16jdeAyCaS2k4ACGurWZaWk+Ee4KniTsr4WieSqeuNTUr7Pdja0Sr4EKNQ== - -"@chainsafe/blst-linux-x64-musl@2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@chainsafe/blst-linux-x64-musl/-/blst-linux-x64-musl-2.2.0.tgz#11e99ac12b0f83cad68da56f4e9cfc4aa403a2e6" - integrity sha512-58GKtiUmtVSuerRzPEcMNQZpICPboBKFnL7+1Wo+PSuajkvbae7tEFrFTtWeMoKIPgOEsPMnk96LF+0yNgavUg== - -"@chainsafe/blst-win32-x64-msvc@2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@chainsafe/blst-win32-x64-msvc/-/blst-win32-x64-msvc-2.2.0.tgz#f32b164721ff5edc279f6d6cd0fffde0ad2fe16c" - integrity sha512-UFrZshl4dfX5Uh2zeKXAZtrkQ+otczHMON2tsrapQNICWmfHZrzE6pKuBL+9QeGAbgflwpbz7+D5nQRDpiuHxQ== - -"@chainsafe/blst@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@chainsafe/blst/-/blst-2.2.0.tgz#ced8b861b94934e3c1c53e173c3e1205d775d93b" - integrity sha512-VBaQoNE2a9d9+skAjQKv3Suk0yGKqp3mZM0YWYJNPj/Ae/f6lAyeVSgKqo2LrsNQBzD/LqrJLKUY8rJT3vDKLA== - optionalDependencies: - "@chainsafe/blst-darwin-arm64" "2.2.0" - "@chainsafe/blst-darwin-x64" "2.2.0" - "@chainsafe/blst-linux-arm64-gnu" "2.2.0" - "@chainsafe/blst-linux-arm64-musl" "2.2.0" - "@chainsafe/blst-linux-x64-gnu" "2.2.0" - "@chainsafe/blst-linux-x64-musl" "2.2.0" - "@chainsafe/blst-win32-x64-msvc" "2.2.0" - -"@chainsafe/hashtree-darwin-arm64@1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@chainsafe/hashtree-darwin-arm64/-/hashtree-darwin-arm64-1.0.2.tgz#fcf09de55e8b666fa86d2136d285a4ea55f066c0" - integrity sha512-yIIwn9SUR5ZTl2vN1QqRtDFL/w2xYW4o68A1k8UexMbieGAnE7Ab7NvtCZRHRe8x0eONO46F/bWn5bxxyYlFXw== - -"@chainsafe/hashtree-linux-arm64-gnu@1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@chainsafe/hashtree-linux-arm64-gnu/-/hashtree-linux-arm64-gnu-1.0.2.tgz#0af39b6f25ed77a2185151484c67636c3bfd7138" - integrity sha512-MDz1xBRTRHw2eezGqx1Ff8NoeUUQP3bhbeeVG8ZZTkFYqvRc8O65OQOTtgO+fFGvqnDjVBSRHmiTXU5eNeH/mQ== - -"@chainsafe/hashtree-linux-arm64-musl@1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@chainsafe/hashtree-linux-arm64-musl/-/hashtree-linux-arm64-musl-1.0.2.tgz#40911e7427d88a1febca23f96f83f009977dbbf9" - integrity sha512-BUy+/9brJwAFAtraro4y/1F+aP/8j/7HrnYdde8PTu7jHWAClI9xZygadaJbk0GoWxyCOUAJKUs8KHVnYxJDeg== - -"@chainsafe/hashtree-linux-x64-gnu@1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@chainsafe/hashtree-linux-x64-gnu/-/hashtree-linux-x64-gnu-1.0.2.tgz#98d30f22200c0a4afd496b1466c51f9a42aa9e4f" - integrity sha512-bFy9ffFG77SivmeOjOlZmOCrxzQ/WqUESy0I+dW6IX7wquTXHldJKWvohs9+FEn3TSXgeigFmEATz5tfxBfIZw== - -"@chainsafe/hashtree-linux-x64-musl@1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@chainsafe/hashtree-linux-x64-musl/-/hashtree-linux-x64-musl-1.0.2.tgz#b7aa71150dd6c4687a0f529a5cee052e36a99fb3" - integrity sha512-mbJB3C0RjwpqOMPZIUQm3IBH6d3sYiKDXMU6ORt5nuk7Ix2I80xxffAciDO1d7kKNnW6HStOj5s/rGhIDxK1ug== - -"@chainsafe/hashtree-win32-x64-msvc@1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@chainsafe/hashtree-win32-x64-msvc/-/hashtree-win32-x64-msvc-1.0.2.tgz#1b9fbb3f6a4b51f36b9efd42db9ab0308580b518" - integrity sha512-wXFhGqaydgadefQbjSTGqZY1R1MBhnJj+gbJhULNRUXco5pHsXfOk3QhCDAefp1PPW+wQwfT4clEnQCqJIf58w== - -"@chainsafe/hashtree@1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@chainsafe/hashtree/-/hashtree-1.0.2.tgz#2a16b49e491bef9e5760cd1010363cb3d1351fb8" - integrity sha512-OaWjsZ6S/GaT2RvaqdpsF5Mux8qQOE2KbitX2yHmQJZNUZkdh7C3N4PA5LsvewqX+z8Nkv8mr1uSe0LSrHGiQw== - optionalDependencies: - "@chainsafe/hashtree-darwin-arm64" "1.0.2" - "@chainsafe/hashtree-linux-arm64-gnu" "1.0.2" - "@chainsafe/hashtree-linux-arm64-musl" "1.0.2" - "@chainsafe/hashtree-linux-x64-gnu" "1.0.2" - "@chainsafe/hashtree-linux-x64-musl" "1.0.2" - "@chainsafe/hashtree-win32-x64-msvc" "1.0.2" - -"@chainsafe/persistent-merkle-tree@1.2.1", "@chainsafe/persistent-merkle-tree@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@chainsafe/persistent-merkle-tree/-/persistent-merkle-tree-1.2.1.tgz#80f052e4a04c63304d5198dbf2fa49e104a0365a" - integrity sha512-AOSEVLfaqwb9eTCKuY1ri0DrRxVQ3Rh+we1VBj1GahUGfEdE8OC3Vkbca7Up6RoI9Ip9FLnI31Y7AjKH9ZqAGA== - dependencies: - "@chainsafe/as-sha256" "1.2.0" - "@chainsafe/hashtree" "1.0.2" - "@noble/hashes" "^1.3.0" - -"@chainsafe/persistent-ts@^1.0.0": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@chainsafe/persistent-ts/-/persistent-ts-1.0.1.tgz#4ab51ce5e72bfd4ddb5bc976c118bb7cbc88cf9c" - integrity sha512-VkPaBD3GxS5vpLkZWfStDL39jG1IPLhy5c3d3FtgwyfGvEthnQJeyUMinGFRoAfAW0yVkf7ggrEzyvhXFLIU0A== - -"@chainsafe/pubkey-index-map-darwin-arm64@3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@chainsafe/pubkey-index-map-darwin-arm64/-/pubkey-index-map-darwin-arm64-3.0.0.tgz#1cb3c19aad0462e9960c2f67f31acccf87bf3526" - integrity sha512-gM/wwA6bpfeZm80aSoH2c3ddbPeZho73TUUprUFlHQNLldGzZ293yFQgj2Ontp1fMf9AI0w+F0uEN2qC6v7g9A== - -"@chainsafe/pubkey-index-map-darwin-x64@3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@chainsafe/pubkey-index-map-darwin-x64/-/pubkey-index-map-darwin-x64-3.0.0.tgz#675e6bdad856c61bc6cb4641d61ac764ed5697e3" - integrity sha512-zy4dH//kLXfQHHFVp1Pcz4HQgSh/uUKWt219hlrb5Fi+xVESVmTnLPjHmL1KtGs/R5W0XcuBrTuBHiq+zMU7lQ== - -"@chainsafe/pubkey-index-map-linux-arm64-gnu@3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@chainsafe/pubkey-index-map-linux-arm64-gnu/-/pubkey-index-map-linux-arm64-gnu-3.0.0.tgz#96235d3c286c75d2ff4d74bf3e46c7f2874adb74" - integrity sha512-M/HODHZcKDuoRFlx+Ka4NgyFSQvOECyIg/2pCQcgfCozR7rRx7VuOJ0ZSgU+BEhuY+fpaRSTesOlDIIY0ornWQ== - -"@chainsafe/pubkey-index-map-linux-arm64-musl@3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@chainsafe/pubkey-index-map-linux-arm64-musl/-/pubkey-index-map-linux-arm64-musl-3.0.0.tgz#9105e9ef771b80e79ff902869f48a8c886ad3246" - integrity sha512-Sdm15mFsKiz5ndFfhcTjEl4i8TK0+gM1SEmYzmGUgnflrcvPc+US3qsMKyCqorDkHqYAYFFutQXz9QxjOMkIwg== - -"@chainsafe/pubkey-index-map-linux-x64-gnu@3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@chainsafe/pubkey-index-map-linux-x64-gnu/-/pubkey-index-map-linux-x64-gnu-3.0.0.tgz#493f3b0287944543620e372f57de4e74761506f6" - integrity sha512-+4h995h2xEBmYdr9Tw05uYvFmMSELyaJagJ2KsFohkRjqiUyB76l8zR8aUKx7lwLXXHxWjHMYyWKHF3tTKRFNQ== - -"@chainsafe/pubkey-index-map-linux-x64-musl@3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@chainsafe/pubkey-index-map-linux-x64-musl/-/pubkey-index-map-linux-x64-musl-3.0.0.tgz#e9cd7e69124b0e73167ed0c8d6bb1c578b7bc676" - integrity sha512-qwFuygeutP4o9J/8ylD+ZrqkqeyytMl9E38ucIWpbiPYXDiJxpRN148v4Ah+NWwz6PqCROVyTxEyZklzy0AxUA== - -"@chainsafe/pubkey-index-map-win32-arm64-msvc@3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@chainsafe/pubkey-index-map-win32-arm64-msvc/-/pubkey-index-map-win32-arm64-msvc-3.0.0.tgz#7b45ee24055faf8e6b01480386f952d0961c11ca" - integrity sha512-2t01rQAdiM5KPM7XLsZDtMhWAXz/YKY20H1N4jvaWURjaLm+S0j9X/Mt0xOjJ5SC++1g64LXjV+wnXO5j1S8Nw== - -"@chainsafe/pubkey-index-map-win32-x64-msvc@3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@chainsafe/pubkey-index-map-win32-x64-msvc/-/pubkey-index-map-win32-x64-msvc-3.0.0.tgz#8a7d2821a43addf615b3485d6925e7558e42534b" - integrity sha512-QemArQbgsLJ4eaM9S0Kdr3ucJUpZXTDfh3wTNp9eh7G3o1Y9O2Hp7G7BlEkF0cWU9ZsWe9YSzmeX24Uo5DNo4g== - -"@chainsafe/pubkey-index-map@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@chainsafe/pubkey-index-map/-/pubkey-index-map-3.0.0.tgz#eca4a5c0f2c6721f9b57c5a0817474bce3e2a705" - integrity sha512-KvWmKOG8WiVePHQDGyz+xo+RpsrmPEeipF8boqmXNYCLOGyVpkEXQk0IDVpnxngZziY6d97F9sml2vliDoyYyQ== - optionalDependencies: - "@chainsafe/pubkey-index-map-darwin-arm64" "3.0.0" - "@chainsafe/pubkey-index-map-darwin-x64" "3.0.0" - "@chainsafe/pubkey-index-map-linux-arm64-gnu" "3.0.0" - "@chainsafe/pubkey-index-map-linux-arm64-musl" "3.0.0" - "@chainsafe/pubkey-index-map-linux-x64-gnu" "3.0.0" - "@chainsafe/pubkey-index-map-linux-x64-musl" "3.0.0" - "@chainsafe/pubkey-index-map-win32-arm64-msvc" "3.0.0" - "@chainsafe/pubkey-index-map-win32-x64-msvc" "3.0.0" - -"@chainsafe/ssz@^1.2.2": - version "1.3.0" - resolved "https://registry.yarnpkg.com/@chainsafe/ssz/-/ssz-1.3.0.tgz#dd9feebc096f9c726d7f7795e79032b41cbaf3c0" - integrity sha512-+O3WHnud8ZzIVF9/hSC+UazLDPgaa98quKLj/Z1PGnfGuW4JvCfS5Wh9EoZDvqGTI/AZlIbXpn4qC2s4BzQdfA== - dependencies: - "@chainsafe/as-sha256" "1.2.0" - "@chainsafe/persistent-merkle-tree" "1.2.1" - -"@chainsafe/swap-or-not-shuffle-darwin-arm64@1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@chainsafe/swap-or-not-shuffle-darwin-arm64/-/swap-or-not-shuffle-darwin-arm64-1.2.1.tgz#c32bc6283b7b2276a90e6eccc38d2606e05eba38" - integrity sha512-kTewLZe1KqMAJ1gHfagOxo0BI4kTcMOAkGJ7pRLFM5ZkL2P7sh3/4ixnjdbtMkO207vMZEZL3fxJSSs14kg9Kg== - -"@chainsafe/swap-or-not-shuffle-darwin-x64@1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@chainsafe/swap-or-not-shuffle-darwin-x64/-/swap-or-not-shuffle-darwin-x64-1.2.1.tgz#2e2bde10df6fe9c6c18f9cff0ed3bb4102fd6afc" - integrity sha512-B/f/peQqOLW5Tqib5CqanAlQgoeib75FNszzHwRBwHdRY5ThOcBbARvOtef39zU5lYjj4j3iWobpD7G70kQyUw== - -"@chainsafe/swap-or-not-shuffle-linux-arm64-gnu@1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@chainsafe/swap-or-not-shuffle-linux-arm64-gnu/-/swap-or-not-shuffle-linux-arm64-gnu-1.2.1.tgz#769f0ecd91a71996b845813672100880c00e493c" - integrity sha512-sDpuUuo3rStvHMQgLxH1UkkUbo8rcjDI70Fq3xzbNMhfjlrP0+sJistlFJtDpWmKsFk/sgje3PzVU9G3KFXzXA== - -"@chainsafe/swap-or-not-shuffle-linux-arm64-musl@1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@chainsafe/swap-or-not-shuffle-linux-arm64-musl/-/swap-or-not-shuffle-linux-arm64-musl-1.2.1.tgz#7d09ee6eca411d5e897794073e26516f2894ebaf" - integrity sha512-FFmpDF2dRhhOCT3WBYOoQW9wqhJMfx7iULskBe5cjowVQ15U1TQJ6tC+hPpouUMt3/pKz9tIS9dNWTUuo7kpQg== - -"@chainsafe/swap-or-not-shuffle-linux-x64-gnu@1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@chainsafe/swap-or-not-shuffle-linux-x64-gnu/-/swap-or-not-shuffle-linux-x64-gnu-1.2.1.tgz#8c54b7b8fcb9ed6c87f8ce9dd53900d2d4abc298" - integrity sha512-nGXEnFCqRmCS7ATV7QQ7b7aKHcyET9XEpJylq0sljnkuNRwoQXFUYPMYTn4TMI6g3vgZt/AVK9RdCxp68JKwGQ== - -"@chainsafe/swap-or-not-shuffle-linux-x64-musl@1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@chainsafe/swap-or-not-shuffle-linux-x64-musl/-/swap-or-not-shuffle-linux-x64-musl-1.2.1.tgz#17d02514059388db9fb2a72edd6653648e1e4543" - integrity sha512-VMQxE/EZjco4damGrJkkCQ2Y2WYgJcTR/ardTnSctM1/xxwUD1wQr7YW2TQsECfK3UZcW2W6gG7iqWfJgMdGSw== - -"@chainsafe/swap-or-not-shuffle-win32-arm64-msvc@1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@chainsafe/swap-or-not-shuffle-win32-arm64-msvc/-/swap-or-not-shuffle-win32-arm64-msvc-1.2.1.tgz#684d523e7dd1f4ebbf1bee191605259fae2717f8" - integrity sha512-qV+ps6KSoR8blc3gMse1BOBUGcCtptnMYoqTMwFCIx9LGaeSo3vKu5XBQDwHIfAW73bZ+PHb5YUqkRgtWBiEUw== - -"@chainsafe/swap-or-not-shuffle-win32-x64-msvc@1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@chainsafe/swap-or-not-shuffle-win32-x64-msvc/-/swap-or-not-shuffle-win32-x64-msvc-1.2.1.tgz#508320f5adb3cf90b9ce0e45487c3be7cd2755dd" - integrity sha512-hsDN4O6PPpF4rEA1tMngMJAOrWTGAu8TAqdEwgdP+U25o8UVlz8W2N9697AMGRnnArN2BgYS0zCeUR9kuZ2XEQ== - -"@chainsafe/swap-or-not-shuffle@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@chainsafe/swap-or-not-shuffle/-/swap-or-not-shuffle-1.2.1.tgz#51021bdc77a2476daf56c66a7d8a645012b1f58c" - integrity sha512-H8YdEoXXv2Hw17gDWGOJEya4LHlBbpChJP3jDQRfIk9hhwr0c/zbBemBRmjADowZhArL+ymkO+j5hGaYySjdpw== - optionalDependencies: - "@chainsafe/swap-or-not-shuffle-darwin-arm64" "1.2.1" - "@chainsafe/swap-or-not-shuffle-darwin-x64" "1.2.1" - "@chainsafe/swap-or-not-shuffle-linux-arm64-gnu" "1.2.1" - "@chainsafe/swap-or-not-shuffle-linux-arm64-musl" "1.2.1" - "@chainsafe/swap-or-not-shuffle-linux-x64-gnu" "1.2.1" - "@chainsafe/swap-or-not-shuffle-linux-x64-musl" "1.2.1" - "@chainsafe/swap-or-not-shuffle-win32-arm64-msvc" "1.2.1" - "@chainsafe/swap-or-not-shuffle-win32-x64-msvc" "1.2.1" - -"@colors/colors@1.5.0": - version "1.5.0" - resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9" - integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== - -"@emnapi/core@^1.7.1": - version "1.9.1" - resolved "https://registry.yarnpkg.com/@emnapi/core/-/core-1.9.1.tgz#2143069c744ca2442074f8078462e51edd63c7bd" - integrity sha512-mukuNALVsoix/w1BJwFzwXBN/dHeejQtuVzcDsfOEsdpCumXb/E9j8w11h5S54tT1xhifGfbbSm/ICrObRb3KA== - dependencies: - "@emnapi/wasi-threads" "1.2.0" - tslib "^2.4.0" - -"@emnapi/runtime@^1.7.1": - version "1.9.1" - resolved "https://registry.yarnpkg.com/@emnapi/runtime/-/runtime-1.9.1.tgz#115ff2a0d589865be6bd8e9d701e499c473f2a8d" - integrity sha512-VYi5+ZVLhpgK4hQ0TAjiQiZ6ol0oe4mBx7mVv7IflsiEp0OWoVsp/+f9Vc1hOhE0TtkORVrI1GvzyreqpgWtkA== - dependencies: - tslib "^2.4.0" - -"@emnapi/wasi-threads@1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@emnapi/wasi-threads/-/wasi-threads-1.2.0.tgz#a19d9772cc3d195370bf6e2a805eec40aa75e18e" - integrity sha512-N10dEJNSsUx41Z6pZsXU8FjPjpBEplgH24sfkmITrBED1/U2Esum9F3lfLrMjKHHjmi557zQn7kR9R+XWXu5Rg== - dependencies: - tslib "^2.4.0" - -"@eslint-community/eslint-utils@^4.2.0": - version "4.9.1" - resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz#4e90af67bc51ddee6cdef5284edf572ec376b595" - integrity sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ== - dependencies: - eslint-visitor-keys "^3.4.3" - -"@eslint-community/regexpp@^4.6.1": - version "4.12.2" - resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.12.2.tgz#bccdf615bcf7b6e8db830ec0b8d21c9a25de597b" - integrity sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew== - -"@eslint/eslintrc@^2.1.4": - version "2.1.4" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.4.tgz#388a269f0f25c1b6adc317b5a2c55714894c70ad" - integrity sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ== - dependencies: - ajv "^6.12.4" - debug "^4.3.2" - espree "^9.6.0" - globals "^13.19.0" - ignore "^5.2.0" - import-fresh "^3.2.1" - js-yaml "^4.1.0" - minimatch "^3.1.2" - strip-json-comments "^3.1.1" - -"@eslint/js@8.57.1": - version "8.57.1" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.57.1.tgz#de633db3ec2ef6a3c89e2f19038063e8a122e2c2" - integrity sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q== - -"@eth-optimism/contracts@^0.5.21": - version "0.5.40" - resolved "https://registry.yarnpkg.com/@eth-optimism/contracts/-/contracts-0.5.40.tgz#d13a04a15ea947a69055e6fc74d87e215d4c936a" - integrity sha512-MrzV0nvsymfO/fursTB7m/KunkPsCndltVgfdHaT1Aj5Vi6R/doKIGGkOofHX+8B6VMZpuZosKCMQ5lQuqjt8w== - dependencies: - "@eth-optimism/core-utils" "0.12.0" - "@ethersproject/abstract-provider" "^5.7.0" - "@ethersproject/abstract-signer" "^5.7.0" - -"@eth-optimism/core-utils@0.12.0": - version "0.12.0" - resolved "https://registry.yarnpkg.com/@eth-optimism/core-utils/-/core-utils-0.12.0.tgz#6337e4599a34de23f8eceb20378de2a2de82b0ea" - integrity sha512-qW+7LZYCz7i8dRa7SRlUKIo1VBU8lvN0HeXCxJR+z+xtMzMQpPds20XJNCMclszxYQHkXY00fOT6GvFw9ZL6nw== - dependencies: - "@ethersproject/abi" "^5.7.0" - "@ethersproject/abstract-provider" "^5.7.0" - "@ethersproject/address" "^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/keccak256" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/providers" "^5.7.0" - "@ethersproject/rlp" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - "@ethersproject/web" "^5.7.0" - bufio "^1.0.7" - chai "^4.3.4" - -"@ethereum-waffle/chai@4.0.10": - version "4.0.10" - resolved "https://registry.yarnpkg.com/@ethereum-waffle/chai/-/chai-4.0.10.tgz#6f600a40b6fdaed331eba42b8625ff23f3a0e59a" - integrity sha512-X5RepE7Dn8KQLFO7HHAAe+KeGaX/by14hn90wePGBhzL54tq4Y8JscZFu+/LCwCl6TnkAAy5ebiMoqJ37sFtWw== - dependencies: - "@ethereum-waffle/provider" "4.0.5" - debug "^4.3.4" - json-bigint "^1.0.0" - -"@ethereum-waffle/compiler@4.0.3": - version "4.0.3" - resolved "https://registry.yarnpkg.com/@ethereum-waffle/compiler/-/compiler-4.0.3.tgz#069e2df24b879b8a7b78857bad6f8bf6ebc8a5b1" - integrity sha512-5x5U52tSvEVJS6dpCeXXKvRKyf8GICDwiTwUvGD3/WD+DpvgvaoHOL82XqpTSUHgV3bBq6ma5/8gKUJUIAnJCw== - dependencies: - "@resolver-engine/imports" "^0.3.3" - "@resolver-engine/imports-fs" "^0.3.3" - "@typechain/ethers-v5" "^10.0.0" - "@types/mkdirp" "^0.5.2" - "@types/node-fetch" "^2.6.1" - mkdirp "^0.5.1" - node-fetch "^2.6.7" - -"@ethereum-waffle/ens@4.0.3": - version "4.0.3" - resolved "https://registry.yarnpkg.com/@ethereum-waffle/ens/-/ens-4.0.3.tgz#4a46ac926414f3c83b4e8cc2562c8e2aee06377a" - integrity sha512-PVLcdnTbaTfCrfSOrvtlA9Fih73EeDvFS28JQnT5M5P4JMplqmchhcZB1yg/fCtx4cvgHlZXa0+rOCAk2Jk0Jw== - -"@ethereum-waffle/mock-contract@4.0.4": - version "4.0.4" - resolved "https://registry.yarnpkg.com/@ethereum-waffle/mock-contract/-/mock-contract-4.0.4.tgz#f13fea29922d87a4d2e7c4fc8fe72ea04d2c13de" - integrity sha512-LwEj5SIuEe9/gnrXgtqIkWbk2g15imM/qcJcxpLyAkOj981tQxXmtV4XmQMZsdedEsZ/D/rbUAOtZbgwqgUwQA== - -"@ethereum-waffle/provider@4.0.5": - version "4.0.5" - resolved "https://registry.yarnpkg.com/@ethereum-waffle/provider/-/provider-4.0.5.tgz#8a65dbf0263f4162c9209608205dee1c960e716b" - integrity sha512-40uzfyzcrPh+Gbdzv89JJTMBlZwzya1YLDyim8mVbEqYLP5VRYWoGp0JMyaizgV3hMoUFRqJKVmIUw4v7r3hYw== - dependencies: - "@ethereum-waffle/ens" "4.0.3" - "@ganache/ethereum-options" "0.1.4" - debug "^4.3.4" - ganache "7.4.3" - -"@ethereumjs/block@^3.5.0", "@ethereumjs/block@^3.6.0", "@ethereumjs/block@^3.6.2": - version "3.6.3" - resolved "https://registry.yarnpkg.com/@ethereumjs/block/-/block-3.6.3.tgz#d96cbd7af38b92ebb3424223dbf773f5ccd27f84" - integrity sha512-CegDeryc2DVKnDkg5COQrE0bJfw/p0v3GBk2W5/Dj5dOVfEmb50Ux0GLnSPypooLnfqjwFaorGuT9FokWB3GRg== - dependencies: - "@ethereumjs/common" "^2.6.5" - "@ethereumjs/tx" "^3.5.2" - ethereumjs-util "^7.1.5" - merkle-patricia-tree "^4.2.4" - -"@ethereumjs/blockchain@^5.5.0": - version "5.5.3" - resolved "https://registry.yarnpkg.com/@ethereumjs/blockchain/-/blockchain-5.5.3.tgz#aa49a6a04789da6b66b5bcbb0d0b98efc369f640" - integrity sha512-bi0wuNJ1gw4ByNCV56H0Z4Q7D+SxUbwyG12Wxzbvqc89PXLRNR20LBcSUZRKpN0+YCPo6m0XZL/JLio3B52LTw== - dependencies: - "@ethereumjs/block" "^3.6.2" - "@ethereumjs/common" "^2.6.4" - "@ethereumjs/ethash" "^1.1.0" - debug "^4.3.3" - ethereumjs-util "^7.1.5" - level-mem "^5.0.1" - lru-cache "^5.1.1" - semaphore-async-await "^1.5.1" - -"@ethereumjs/common@2.6.0": - version "2.6.0" - resolved "https://registry.yarnpkg.com/@ethereumjs/common/-/common-2.6.0.tgz#feb96fb154da41ee2cc2c5df667621a440f36348" - integrity sha512-Cq2qS0FTu6O2VU1sgg+WyU9Ps0M6j/BEMHN+hRaECXCV/r0aI78u4N6p52QW/BDVhwWZpCdrvG8X7NJdzlpNUA== - dependencies: - crc-32 "^1.2.0" - ethereumjs-util "^7.1.3" - -"@ethereumjs/common@^2.5.0", "@ethereumjs/common@^2.6.0", "@ethereumjs/common@^2.6.4", "@ethereumjs/common@^2.6.5": - version "2.6.5" - resolved "https://registry.yarnpkg.com/@ethereumjs/common/-/common-2.6.5.tgz#0a75a22a046272579d91919cb12d84f2756e8d30" - integrity sha512-lRyVQOeCDaIVtgfbowla32pzeDv2Obr8oR8Put5RdUBNRGr1VGPGQNGP6elWIpgK3YdpzqTOh4GyUGOureVeeA== - dependencies: - crc-32 "^1.2.0" - ethereumjs-util "^7.1.5" - -"@ethereumjs/ethash@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@ethereumjs/ethash/-/ethash-1.1.0.tgz#7c5918ffcaa9cb9c1dc7d12f77ef038c11fb83fb" - integrity sha512-/U7UOKW6BzpA+Vt+kISAoeDie1vAvY4Zy2KF5JJb+So7+1yKmJeJEHOGSnQIj330e9Zyl3L5Nae6VZyh2TJnAA== - dependencies: - "@ethereumjs/block" "^3.5.0" - "@types/levelup" "^4.3.0" - buffer-xor "^2.0.1" - ethereumjs-util "^7.1.1" - miller-rabin "^4.0.0" - -"@ethereumjs/rlp@^4.0.1": - version "4.0.1" - resolved "https://registry.yarnpkg.com/@ethereumjs/rlp/-/rlp-4.0.1.tgz#626fabfd9081baab3d0a3074b0c7ecaf674aaa41" - integrity sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw== - -"@ethereumjs/rlp@^5.0.2": - version "5.0.2" - resolved "https://registry.yarnpkg.com/@ethereumjs/rlp/-/rlp-5.0.2.tgz#c89bd82f2f3bec248ab2d517ae25f5bbc4aac842" - integrity sha512-DziebCdg4JpGlEqEdGgXmjqcFoJi+JGulUXwEjsZGAscAQ7MyD/7LE/GVCP29vEQxKc7AAwjT3A2ywHp2xfoCA== - -"@ethereumjs/tx@3.4.0": - version "3.4.0" - resolved "https://registry.yarnpkg.com/@ethereumjs/tx/-/tx-3.4.0.tgz#7eb1947eefa55eb9cf05b3ca116fb7a3dbd0bce7" - integrity sha512-WWUwg1PdjHKZZxPPo274ZuPsJCWV3SqATrEKQP1n2DrVYVP1aZIYpo/mFaA0BDoE0tIQmBeimRCEA0Lgil+yYw== - dependencies: - "@ethereumjs/common" "^2.6.0" - ethereumjs-util "^7.1.3" - -"@ethereumjs/tx@^3.3.2", "@ethereumjs/tx@^3.4.0", "@ethereumjs/tx@^3.5.2": - version "3.5.2" - resolved "https://registry.yarnpkg.com/@ethereumjs/tx/-/tx-3.5.2.tgz#197b9b6299582ad84f9527ca961466fce2296c1c" - integrity sha512-gQDNJWKrSDGu2w7w0PzVXVBNMzb7wwdDOmOqczmhNjqFxFuIbhVJDwiGEnxFNC2/b8ifcZzY7MLcluizohRzNw== - dependencies: - "@ethereumjs/common" "^2.6.4" - ethereumjs-util "^7.1.5" - -"@ethereumjs/util@^8.1.0": - version "8.1.0" - resolved "https://registry.yarnpkg.com/@ethereumjs/util/-/util-8.1.0.tgz#299df97fb6b034e0577ce9f94c7d9d1004409ed4" - integrity sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA== - dependencies: - "@ethereumjs/rlp" "^4.0.1" - ethereum-cryptography "^2.0.0" - micro-ftch "^0.3.1" - -"@ethereumjs/util@^9.1.0": - version "9.1.0" - resolved "https://registry.yarnpkg.com/@ethereumjs/util/-/util-9.1.0.tgz#75e3898a3116d21c135fa9e29886565609129bce" - integrity sha512-XBEKsYqLGXLah9PNJbgdkigthkG7TAGvlD/sH12beMXEyHDyigfcbdvHhmLyDWgDyOJn4QwiQUaF7yeuhnjdog== - dependencies: - "@ethereumjs/rlp" "^5.0.2" - ethereum-cryptography "^2.2.1" - -"@ethereumjs/vm@5.6.0": - version "5.6.0" - resolved "https://registry.yarnpkg.com/@ethereumjs/vm/-/vm-5.6.0.tgz#e0ca62af07de820143674c30b776b86c1983a464" - integrity sha512-J2m/OgjjiGdWF2P9bj/4LnZQ1zRoZhY8mRNVw/N3tXliGI8ai1sI1mlDPkLpeUUM4vq54gH6n0ZlSpz8U/qlYQ== - dependencies: - "@ethereumjs/block" "^3.6.0" - "@ethereumjs/blockchain" "^5.5.0" - "@ethereumjs/common" "^2.6.0" - "@ethereumjs/tx" "^3.4.0" - async-eventemitter "^0.2.4" - core-js-pure "^3.0.1" - debug "^2.2.0" - ethereumjs-util "^7.1.3" - functional-red-black-tree "^1.0.1" - mcl-wasm "^0.7.1" - merkle-patricia-tree "^4.2.2" - rustbn.js "~0.2.0" - -"@ethersproject/abi@5.0.7": - version "5.0.7" - resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.0.7.tgz#79e52452bd3ca2956d0e1c964207a58ad1a0ee7b" - integrity sha512-Cqktk+hSIckwP/W8O47Eef60VwmoSC/L3lY0+dIBhQPCNn9E4V7rwmm2aFrNRRDJfFlGuZ1khkQUOc3oBX+niw== - dependencies: - "@ethersproject/address" "^5.0.4" - "@ethersproject/bignumber" "^5.0.7" - "@ethersproject/bytes" "^5.0.4" - "@ethersproject/constants" "^5.0.4" - "@ethersproject/hash" "^5.0.4" - "@ethersproject/keccak256" "^5.0.3" - "@ethersproject/logger" "^5.0.5" - "@ethersproject/properties" "^5.0.3" - "@ethersproject/strings" "^5.0.4" - -"@ethersproject/abi@5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.7.0.tgz#b3f3e045bbbeed1af3947335c247ad625a44e449" - integrity sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA== - dependencies: - "@ethersproject/address" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/hash" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - -"@ethersproject/abi@5.8.0", "@ethersproject/abi@^5.0.9", "@ethersproject/abi@^5.1.2", "@ethersproject/abi@^5.6.3", "@ethersproject/abi@^5.7.0", "@ethersproject/abi@^5.8.0": - version "5.8.0" - resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.8.0.tgz#e79bb51940ac35fe6f3262d7fe2cdb25ad5f07d9" - integrity sha512-b9YS/43ObplgyV6SlyQsG53/vkSal0MNA1fskSC4mbnCMi8R+NkcH8K9FPYNESf6jUefBUniE4SOKms0E/KK1Q== - dependencies: - "@ethersproject/address" "^5.8.0" - "@ethersproject/bignumber" "^5.8.0" - "@ethersproject/bytes" "^5.8.0" - "@ethersproject/constants" "^5.8.0" - "@ethersproject/hash" "^5.8.0" - "@ethersproject/keccak256" "^5.8.0" - "@ethersproject/logger" "^5.8.0" - "@ethersproject/properties" "^5.8.0" - "@ethersproject/strings" "^5.8.0" - -"@ethersproject/abstract-provider@5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz#b0a8550f88b6bf9d51f90e4795d48294630cb9ef" - integrity sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw== - dependencies: - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/networks" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - "@ethersproject/web" "^5.7.0" - -"@ethersproject/abstract-provider@5.8.0", "@ethersproject/abstract-provider@^5.7.0", "@ethersproject/abstract-provider@^5.8.0": - version "5.8.0" - resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.8.0.tgz#7581f9be601afa1d02b95d26b9d9840926a35b0c" - integrity sha512-wC9SFcmh4UK0oKuLJQItoQdzS/qZ51EJegK6EmAWlh+OptpQ/npECOR3QqECd8iGHC0RJb4WKbVdSfif4ammrg== - dependencies: - "@ethersproject/bignumber" "^5.8.0" - "@ethersproject/bytes" "^5.8.0" - "@ethersproject/logger" "^5.8.0" - "@ethersproject/networks" "^5.8.0" - "@ethersproject/properties" "^5.8.0" - "@ethersproject/transactions" "^5.8.0" - "@ethersproject/web" "^5.8.0" - -"@ethersproject/abstract-signer@5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz#13f4f32117868452191a4649723cb086d2b596b2" - integrity sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ== - dependencies: - "@ethersproject/abstract-provider" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - -"@ethersproject/abstract-signer@5.8.0", "@ethersproject/abstract-signer@^5.7.0", "@ethersproject/abstract-signer@^5.8.0": - version "5.8.0" - resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.8.0.tgz#8d7417e95e4094c1797a9762e6789c7356db0754" - integrity sha512-N0XhZTswXcmIZQdYtUnd79VJzvEwXQw6PK0dTl9VoYrEBxxCPXqS0Eod7q5TNKRxe1/5WUMuR0u0nqTF/avdCA== - dependencies: - "@ethersproject/abstract-provider" "^5.8.0" - "@ethersproject/bignumber" "^5.8.0" - "@ethersproject/bytes" "^5.8.0" - "@ethersproject/logger" "^5.8.0" - "@ethersproject/properties" "^5.8.0" - -"@ethersproject/address@5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.7.0.tgz#19b56c4d74a3b0a46bfdbb6cfcc0a153fc697f37" - integrity sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA== - dependencies: - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/rlp" "^5.7.0" - -"@ethersproject/address@5.8.0", "@ethersproject/address@^5.0.2", "@ethersproject/address@^5.0.4", "@ethersproject/address@^5.7.0", "@ethersproject/address@^5.8.0": - version "5.8.0" - resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.8.0.tgz#3007a2c352eee566ad745dca1dbbebdb50a6a983" - integrity sha512-GhH/abcC46LJwshoN+uBNoKVFPxUuZm6dA257z0vZkKmU1+t8xTn8oK7B9qrj8W2rFRMch4gbJl6PmVxjxBEBA== - dependencies: - "@ethersproject/bignumber" "^5.8.0" - "@ethersproject/bytes" "^5.8.0" - "@ethersproject/keccak256" "^5.8.0" - "@ethersproject/logger" "^5.8.0" - "@ethersproject/rlp" "^5.8.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/base64@5.8.0", "@ethersproject/base64@^5.7.0", "@ethersproject/base64@^5.8.0": - version "5.8.0" - resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.8.0.tgz#61c669c648f6e6aad002c228465d52ac93ee83eb" - integrity sha512-lN0oIwfkYj9LbPx4xEkie6rAMJtySbpOAFXSDVQaBnAzYfB4X2Qr+FXJGxMoc3Bxp2Sm8OwvzMrywxyw0gLjIQ== - dependencies: - "@ethersproject/bytes" "^5.8.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/basex@5.8.0", "@ethersproject/basex@^5.7.0", "@ethersproject/basex@^5.8.0": - version "5.8.0" - resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.8.0.tgz#1d279a90c4be84d1c1139114a1f844869e57d03a" - integrity sha512-PIgTszMlDRmNwW9nhS6iqtVfdTAKosA7llYXNmGPw4YAI1PUyMv28988wAb41/gHF/WqGdoLv0erHaRcHRKW2Q== - dependencies: - "@ethersproject/bytes" "^5.8.0" - "@ethersproject/properties" "^5.8.0" - -"@ethersproject/bignumber@5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.7.0.tgz#e2f03837f268ba655ffba03a57853e18a18dc9c2" - integrity sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - bn.js "^5.2.1" - -"@ethersproject/bignumber@5.8.0", "@ethersproject/bignumber@^5.0.7", "@ethersproject/bignumber@^5.7.0", "@ethersproject/bignumber@^5.8.0": - version "5.8.0" - resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.8.0.tgz#c381d178f9eeb370923d389284efa19f69efa5d7" - integrity sha512-ZyaT24bHaSeJon2tGPKIiHszWjD/54Sz8t57Toch475lCLljC6MgPmxk7Gtzz+ddNN5LuHea9qhAe0x3D+uYPA== - dependencies: - "@ethersproject/bytes" "^5.8.0" - "@ethersproject/logger" "^5.8.0" - bn.js "^5.2.1" - -"@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/bytes@5.8.0", "@ethersproject/bytes@^5.0.4", "@ethersproject/bytes@^5.7.0", "@ethersproject/bytes@^5.8.0": - version "5.8.0" - resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.8.0.tgz#9074820e1cac7507a34372cadeb035461463be34" - integrity sha512-vTkeohgJVCPVHu5c25XWaWQOZ4v+DkGoC42/TS2ond+PARCxTJvgTFUNDZovyQ/uAQ4EcpqqowKydcdmRKjg7A== - dependencies: - "@ethersproject/logger" "^5.8.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/constants@5.8.0", "@ethersproject/constants@^5.0.4", "@ethersproject/constants@^5.7.0", "@ethersproject/constants@^5.8.0": - version "5.8.0" - resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.8.0.tgz#12f31c2f4317b113a4c19de94e50933648c90704" - integrity sha512-wigX4lrf5Vu+axVTIvNsuL6YrV4O5AXl5ubcURKMEME5TnWBouUh0CDTWxZ2GpnRn1kcCgE7l8O5+VbV9QTTcg== - dependencies: - "@ethersproject/bignumber" "^5.8.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/contracts@5.8.0", "@ethersproject/contracts@^5.7.0": - version "5.8.0" - resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.8.0.tgz#243a38a2e4aa3e757215ea64e276f8a8c9d8ed73" - integrity sha512-0eFjGz9GtuAi6MZwhb4uvUM216F38xiuR0yYCjKJpNfSEy4HUM8hvqqBj9Jmm0IUz8l0xKEhWwLIhPgxNY0yvQ== - dependencies: - "@ethersproject/abi" "^5.8.0" - "@ethersproject/abstract-provider" "^5.8.0" - "@ethersproject/abstract-signer" "^5.8.0" - "@ethersproject/address" "^5.8.0" - "@ethersproject/bignumber" "^5.8.0" - "@ethersproject/bytes" "^5.8.0" - "@ethersproject/constants" "^5.8.0" - "@ethersproject/logger" "^5.8.0" - "@ethersproject/properties" "^5.8.0" - "@ethersproject/transactions" "^5.8.0" - -"@ethersproject/hash@5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.7.0.tgz#eb7aca84a588508369562e16e514b539ba5240a7" - integrity sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g== - dependencies: - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/address" "^5.7.0" - "@ethersproject/base64" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - -"@ethersproject/hash@5.8.0", "@ethersproject/hash@^5.0.4", "@ethersproject/hash@^5.7.0", "@ethersproject/hash@^5.8.0": - version "5.8.0" - resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.8.0.tgz#b8893d4629b7f8462a90102572f8cd65a0192b4c" - integrity sha512-ac/lBcTbEWW/VGJij0CNSw/wPcw9bSRgCB0AIBz8CvED/jfvDoV9hsIIiWfvWmFEi8RcXtlNwp2jv6ozWOsooA== - dependencies: - "@ethersproject/abstract-signer" "^5.8.0" - "@ethersproject/address" "^5.8.0" - "@ethersproject/base64" "^5.8.0" - "@ethersproject/bignumber" "^5.8.0" - "@ethersproject/bytes" "^5.8.0" - "@ethersproject/keccak256" "^5.8.0" - "@ethersproject/logger" "^5.8.0" - "@ethersproject/properties" "^5.8.0" - "@ethersproject/strings" "^5.8.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/hdnode@5.8.0", "@ethersproject/hdnode@^5.7.0", "@ethersproject/hdnode@^5.8.0": - version "5.8.0" - resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.8.0.tgz#a51ae2a50bcd48ef6fd108c64cbae5e6ff34a761" - integrity sha512-4bK1VF6E83/3/Im0ERnnUeWOY3P1BZml4ZD3wcH8Ys0/d1h1xaFt6Zc+Dh9zXf9TapGro0T4wvO71UTCp3/uoA== - dependencies: - "@ethersproject/abstract-signer" "^5.8.0" - "@ethersproject/basex" "^5.8.0" - "@ethersproject/bignumber" "^5.8.0" - "@ethersproject/bytes" "^5.8.0" - "@ethersproject/logger" "^5.8.0" - "@ethersproject/pbkdf2" "^5.8.0" - "@ethersproject/properties" "^5.8.0" - "@ethersproject/sha2" "^5.8.0" - "@ethersproject/signing-key" "^5.8.0" - "@ethersproject/strings" "^5.8.0" - "@ethersproject/transactions" "^5.8.0" - "@ethersproject/wordlists" "^5.8.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/json-wallets@5.8.0", "@ethersproject/json-wallets@^5.7.0", "@ethersproject/json-wallets@^5.8.0": - version "5.8.0" - resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.8.0.tgz#d18de0a4cf0f185f232eb3c17d5e0744d97eb8c9" - integrity sha512-HxblNck8FVUtNxS3VTEYJAcwiKYsBIF77W15HufqlBF9gGfhmYOJtYZp8fSDZtn9y5EaXTE87zDwzxRoTFk11w== - dependencies: - "@ethersproject/abstract-signer" "^5.8.0" - "@ethersproject/address" "^5.8.0" - "@ethersproject/bytes" "^5.8.0" - "@ethersproject/hdnode" "^5.8.0" - "@ethersproject/keccak256" "^5.8.0" - "@ethersproject/logger" "^5.8.0" - "@ethersproject/pbkdf2" "^5.8.0" - "@ethersproject/properties" "^5.8.0" - "@ethersproject/random" "^5.8.0" - "@ethersproject/strings" "^5.8.0" - "@ethersproject/transactions" "^5.8.0" - aes-js "3.0.0" - scrypt-js "3.0.1" - -"@ethersproject/keccak256@5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.7.0.tgz#3186350c6e1cd6aba7940384ec7d6d9db01f335a" - integrity sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg== - dependencies: - "@ethersproject/bytes" "^5.7.0" - js-sha3 "0.8.0" - -"@ethersproject/keccak256@5.8.0", "@ethersproject/keccak256@^5.0.3", "@ethersproject/keccak256@^5.7.0", "@ethersproject/keccak256@^5.8.0": - version "5.8.0" - resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.8.0.tgz#d2123a379567faf2d75d2aaea074ffd4df349e6a" - integrity sha512-A1pkKLZSz8pDaQ1ftutZoaN46I6+jvuqugx5KYNeQOPqq+JZ0Txm7dlWesCHB5cndJSu5vP2VKptKf7cksERng== - dependencies: - "@ethersproject/bytes" "^5.8.0" - js-sha3 "0.8.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/logger@5.8.0", "@ethersproject/logger@^5.0.5", "@ethersproject/logger@^5.7.0", "@ethersproject/logger@^5.8.0": - version "5.8.0" - resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.8.0.tgz#f0232968a4f87d29623a0481690a2732662713d6" - integrity sha512-Qe6knGmY+zPPWTC+wQrpitodgBfH7XoceCGL5bJVejmH+yCS3R8jJm8iiWuvWbG76RUmyEG53oqv6GMVWqunjA== - -"@ethersproject/networks@5.7.1": - 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/networks@5.8.0", "@ethersproject/networks@^5.7.0", "@ethersproject/networks@^5.7.1", "@ethersproject/networks@^5.8.0": - version "5.8.0" - resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.8.0.tgz#8b4517a3139380cba9fb00b63ffad0a979671fde" - integrity sha512-egPJh3aPVAzbHwq8DD7Po53J4OUSsA1MjQp8Vf/OZPav5rlmWUaFLiq8cvQiGK0Z5K6LYzm29+VA/p4RL1FzNg== - dependencies: - "@ethersproject/logger" "^5.8.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/pbkdf2@5.8.0", "@ethersproject/pbkdf2@^5.7.0", "@ethersproject/pbkdf2@^5.8.0": - version "5.8.0" - resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.8.0.tgz#cd2621130e5dd51f6a0172e63a6e4a0c0a0ec37e" - integrity sha512-wuHiv97BrzCmfEaPbUFpMjlVg/IDkZThp9Ri88BpjRleg4iePJaj2SW8AIyE8cXn5V1tuAaMj6lzvsGJkGWskg== - dependencies: - "@ethersproject/bytes" "^5.8.0" - "@ethersproject/sha2" "^5.8.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/properties@5.8.0", "@ethersproject/properties@^5.0.3", "@ethersproject/properties@^5.7.0", "@ethersproject/properties@^5.8.0": - version "5.8.0" - resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.8.0.tgz#405a8affb6311a49a91dabd96aeeae24f477020e" - integrity sha512-PYuiEoQ+FMaZZNGrStmN7+lWjlsoufGIHdww7454FIaGdbe/p5rnaCXTr5MtBYl3NkeoVhHZuyzChPeGeKIpQw== - dependencies: - "@ethersproject/logger" "^5.8.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/providers@5.8.0", "@ethersproject/providers@^5.7.0", "@ethersproject/providers@^5.7.2": - version "5.8.0" - resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.8.0.tgz#6c2ae354f7f96ee150439f7de06236928bc04cb4" - integrity sha512-3Il3oTzEx3o6kzcg9ZzbE+oCZYyY+3Zh83sKkn4s1DZfTUjIegHnN2Cm0kbn9YFy45FDVcuCLLONhU7ny0SsCw== - dependencies: - "@ethersproject/abstract-provider" "^5.8.0" - "@ethersproject/abstract-signer" "^5.8.0" - "@ethersproject/address" "^5.8.0" - "@ethersproject/base64" "^5.8.0" - "@ethersproject/basex" "^5.8.0" - "@ethersproject/bignumber" "^5.8.0" - "@ethersproject/bytes" "^5.8.0" - "@ethersproject/constants" "^5.8.0" - "@ethersproject/hash" "^5.8.0" - "@ethersproject/logger" "^5.8.0" - "@ethersproject/networks" "^5.8.0" - "@ethersproject/properties" "^5.8.0" - "@ethersproject/random" "^5.8.0" - "@ethersproject/rlp" "^5.8.0" - "@ethersproject/sha2" "^5.8.0" - "@ethersproject/strings" "^5.8.0" - "@ethersproject/transactions" "^5.8.0" - "@ethersproject/web" "^5.8.0" - bech32 "1.1.4" - ws "8.18.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/random@5.8.0", "@ethersproject/random@^5.7.0", "@ethersproject/random@^5.8.0": - version "5.8.0" - resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.8.0.tgz#1bced04d49449f37c6437c701735a1a022f0057a" - integrity sha512-E4I5TDl7SVqyg4/kkA/qTfuLWAQGXmSOgYyO01So8hLfwgKvYK5snIlzxJMk72IFdG/7oh8yuSqY2KX7MMwg+A== - dependencies: - "@ethersproject/bytes" "^5.8.0" - "@ethersproject/logger" "^5.8.0" - -"@ethersproject/rlp@5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.7.0.tgz#de39e4d5918b9d74d46de93af80b7685a9c21304" - integrity sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/rlp@5.8.0", "@ethersproject/rlp@^5.7.0", "@ethersproject/rlp@^5.8.0": - version "5.8.0" - resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.8.0.tgz#5a0d49f61bc53e051532a5179472779141451de5" - integrity sha512-LqZgAznqDbiEunaUvykH2JAoXTT9NV0Atqk8rQN9nx9SEgThA/WMx5DnW8a9FOufo//6FZOCHZ+XiClzgbqV9Q== - dependencies: - "@ethersproject/bytes" "^5.8.0" - "@ethersproject/logger" "^5.8.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/sha2@5.8.0", "@ethersproject/sha2@^5.7.0", "@ethersproject/sha2@^5.8.0": - version "5.8.0" - resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.8.0.tgz#8954a613bb78dac9b46829c0a95de561ef74e5e1" - integrity sha512-dDOUrXr9wF/YFltgTBYS0tKslPEKr6AekjqDW2dbn1L1xmjGR+9GiKu4ajxovnrDbwxAKdHjW8jNcwfz8PAz4A== - dependencies: - "@ethersproject/bytes" "^5.8.0" - "@ethersproject/logger" "^5.8.0" - hash.js "1.1.7" - -"@ethersproject/signing-key@5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.7.0.tgz#06b2df39411b00bc57c7c09b01d1e41cf1b16ab3" - integrity sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - bn.js "^5.2.1" - elliptic "6.5.4" - hash.js "1.1.7" - -"@ethersproject/signing-key@5.8.0", "@ethersproject/signing-key@^5.7.0", "@ethersproject/signing-key@^5.8.0": - version "5.8.0" - resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.8.0.tgz#9797e02c717b68239c6349394ea85febf8893119" - integrity sha512-LrPW2ZxoigFi6U6aVkFN/fa9Yx/+4AtIUe4/HACTvKJdhm0eeb107EVCIQcrLZkxaSIgc/eCrX8Q1GtbH+9n3w== - dependencies: - "@ethersproject/bytes" "^5.8.0" - "@ethersproject/logger" "^5.8.0" - "@ethersproject/properties" "^5.8.0" - bn.js "^5.2.1" - elliptic "6.6.1" - 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/solidity@5.8.0", "@ethersproject/solidity@^5.7.0", "@ethersproject/solidity@^5.8.0": - version "5.8.0" - resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.8.0.tgz#429bb9fcf5521307a9448d7358c26b93695379b9" - integrity sha512-4CxFeCgmIWamOHwYN9d+QWGxye9qQLilpgTU0XhYs1OahkclF+ewO+3V1U0mvpiuQxm5EHHmv8f7ClVII8EHsA== - dependencies: - "@ethersproject/bignumber" "^5.8.0" - "@ethersproject/bytes" "^5.8.0" - "@ethersproject/keccak256" "^5.8.0" - "@ethersproject/logger" "^5.8.0" - "@ethersproject/sha2" "^5.8.0" - "@ethersproject/strings" "^5.8.0" - -"@ethersproject/strings@5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.7.0.tgz#54c9d2a7c57ae8f1205c88a9d3a56471e14d5ed2" - integrity sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/strings@5.8.0", "@ethersproject/strings@^5.0.4", "@ethersproject/strings@^5.7.0", "@ethersproject/strings@^5.8.0": - version "5.8.0" - resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.8.0.tgz#ad79fafbf0bd272d9765603215ac74fd7953908f" - integrity sha512-qWEAk0MAvl0LszjdfnZ2uC8xbR2wdv4cDabyHiBh3Cldq/T8dPH3V4BbBsAYJUeonwD+8afVXld274Ls+Y1xXg== - dependencies: - "@ethersproject/bytes" "^5.8.0" - "@ethersproject/constants" "^5.8.0" - "@ethersproject/logger" "^5.8.0" - -"@ethersproject/transactions@5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.7.0.tgz#91318fc24063e057885a6af13fdb703e1f993d3b" - integrity sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ== - dependencies: - "@ethersproject/address" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/rlp" "^5.7.0" - "@ethersproject/signing-key" "^5.7.0" - -"@ethersproject/transactions@5.8.0", "@ethersproject/transactions@^5.0.0-beta.135", "@ethersproject/transactions@^5.7.0", "@ethersproject/transactions@^5.8.0": - version "5.8.0" - resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.8.0.tgz#1e518822403abc99def5a043d1c6f6fe0007e46b" - integrity sha512-UglxSDjByHG0TuU17bDfCemZ3AnKO2vYrL5/2n2oXvKzvb7Cz+W9gOWXKARjp2URVwcWlQlPOEQyAviKwT4AHg== - dependencies: - "@ethersproject/address" "^5.8.0" - "@ethersproject/bignumber" "^5.8.0" - "@ethersproject/bytes" "^5.8.0" - "@ethersproject/constants" "^5.8.0" - "@ethersproject/keccak256" "^5.8.0" - "@ethersproject/logger" "^5.8.0" - "@ethersproject/properties" "^5.8.0" - "@ethersproject/rlp" "^5.8.0" - "@ethersproject/signing-key" "^5.8.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/units@5.8.0", "@ethersproject/units@^5.7.0": - version "5.8.0" - resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.8.0.tgz#c12f34ba7c3a2de0e9fa0ed0ee32f3e46c5c2c6a" - integrity sha512-lxq0CAnc5kMGIiWW4Mr041VT8IhNM+Pn5T3haO74XZWFulk7wH1Gv64HqE96hT4a7iiNMdOCFEBgaxWuk8ETKQ== - dependencies: - "@ethersproject/bignumber" "^5.8.0" - "@ethersproject/constants" "^5.8.0" - "@ethersproject/logger" "^5.8.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/wallet@5.8.0", "@ethersproject/wallet@^5.7.0": - version "5.8.0" - resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.8.0.tgz#49c300d10872e6986d953e8310dc33d440da8127" - integrity sha512-G+jnzmgg6UxurVKRKvw27h0kvG75YKXZKdlLYmAHeF32TGUzHkOFd7Zn6QHOTYRFWnfjtSSFjBowKo7vfrXzPA== - dependencies: - "@ethersproject/abstract-provider" "^5.8.0" - "@ethersproject/abstract-signer" "^5.8.0" - "@ethersproject/address" "^5.8.0" - "@ethersproject/bignumber" "^5.8.0" - "@ethersproject/bytes" "^5.8.0" - "@ethersproject/hash" "^5.8.0" - "@ethersproject/hdnode" "^5.8.0" - "@ethersproject/json-wallets" "^5.8.0" - "@ethersproject/keccak256" "^5.8.0" - "@ethersproject/logger" "^5.8.0" - "@ethersproject/properties" "^5.8.0" - "@ethersproject/random" "^5.8.0" - "@ethersproject/signing-key" "^5.8.0" - "@ethersproject/transactions" "^5.8.0" - "@ethersproject/wordlists" "^5.8.0" - -"@ethersproject/web@5.7.1": - version "5.7.1" - resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.7.1.tgz#de1f285b373149bee5928f4eb7bcb87ee5fbb4ae" - integrity sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w== - dependencies: - "@ethersproject/base64" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - -"@ethersproject/web@5.8.0", "@ethersproject/web@^5.7.0", "@ethersproject/web@^5.8.0": - version "5.8.0" - resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.8.0.tgz#3e54badc0013b7a801463a7008a87988efce8a37" - integrity sha512-j7+Ksi/9KfGviws6Qtf9Q7KCqRhpwrYKQPs+JBA/rKVFF/yaWLHJEH3zfVP2plVu+eys0d2DlFmhoQJayFewcw== - dependencies: - "@ethersproject/base64" "^5.8.0" - "@ethersproject/bytes" "^5.8.0" - "@ethersproject/logger" "^5.8.0" - "@ethersproject/properties" "^5.8.0" - "@ethersproject/strings" "^5.8.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" - -"@ethersproject/wordlists@5.8.0", "@ethersproject/wordlists@^5.7.0", "@ethersproject/wordlists@^5.8.0": - version "5.8.0" - resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.8.0.tgz#7a5654ee8d1bb1f4dbe43f91d217356d650ad821" - integrity sha512-2df9bbXicZws2Sb5S6ET493uJ0Z84Fjr3pC4tu/qlnZERibZCeUVuqdtt+7Tv9xxhUxHoIekIA7avrKUWHrezg== - dependencies: - "@ethersproject/bytes" "^5.8.0" - "@ethersproject/hash" "^5.8.0" - "@ethersproject/logger" "^5.8.0" - "@ethersproject/properties" "^5.8.0" - "@ethersproject/strings" "^5.8.0" - -"@fastify/busboy@^2.0.0": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@fastify/busboy/-/busboy-2.1.1.tgz#b9da6a878a371829a0502c9b6c1c143ef6663f4d" - integrity sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA== - -"@ganache/ethereum-address@0.1.4": - version "0.1.4" - resolved "https://registry.yarnpkg.com/@ganache/ethereum-address/-/ethereum-address-0.1.4.tgz#0e6d66f4a24f64bf687cb3ff7358fb85b9d9005e" - integrity sha512-sTkU0M9z2nZUzDeHRzzGlW724xhMLXo2LeX1hixbnjHWY1Zg1hkqORywVfl+g5uOO8ht8T0v+34IxNxAhmWlbw== - dependencies: - "@ganache/utils" "0.1.4" - -"@ganache/ethereum-options@0.1.4": - version "0.1.4" - resolved "https://registry.yarnpkg.com/@ganache/ethereum-options/-/ethereum-options-0.1.4.tgz#6a559abb44225e2b8741a8f78a19a46714a71cd6" - integrity sha512-i4l46taoK2yC41FPkcoDlEVoqHS52wcbHPqJtYETRWqpOaoj9hAg/EJIHLb1t6Nhva2CdTO84bG+qlzlTxjAHw== - dependencies: - "@ganache/ethereum-address" "0.1.4" - "@ganache/ethereum-utils" "0.1.4" - "@ganache/options" "0.1.4" - "@ganache/utils" "0.1.4" - bip39 "3.0.4" - seedrandom "3.0.5" - -"@ganache/ethereum-utils@0.1.4": - version "0.1.4" - resolved "https://registry.yarnpkg.com/@ganache/ethereum-utils/-/ethereum-utils-0.1.4.tgz#fae4b5b9e642e751ff1fa0cd7316c92996317257" - integrity sha512-FKXF3zcdDrIoCqovJmHLKZLrJ43234Em2sde/3urUT/10gSgnwlpFmrv2LUMAmSbX3lgZhW/aSs8krGhDevDAg== - dependencies: - "@ethereumjs/common" "2.6.0" - "@ethereumjs/tx" "3.4.0" - "@ethereumjs/vm" "5.6.0" - "@ganache/ethereum-address" "0.1.4" - "@ganache/rlp" "0.1.4" - "@ganache/utils" "0.1.4" - emittery "0.10.0" - ethereumjs-abi "0.6.8" - ethereumjs-util "7.1.3" - -"@ganache/options@0.1.4": - version "0.1.4" - resolved "https://registry.yarnpkg.com/@ganache/options/-/options-0.1.4.tgz#325b07e6de85094667aaaaf3d653e32404a04b78" - integrity sha512-zAe/craqNuPz512XQY33MOAG6Si1Xp0hCvfzkBfj2qkuPcbJCq6W/eQ5MB6SbXHrICsHrZOaelyqjuhSEmjXRw== - dependencies: - "@ganache/utils" "0.1.4" - bip39 "3.0.4" - seedrandom "3.0.5" - -"@ganache/rlp@0.1.4": - version "0.1.4" - resolved "https://registry.yarnpkg.com/@ganache/rlp/-/rlp-0.1.4.tgz#f4043afda83e1a14a4f80607b103daf166a9b374" - integrity sha512-Do3D1H6JmhikB+6rHviGqkrNywou/liVeFiKIpOBLynIpvZhRCgn3SEDxyy/JovcaozTo/BynHumfs5R085MFQ== - dependencies: - "@ganache/utils" "0.1.4" - rlp "2.2.6" - -"@ganache/utils@0.1.4": - version "0.1.4" - resolved "https://registry.yarnpkg.com/@ganache/utils/-/utils-0.1.4.tgz#25d60d7689e3dda6a8a7ad70e3646f07c2c39a1f" - integrity sha512-oatUueU3XuXbUbUlkyxeLLH3LzFZ4y5aSkNbx6tjSIhVTPeh+AuBKYt4eQ73FFcTB3nj/gZoslgAh5CN7O369w== - dependencies: - emittery "0.10.0" - keccak "3.0.1" - seedrandom "3.0.5" - optionalDependencies: - "@trufflesuite/bigint-buffer" "1.1.9" - -"@humanwhocodes/config-array@^0.13.0": - version "0.13.0" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.13.0.tgz#fb907624df3256d04b9aa2df50d7aa97ec648748" - integrity sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw== - dependencies: - "@humanwhocodes/object-schema" "^2.0.3" - debug "^4.3.1" - minimatch "^3.0.5" - -"@humanwhocodes/module-importer@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" - integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== - -"@humanwhocodes/object-schema@^2.0.3": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz#4a2868d75d6d6963e423bcf90b7fd1be343409d3" - integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA== - -"@isaacs/cliui@^8.0.2": - version "8.0.2" - resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" - integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== - dependencies: - string-width "^5.1.2" - string-width-cjs "npm:string-width@^4.2.0" - strip-ansi "^7.0.1" - strip-ansi-cjs "npm:strip-ansi@^6.0.1" - wrap-ansi "^8.1.0" - wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" - -"@isaacs/cliui@^9.0.0": - version "9.0.0" - resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-9.0.0.tgz#4d0a3f127058043bf2e7ee169eaf30ed901302f3" - integrity sha512-AokJm4tuBHillT+FpMtxQ60n8ObyXBatq7jD2/JA9dxbDDokKQm8KMht5ibGzLVU9IJDIKK4TPKgMHEYMn3lMg== - -"@jridgewell/sourcemap-codec@^1.5.5": - version "1.5.5" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz#6912b00d2c631c0d15ce1a7ab57cd657f2a8f8ba" - integrity sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og== - -"@lastdotnet/purrikey@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@lastdotnet/purrikey/-/purrikey-1.0.0.tgz#78442c06fcd9448f7bf0266ea1af0a9736be6ea5" - integrity sha512-Y9ycl83T1ZrLSFZYT6V/QMFZjwc4fB+/WjuQygLAVSZAJNAaEtSRm9l4lMKazV/AE30qC/uKzyY9s/zoAtNx8w== - dependencies: - "@aws-sdk/client-kms" "^3.400.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/rlp" "^5.7.0" - ethers "^5.7.2" - tslib "^2.6.0" - -"@layerzerolabs/devtools@^0.4.10": - version "0.4.10" - resolved "https://registry.yarnpkg.com/@layerzerolabs/devtools/-/devtools-0.4.10.tgz#558313e3366eef2629972a8a10e8f37bcd2f3e8c" - integrity sha512-Y9kjUQuyNfm9Vs07+Mk0+KkqHPwHN2cLSzKhe5Tp+52R7d4fI5zsn33IaJsqqGWxSDL1sKq7gFMTdtglTdsA8A== - dependencies: - bs58 "^6.0.0" - exponential-backoff "~3.1.1" - js-yaml "~4.1.0" - -"@layerzerolabs/lz-evm-messagelib-v2@^3.0.103": - version "3.0.167" - resolved "https://registry.yarnpkg.com/@layerzerolabs/lz-evm-messagelib-v2/-/lz-evm-messagelib-v2-3.0.167.tgz#666c19b1cd0ffa55e521dba2a6608b38597bcb42" - integrity sha512-Zml89u/0cITKrWksjI4V2QCaAwAIVGkox0MTiPRoCdxvQmMuoDetoiuGqPuFWRVjX8by4PUrjDGBbjxYM+TguQ== - -"@layerzerolabs/lz-evm-protocol-v2@^3.0.87": - version "3.0.167" - resolved "https://registry.yarnpkg.com/@layerzerolabs/lz-evm-protocol-v2/-/lz-evm-protocol-v2-3.0.167.tgz#3daab6d0602ee4eded3f45a0bd0979ca2a5ee3aa" - integrity sha512-LEvKkC65Smdm3AwTY6vi5lcB6g1QJtFMNi2V0fEGLK5VMrYnOkGKSpWE+wc1oBoK2x1dOqQLpsEfvfVIgzfL4w== - -"@layerzerolabs/lz-v2-utilities@^3.0.88": - version "3.0.167" - resolved "https://registry.yarnpkg.com/@layerzerolabs/lz-v2-utilities/-/lz-v2-utilities-3.0.167.tgz#5a231bd61de57c62e2895b7574574679798a3d87" - integrity sha512-cEf3+rqz/2gUJo/yAykfIx+jE89p5furG4b4V9dOygjW+/A2VUDAHgKJ1px7xU783r4MPh7ng5D3UoIPnPJDUw== - dependencies: - "@ethersproject/abi" "^5.8.0" - "@ethersproject/address" "^5.8.0" - "@ethersproject/bignumber" "^5.8.0" - "@ethersproject/bytes" "^5.8.0" - "@ethersproject/keccak256" "^5.8.0" - "@ethersproject/solidity" "^5.8.0" - bs58 "^5.0.0" - tiny-invariant "^1.3.1" - -"@layerzerolabs/oapp-evm@^0.3.2": - version "0.3.3" - resolved "https://registry.yarnpkg.com/@layerzerolabs/oapp-evm/-/oapp-evm-0.3.3.tgz#763a2f7c27ad6f69e6c87538cd96eef67664d0f5" - integrity sha512-P8uxe9A0T3G7WIQEw0dNCpUwUo4m3OFu5yQ3RsTrzX1BrSggTCUy8LgiNqxKVm56A3xMJVLsjzaB3zjXShXi8A== - dependencies: - ethers "^5.7.2" - -"@layerzerolabs/oft-evm@3.1.4": - version "3.1.4" - resolved "https://registry.yarnpkg.com/@layerzerolabs/oft-evm/-/oft-evm-3.1.4.tgz#de20e47cf69655405d7c8cc67ff6afee97cf4484" - integrity sha512-jxuEXtzAv2x/ZErBtg6OI6rxq4KyMamPgy8+r3/AQ5uD4Ih2Sd51mBIebpzueJKqMk7MNdOauLfYRRK6tOFWXQ== - -"@lodestar/api@^1.39.1": - version "1.41.0" - resolved "https://registry.yarnpkg.com/@lodestar/api/-/api-1.41.0.tgz#f7c484e7227ad5d56c9bc604bc2c5b9a5bb4f014" - integrity sha512-W4xO2zcws+ZxI57Z/0tg10nxdWLVART5tTNhmCSjs11dpb4HBbo/D1dw/SavTzI5ME7Y5NwQ5kJpd8gdc0B8ag== - dependencies: - "@chainsafe/persistent-merkle-tree" "^1.2.1" - "@chainsafe/ssz" "^1.2.2" - "@lodestar/config" "^1.41.0" - "@lodestar/params" "^1.41.0" - "@lodestar/types" "^1.41.0" - "@lodestar/utils" "^1.41.0" - eventsource "^2.0.2" - qs "^6.11.1" - -"@lodestar/config@^1.39.1", "@lodestar/config@^1.41.0": - version "1.41.0" - resolved "https://registry.yarnpkg.com/@lodestar/config/-/config-1.41.0.tgz#fa05c1de9debb3d1b2fdbd5cbbc8724f4d1c81e3" - integrity sha512-ftz4acxaN69Td6rG0qPwJOtz8mXs3q4Tg8grtnoCjNLKOnOVzHqyJtAVbslinEindN9mK+dQ3KLBHFhZMrIbbA== - dependencies: - "@chainsafe/as-sha256" "^1.2.0" - "@chainsafe/ssz" "^1.2.2" - "@lodestar/params" "^1.41.0" - "@lodestar/spec-test-util" "^1.41.0" - "@lodestar/types" "^1.41.0" - "@lodestar/utils" "^1.41.0" - -"@lodestar/params@^1.39.1", "@lodestar/params@^1.41.0": - version "1.41.0" - resolved "https://registry.yarnpkg.com/@lodestar/params/-/params-1.41.0.tgz#7044118a7544941f71caa9496ca085d4d4a66dc3" - integrity sha512-jUau8Ui1K7P/FJu88ZVV0E0/sbeYDRXQj0kIDboaCF2BRCATmcFxfBEiACH/9e4ITVCwjDdiJG3vqUdIyEK27Q== - -"@lodestar/spec-test-util@^1.41.0": - version "1.41.0" - resolved "https://registry.yarnpkg.com/@lodestar/spec-test-util/-/spec-test-util-1.41.0.tgz#172ba83dd35e61b9574a21eea4c239c55d7d087c" - integrity sha512-QyRHNQGQdl3kL9+6OklfG1/Dk3XCzf6F7CAAqdYdGiBKkv3St/J9Y0zJPYtynuPigNtqviXgC16zG9RXe1gJiw== - dependencies: - "@lodestar/utils" "^1.41.0" - rimraf "^4.4.1" - snappyjs "^0.7.0" - vitest "catalog:" - -"@lodestar/state-transition@^1.39.1": - version "1.41.0" - resolved "https://registry.yarnpkg.com/@lodestar/state-transition/-/state-transition-1.41.0.tgz#0c3662e79fc717e547a9e8c7cb6d743c5c176d2a" - integrity sha512-QDfZE++H5EFZ8Tw/6k7ZEVGSFRb+s7yITZlu636TGtqhTkXOamNcokBF3BickdonX58t2FMEuCLcyCf4IYX13g== - dependencies: - "@chainsafe/as-sha256" "^1.2.0" - "@chainsafe/blst" "^2.2.0" - "@chainsafe/persistent-merkle-tree" "^1.2.1" - "@chainsafe/persistent-ts" "^1.0.0" - "@chainsafe/pubkey-index-map" "^3.0.0" - "@chainsafe/ssz" "^1.2.2" - "@chainsafe/swap-or-not-shuffle" "^1.2.1" - "@lodestar/config" "^1.41.0" - "@lodestar/params" "^1.41.0" - "@lodestar/types" "^1.41.0" - "@lodestar/utils" "^1.41.0" - "@vekexasia/bigint-buffer2" "^1.1.1" - -"@lodestar/types@^1.39.1", "@lodestar/types@^1.41.0": - version "1.41.0" - resolved "https://registry.yarnpkg.com/@lodestar/types/-/types-1.41.0.tgz#5a4652df13389a54e320f53379f6248794fe1627" - integrity sha512-iJzaE9EAS3sbBl3DGwIxjKeEks30+DdSBpx26kkqa3tc6ejC3Y73d8F31G9qqkCN40If6TJlv2yC8xbphhoB5Q== - dependencies: - "@chainsafe/ssz" "^1.2.2" - "@lodestar/params" "^1.41.0" - ethereum-cryptography "^2.0.0" - -"@lodestar/utils@^1.39.1", "@lodestar/utils@^1.41.0": - version "1.41.0" - resolved "https://registry.yarnpkg.com/@lodestar/utils/-/utils-1.41.0.tgz#c44d9cf0136330a225f79ba135b02d9f5ed5e9c9" - integrity sha512-D/KtN7qlQZe3sNDdSaCyD0bmwEHBmW9PYhROSsM2/JjIABOERH+1zJqj76a22igp3WcvrMCAkEs71mF9oLzWOQ== - dependencies: - "@chainsafe/as-sha256" "^1.2.0" - "@vekexasia/bigint-buffer2" "^1.1.1" - any-signal "^4.1.1" - case "^1.6.3" - js-yaml "^4.1.0" - -"@napi-rs/wasm-runtime@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.1.tgz#c3705ab549d176b8dc5172723d6156c3dc426af2" - integrity sha512-p64ah1M1ld8xjWv3qbvFwHiFVWrq1yFvV4f7w+mzaqiR4IlSgkqhcRdHwsGgomwzBH51sRY4NEowLxnaBjcW/A== - dependencies: - "@emnapi/core" "^1.7.1" - "@emnapi/runtime" "^1.7.1" - "@tybys/wasm-util" "^0.10.1" - -"@noble/ciphers@^1.3.0": - version "1.3.0" - resolved "https://registry.yarnpkg.com/@noble/ciphers/-/ciphers-1.3.0.tgz#f64b8ff886c240e644e5573c097f86e5b43676dc" - integrity sha512-2I0gnIVPtfnMw9ee9h1dJG7tp81+8Ob3OJb3Mv37rx5L40/b0i7djjCVvGOVqc9AEIQyvyu1i6ypKdFw8R8gQw== - -"@noble/curves@1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.2.0.tgz#92d7e12e4e49b23105a2555c6984d41733d65c35" - integrity sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw== - dependencies: - "@noble/hashes" "1.3.2" - -"@noble/curves@1.4.2", "@noble/curves@~1.4.0": - version "1.4.2" - resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.4.2.tgz#40309198c76ed71bc6dbf7ba24e81ceb4d0d1fe9" - integrity sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw== - dependencies: - "@noble/hashes" "1.4.0" - -"@noble/curves@1.9.1": - version "1.9.1" - resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.9.1.tgz#9654a0bc6c13420ae252ddcf975eaf0f58f0a35c" - integrity sha512-k11yZxZg+t+gWvBbIswW0yoJlu8cHOC7dhunwOzoWH/mXGBiYyR4YY6hAEK/3EUs4UpB8la1RfdRpeGsFHkWsA== - dependencies: - "@noble/hashes" "1.8.0" - -"@noble/curves@~1.8.1": - version "1.8.2" - resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.8.2.tgz#8f24c037795e22b90ae29e222a856294c1d9ffc7" - integrity sha512-vnI7V6lFNe0tLAuJMu+2sX+FcL14TaCWy1qiczg1VwRmPrpQCdq5ESXQMqUc2tluRNf6irBXrWbl1mGN8uaU/g== - dependencies: - "@noble/hashes" "1.7.2" - -"@noble/curves@~1.9.0": - version "1.9.7" - resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.9.7.tgz#79d04b4758a43e4bca2cbdc62e7771352fa6b951" - integrity sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw== - dependencies: - "@noble/hashes" "1.8.0" - -"@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" - integrity sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ== - -"@noble/hashes@1.3.2": - version "1.3.2" - resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.2.tgz#6f26dbc8fbc7205873ce3cee2f690eba0d421b39" - integrity sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ== - -"@noble/hashes@1.4.0", "@noble/hashes@~1.4.0": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.4.0.tgz#45814aa329f30e4fe0ba49426f49dfccdd066426" - integrity sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg== - -"@noble/hashes@1.7.2", "@noble/hashes@~1.7.1": - version "1.7.2" - resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.7.2.tgz#d53c65a21658fb02f3303e7ee3ba89d6754c64b4" - integrity sha512-biZ0NUSxyjLLqo6KxEJ1b+C2NAx0wtDoFvCaXHGgUkeHzf3Xc1xKumFKREuT7f7DARNZ/slvYUwFG6B0f2b6hQ== - -"@noble/hashes@1.8.0", "@noble/hashes@^1.0.0", "@noble/hashes@^1.3.0", "@noble/hashes@^1.4.0", "@noble/hashes@^1.8.0", "@noble/hashes@~1.8.0": - version "1.8.0" - resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.8.0.tgz#cee43d801fcef9644b11b8194857695acd5f815a" - integrity sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A== - -"@noble/secp256k1@1.7.1": - version "1.7.1" - resolved "https://registry.yarnpkg.com/@noble/secp256k1/-/secp256k1-1.7.1.tgz#b251c70f824ce3ca7f8dc3df08d58f005cc0507c" - integrity sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw== - -"@noble/secp256k1@~1.7.0": - version "1.7.2" - resolved "https://registry.yarnpkg.com/@noble/secp256k1/-/secp256k1-1.7.2.tgz#c2c3343e2dce80e15a914d7442147507f8a98e7f" - integrity sha512-/qzwYl5eFLH8OWIecQWM31qld2g1NfjgylK+TNhqtaUKP37Nm+Y+z30Fjhw0Ct8p9yCQEm2N3W/AckdIb3SMcQ== - -"@nodelib/fs.scandir@2.1.5": - version "2.1.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" - integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== - dependencies: - "@nodelib/fs.stat" "2.0.5" - run-parallel "^1.1.9" - -"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" - integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== - -"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": - version "1.2.8" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" - integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== - dependencies: - "@nodelib/fs.scandir" "2.1.5" - fastq "^1.6.0" - -"@nomicfoundation/edr-darwin-arm64@0.11.3": - version "0.11.3" - resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-darwin-arm64/-/edr-darwin-arm64-0.11.3.tgz#d8e2609fc24cf20e75c3782e39cd5a95f7488075" - integrity sha512-w0tksbdtSxz9nuzHKsfx4c2mwaD0+l5qKL2R290QdnN9gi9AV62p9DHkOgfBdyg6/a6ZlnQqnISi7C9avk/6VA== - -"@nomicfoundation/edr-darwin-x64@0.11.3": - version "0.11.3" - resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-darwin-x64/-/edr-darwin-x64-0.11.3.tgz#7a9e94cee330269a33c7f1dce267560c7e12dbd3" - integrity sha512-QR4jAFrPbOcrO7O2z2ESg+eUeIZPe2bPIlQYgiJ04ltbSGW27FblOzdd5+S3RoOD/dsZGKAvvy6dadBEl0NgoA== - -"@nomicfoundation/edr-linux-arm64-gnu@0.11.3": - version "0.11.3" - resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-arm64-gnu/-/edr-linux-arm64-gnu-0.11.3.tgz#cd5ec90c7263045c3dfd0b109c73206e488edc27" - integrity sha512-Ktjv89RZZiUmOFPspuSBVJ61mBZQ2+HuLmV67InNlh9TSUec/iDjGIwAn59dx0bF/LOSrM7qg5od3KKac4LJDQ== - -"@nomicfoundation/edr-linux-arm64-musl@0.11.3": - version "0.11.3" - resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-arm64-musl/-/edr-linux-arm64-musl-0.11.3.tgz#ed23df2d9844470f5661716da27d99a72a69e99e" - integrity sha512-B3sLJx1rL2E9pfdD4mApiwOZSrX0a/KQSBWdlq1uAhFKqkl00yZaY4LejgZndsJAa4iKGQJlGnw4HCGeVt0+jA== - -"@nomicfoundation/edr-linux-x64-gnu@0.11.3": - version "0.11.3" - resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-x64-gnu/-/edr-linux-x64-gnu-0.11.3.tgz#87a62496c2c4b808bc4a9ae96cca1642a21c2b51" - integrity sha512-D/4cFKDXH6UYyKPu6J3Y8TzW11UzeQI0+wS9QcJzjlrrfKj0ENW7g9VihD1O2FvXkdkTjcCZYb6ai8MMTCsaVw== - -"@nomicfoundation/edr-linux-x64-musl@0.11.3": - version "0.11.3" - resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-x64-musl/-/edr-linux-x64-musl-0.11.3.tgz#8cfe408c73bcb9ed5e263910c313866d442f4b48" - integrity sha512-ergXuIb4nIvmf+TqyiDX5tsE49311DrBky6+jNLgsGDTBaN1GS3OFwFS8I6Ri/GGn6xOaT8sKu3q7/m+WdlFzg== - -"@nomicfoundation/edr-win32-x64-msvc@0.11.3": - version "0.11.3" - resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-win32-x64-msvc/-/edr-win32-x64-msvc-0.11.3.tgz#fb208b94553c7eb22246d73a1ac4de5bfdb97d01" - integrity sha512-snvEf+WB3OV0wj2A7kQ+ZQqBquMcrozSLXcdnMdEl7Tmn+KDCbmFKBt3Tk0X3qOU4RKQpLPnTxdM07TJNVtung== - -"@nomicfoundation/edr@^0.11.3": - version "0.11.3" - resolved "https://registry.yarnpkg.com/@nomicfoundation/edr/-/edr-0.11.3.tgz#e8b30b868788e45d7a2ee2359a021ef7dcb96952" - integrity sha512-kqILRkAd455Sd6v8mfP3C1/0tCOynJWY+Ir+k/9Boocu2kObCrsFgG+ZWB7fSBVdd9cPVSNrnhWS+V+PEo637g== - dependencies: - "@nomicfoundation/edr-darwin-arm64" "0.11.3" - "@nomicfoundation/edr-darwin-x64" "0.11.3" - "@nomicfoundation/edr-linux-arm64-gnu" "0.11.3" - "@nomicfoundation/edr-linux-arm64-musl" "0.11.3" - "@nomicfoundation/edr-linux-x64-gnu" "0.11.3" - "@nomicfoundation/edr-linux-x64-musl" "0.11.3" - "@nomicfoundation/edr-win32-x64-msvc" "0.11.3" - -"@nomicfoundation/hardhat-network-helpers@1.0.9": - version "1.0.9" - resolved "https://registry.yarnpkg.com/@nomicfoundation/hardhat-network-helpers/-/hardhat-network-helpers-1.0.9.tgz#767449e8a2acda79306ac84626117583d95d25aa" - integrity sha512-OXWCv0cHpwLUO2u7bFxBna6dQtCC2Gg/aN/KtJLO7gmuuA28vgmVKYFRCDUqrbjujzgfwQ2aKyZ9Y3vSmDqS7Q== - dependencies: - ethereumjs-util "^7.1.4" - -"@nomicfoundation/hardhat-verify@2.1.1": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/hardhat-verify/-/hardhat-verify-2.1.1.tgz#0af5fc4228df860062865fcafb4a01bc0b89f8a3" - integrity sha512-K1plXIS42xSHDJZRkrE2TZikqxp9T4y6jUMUNI/imLgN5uCcEQokmfU0DlyP9zzHncYK92HlT5IWP35UVCLrPw== - dependencies: - "@ethersproject/abi" "^5.1.2" - "@ethersproject/address" "^5.0.2" - cbor "^8.1.0" - debug "^4.1.1" - lodash.clonedeep "^4.5.0" - picocolors "^1.1.0" - semver "^6.3.0" - table "^6.8.0" - undici "^5.14.0" - -"@nomicfoundation/slang@^0.18.3": - version "0.18.3" - resolved "https://registry.yarnpkg.com/@nomicfoundation/slang/-/slang-0.18.3.tgz#976b6c3820081cebf050afbea434038aac9313cc" - integrity sha512-YqAWgckqbHM0/CZxi9Nlf4hjk9wUNLC9ngWCWBiqMxPIZmzsVKYuChdlrfeBPQyvQQBoOhbx+7C1005kLVQDZQ== - dependencies: - "@bytecodealliance/preview2-shim" "0.17.0" - -"@nomicfoundation/solidity-analyzer-darwin-arm64@0.1.2": - version "0.1.2" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.1.2.tgz#3a9c3b20d51360b20affb8f753e756d553d49557" - integrity sha512-JaqcWPDZENCvm++lFFGjrDd8mxtf+CtLd2MiXvMNTBD33dContTZ9TWETwNFwg7JTJT5Q9HEecH7FA+HTSsIUw== - -"@nomicfoundation/solidity-analyzer-darwin-x64@0.1.2": - version "0.1.2" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.1.2.tgz#74dcfabeb4ca373d95bd0d13692f44fcef133c28" - integrity sha512-fZNmVztrSXC03e9RONBT+CiksSeYcxI1wlzqyr0L7hsQlK1fzV+f04g2JtQ1c/Fe74ZwdV6aQBdd6Uwl1052sw== - -"@nomicfoundation/solidity-analyzer-linux-arm64-gnu@0.1.2": - version "0.1.2" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-arm64-gnu/-/solidity-analyzer-linux-arm64-gnu-0.1.2.tgz#4af5849a89e5a8f511acc04f28eb5d4460ba2b6a" - integrity sha512-3d54oc+9ZVBuB6nbp8wHylk4xh0N0Gc+bk+/uJae+rUgbOBwQSfuGIbAZt1wBXs5REkSmynEGcqx6DutoK0tPA== - -"@nomicfoundation/solidity-analyzer-linux-arm64-musl@0.1.2": - version "0.1.2" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-arm64-musl/-/solidity-analyzer-linux-arm64-musl-0.1.2.tgz#54036808a9a327b2ff84446c130a6687ee702a8e" - integrity sha512-iDJfR2qf55vgsg7BtJa7iPiFAsYf2d0Tv/0B+vhtnI16+wfQeTbP7teookbGvAo0eJo7aLLm0xfS/GTkvHIucA== - -"@nomicfoundation/solidity-analyzer-linux-x64-gnu@0.1.2": - version "0.1.2" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.1.2.tgz#466cda0d6e43691986c944b909fc6dbb8cfc594e" - integrity sha512-9dlHMAt5/2cpWyuJ9fQNOUXFB/vgSFORg1jpjX1Mh9hJ/MfZXlDdHQ+DpFCs32Zk5pxRBb07yGvSHk9/fezL+g== - -"@nomicfoundation/solidity-analyzer-linux-x64-musl@0.1.2": - version "0.1.2" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-x64-musl/-/solidity-analyzer-linux-x64-musl-0.1.2.tgz#2b35826987a6e94444140ac92310baa088ee7f94" - integrity sha512-GzzVeeJob3lfrSlDKQw2bRJ8rBf6mEYaWY+gW0JnTDHINA0s2gPR4km5RLIj1xeZZOYz4zRw+AEeYgLRqB2NXg== - -"@nomicfoundation/solidity-analyzer-win32-x64-msvc@0.1.2": - version "0.1.2" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-x64-msvc/-/solidity-analyzer-win32-x64-msvc-0.1.2.tgz#e6363d13b8709ca66f330562337dbc01ce8bbbd9" - integrity sha512-Fdjli4DCcFHb4Zgsz0uEJXZ2K7VEO+w5KVv7HmT7WO10iODdU9csC2az4jrhEsRtiR9Gfd74FlG0NYlw1BMdyA== - -"@nomicfoundation/solidity-analyzer@^0.1.0": - version "0.1.2" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.1.2.tgz#8bcea7d300157bf3a770a851d9f5c5e2db34ac55" - integrity sha512-q4n32/FNKIhQ3zQGGw5CvPF6GTvDCpYwIf7bEY/dZTZbgfDsHyjJwURxUJf3VQuuJj+fDIFl4+KkBVbw4Ef6jA== - optionalDependencies: - "@nomicfoundation/solidity-analyzer-darwin-arm64" "0.1.2" - "@nomicfoundation/solidity-analyzer-darwin-x64" "0.1.2" - "@nomicfoundation/solidity-analyzer-linux-arm64-gnu" "0.1.2" - "@nomicfoundation/solidity-analyzer-linux-arm64-musl" "0.1.2" - "@nomicfoundation/solidity-analyzer-linux-x64-gnu" "0.1.2" - "@nomicfoundation/solidity-analyzer-linux-x64-musl" "0.1.2" - "@nomicfoundation/solidity-analyzer-win32-x64-msvc" "0.1.2" - -"@nomiclabs/hardhat-ethers@2.2.3": - version "2.2.3" - resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.2.3.tgz#b41053e360c31a32c2640c9a45ee981a7e603fe0" - integrity sha512-YhzPdzb612X591FOe68q+qXVXGG2ANZRvDo0RRUtimev85rCrAlv/TLMEZw5c+kq9AbzocLTVX/h2jVIFPL9Xg== - -"@nomiclabs/hardhat-solhint@2.0.1": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-solhint/-/hardhat-solhint-2.0.1.tgz#62896569d10c95a17cefab0229701cfffd19246f" - integrity sha512-SrTLufY21t78KLpJL5fS6gHIsCwVv0yWsHp1aQOPL1qwRWpe0Mnh5wb2YzBHd3Dbr/KzUYys+j2ui0PsSVU9pg== - dependencies: - solhint "^2.0.0" - -"@nomiclabs/hardhat-waffle@2.0.6": - version "2.0.6" - resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-waffle/-/hardhat-waffle-2.0.6.tgz#d11cb063a5f61a77806053e54009c40ddee49a54" - integrity sha512-+Wz0hwmJGSI17B+BhU/qFRZ1l6/xMW82QGXE/Gi+WTmwgJrQefuBs1lIf7hzQ1hLk6hpkvb/zwcNkpVKRYTQYg== - -"@openzeppelin/contracts-upgradeable-4.7.3@npm:@openzeppelin/contracts-upgradeable@v4.7.3": - version "4.7.3" - resolved "https://registry.yarnpkg.com/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-4.7.3.tgz#f1d606e2827d409053f3e908ba4eb8adb1dd6995" - integrity sha512-+wuegAMaLcZnLCJIvrVUDzA9z/Wp93f0Dla/4jJvIhijRrPabjQbZe6fWiECLaJyfn5ci9fqf9vTw3xpQOad2A== - -"@openzeppelin/contracts-v0.7@npm:@openzeppelin/contracts@v3.4.2": - version "3.4.2" - resolved "https://registry.yarnpkg.com/@openzeppelin/contracts/-/contracts-3.4.2.tgz#d81f786fda2871d1eb8a8c5a73e455753ba53527" - integrity sha512-z0zMCjyhhp4y7XKAcDAi3Vgms4T2PstwBdahiO0+9NaGICQKjynK3wduSRplTgk4LXmoO1yfDGO5RbjKYxtuxA== - -"@openzeppelin/contracts@3.4.2-solc-0.7", "@openzeppelin/contracts@4.4.2", "@openzeppelin/contracts@~4.3.3": - version "4.4.2" - resolved "https://registry.yarnpkg.com/@openzeppelin/contracts/-/contracts-4.4.2.tgz#4e889c9c66e736f7de189a53f8ba5b8d789425c2" - integrity sha512-NyJV7sJgoGYqbtNUWgzzOGW4T6rR19FmX1IJgXGdapGPWsuMelGJn9h03nos0iqfforCbCB0iYIR0MtIuIFLLw== - -"@openzeppelin/defender-sdk-account-client@^2.7.0": - version "2.7.1" - resolved "https://registry.yarnpkg.com/@openzeppelin/defender-sdk-account-client/-/defender-sdk-account-client-2.7.1.tgz#f1d4ffd1028b441e01aea0fb65d9d034b57fdb46" - integrity sha512-NHJyvEQk8XQ/NHsHqwX8tQ5napQuotb7uRltq0up5On5HM4t/YwMWXeCuSmVrkehs9mRMclu3a+TEZpPGwrnYw== - dependencies: - "@openzeppelin/defender-sdk-base-client" "^2.7.1" - axios "^1.7.4" - lodash "^4.17.21" - -"@openzeppelin/defender-sdk-action-client@^2.7.0": - version "2.7.1" - resolved "https://registry.yarnpkg.com/@openzeppelin/defender-sdk-action-client/-/defender-sdk-action-client-2.7.1.tgz#d053b1dd53cdfdf25783c758ab2d293d8ffd4583" - integrity sha512-4HsmJs000xptiOoi9Kk8k1E4krUWGV6V7Nq+8RusGOGNOddfb1/U8igNaKXfG0HjshKDFqlpBlzXUpN1lcfwMg== - dependencies: - "@openzeppelin/defender-sdk-base-client" "^2.7.1" - axios "^1.7.4" - dotenv "^16.3.1" - glob "^11.0.0" - jszip "^3.10.1" - lodash "^4.17.21" - -"@openzeppelin/defender-sdk-address-book-client@^2.7.0": - version "2.7.1" - resolved "https://registry.yarnpkg.com/@openzeppelin/defender-sdk-address-book-client/-/defender-sdk-address-book-client-2.7.1.tgz#74f0fc87f98ec6f0c05d45a36a9a552776c35bd9" - integrity sha512-B27p5AYcWpmwIMqplt/yWlVoe8UwJ+3oOcULYgHO9cnpiJ9jhA/4nGV+vIh3+tOEuROJrLdJzbRKoTE96TRSYA== - dependencies: - "@openzeppelin/defender-sdk-base-client" "^2.7.1" - dotenv "^16.3.1" - lodash "^4.17.21" - -"@openzeppelin/defender-sdk-approval-process-client@^2.7.0": - version "2.7.1" - resolved "https://registry.yarnpkg.com/@openzeppelin/defender-sdk-approval-process-client/-/defender-sdk-approval-process-client-2.7.1.tgz#664b85f4e2bb8b23b57ead9a3bb32eb042236d84" - integrity sha512-KI3q6glPaPXaznay8iTbRHOjavZA4CJEQg9PfqCrAPesY0FdGb9hr3FaLKxP5IECQ/Ha1llnBkn/ZcBJoZ8Xyw== - dependencies: - "@openzeppelin/defender-sdk-base-client" "^2.7.1" - axios "^1.7.4" - lodash "^4.17.21" - -"@openzeppelin/defender-sdk-base-client@^2.7.0", "@openzeppelin/defender-sdk-base-client@^2.7.1": - version "2.7.1" - resolved "https://registry.yarnpkg.com/@openzeppelin/defender-sdk-base-client/-/defender-sdk-base-client-2.7.1.tgz#c32f152fa3848e18065aafc4c4ee8b582b410d7c" - integrity sha512-7gFCteA+V3396A3McgqzmirwmbPXuHJYN896O3AbsHX9XcxInN74C5Zv3tFHld0GmIX/VlaIvILNMhOpdISZjA== - dependencies: - "@aws-sdk/client-lambda" "^3.563.0" - amazon-cognito-identity-js "^6.3.6" - async-retry "^1.3.3" - axios "^1.7.4" - -"@openzeppelin/defender-sdk-deploy-client@^2.7.0": - version "2.7.1" - resolved "https://registry.yarnpkg.com/@openzeppelin/defender-sdk-deploy-client/-/defender-sdk-deploy-client-2.7.1.tgz#e88864b2d1dcf783d40f0b422dd7d8e45e7f4035" - integrity sha512-vFkDupn8ATW83KjZlY5U7UdsvSo9YZwOMQoVaHJO3S+Z6h0wa6cTzuQV9C0AKYq524quQkFsQ4AQq5CgsgdEkQ== - dependencies: - "@openzeppelin/defender-sdk-base-client" "^2.7.1" - axios "^1.7.4" - lodash "^4.17.21" - -"@openzeppelin/defender-sdk-key-value-store-client@^2.7.0": - version "2.7.1" - resolved "https://registry.yarnpkg.com/@openzeppelin/defender-sdk-key-value-store-client/-/defender-sdk-key-value-store-client-2.7.1.tgz#19262af8be93cd411c157259da995cf4cd9657d0" - integrity sha512-WHS0vk9htOF0h8XMhCDdEB5yhq9Xu17yfln2+zgX15lyrnLg56c71grjclhbZ+kXN3yBuy0AFGIYnaYmVV947Q== - dependencies: - "@openzeppelin/defender-sdk-base-client" "^2.7.1" - axios "^1.7.4" - fs-extra "^11.2.0" - lodash "^4.17.21" - -"@openzeppelin/defender-sdk-monitor-client@^2.7.0": - version "2.7.1" - resolved "https://registry.yarnpkg.com/@openzeppelin/defender-sdk-monitor-client/-/defender-sdk-monitor-client-2.7.1.tgz#79ab47c9620364ed1eef38c45c5d613f86dd8241" - integrity sha512-s7QT3xiJxCha6XXmSts9U02dJHdWoutnaO4KJVz2WSTFb6pydiLwD8njvhLkclcHORrIcFSJ6CA8SCpjLRQ7Fg== - dependencies: - "@openzeppelin/defender-sdk-base-client" "^2.7.1" - axios "^1.7.4" - ethers "^6.9.0" - lodash "^4.17.21" - -"@openzeppelin/defender-sdk-network-client@^2.7.0": - version "2.7.1" - resolved "https://registry.yarnpkg.com/@openzeppelin/defender-sdk-network-client/-/defender-sdk-network-client-2.7.1.tgz#ebecc5ad8f139f4c06b86e0764bae4661b9d093b" - integrity sha512-AWJKT9YKv9wH3/1AJZCztF3VIsg1sX+v8fjtyFLROqtVAzmhB8WKBRVt9GHAZ+PmsixAKDMOEbH6R1cipTIVHQ== - dependencies: - "@openzeppelin/defender-sdk-base-client" "^2.7.1" - axios "^1.7.4" - lodash "^4.17.21" - -"@openzeppelin/defender-sdk-notification-channel-client@^2.7.0": - version "2.7.1" - resolved "https://registry.yarnpkg.com/@openzeppelin/defender-sdk-notification-channel-client/-/defender-sdk-notification-channel-client-2.7.1.tgz#71ccc3c978fb3e6adcfcf33844d0149bf46114d7" - integrity sha512-uvtXJ/dMexZC/3xBLCdhV6Z6Dg4uIErOBjlm+dFr8yBulUEioUo3/1OaivBIJ+mYICmQBpcRV91NmslyNOZLng== - dependencies: - "@openzeppelin/defender-sdk-base-client" "^2.7.1" - axios "^1.7.4" - lodash "^4.17.21" - -"@openzeppelin/defender-sdk-proposal-client@^2.7.0": - version "2.7.1" - resolved "https://registry.yarnpkg.com/@openzeppelin/defender-sdk-proposal-client/-/defender-sdk-proposal-client-2.7.1.tgz#0829cb45ba57d0cdbfa55f4256be4b76511a1527" - integrity sha512-hOkR9azX2e6U51suPIU5XyZNxVlGaDt3srCD55e8YsFYoXlbhVFJpgt5N2zd9kttv5a+rCSKtJR2hfJWxsvGsw== - dependencies: - "@openzeppelin/defender-sdk-base-client" "^2.7.1" - axios "^1.7.4" - ethers "^6.9.0" - lodash "^4.17.21" - -"@openzeppelin/defender-sdk-relay-client@^2.7.0": - version "2.7.1" - resolved "https://registry.yarnpkg.com/@openzeppelin/defender-sdk-relay-client/-/defender-sdk-relay-client-2.7.1.tgz#3b27168edc5a6b3a6e255ad5319685d23e77725e" - integrity sha512-rAgURxg9F7n6oZletBGMWkvAOsvy9Ez/89UYjALc246w9BolfEc2v8KweUfCn3ebeY4n1KfIXnpkwZN59u3xXg== - dependencies: - "@openzeppelin/defender-sdk-base-client" "^2.7.1" - axios "^1.7.4" - lodash "^4.17.21" - -"@openzeppelin/defender-sdk-relay-group-client@^2.7.0": - version "2.7.1" - resolved "https://registry.yarnpkg.com/@openzeppelin/defender-sdk-relay-group-client/-/defender-sdk-relay-group-client-2.7.1.tgz#b0019b07c80f33e36b7bd81de3640bfd614326d0" - integrity sha512-vUTdUvnIdRIpyIc8H+3chdy/j0G5m04l8uVYkq9X3n2Pt4dXZq/Auuj4Y2RinF+3uueUk0nnmBndFo20jjjUMQ== - dependencies: - "@openzeppelin/defender-sdk-base-client" "^2.7.1" - axios "^1.7.4" - lodash "^4.17.21" - -"@openzeppelin/defender-sdk-relay-signer-client@^2.7.0": - version "2.7.1" - resolved "https://registry.yarnpkg.com/@openzeppelin/defender-sdk-relay-signer-client/-/defender-sdk-relay-signer-client-2.7.1.tgz#8c7304889e165eed050ebebf6c5e4456ace18c0b" - integrity sha512-05DixpVGbm+zeRSs3n6ptzmxqEweQPE5yYDugLcQrcffneLAbakeiXhCl/t0kCu0EmwdxMeQTGaaXN/Y9UlrPg== - dependencies: - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/networks" "^5.7.1" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/providers" "^5.7.2" - "@ethersproject/strings" "^5.7.0" - "@openzeppelin/defender-sdk-base-client" "^2.7.1" - amazon-cognito-identity-js "^6.3.6" - axios "^1.7.4" - ethers "^6.9.0" - lodash "^4.17.21" - -"@openzeppelin/defender-sdk@2.7.0": - version "2.7.0" - resolved "https://registry.yarnpkg.com/@openzeppelin/defender-sdk/-/defender-sdk-2.7.0.tgz#a5830b39a4c57a63b91c0195dda7ef6571f491af" - integrity sha512-A7Lvte6+j6A0EQ/nYXtremP37JhW/x58C9AtD//4LS9o6OsSJuXE4R58L5E48cTxOT/I3xelYmgGh0KGQTao4A== - dependencies: - "@openzeppelin/defender-sdk-account-client" "^2.7.0" - "@openzeppelin/defender-sdk-action-client" "^2.7.0" - "@openzeppelin/defender-sdk-address-book-client" "^2.7.0" - "@openzeppelin/defender-sdk-approval-process-client" "^2.7.0" - "@openzeppelin/defender-sdk-base-client" "^2.7.0" - "@openzeppelin/defender-sdk-deploy-client" "^2.7.0" - "@openzeppelin/defender-sdk-key-value-store-client" "^2.7.0" - "@openzeppelin/defender-sdk-monitor-client" "^2.7.0" - "@openzeppelin/defender-sdk-network-client" "^2.7.0" - "@openzeppelin/defender-sdk-notification-channel-client" "^2.7.0" - "@openzeppelin/defender-sdk-proposal-client" "^2.7.0" - "@openzeppelin/defender-sdk-relay-client" "^2.7.0" - "@openzeppelin/defender-sdk-relay-group-client" "^2.7.0" - "@openzeppelin/defender-sdk-relay-signer-client" "^2.7.0" - -"@openzeppelin/hardhat-upgrades@1.27.0": - version "1.27.0" - resolved "https://registry.yarnpkg.com/@openzeppelin/hardhat-upgrades/-/hardhat-upgrades-1.27.0.tgz#0e304041d72c97979c76466137b48733120270fd" - integrity sha512-+OwrHWDz9tzpmBev6t2CtZM2tRpy/ybhg5e3GIgyeqTxK2vUV40dxIxO6lie+qKeJHZ2RIdDwvSTSiCEJif+fA== - dependencies: - "@openzeppelin/upgrades-core" "^1.26.2" - chalk "^4.1.0" - debug "^4.1.1" - defender-base-client "^1.44.0" - platform-deploy-client "^0.6.0" - proper-lockfile "^4.1.1" - -"@openzeppelin/upgrades-core@^1.26.2": - version "1.44.2" - resolved "https://registry.yarnpkg.com/@openzeppelin/upgrades-core/-/upgrades-core-1.44.2.tgz#c38d6adc075f4d5e946c0fef9ba4b68953adec6a" - integrity sha512-m6iorjyhPK9ow5/trNs7qsBC/SOzJCO51pvvAF2W9nOiZ1t0RtCd+rlRmRmlWTv4M33V0wzIUeamJ2BPbzgUXA== - dependencies: - "@nomicfoundation/slang" "^0.18.3" - bignumber.js "^9.1.2" - cbor "^10.0.0" - chalk "^4.1.0" - compare-versions "^6.0.0" - debug "^4.1.1" - ethereumjs-util "^7.0.3" - minimatch "^9.0.5" - minimist "^1.2.7" - proper-lockfile "^4.1.1" - solidity-ast "^0.4.60" - -"@oxc-project/types@=0.122.0": - version "0.122.0" - resolved "https://registry.yarnpkg.com/@oxc-project/types/-/types-0.122.0.tgz#2f4e77a3b183c87b2a326affd703ef71ba836601" - integrity sha512-oLAl5kBpV4w69UtFZ9xqcmTi+GENWOcPF7FCrczTiBbmC0ibXxCwyvZGbO39rCVEuLGAZM84DH0pUIyyv/YJzA== - -"@pkgjs/parseargs@^0.11.0": - version "0.11.0" - resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" - integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== - -"@resolver-engine/core@^0.3.3": - version "0.3.3" - resolved "https://registry.yarnpkg.com/@resolver-engine/core/-/core-0.3.3.tgz#590f77d85d45bc7ecc4e06c654f41345db6ca967" - integrity sha512-eB8nEbKDJJBi5p5SrvrvILn4a0h42bKtbCTri3ZxCGt6UvoQyp7HnGOfki944bUjBSHKK3RvgfViHn+kqdXtnQ== - dependencies: - debug "^3.1.0" - is-url "^1.2.4" - request "^2.85.0" - -"@resolver-engine/fs@^0.3.3": - version "0.3.3" - resolved "https://registry.yarnpkg.com/@resolver-engine/fs/-/fs-0.3.3.tgz#fbf83fa0c4f60154a82c817d2fe3f3b0c049a973" - integrity sha512-wQ9RhPUcny02Wm0IuJwYMyAG8fXVeKdmhm8xizNByD4ryZlx6PP6kRen+t/haF43cMfmaV7T3Cx6ChOdHEhFUQ== - dependencies: - "@resolver-engine/core" "^0.3.3" - debug "^3.1.0" - -"@resolver-engine/imports-fs@^0.3.3": - version "0.3.3" - resolved "https://registry.yarnpkg.com/@resolver-engine/imports-fs/-/imports-fs-0.3.3.tgz#4085db4b8d3c03feb7a425fbfcf5325c0d1e6c1b" - integrity sha512-7Pjg/ZAZtxpeyCFlZR5zqYkz+Wdo84ugB5LApwriT8XFeQoLwGUj4tZFFvvCuxaNCcqZzCYbonJgmGObYBzyCA== - dependencies: - "@resolver-engine/fs" "^0.3.3" - "@resolver-engine/imports" "^0.3.3" - debug "^3.1.0" - -"@resolver-engine/imports@^0.3.3": - version "0.3.3" - resolved "https://registry.yarnpkg.com/@resolver-engine/imports/-/imports-0.3.3.tgz#badfb513bb3ff3c1ee9fd56073e3144245588bcc" - integrity sha512-anHpS4wN4sRMwsAbMXhMfOD/y4a4Oo0Cw/5+rue7hSwGWsDOQaAU1ClK1OxjUC35/peazxEl8JaSRRS+Xb8t3Q== - dependencies: - "@resolver-engine/core" "^0.3.3" - debug "^3.1.0" - hosted-git-info "^2.6.0" - path-browserify "^1.0.0" - url "^0.11.0" - -"@rigidity/bls-signatures@2.0.5": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@rigidity/bls-signatures/-/bls-signatures-2.0.5.tgz#4bd32a4594bb0c61a54101e4e1736ffc4de17e49" - integrity sha512-ybuB+z1+Duyy7wuyBbuM0xRc+pEbMqDQ7UjjkzceYQRWg78RmsFcNs0tNvZbmThYc/IFvb7sWmdgzbOcvtevYA== - dependencies: - chai "^4.3.6" - jssha "^3.2.0" - randombytes "^2.1.0" - -"@rolldown/binding-android-arm64@1.0.0-rc.12": - version "1.0.0-rc.12" - resolved "https://registry.yarnpkg.com/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.0-rc.12.tgz#4e6af08b89da02596cc5da4b105082b68673ffec" - integrity sha512-pv1y2Fv0JybcykuiiD3qBOBdz6RteYojRFY1d+b95WVuzx211CRh+ytI/+9iVyWQ6koTh5dawe4S/yRfOFjgaA== - -"@rolldown/binding-darwin-arm64@1.0.0-rc.12": - version "1.0.0-rc.12" - resolved "https://registry.yarnpkg.com/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.0-rc.12.tgz#a06890f4c9b48ff0fc97edbedfc762bef7cffd73" - integrity sha512-cFYr6zTG/3PXXF3pUO+umXxt1wkRK/0AYT8lDwuqvRC+LuKYWSAQAQZjCWDQpAH172ZV6ieYrNnFzVVcnSflAg== - -"@rolldown/binding-darwin-x64@1.0.0-rc.12": - version "1.0.0-rc.12" - resolved "https://registry.yarnpkg.com/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.0-rc.12.tgz#eddf6aa3ed3509171fe21711f1e8ec8e0fd7ec49" - integrity sha512-ZCsYknnHzeXYps0lGBz8JrF37GpE9bFVefrlmDrAQhOEi4IOIlcoU1+FwHEtyXGx2VkYAvhu7dyBf75EJQffBw== - -"@rolldown/binding-freebsd-x64@1.0.0-rc.12": - version "1.0.0-rc.12" - resolved "https://registry.yarnpkg.com/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.0-rc.12.tgz#2102dfed19fd1f1b53435fcaaf0bc61129a266a3" - integrity sha512-dMLeprcVsyJsKolRXyoTH3NL6qtsT0Y2xeuEA8WQJquWFXkEC4bcu1rLZZSnZRMtAqwtrF/Ib9Ddtpa/Gkge9Q== - -"@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.12": - version "1.0.0-rc.12" - resolved "https://registry.yarnpkg.com/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.0-rc.12.tgz#b2c13f40e990fd1e1935492850536c768c961a0f" - integrity sha512-YqWjAgGC/9M1lz3GR1r1rP79nMgo3mQiiA+Hfo+pvKFK1fAJ1bCi0ZQVh8noOqNacuY1qIcfyVfP6HoyBRZ85Q== - -"@rolldown/binding-linux-arm64-gnu@1.0.0-rc.12": - version "1.0.0-rc.12" - resolved "https://registry.yarnpkg.com/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.0-rc.12.tgz#32ca9f77c1e76b2913b3d53d2029dc171c0532d6" - integrity sha512-/I5AS4cIroLpslsmzXfwbe5OmWvSsrFuEw3mwvbQ1kDxJ822hFHIx+vsN/TAzNVyepI/j/GSzrtCIwQPeKCLIg== - -"@rolldown/binding-linux-arm64-musl@1.0.0-rc.12": - version "1.0.0-rc.12" - resolved "https://registry.yarnpkg.com/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.0-rc.12.tgz#f4337ddd52f0ed3ada2105b59ee1b757a2c4858c" - integrity sha512-V6/wZztnBqlx5hJQqNWwFdxIKN0m38p8Jas+VoSfgH54HSj9tKTt1dZvG6JRHcjh6D7TvrJPWFGaY9UBVOaWPw== - -"@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.12": - version "1.0.0-rc.12" - resolved "https://registry.yarnpkg.com/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.0.0-rc.12.tgz#22fdd14cb00ee8208c28a39bab7f28860ec6705d" - integrity sha512-AP3E9BpcUYliZCxa3w5Kwj9OtEVDYK6sVoUzy4vTOJsjPOgdaJZKFmN4oOlX0Wp0RPV2ETfmIra9x1xuayFB7g== - -"@rolldown/binding-linux-s390x-gnu@1.0.0-rc.12": - version "1.0.0-rc.12" - resolved "https://registry.yarnpkg.com/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.0.0-rc.12.tgz#838215096d1de6d3d509e0410801cb7cda8161ff" - integrity sha512-nWwpvUSPkoFmZo0kQazZYOrT7J5DGOJ/+QHHzjvNlooDZED8oH82Yg67HvehPPLAg5fUff7TfWFHQS8IV1n3og== - -"@rolldown/binding-linux-x64-gnu@1.0.0-rc.12": - version "1.0.0-rc.12" - resolved "https://registry.yarnpkg.com/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.0-rc.12.tgz#f7d71d97f6bd43198596b26dc2cb364586e12673" - integrity sha512-RNrafz5bcwRy+O9e6P8Z/OCAJW/A+qtBczIqVYwTs14pf4iV1/+eKEjdOUta93q2TsT/FI0XYDP3TCky38LMAg== - -"@rolldown/binding-linux-x64-musl@1.0.0-rc.12": - version "1.0.0-rc.12" - resolved "https://registry.yarnpkg.com/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.0-rc.12.tgz#a2ca737f01b0ad620c4c404ca176ea3e3ad804c3" - integrity sha512-Jpw/0iwoKWx3LJ2rc1yjFrj+T7iHZn2JDg1Yny1ma0luviFS4mhAIcd1LFNxK3EYu3DHWCps0ydXQ5i/rrJ2ig== - -"@rolldown/binding-openharmony-arm64@1.0.0-rc.12": - version "1.0.0-rc.12" - resolved "https://registry.yarnpkg.com/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.0-rc.12.tgz#f66317e29eafcc300bed7af8dddac26ab3b1bf82" - integrity sha512-vRugONE4yMfVn0+7lUKdKvN4D5YusEiPilaoO2sgUWpCvrncvWgPMzK00ZFFJuiPgLwgFNP5eSiUlv2tfc+lpA== - -"@rolldown/binding-wasm32-wasi@1.0.0-rc.12": - version "1.0.0-rc.12" - resolved "https://registry.yarnpkg.com/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.0-rc.12.tgz#8825523fdffa1f1dc4683be9650ffaa9e4a77f04" - integrity sha512-ykGiLr/6kkiHc0XnBfmFJuCjr5ZYKKofkx+chJWDjitX+KsJuAmrzWhwyOMSHzPhzOHOy7u9HlFoa5MoAOJ/Zg== - dependencies: - "@napi-rs/wasm-runtime" "^1.1.1" - -"@rolldown/binding-win32-arm64-msvc@1.0.0-rc.12": - version "1.0.0-rc.12" - resolved "https://registry.yarnpkg.com/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.0-rc.12.tgz#4f3a17e3d68a58309c27c0930b0f7986ccabef47" - integrity sha512-5eOND4duWkwx1AzCxadcOrNeighiLwMInEADT0YM7xeEOOFcovWZCq8dadXgcRHSf3Ulh1kFo/qvzoFiCLOL1Q== - -"@rolldown/binding-win32-x64-msvc@1.0.0-rc.12": - version "1.0.0-rc.12" - resolved "https://registry.yarnpkg.com/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.0-rc.12.tgz#d762765d5660598a96b570b513f535c151272985" - integrity sha512-PyqoipaswDLAZtot351MLhrlrh6lcZPo2LSYE+VDxbVk24LVKAGOuE4hb8xZQmrPAuEtTZW8E6D2zc5EUZX4Lw== - -"@rolldown/pluginutils@1.0.0-rc.12": - version "1.0.0-rc.12" - resolved "https://registry.yarnpkg.com/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.12.tgz#74163aec62fa51cee18d62709483963dceb3f6dc" - integrity sha512-HHMwmarRKvoFsJorqYlFeFRzXZqCt2ETQlEDOb9aqssrnVBB1/+xgTGtuTrIk5vzLNX1MjMtTf7W9z3tsSbrxw== - -"@rollup/plugin-commonjs@29.0.0": - version "29.0.0" - resolved "https://registry.yarnpkg.com/@rollup/plugin-commonjs/-/plugin-commonjs-29.0.0.tgz#42a6cc0eeb8ae7aabfc6f9bdc28fe22d65abd15a" - integrity sha512-U2YHaxR2cU/yAiwKJtJRhnyLk7cifnQw0zUpISsocBDoHDJn+HTV74ABqnwr5bEgWUwFZC9oFL6wLe21lHu5eQ== - dependencies: - "@rollup/pluginutils" "^5.0.1" - commondir "^1.0.1" - estree-walker "^2.0.2" - fdir "^6.2.0" - is-reference "1.2.1" - magic-string "^0.30.3" - picomatch "^4.0.2" - -"@rollup/plugin-json@6.1.0": - version "6.1.0" - resolved "https://registry.yarnpkg.com/@rollup/plugin-json/-/plugin-json-6.1.0.tgz#fbe784e29682e9bb6dee28ea75a1a83702e7b805" - integrity sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA== - dependencies: - "@rollup/pluginutils" "^5.1.0" - -"@rollup/plugin-node-resolve@16.0.3 ": - version "16.0.3" - resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-16.0.3.tgz#0988e6f2cbb13316b0f5e7213f757bc9ed44928f" - integrity sha512-lUYM3UBGuM93CnMPG1YocWu7X802BrNF3jW2zny5gQyLQgRFJhV1Sq0Zi74+dh/6NBx1DxFC4b4GXg9wUCG5Qg== - dependencies: - "@rollup/pluginutils" "^5.0.1" - "@types/resolve" "1.20.2" - deepmerge "^4.2.2" - is-module "^1.0.0" - resolve "^1.22.1" - -"@rollup/pluginutils@^5.0.1", "@rollup/pluginutils@^5.1.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-5.3.0.tgz#57ba1b0cbda8e7a3c597a4853c807b156e21a7b4" - integrity sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q== - dependencies: - "@types/estree" "^1.0.0" - estree-walker "^2.0.2" - picomatch "^4.0.2" - -"@rollup/rollup-android-arm-eabi@4.54.0": - version "4.54.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.54.0.tgz#f3ff5dbde305c4fa994d49aeb0a5db5305eff03b" - integrity sha512-OywsdRHrFvCdvsewAInDKCNyR3laPA2mc9bRYJ6LBp5IyvF3fvXbbNR0bSzHlZVFtn6E0xw2oZlyjg4rKCVcng== - -"@rollup/rollup-android-arm64@4.54.0": - version "4.54.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.54.0.tgz#c97d6ee47846a7ab1cd38e968adce25444a90a19" - integrity sha512-Skx39Uv+u7H224Af+bDgNinitlmHyQX1K/atIA32JP3JQw6hVODX5tkbi2zof/E69M1qH2UoN3Xdxgs90mmNYw== - -"@rollup/rollup-darwin-arm64@4.54.0": - version "4.54.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.54.0.tgz#a13fc2d82e01eaf8ac823634a3f5f76fd9d0f938" - integrity sha512-k43D4qta/+6Fq+nCDhhv9yP2HdeKeP56QrUUTW7E6PhZP1US6NDqpJj4MY0jBHlJivVJD5P8NxrjuobZBJTCRw== - -"@rollup/rollup-darwin-x64@4.54.0": - version "4.54.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.54.0.tgz#db4fa8b2b76d86f7e9b68ce4661fafe9767adf9b" - integrity sha512-cOo7biqwkpawslEfox5Vs8/qj83M/aZCSSNIWpVzfU2CYHa2G3P1UN5WF01RdTHSgCkri7XOlTdtk17BezlV3A== - -"@rollup/rollup-freebsd-arm64@4.54.0": - version "4.54.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.54.0.tgz#b2c6039de4b75efd3f29417fcb1a795c75a4e3ee" - integrity sha512-miSvuFkmvFbgJ1BevMa4CPCFt5MPGw094knM64W9I0giUIMMmRYcGW/JWZDriaw/k1kOBtsWh1z6nIFV1vPNtA== - -"@rollup/rollup-freebsd-x64@4.54.0": - version "4.54.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.54.0.tgz#9ae2a216c94f87912a596a3b3a2ec5199a689ba5" - integrity sha512-KGXIs55+b/ZfZsq9aR026tmr/+7tq6VG6MsnrvF4H8VhwflTIuYh+LFUlIsRdQSgrgmtM3fVATzEAj4hBQlaqQ== - -"@rollup/rollup-linux-arm-gnueabihf@4.54.0": - version "4.54.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.54.0.tgz#69d5de7f781132f138514f2b900c523e38e2461f" - integrity sha512-EHMUcDwhtdRGlXZsGSIuXSYwD5kOT9NVnx9sqzYiwAc91wfYOE1g1djOEDseZJKKqtHAHGwnGPQu3kytmfaXLQ== - -"@rollup/rollup-linux-arm-musleabihf@4.54.0": - version "4.54.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.54.0.tgz#b6431e5699747f285306ffe8c1194d7af74f801f" - integrity sha512-+pBrqEjaakN2ySv5RVrj/qLytYhPKEUwk+e3SFU5jTLHIcAtqh2rLrd/OkbNuHJpsBgxsD8ccJt5ga/SeG0JmA== - -"@rollup/rollup-linux-arm64-gnu@4.54.0": - version "4.54.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.54.0.tgz#a32931baec8a0fa7b3288afb72d400ae735112c2" - integrity sha512-NSqc7rE9wuUaRBsBp5ckQ5CVz5aIRKCwsoa6WMF7G01sX3/qHUw/z4pv+D+ahL1EIKy6Enpcnz1RY8pf7bjwng== - -"@rollup/rollup-linux-arm64-musl@4.54.0": - version "4.54.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.54.0.tgz#0ad72572b01eb946c0b1a7a6f17ab3be6689a963" - integrity sha512-gr5vDbg3Bakga5kbdpqx81m2n9IX8M6gIMlQQIXiLTNeQW6CucvuInJ91EuCJ/JYvc+rcLLsDFcfAD1K7fMofg== - -"@rollup/rollup-linux-loong64-gnu@4.54.0": - version "4.54.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.54.0.tgz#05681f000310906512279944b5bef38c0cd4d326" - integrity sha512-gsrtB1NA3ZYj2vq0Rzkylo9ylCtW/PhpLEivlgWe0bpgtX5+9j9EZa0wtZiCjgu6zmSeZWyI/e2YRX1URozpIw== - -"@rollup/rollup-linux-ppc64-gnu@4.54.0": - version "4.54.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.54.0.tgz#9847a8c9dd76d687c3bdbe38d7f5f32c6b2743c8" - integrity sha512-y3qNOfTBStmFNq+t4s7Tmc9hW2ENtPg8FeUD/VShI7rKxNW7O4fFeaYbMsd3tpFlIg1Q8IapFgy7Q9i2BqeBvA== - -"@rollup/rollup-linux-riscv64-gnu@4.54.0": - version "4.54.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.54.0.tgz#173f20c278ac770ae3e969663a27d172a4545e87" - integrity sha512-89sepv7h2lIVPsFma8iwmccN7Yjjtgz0Rj/Ou6fEqg3HDhpCa+Et+YSufy27i6b0Wav69Qv4WBNl3Rs6pwhebQ== - -"@rollup/rollup-linux-riscv64-musl@4.54.0": - version "4.54.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.54.0.tgz#db70c2377ae1ef61ef8673354d107ecb3fa7ffed" - integrity sha512-ZcU77ieh0M2Q8Ur7D5X7KvK+UxbXeDHwiOt/CPSBTI1fBmeDMivW0dPkdqkT4rOgDjrDDBUed9x4EgraIKoR2A== - -"@rollup/rollup-linux-s390x-gnu@4.54.0": - version "4.54.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.54.0.tgz#b2c461778add1c2ee70ec07d1788611548647962" - integrity sha512-2AdWy5RdDF5+4YfG/YesGDDtbyJlC9LHmL6rZw6FurBJ5n4vFGupsOBGfwMRjBYH7qRQowT8D/U4LoSvVwOhSQ== - -"@rollup/rollup-linux-x64-gnu@4.54.0": - version "4.54.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.54.0.tgz#ab140b356569601f57ab8727bd7306463841894f" - integrity sha512-WGt5J8Ij/rvyqpFexxk3ffKqqbLf9AqrTBbWDk7ApGUzaIs6V+s2s84kAxklFwmMF/vBNGrVdYgbblCOFFezMQ== - -"@rollup/rollup-linux-x64-musl@4.54.0": - version "4.54.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.54.0.tgz#810134b4a9d0d88576938f2eed38999a653814a1" - integrity sha512-JzQmb38ATzHjxlPHuTH6tE7ojnMKM2kYNzt44LO/jJi8BpceEC8QuXYA908n8r3CNuG/B3BV8VR3Hi1rYtmPiw== - -"@rollup/rollup-openharmony-arm64@4.54.0": - version "4.54.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.54.0.tgz#0182bae7a54e748be806acef7a7f726f6949213c" - integrity sha512-huT3fd0iC7jigGh7n3q/+lfPcXxBi+om/Rs3yiFxjvSxbSB6aohDFXbWvlspaqjeOh+hx7DDHS+5Es5qRkWkZg== - -"@rollup/rollup-win32-arm64-msvc@4.54.0": - version "4.54.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.54.0.tgz#1f19349bd1c5e454d03e4508a9277b6354985b9d" - integrity sha512-c2V0W1bsKIKfbLMBu/WGBz6Yci8nJ/ZJdheE0EwB73N3MvHYKiKGs3mVilX4Gs70eGeDaMqEob25Tw2Gb9Nqyw== - -"@rollup/rollup-win32-ia32-msvc@4.54.0": - version "4.54.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.54.0.tgz#234ff739993539f64efac6c2e59704a691a309c2" - integrity sha512-woEHgqQqDCkAzrDhvDipnSirm5vxUXtSKDYTVpZG3nUdW/VVB5VdCYA2iReSj/u3yCZzXID4kuKG7OynPnB3WQ== - -"@rollup/rollup-win32-x64-gnu@4.54.0": - version "4.54.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.54.0.tgz#a4df0507c3be09c152a795cfc0c4f0c225765c5c" - integrity sha512-dzAc53LOuFvHwbCEOS0rPbXp6SIhAf2txMP5p6mGyOXXw5mWY8NGGbPMPrs4P1WItkfApDathBj/NzMLUZ9rtQ== - -"@rollup/rollup-win32-x64-msvc@4.54.0": - version "4.54.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.54.0.tgz#beacb356412eef5dc0164e9edfee51c563732054" - integrity sha512-hYT5d3YNdSh3mbCU1gwQyPgQd3T2ne0A3KG8KSBdav5TiBg6eInVmV+TeR5uHufiIgSFg0XsOWGW5/RhNcSvPg== - -"@scure/base@~1.1.0", "@scure/base@~1.1.6": - version "1.1.9" - resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.9.tgz#e5e142fbbfe251091f9c5f1dd4c834ac04c3dbd1" - integrity sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg== - -"@scure/base@~1.2.5": - version "1.2.6" - resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.2.6.tgz#ca917184b8231394dd8847509c67a0be522e59f6" - integrity sha512-g/nm5FgUa//MCj1gV09zTJTaM6KBAHqLN907YVQqf7zC49+DcO4B1so4ZX07Ef10Twr6nuqYEH9GEggFXA4Fmg== - -"@scure/bip32@1.1.5": - version "1.1.5" - resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.1.5.tgz#d2ccae16dcc2e75bc1d75f5ef3c66a338d1ba300" - integrity sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw== - dependencies: - "@noble/hashes" "~1.2.0" - "@noble/secp256k1" "~1.7.0" - "@scure/base" "~1.1.0" - -"@scure/bip32@1.4.0": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.4.0.tgz#4e1f1e196abedcef395b33b9674a042524e20d67" - integrity sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg== - dependencies: - "@noble/curves" "~1.4.0" - "@noble/hashes" "~1.4.0" - "@scure/base" "~1.1.6" - -"@scure/bip32@1.7.0", "@scure/bip32@^1.7.0": - version "1.7.0" - resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.7.0.tgz#b8683bab172369f988f1589640e53c4606984219" - integrity sha512-E4FFX/N3f4B80AKWp5dP6ow+flD1LQZo/w8UnLGYZO674jS6YnYeepycOOksv+vLPSpgN35wgKgy+ybfTb2SMw== - dependencies: - "@noble/curves" "~1.9.0" - "@noble/hashes" "~1.8.0" - "@scure/base" "~1.2.5" - -"@scure/bip39@1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.1.1.tgz#b54557b2e86214319405db819c4b6a370cf340c5" - integrity sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg== - dependencies: - "@noble/hashes" "~1.2.0" - "@scure/base" "~1.1.0" - -"@scure/bip39@1.3.0": - version "1.3.0" - resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.3.0.tgz#0f258c16823ddd00739461ac31398b4e7d6a18c3" - integrity sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ== - dependencies: - "@noble/hashes" "~1.4.0" - "@scure/base" "~1.1.6" - -"@scure/bip39@1.6.0", "@scure/bip39@^1.0.0", "@scure/bip39@^1.6.0": - version "1.6.0" - resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.6.0.tgz#475970ace440d7be87a6086cbee77cb8f1a684f9" - integrity sha512-+lF0BbLiJNwVlev4eKelw1WWLaiKXw7sSl8T6FvBlWkdX+94aGJ4o8XjUdlyhTCjd8c+B3KT3JfS8P0bLRNU6A== - dependencies: - "@noble/hashes" "~1.8.0" - "@scure/base" "~1.2.5" - -"@sentry/core@5.30.0": - version "5.30.0" - resolved "https://registry.yarnpkg.com/@sentry/core/-/core-5.30.0.tgz#6b203664f69e75106ee8b5a2fe1d717379b331f3" - integrity sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg== - dependencies: - "@sentry/hub" "5.30.0" - "@sentry/minimal" "5.30.0" - "@sentry/types" "5.30.0" - "@sentry/utils" "5.30.0" - tslib "^1.9.3" - -"@sentry/hub@5.30.0": - version "5.30.0" - resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-5.30.0.tgz#2453be9b9cb903404366e198bd30c7ca74cdc100" - integrity sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ== - dependencies: - "@sentry/types" "5.30.0" - "@sentry/utils" "5.30.0" - tslib "^1.9.3" - -"@sentry/minimal@5.30.0": - version "5.30.0" - resolved "https://registry.yarnpkg.com/@sentry/minimal/-/minimal-5.30.0.tgz#ce3d3a6a273428e0084adcb800bc12e72d34637b" - integrity sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw== - dependencies: - "@sentry/hub" "5.30.0" - "@sentry/types" "5.30.0" - tslib "^1.9.3" - -"@sentry/node@^5.18.1": - version "5.30.0" - resolved "https://registry.yarnpkg.com/@sentry/node/-/node-5.30.0.tgz#4ca479e799b1021285d7fe12ac0858951c11cd48" - integrity sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg== - dependencies: - "@sentry/core" "5.30.0" - "@sentry/hub" "5.30.0" - "@sentry/tracing" "5.30.0" - "@sentry/types" "5.30.0" - "@sentry/utils" "5.30.0" - cookie "^0.4.1" - https-proxy-agent "^5.0.0" - lru_map "^0.3.3" - tslib "^1.9.3" - -"@sentry/tracing@5.30.0": - version "5.30.0" - resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-5.30.0.tgz#501d21f00c3f3be7f7635d8710da70d9419d4e1f" - integrity sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw== - dependencies: - "@sentry/hub" "5.30.0" - "@sentry/minimal" "5.30.0" - "@sentry/types" "5.30.0" - "@sentry/utils" "5.30.0" - tslib "^1.9.3" - -"@sentry/types@5.30.0": - version "5.30.0" - resolved "https://registry.yarnpkg.com/@sentry/types/-/types-5.30.0.tgz#19709bbe12a1a0115bc790b8942917da5636f402" - integrity sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw== - -"@sentry/utils@5.30.0": - version "5.30.0" - resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-5.30.0.tgz#9a5bd7ccff85ccfe7856d493bffa64cabc41e980" - integrity sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww== - dependencies: - "@sentry/types" "5.30.0" - tslib "^1.9.3" - -"@sindresorhus/is@^0.14.0": - version "0.14.0" - resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" - integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== - -"@sindresorhus/is@^4.0.0": - version "4.6.0" - resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.6.0.tgz#3c7c9c46e678feefe7a2e5bb609d3dbd665ffb3f" - integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw== - -"@smithy/abort-controller@^3.1.9": - version "3.1.9" - resolved "https://registry.yarnpkg.com/@smithy/abort-controller/-/abort-controller-3.1.9.tgz#47d323f754136a489e972d7fd465d534d72fcbff" - integrity sha512-yiW0WI30zj8ZKoSYNx90no7ugVn3khlyH/z5W8qtKBtVE6awRALbhSG+2SAHA1r6bO/6M9utxYKVZ3PCJ1rWxw== - dependencies: - "@smithy/types" "^3.7.2" - tslib "^2.6.2" - -"@smithy/abort-controller@^4.2.12": - version "4.2.12" - resolved "https://registry.yarnpkg.com/@smithy/abort-controller/-/abort-controller-4.2.12.tgz#80c86416f232b0b4e79cef530877ef87d626ac42" - integrity sha512-xolrFw6b+2iYGl6EcOL7IJY71vvyZ0DJ3mcKtpykqPe2uscwtzDZJa1uVQXyP7w9Dd+kGwYnPbMsJrGISKiY/Q== - dependencies: - "@smithy/types" "^4.13.1" - tslib "^2.6.2" - -"@smithy/chunked-blob-reader-native@^3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-3.0.1.tgz#39045ed278ee1b6f4c12715c7565678557274c29" - integrity sha512-VEYtPvh5rs/xlyqpm5NRnfYLZn+q0SRPELbvBV+C/G7IQ+ouTuo+NKKa3ShG5OaFR8NYVMXls9hPYLTvIKKDrQ== - dependencies: - "@smithy/util-base64" "^3.0.0" - tslib "^2.6.2" - -"@smithy/chunked-blob-reader@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@smithy/chunked-blob-reader/-/chunked-blob-reader-4.0.0.tgz#754099909957fb1986c16eb88afad75919d7129d" - integrity sha512-jSqRnZvkT4egkq/7b6/QRCNXmmYVcHwnJldqJ3IhVpQE2atObVJ137xmGeuGFhjFUr8gCEVAOKwSY79OvpbDaQ== - dependencies: - tslib "^2.6.2" - -"@smithy/config-resolver@^3.0.13", "@smithy/config-resolver@^3.0.2": - version "3.0.13" - resolved "https://registry.yarnpkg.com/@smithy/config-resolver/-/config-resolver-3.0.13.tgz#653643a77a33d0f5907a5e7582353886b07ba752" - integrity sha512-Gr/qwzyPaTL1tZcq8WQyHhTZREER5R1Wytmz4WnVGL4onA3dNk6Btll55c8Vr58pLdvWZmtG8oZxJTw3t3q7Jg== - dependencies: - "@smithy/node-config-provider" "^3.1.12" - "@smithy/types" "^3.7.2" - "@smithy/util-config-provider" "^3.0.0" - "@smithy/util-middleware" "^3.0.11" - tslib "^2.6.2" - -"@smithy/config-resolver@^4.4.13": - version "4.4.13" - resolved "https://registry.yarnpkg.com/@smithy/config-resolver/-/config-resolver-4.4.13.tgz#8bffd41de647ec349b4a74bf02bdd1b32452bacd" - integrity sha512-iIzMC5NmOUP6WL6o8iPBjFhUhBZ9pPjpUpQYWMUFQqKyXXzOftbfK8zcQCz/jFV1Psmf05BK5ypx4K2r4Tnwdg== - dependencies: - "@smithy/node-config-provider" "^4.3.12" - "@smithy/types" "^4.13.1" - "@smithy/util-config-provider" "^4.2.2" - "@smithy/util-endpoints" "^3.3.3" - "@smithy/util-middleware" "^4.2.12" - tslib "^2.6.2" - -"@smithy/core@^2.2.1", "@smithy/core@^2.5.7": - version "2.5.7" - resolved "https://registry.yarnpkg.com/@smithy/core/-/core-2.5.7.tgz#b545649071905f064cb0407102f3b9159246f8d9" - integrity sha512-8olpW6mKCa0v+ibCjoCzgZHQx1SQmZuW/WkrdZo73wiTprTH6qhmskT60QLFdT9DRa5mXxjz89kQPZ7ZSsoqqg== - dependencies: - "@smithy/middleware-serde" "^3.0.11" - "@smithy/protocol-http" "^4.1.8" - "@smithy/types" "^3.7.2" - "@smithy/util-body-length-browser" "^3.0.0" - "@smithy/util-middleware" "^3.0.11" - "@smithy/util-stream" "^3.3.4" - "@smithy/util-utf8" "^3.0.0" - tslib "^2.6.2" - -"@smithy/core@^3.23.12": - version "3.23.12" - resolved "https://registry.yarnpkg.com/@smithy/core/-/core-3.23.12.tgz#a16537bb03260337ac5adda31aedb325fcf9bb06" - integrity sha512-o9VycsYNtgC+Dy3I0yrwCqv9CWicDnke0L7EVOrZtJpjb2t0EjaEofmMrYc0T1Kn3yk32zm6cspxF9u9Bj7e5w== - dependencies: - "@smithy/protocol-http" "^5.3.12" - "@smithy/types" "^4.13.1" - "@smithy/url-parser" "^4.2.12" - "@smithy/util-base64" "^4.3.2" - "@smithy/util-body-length-browser" "^4.2.2" - "@smithy/util-middleware" "^4.2.12" - "@smithy/util-stream" "^4.5.20" - "@smithy/util-utf8" "^4.2.2" - "@smithy/uuid" "^1.1.2" - tslib "^2.6.2" - -"@smithy/credential-provider-imds@^3.1.1", "@smithy/credential-provider-imds@^3.2.8": - version "3.2.8" - resolved "https://registry.yarnpkg.com/@smithy/credential-provider-imds/-/credential-provider-imds-3.2.8.tgz#27ed2747074c86a7d627a98e56f324a65cba88de" - integrity sha512-ZCY2yD0BY+K9iMXkkbnjo+08T2h8/34oHd0Jmh6BZUSZwaaGlGCyBT/3wnS7u7Xl33/EEfN4B6nQr3Gx5bYxgw== - dependencies: - "@smithy/node-config-provider" "^3.1.12" - "@smithy/property-provider" "^3.1.11" - "@smithy/types" "^3.7.2" - "@smithy/url-parser" "^3.0.11" - tslib "^2.6.2" - -"@smithy/credential-provider-imds@^4.2.12": - version "4.2.12" - resolved "https://registry.yarnpkg.com/@smithy/credential-provider-imds/-/credential-provider-imds-4.2.12.tgz#fa2e52116cac7eaf5625e0bfd399a4927b598f66" - integrity sha512-cr2lR792vNZcYMriSIj+Um3x9KWrjcu98kn234xA6reOAFMmbRpQMOv8KPgEmLLtx3eldU6c5wALKFqNOhugmg== - dependencies: - "@smithy/node-config-provider" "^4.3.12" - "@smithy/property-provider" "^4.2.12" - "@smithy/types" "^4.13.1" - "@smithy/url-parser" "^4.2.12" - tslib "^2.6.2" - -"@smithy/eventstream-codec@^3.1.10": - version "3.1.10" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-codec/-/eventstream-codec-3.1.10.tgz#0c1a3457e7a23b71cd71525ceb668f8569a84dad" - integrity sha512-323B8YckSbUH0nMIpXn7HZsAVKHYHFUODa8gG9cHo0ySvA1fr5iWaNT+iIL0UCqUzG6QPHA3BSsBtRQou4mMqQ== - dependencies: - "@aws-crypto/crc32" "5.2.0" - "@smithy/types" "^3.7.2" - "@smithy/util-hex-encoding" "^3.0.0" - tslib "^2.6.2" - -"@smithy/eventstream-codec@^4.2.12": - version "4.2.12" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-codec/-/eventstream-codec-4.2.12.tgz#8cd62d08709344fb8b35fd17870fdf1435de61a3" - integrity sha512-FE3bZdEl62ojmy8x4FHqxq2+BuOHlcxiH5vaZ6aqHJr3AIZzwF5jfx8dEiU/X0a8RboyNDjmXjlbr8AdEyLgiA== - dependencies: - "@aws-crypto/crc32" "5.2.0" - "@smithy/types" "^4.13.1" - "@smithy/util-hex-encoding" "^4.2.2" - tslib "^2.6.2" - -"@smithy/eventstream-serde-browser@^3.0.2": - version "3.0.14" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-3.0.14.tgz#0c3584c7cde2e210aacdfbbd2b57c1d7e2ca3b95" - integrity sha512-kbrt0vjOIihW3V7Cqj1SXQvAI5BR8SnyQYsandva0AOR307cXAc+IhPngxIPslxTLfxwDpNu0HzCAq6g42kCPg== - dependencies: - "@smithy/eventstream-serde-universal" "^3.0.13" - "@smithy/types" "^3.7.2" - tslib "^2.6.2" - -"@smithy/eventstream-serde-browser@^4.2.12": - version "4.2.12" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-4.2.12.tgz#3ceb8743750edaf5d6e42cd1a2327e048f85ba4e" - integrity sha512-XUSuMxlTxV5pp4VpqZf6Sa3vT/Q75FVkLSpSSE3KkWBvAQWeuWt1msTv8fJfgA4/jcJhrbrbMzN1AC/hvPmm5A== - dependencies: - "@smithy/eventstream-serde-universal" "^4.2.12" - "@smithy/types" "^4.13.1" - tslib "^2.6.2" - -"@smithy/eventstream-serde-config-resolver@^3.0.1": - version "3.0.11" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-3.0.11.tgz#5edceba836debea165ea93145231036f6286d67c" - integrity sha512-P2pnEp4n75O+QHjyO7cbw/vsw5l93K/8EWyjNCAAybYwUmj3M+hjSQZ9P5TVdUgEG08ueMAP5R4FkuSkElZ5tQ== - dependencies: - "@smithy/types" "^3.7.2" - tslib "^2.6.2" - -"@smithy/eventstream-serde-config-resolver@^4.3.12": - version "4.3.12" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-4.3.12.tgz#a29164bc5480d935ece9dbdca0f79924259e519a" - integrity sha512-7epsAZ3QvfHkngz6RXQYseyZYHlmWXSTPOfPmXkiS+zA6TBNo1awUaMFL9vxyXlGdoELmCZyZe1nQE+imbmV+Q== - dependencies: - "@smithy/types" "^4.13.1" - tslib "^2.6.2" - -"@smithy/eventstream-serde-node@^3.0.2": - version "3.0.13" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-node/-/eventstream-serde-node-3.0.13.tgz#5aebd7b553becee277e411a2b69f6af8c9d7b3a6" - integrity sha512-zqy/9iwbj8Wysmvi7Lq7XFLeDgjRpTbCfwBhJa8WbrylTAHiAu6oQTwdY7iu2lxigbc9YYr9vPv5SzYny5tCXQ== - dependencies: - "@smithy/eventstream-serde-universal" "^3.0.13" - "@smithy/types" "^3.7.2" - tslib "^2.6.2" - -"@smithy/eventstream-serde-node@^4.2.12": - version "4.2.12" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-node/-/eventstream-serde-node-4.2.12.tgz#2cc06a1ea1108f679d376aab81e95a6f69877b4a" - integrity sha512-D1pFuExo31854eAvg89KMn9Oab/wEeJR6Buy32B49A9Ogdtx5fwZPqBHUlDzaCDpycTFk2+fSQgX689Qsk7UGA== - dependencies: - "@smithy/eventstream-serde-universal" "^4.2.12" - "@smithy/types" "^4.13.1" - tslib "^2.6.2" - -"@smithy/eventstream-serde-universal@^3.0.13": - version "3.0.13" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-3.0.13.tgz#609c922ea14a0a3eed23a28ac110344c935704eb" - integrity sha512-L1Ib66+gg9uTnqp/18Gz4MDpJPKRE44geOjOQ2SVc0eiaO5l255ADziATZgjQjqumC7yPtp1XnjHlF1srcwjKw== - dependencies: - "@smithy/eventstream-codec" "^3.1.10" - "@smithy/types" "^3.7.2" - tslib "^2.6.2" - -"@smithy/eventstream-serde-universal@^4.2.12": - version "4.2.12" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-4.2.12.tgz#a3640d1e7c3e348168360035661db8d21b51e078" - integrity sha512-+yNuTiyBACxOJUTvbsNsSOfH9G9oKbaJE1lNL3YHpGcuucl6rPZMi3nrpehpVOVR2E07YqFFmtwpImtpzlouHQ== - dependencies: - "@smithy/eventstream-codec" "^4.2.12" - "@smithy/types" "^4.13.1" - tslib "^2.6.2" - -"@smithy/fetch-http-handler@^3.0.2": - version "3.2.9" - resolved "https://registry.yarnpkg.com/@smithy/fetch-http-handler/-/fetch-http-handler-3.2.9.tgz#8d5199c162a37caa37a8b6848eefa9ca58221a0b" - integrity sha512-hYNVQOqhFQ6vOpenifFME546f0GfJn2OiQ3M0FDmuUu8V/Uiwy2wej7ZXxFBNqdx0R5DZAqWM1l6VRhGz8oE6A== - dependencies: - "@smithy/protocol-http" "^4.1.4" - "@smithy/querystring-builder" "^3.0.7" - "@smithy/types" "^3.5.0" - "@smithy/util-base64" "^3.0.0" - tslib "^2.6.2" - -"@smithy/fetch-http-handler@^4.1.3": - version "4.1.3" - resolved "https://registry.yarnpkg.com/@smithy/fetch-http-handler/-/fetch-http-handler-4.1.3.tgz#fc590dea2470d32559ae298306f1277729d24aa9" - integrity sha512-6SxNltSncI8s689nvnzZQc/dPXcpHQ34KUj6gR/HBroytKOd/isMG3gJF/zBE1TBmTT18TXyzhg3O3SOOqGEhA== - dependencies: - "@smithy/protocol-http" "^4.1.8" - "@smithy/querystring-builder" "^3.0.11" - "@smithy/types" "^3.7.2" - "@smithy/util-base64" "^3.0.0" - tslib "^2.6.2" - -"@smithy/fetch-http-handler@^5.3.15": - version "5.3.15" - resolved "https://registry.yarnpkg.com/@smithy/fetch-http-handler/-/fetch-http-handler-5.3.15.tgz#acf69a8b3bab0396d2782fc901bad0b957c8c6a2" - integrity sha512-T4jFU5N/yiIfrtrsb9uOQn7RdELdM/7HbyLNr6uO/mpkj1ctiVs7CihVr51w4LyQlXWDpXFn4BElf1WmQvZu/A== - dependencies: - "@smithy/protocol-http" "^5.3.12" - "@smithy/querystring-builder" "^4.2.12" - "@smithy/types" "^4.13.1" - "@smithy/util-base64" "^4.3.2" - tslib "^2.6.2" - -"@smithy/hash-blob-browser@^3.1.0": - version "3.1.10" - resolved "https://registry.yarnpkg.com/@smithy/hash-blob-browser/-/hash-blob-browser-3.1.10.tgz#985e308189c2687a15004152b97506882ffb2b13" - integrity sha512-elwslXOoNunmfS0fh55jHggyhccobFkexLYC1ZeZ1xP2BTSrcIBaHV2b4xUQOdctrSNOpMqOZH1r2XzWTEhyfA== - dependencies: - "@smithy/chunked-blob-reader" "^4.0.0" - "@smithy/chunked-blob-reader-native" "^3.0.1" - "@smithy/types" "^3.7.2" - tslib "^2.6.2" - -"@smithy/hash-node@^3.0.1": - version "3.0.11" - resolved "https://registry.yarnpkg.com/@smithy/hash-node/-/hash-node-3.0.11.tgz#99e09ead3fc99c8cd7ca0f254ea0e35714f2a0d3" - integrity sha512-emP23rwYyZhQBvklqTtwetkQlqbNYirDiEEwXl2v0GYWMnCzxst7ZaRAnWuy28njp5kAH54lvkdG37MblZzaHA== - dependencies: - "@smithy/types" "^3.7.2" - "@smithy/util-buffer-from" "^3.0.0" - "@smithy/util-utf8" "^3.0.0" - tslib "^2.6.2" - -"@smithy/hash-node@^4.2.12": - version "4.2.12" - resolved "https://registry.yarnpkg.com/@smithy/hash-node/-/hash-node-4.2.12.tgz#0ee7f6a1d2958c313ee24b07159dcb9547792441" - integrity sha512-QhBYbGrbxTkZ43QoTPrK72DoYviDeg6YKDrHTMJbbC+A0sml3kSjzFtXP7BtbyJnXojLfTQldGdUR0RGD8dA3w== - dependencies: - "@smithy/types" "^4.13.1" - "@smithy/util-buffer-from" "^4.2.2" - "@smithy/util-utf8" "^4.2.2" - tslib "^2.6.2" - -"@smithy/hash-stream-node@^3.1.0": - version "3.1.10" - resolved "https://registry.yarnpkg.com/@smithy/hash-stream-node/-/hash-stream-node-3.1.10.tgz#94716b4556f4ccf2807e605f47bb5b018ed7dfb0" - integrity sha512-olomK/jZQ93OMayW1zfTHwcbwBdhcZOHsyWyiZ9h9IXvc1mCD/VuvzbLb3Gy/qNJwI4MANPLctTp2BucV2oU/Q== - dependencies: - "@smithy/types" "^3.7.2" - "@smithy/util-utf8" "^3.0.0" - tslib "^2.6.2" - -"@smithy/invalid-dependency@^3.0.1": - version "3.0.11" - resolved "https://registry.yarnpkg.com/@smithy/invalid-dependency/-/invalid-dependency-3.0.11.tgz#8144d7b0af9d34ab5f672e1f674f97f8740bb9ae" - integrity sha512-NuQmVPEJjUX6c+UELyVz8kUx8Q539EDeNwbRyu4IIF8MeV7hUtq1FB3SHVyki2u++5XLMFqngeMKk7ccspnNyQ== - dependencies: - "@smithy/types" "^3.7.2" - tslib "^2.6.2" - -"@smithy/invalid-dependency@^4.2.12": - version "4.2.12" - resolved "https://registry.yarnpkg.com/@smithy/invalid-dependency/-/invalid-dependency-4.2.12.tgz#1a28c13fb33684b91848d4d6ec5104a1c1413e7f" - integrity sha512-/4F1zb7Z8LOu1PalTdESFHR0RbPwHd3FcaG1sI3UEIriQTWakysgJr65lc1jj6QY5ye7aFsisajotH6UhWfm/g== - dependencies: - "@smithy/types" "^4.13.1" - tslib "^2.6.2" - -"@smithy/is-array-buffer@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz#f84f0d9f9a36601a9ca9381688bd1b726fd39111" - integrity sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA== - dependencies: - tslib "^2.6.2" - -"@smithy/is-array-buffer@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz#9a95c2d46b8768946a9eec7f935feaddcffa5e7a" - integrity sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ== - dependencies: - tslib "^2.6.2" - -"@smithy/is-array-buffer@^4.2.2": - version "4.2.2" - resolved "https://registry.yarnpkg.com/@smithy/is-array-buffer/-/is-array-buffer-4.2.2.tgz#c401ce54b12a16529eb1c938a0b6c2247cb763b8" - integrity sha512-n6rQ4N8Jj4YTQO3YFrlgZuwKodf4zUFs7EJIWH86pSCWBaAtAGBFfCM7Wx6D2bBJ2xqFNxGBSrUWswT3M0VJow== - dependencies: - tslib "^2.6.2" - -"@smithy/md5-js@^3.0.1": - version "3.0.11" - resolved "https://registry.yarnpkg.com/@smithy/md5-js/-/md5-js-3.0.11.tgz#27e4dab616348ff94aed24dc75e4017c582df40f" - integrity sha512-3NM0L3i2Zm4bbgG6Ymi9NBcxXhryi3uE8fIfHJZIOfZVxOkGdjdgjR9A06SFIZCfnEIWKXZdm6Yq5/aPXFFhsQ== - dependencies: - "@smithy/types" "^3.7.2" - "@smithy/util-utf8" "^3.0.0" - tslib "^2.6.2" - -"@smithy/middleware-content-length@^3.0.1": - version "3.0.13" - resolved "https://registry.yarnpkg.com/@smithy/middleware-content-length/-/middleware-content-length-3.0.13.tgz#6e08fe52739ac8fb3996088e0f8837e4b2ea187f" - integrity sha512-zfMhzojhFpIX3P5ug7jxTjfUcIPcGjcQYzB9t+rv0g1TX7B0QdwONW+ATouaLoD7h7LOw/ZlXfkq4xJ/g2TrIw== - dependencies: - "@smithy/protocol-http" "^4.1.8" - "@smithy/types" "^3.7.2" - tslib "^2.6.2" - -"@smithy/middleware-content-length@^4.2.12": - version "4.2.12" - resolved "https://registry.yarnpkg.com/@smithy/middleware-content-length/-/middleware-content-length-4.2.12.tgz#dec97ea1444b12e734156b764e9953b2b37c70fd" - integrity sha512-YE58Yz+cvFInWI/wOTrB+DbvUVz/pLn5mC5MvOV4fdRUc6qGwygyngcucRQjAhiCEbmfLOXX0gntSIcgMvAjmA== - dependencies: - "@smithy/protocol-http" "^5.3.12" - "@smithy/types" "^4.13.1" - tslib "^2.6.2" - -"@smithy/middleware-endpoint@^3.0.2", "@smithy/middleware-endpoint@^3.2.8": - version "3.2.8" - resolved "https://registry.yarnpkg.com/@smithy/middleware-endpoint/-/middleware-endpoint-3.2.8.tgz#6ca5de80543ba0f0d40e15dc3f9d0f14d192e06e" - integrity sha512-OEJZKVUEhMOqMs3ktrTWp7UvvluMJEvD5XgQwRePSbDg1VvBaL8pX8mwPltFn6wk1GySbcVwwyldL8S+iqnrEQ== - dependencies: - "@smithy/core" "^2.5.7" - "@smithy/middleware-serde" "^3.0.11" - "@smithy/node-config-provider" "^3.1.12" - "@smithy/shared-ini-file-loader" "^3.1.12" - "@smithy/types" "^3.7.2" - "@smithy/url-parser" "^3.0.11" - "@smithy/util-middleware" "^3.0.11" - tslib "^2.6.2" - -"@smithy/middleware-endpoint@^4.4.27": - version "4.4.27" - resolved "https://registry.yarnpkg.com/@smithy/middleware-endpoint/-/middleware-endpoint-4.4.27.tgz#cf2b334f7fc302e7ebf3fe00c1a1279ee9214afd" - integrity sha512-T3TFfUgXQlpcg+UdzcAISdZpj4Z+XECZ/cefgA6wLBd6V4lRi0svN2hBouN/be9dXQ31X4sLWz3fAQDf+nt6BA== - dependencies: - "@smithy/core" "^3.23.12" - "@smithy/middleware-serde" "^4.2.15" - "@smithy/node-config-provider" "^4.3.12" - "@smithy/shared-ini-file-loader" "^4.4.7" - "@smithy/types" "^4.13.1" - "@smithy/url-parser" "^4.2.12" - "@smithy/util-middleware" "^4.2.12" - tslib "^2.6.2" - -"@smithy/middleware-retry@^3.0.4": - version "3.0.34" - resolved "https://registry.yarnpkg.com/@smithy/middleware-retry/-/middleware-retry-3.0.34.tgz#136c89fc22d70819fdefc51b0d24952cf98883f1" - integrity sha512-yVRr/AAtPZlUvwEkrq7S3x7Z8/xCd97m2hLDaqdz6ucP2RKHsBjEqaUA2ebNv2SsZoPEi+ZD0dZbOB1u37tGCA== - dependencies: - "@smithy/node-config-provider" "^3.1.12" - "@smithy/protocol-http" "^4.1.8" - "@smithy/service-error-classification" "^3.0.11" - "@smithy/smithy-client" "^3.7.0" - "@smithy/types" "^3.7.2" - "@smithy/util-middleware" "^3.0.11" - "@smithy/util-retry" "^3.0.11" - tslib "^2.6.2" - uuid "^9.0.1" - -"@smithy/middleware-retry@^4.4.44": - version "4.4.44" - resolved "https://registry.yarnpkg.com/@smithy/middleware-retry/-/middleware-retry-4.4.44.tgz#5c678ea74bde3a480cb28d013156a24009063c5e" - integrity sha512-Y1Rav7m5CFRPQyM4CI0koD/bXjyjJu3EQxZZhtLGD88WIrBrQ7kqXM96ncd6rYnojwOo/u9MXu57JrEvu/nLrA== - dependencies: - "@smithy/node-config-provider" "^4.3.12" - "@smithy/protocol-http" "^5.3.12" - "@smithy/service-error-classification" "^4.2.12" - "@smithy/smithy-client" "^4.12.7" - "@smithy/types" "^4.13.1" - "@smithy/util-middleware" "^4.2.12" - "@smithy/util-retry" "^4.2.12" - "@smithy/uuid" "^1.1.2" - tslib "^2.6.2" - -"@smithy/middleware-serde@^3.0.1", "@smithy/middleware-serde@^3.0.11": - version "3.0.11" - resolved "https://registry.yarnpkg.com/@smithy/middleware-serde/-/middleware-serde-3.0.11.tgz#c7d54e0add4f83e05c6878a011fc664e21022f12" - integrity sha512-KzPAeySp/fOoQA82TpnwItvX8BBURecpx6ZMu75EZDkAcnPtO6vf7q4aH5QHs/F1s3/snQaSFbbUMcFFZ086Mw== - dependencies: - "@smithy/types" "^3.7.2" - tslib "^2.6.2" - -"@smithy/middleware-serde@^4.2.15": - version "4.2.15" - resolved "https://registry.yarnpkg.com/@smithy/middleware-serde/-/middleware-serde-4.2.15.tgz#18c6ed60339389b62e7955e822abe88e6f53ea55" - integrity sha512-ExYhcltZSli0pgAKOpQQe1DLFBLryeZ22605y/YS+mQpdNWekum9Ujb/jMKfJKgjtz1AZldtwA/wCYuKJgjjlg== - dependencies: - "@smithy/core" "^3.23.12" - "@smithy/protocol-http" "^5.3.12" - "@smithy/types" "^4.13.1" - tslib "^2.6.2" - -"@smithy/middleware-stack@^3.0.1", "@smithy/middleware-stack@^3.0.11": - version "3.0.11" - resolved "https://registry.yarnpkg.com/@smithy/middleware-stack/-/middleware-stack-3.0.11.tgz#453af2096924e4064d9da4e053cfdf65d9a36acc" - integrity sha512-1HGo9a6/ikgOMrTrWL/WiN9N8GSVYpuRQO5kjstAq4CvV59bjqnh7TbdXGQ4vxLD3xlSjfBjq5t1SOELePsLnA== - dependencies: - "@smithy/types" "^3.7.2" - tslib "^2.6.2" - -"@smithy/middleware-stack@^4.2.12": - version "4.2.12" - resolved "https://registry.yarnpkg.com/@smithy/middleware-stack/-/middleware-stack-4.2.12.tgz#96b43b2fab0d4a6723f813f76b72418b0fdb6ba0" - integrity sha512-kruC5gRHwsCOuyCd4ouQxYjgRAym2uDlCvQ5acuMtRrcdfg7mFBg6blaxcJ09STpt3ziEkis6bhg1uwrWU7txw== - dependencies: - "@smithy/types" "^4.13.1" - tslib "^2.6.2" - -"@smithy/node-config-provider@^3.1.1", "@smithy/node-config-provider@^3.1.12": - version "3.1.12" - resolved "https://registry.yarnpkg.com/@smithy/node-config-provider/-/node-config-provider-3.1.12.tgz#1b1d674fc83f943dc7b3017e37f16f374e878a6c" - integrity sha512-O9LVEu5J/u/FuNlZs+L7Ikn3lz7VB9hb0GtPT9MQeiBmtK8RSY3ULmsZgXhe6VAlgTw0YO+paQx4p8xdbs43vQ== - dependencies: - "@smithy/property-provider" "^3.1.11" - "@smithy/shared-ini-file-loader" "^3.1.12" - "@smithy/types" "^3.7.2" - tslib "^2.6.2" - -"@smithy/node-config-provider@^4.3.12": - version "4.3.12" - resolved "https://registry.yarnpkg.com/@smithy/node-config-provider/-/node-config-provider-4.3.12.tgz#bb722da6e2a130ae585754fa7bc8d909f9f5d702" - integrity sha512-tr2oKX2xMcO+rBOjobSwVAkV05SIfUKz8iI53rzxEmgW3GOOPOv0UioSDk+J8OpRQnpnhsO3Af6IEBabQBVmiw== - dependencies: - "@smithy/property-provider" "^4.2.12" - "@smithy/shared-ini-file-loader" "^4.4.7" - "@smithy/types" "^4.13.1" - tslib "^2.6.2" - -"@smithy/node-http-handler@^3.0.1", "@smithy/node-http-handler@^3.3.3": - version "3.3.3" - resolved "https://registry.yarnpkg.com/@smithy/node-http-handler/-/node-http-handler-3.3.3.tgz#94dbb3f15342b656ceba2b26e14aa741cace8919" - integrity sha512-BrpZOaZ4RCbcJ2igiSNG16S+kgAc65l/2hmxWdmhyoGWHTLlzQzr06PXavJp9OBlPEG/sHlqdxjWmjzV66+BSQ== - dependencies: - "@smithy/abort-controller" "^3.1.9" - "@smithy/protocol-http" "^4.1.8" - "@smithy/querystring-builder" "^3.0.11" - "@smithy/types" "^3.7.2" - tslib "^2.6.2" - -"@smithy/node-http-handler@^4.5.0": - version "4.5.0" - resolved "https://registry.yarnpkg.com/@smithy/node-http-handler/-/node-http-handler-4.5.0.tgz#6a506a0da462c79e725fdbcfa55b0eed5b929727" - integrity sha512-Rnq9vQWiR1+/I6NZZMNzJHV6pZYyEHt2ZnuV3MG8z2NNenC4i/8Kzttz7CjZiHSmsN5frhXhg17z3Zqjjhmz1A== - dependencies: - "@smithy/abort-controller" "^4.2.12" - "@smithy/protocol-http" "^5.3.12" - "@smithy/querystring-builder" "^4.2.12" - "@smithy/types" "^4.13.1" - tslib "^2.6.2" - -"@smithy/property-provider@^3.1.1", "@smithy/property-provider@^3.1.11": - version "3.1.11" - resolved "https://registry.yarnpkg.com/@smithy/property-provider/-/property-provider-3.1.11.tgz#161cf1c2a2ada361e417382c57f5ba6fbca8acad" - integrity sha512-I/+TMc4XTQ3QAjXfOcUWbSS073oOEAxgx4aZy8jHaf8JQnRkq2SZWw8+PfDtBvLUjcGMdxl+YwtzWe6i5uhL/A== - dependencies: - "@smithy/types" "^3.7.2" - tslib "^2.6.2" - -"@smithy/property-provider@^4.2.12": - version "4.2.12" - resolved "https://registry.yarnpkg.com/@smithy/property-provider/-/property-provider-4.2.12.tgz#e9f8e5ce125413973b16e39c87cf4acd41324e21" - integrity sha512-jqve46eYU1v7pZ5BM+fmkbq3DerkSluPr5EhvOcHxygxzD05ByDRppRwRPPpFrsFo5yDtCYLKu+kreHKVrvc7A== - dependencies: - "@smithy/types" "^4.13.1" - tslib "^2.6.2" - -"@smithy/protocol-http@^4.0.1", "@smithy/protocol-http@^4.1.4", "@smithy/protocol-http@^4.1.8": - version "4.1.8" - resolved "https://registry.yarnpkg.com/@smithy/protocol-http/-/protocol-http-4.1.8.tgz#0461758671335f65e8ff3fc0885ab7ed253819c9" - integrity sha512-hmgIAVyxw1LySOwkgMIUN0kjN8TG9Nc85LJeEmEE/cNEe2rkHDUWhnJf2gxcSRFLWsyqWsrZGw40ROjUogg+Iw== - dependencies: - "@smithy/types" "^3.7.2" - tslib "^2.6.2" - -"@smithy/protocol-http@^5.3.12": - version "5.3.12" - resolved "https://registry.yarnpkg.com/@smithy/protocol-http/-/protocol-http-5.3.12.tgz#c913053e7dfbac6cdd7f374f0b4f5aa7c518d0e1" - integrity sha512-fit0GZK9I1xoRlR4jXmbLhoN0OdEpa96ul8M65XdmXnxXkuMxM0Y8HDT0Fh0Xb4I85MBvBClOzgSrV1X2s1Hxw== - dependencies: - "@smithy/types" "^4.13.1" - tslib "^2.6.2" - -"@smithy/querystring-builder@^3.0.11", "@smithy/querystring-builder@^3.0.7": - version "3.0.11" - resolved "https://registry.yarnpkg.com/@smithy/querystring-builder/-/querystring-builder-3.0.11.tgz#2ed04adbe725671824c5613d0d6f9376d791a909" - integrity sha512-u+5HV/9uJaeLj5XTb6+IEF/dokWWkEqJ0XiaRRogyREmKGUgZnNecLucADLdauWFKUNbQfulHFEZEdjwEBjXRg== - dependencies: - "@smithy/types" "^3.7.2" - "@smithy/util-uri-escape" "^3.0.0" - tslib "^2.6.2" - -"@smithy/querystring-builder@^4.2.12": - version "4.2.12" - resolved "https://registry.yarnpkg.com/@smithy/querystring-builder/-/querystring-builder-4.2.12.tgz#20a0266b151a4b58409f901e1463257a72835c16" - integrity sha512-6wTZjGABQufekycfDGMEB84BgtdOE/rCVTov+EDXQ8NHKTUNIp/j27IliwP7tjIU9LR+sSzyGBOXjeEtVgzCHg== - dependencies: - "@smithy/types" "^4.13.1" - "@smithy/util-uri-escape" "^4.2.2" - tslib "^2.6.2" - -"@smithy/querystring-parser@^3.0.11": - version "3.0.11" - resolved "https://registry.yarnpkg.com/@smithy/querystring-parser/-/querystring-parser-3.0.11.tgz#9d3177ea19ce8462f18d9712b395239e1ca1f969" - integrity sha512-Je3kFvCsFMnso1ilPwA7GtlbPaTixa3WwC+K21kmMZHsBEOZYQaqxcMqeFFoU7/slFjKDIpiiPydvdJm8Q/MCw== - dependencies: - "@smithy/types" "^3.7.2" - tslib "^2.6.2" - -"@smithy/querystring-parser@^4.2.12": - version "4.2.12" - resolved "https://registry.yarnpkg.com/@smithy/querystring-parser/-/querystring-parser-4.2.12.tgz#918cb609b2d606ab81f2727bfde0265d2ebb2758" - integrity sha512-P2OdvrgiAKpkPNKlKUtWbNZKB1XjPxM086NeVhK+W+wI46pIKdWBe5QyXvhUm3MEcyS/rkLvY8rZzyUdmyDZBw== - dependencies: - "@smithy/types" "^4.13.1" - tslib "^2.6.2" - -"@smithy/service-error-classification@^3.0.11": - version "3.0.11" - resolved "https://registry.yarnpkg.com/@smithy/service-error-classification/-/service-error-classification-3.0.11.tgz#d3d7fc0aacd2e60d022507367e55c7939e5bcb8a" - integrity sha512-QnYDPkyewrJzCyaeI2Rmp7pDwbUETe+hU8ADkXmgNusO1bgHBH7ovXJiYmba8t0fNfJx75fE8dlM6SEmZxheog== - dependencies: - "@smithy/types" "^3.7.2" - -"@smithy/service-error-classification@^4.2.12": - version "4.2.12" - resolved "https://registry.yarnpkg.com/@smithy/service-error-classification/-/service-error-classification-4.2.12.tgz#795e9484207acf63817a9e9cf67e90b42e720840" - integrity sha512-LlP29oSQN0Tw0b6D0Xo6BIikBswuIiGYbRACy5ujw/JgWSzTdYj46U83ssf6Ux0GyNJVivs2uReU8pt7Eu9okQ== - dependencies: - "@smithy/types" "^4.13.1" - -"@smithy/shared-ini-file-loader@^3.1.1", "@smithy/shared-ini-file-loader@^3.1.12": - version "3.1.12" - resolved "https://registry.yarnpkg.com/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.12.tgz#d98b1b663eb18935ce2cbc79024631d34f54042a" - integrity sha512-1xKSGI+U9KKdbG2qDvIR9dGrw3CNx+baqJfyr0igKEpjbHL5stsqAesYBzHChYHlelWtb87VnLWlhvfCz13H8Q== - dependencies: - "@smithy/types" "^3.7.2" - tslib "^2.6.2" - -"@smithy/shared-ini-file-loader@^4.4.7": - version "4.4.7" - resolved "https://registry.yarnpkg.com/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.4.7.tgz#18cc5a21f871509fafbe535a7bf44bde5a500727" - integrity sha512-HrOKWsUb+otTeo1HxVWeEb99t5ER1XrBi/xka2Wv6NVmTbuCUC1dvlrksdvxFtODLBjsC+PHK+fuy2x/7Ynyiw== - dependencies: - "@smithy/types" "^4.13.1" - tslib "^2.6.2" - -"@smithy/signature-v4@^3.1.0": - version "3.1.2" - resolved "https://registry.yarnpkg.com/@smithy/signature-v4/-/signature-v4-3.1.2.tgz#63fc0d4f9a955e902138fb0a57fafc96b9d4e8bb" - integrity sha512-3BcPylEsYtD0esM4Hoyml/+s7WP2LFhcM3J2AGdcL2vx9O60TtfpDOL72gjb4lU8NeRPeKAwR77YNyyGvMbuEA== - dependencies: - "@smithy/is-array-buffer" "^3.0.0" - "@smithy/types" "^3.3.0" - "@smithy/util-hex-encoding" "^3.0.0" - "@smithy/util-middleware" "^3.0.3" - "@smithy/util-uri-escape" "^3.0.0" - "@smithy/util-utf8" "^3.0.0" - tslib "^2.6.2" - -"@smithy/signature-v4@^5.3.12": - version "5.3.12" - resolved "https://registry.yarnpkg.com/@smithy/signature-v4/-/signature-v4-5.3.12.tgz#b61ce40a94bdd91dfdd8f5f2136631c8eb67f253" - integrity sha512-B/FBwO3MVOL00DaRSXfXfa/TRXRheagt/q5A2NM13u7q+sHS59EOVGQNfG7DkmVtdQm5m3vOosoKAXSqn/OEgw== - dependencies: - "@smithy/is-array-buffer" "^4.2.2" - "@smithy/protocol-http" "^5.3.12" - "@smithy/types" "^4.13.1" - "@smithy/util-hex-encoding" "^4.2.2" - "@smithy/util-middleware" "^4.2.12" - "@smithy/util-uri-escape" "^4.2.2" - "@smithy/util-utf8" "^4.2.2" - tslib "^2.6.2" - -"@smithy/smithy-client@^3.1.2", "@smithy/smithy-client@^3.7.0": - version "3.7.0" - resolved "https://registry.yarnpkg.com/@smithy/smithy-client/-/smithy-client-3.7.0.tgz#8cfaa7b68b7af15e588b96aa14e5dce393f85839" - integrity sha512-9wYrjAZFlqWhgVo3C4y/9kpc68jgiSsKUnsFPzr/MSiRL93+QRDafGTfhhKAb2wsr69Ru87WTiqSfQusSmWipA== - dependencies: - "@smithy/core" "^2.5.7" - "@smithy/middleware-endpoint" "^3.2.8" - "@smithy/middleware-stack" "^3.0.11" - "@smithy/protocol-http" "^4.1.8" - "@smithy/types" "^3.7.2" - "@smithy/util-stream" "^3.3.4" - tslib "^2.6.2" - -"@smithy/smithy-client@^4.12.7": - version "4.12.7" - resolved "https://registry.yarnpkg.com/@smithy/smithy-client/-/smithy-client-4.12.7.tgz#3867272c062e39d3d4b719bf83ba491c76e1ee93" - integrity sha512-q3gqnwml60G44FECaEEsdQMplYhDMZYCtYhMCzadCnRnnHIobZJjegmdoUo6ieLQlPUzvrMdIJUpx6DoPmzANQ== - dependencies: - "@smithy/core" "^3.23.12" - "@smithy/middleware-endpoint" "^4.4.27" - "@smithy/middleware-stack" "^4.2.12" - "@smithy/protocol-http" "^5.3.12" - "@smithy/types" "^4.13.1" - "@smithy/util-stream" "^4.5.20" - tslib "^2.6.2" - -"@smithy/types@^3.1.0", "@smithy/types@^3.3.0", "@smithy/types@^3.5.0", "@smithy/types@^3.7.2": - version "3.7.2" - resolved "https://registry.yarnpkg.com/@smithy/types/-/types-3.7.2.tgz#05cb14840ada6f966de1bf9a9c7dd86027343e10" - integrity sha512-bNwBYYmN8Eh9RyjS1p2gW6MIhSO2rl7X9QeLM8iTdcGRP+eDiIWDt66c9IysCc22gefKszZv+ubV9qZc7hdESg== - dependencies: - tslib "^2.6.2" - -"@smithy/types@^4.13.1": - version "4.13.1" - resolved "https://registry.yarnpkg.com/@smithy/types/-/types-4.13.1.tgz#8aaf15bb0f42b4e7c93c87018a3678a06d74691d" - integrity sha512-787F3yzE2UiJIQ+wYW1CVg2odHjmaWLGksnKQHUrK/lYZSEcy1msuLVvxaR/sI2/aDe9U+TBuLsXnr3vod1g0g== - dependencies: - tslib "^2.6.2" - -"@smithy/url-parser@^3.0.1", "@smithy/url-parser@^3.0.11": - version "3.0.11" - resolved "https://registry.yarnpkg.com/@smithy/url-parser/-/url-parser-3.0.11.tgz#e5f5ffabfb6230159167cf4cc970705fca6b8b2d" - integrity sha512-TmlqXkSk8ZPhfc+SQutjmFr5FjC0av3GZP4B/10caK1SbRwe/v+Wzu/R6xEKxoNqL+8nY18s1byiy6HqPG37Aw== - dependencies: - "@smithy/querystring-parser" "^3.0.11" - "@smithy/types" "^3.7.2" - tslib "^2.6.2" - -"@smithy/url-parser@^4.2.12": - version "4.2.12" - resolved "https://registry.yarnpkg.com/@smithy/url-parser/-/url-parser-4.2.12.tgz#e940557bf0b8e9a25538a421970f64bd827f456f" - integrity sha512-wOPKPEpso+doCZGIlr+e1lVI6+9VAKfL4kZWFgzVgGWY2hZxshNKod4l2LXS3PRC9otH/JRSjtEHqQ/7eLciRA== - dependencies: - "@smithy/querystring-parser" "^4.2.12" - "@smithy/types" "^4.13.1" - tslib "^2.6.2" - -"@smithy/util-base64@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@smithy/util-base64/-/util-base64-3.0.0.tgz#f7a9a82adf34e27a72d0719395713edf0e493017" - integrity sha512-Kxvoh5Qtt0CDsfajiZOCpJxgtPHXOKwmM+Zy4waD43UoEMA+qPxxa98aE/7ZhdnBFZFXMOiBR5xbcaMhLtznQQ== - dependencies: - "@smithy/util-buffer-from" "^3.0.0" - "@smithy/util-utf8" "^3.0.0" - tslib "^2.6.2" - -"@smithy/util-base64@^4.3.2": - version "4.3.2" - resolved "https://registry.yarnpkg.com/@smithy/util-base64/-/util-base64-4.3.2.tgz#be02bcb29a87be744356467ea25ffa413e695cea" - integrity sha512-XRH6b0H/5A3SgblmMa5ErXQ2XKhfbQB+Fm/oyLZ2O2kCUrwgg55bU0RekmzAhuwOjA9qdN5VU2BprOvGGUkOOQ== - dependencies: - "@smithy/util-buffer-from" "^4.2.2" - "@smithy/util-utf8" "^4.2.2" - tslib "^2.6.2" - -"@smithy/util-body-length-browser@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@smithy/util-body-length-browser/-/util-body-length-browser-3.0.0.tgz#86ec2f6256310b4845a2f064e2f571c1ca164ded" - integrity sha512-cbjJs2A1mLYmqmyVl80uoLTJhAcfzMOyPgjwAYusWKMdLeNtzmMz9YxNl3/jRLoxSS3wkqkf0jwNdtXWtyEBaQ== - dependencies: - tslib "^2.6.2" - -"@smithy/util-body-length-browser@^4.2.2": - version "4.2.2" - resolved "https://registry.yarnpkg.com/@smithy/util-body-length-browser/-/util-body-length-browser-4.2.2.tgz#c4404277d22039872abdb80e7800f9a63f263862" - integrity sha512-JKCrLNOup3OOgmzeaKQwi4ZCTWlYR5H4Gm1r2uTMVBXoemo1UEghk5vtMi1xSu2ymgKVGW631e2fp9/R610ZjQ== - dependencies: - tslib "^2.6.2" - -"@smithy/util-body-length-node@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@smithy/util-body-length-node/-/util-body-length-node-3.0.0.tgz#99a291bae40d8932166907fe981d6a1f54298a6d" - integrity sha512-Tj7pZ4bUloNUP6PzwhN7K386tmSmEET9QtQg0TgdNOnxhZvCssHji+oZTUIuzxECRfG8rdm2PMw2WCFs6eIYkA== - dependencies: - tslib "^2.6.2" - -"@smithy/util-body-length-node@^4.2.3": - version "4.2.3" - resolved "https://registry.yarnpkg.com/@smithy/util-body-length-node/-/util-body-length-node-4.2.3.tgz#f923ca530defb86a9ac3ca2d3066bcca7b304fbc" - integrity sha512-ZkJGvqBzMHVHE7r/hcuCxlTY8pQr1kMtdsVPs7ex4mMU+EAbcXppfo5NmyxMYi2XU49eqaz56j2gsk4dHHPG/g== - dependencies: - tslib "^2.6.2" - -"@smithy/util-buffer-from@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz#6fc88585165ec73f8681d426d96de5d402021e4b" - integrity sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA== - dependencies: - "@smithy/is-array-buffer" "^2.2.0" - tslib "^2.6.2" - -"@smithy/util-buffer-from@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz#559fc1c86138a89b2edaefc1e6677780c24594e3" - integrity sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA== - dependencies: - "@smithy/is-array-buffer" "^3.0.0" - tslib "^2.6.2" - -"@smithy/util-buffer-from@^4.2.2": - version "4.2.2" - resolved "https://registry.yarnpkg.com/@smithy/util-buffer-from/-/util-buffer-from-4.2.2.tgz#2c6b7857757dfd88f6cd2d36016179a40ccc913b" - integrity sha512-FDXD7cvUoFWwN6vtQfEta540Y/YBe5JneK3SoZg9bThSoOAC/eGeYEua6RkBgKjGa/sz6Y+DuBZj3+YEY21y4Q== - dependencies: - "@smithy/is-array-buffer" "^4.2.2" - tslib "^2.6.2" - -"@smithy/util-config-provider@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@smithy/util-config-provider/-/util-config-provider-3.0.0.tgz#62c6b73b22a430e84888a8f8da4b6029dd5b8efe" - integrity sha512-pbjk4s0fwq3Di/ANL+rCvJMKM5bzAQdE5S/6RL5NXgMExFAi6UgQMPOm5yPaIWPpr+EOXKXRonJ3FoxKf4mCJQ== - dependencies: - tslib "^2.6.2" - -"@smithy/util-config-provider@^4.2.2": - version "4.2.2" - resolved "https://registry.yarnpkg.com/@smithy/util-config-provider/-/util-config-provider-4.2.2.tgz#52ebf9d8942838d18bc5fb1520de1e8699d7aad6" - integrity sha512-dWU03V3XUprJwaUIFVv4iOnS1FC9HnMHDfUrlNDSh4315v0cWyaIErP8KiqGVbf5z+JupoVpNM7ZB3jFiTejvQ== - dependencies: - tslib "^2.6.2" - -"@smithy/util-defaults-mode-browser@^3.0.4": - version "3.0.34" - resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.34.tgz#885312529599cf24b09335cb20439c838e452f9f" - integrity sha512-FumjjF631lR521cX+svMLBj3SwSDh9VdtyynTYDAiBDEf8YPP5xORNXKQ9j0105o5+ARAGnOOP/RqSl40uXddA== - dependencies: - "@smithy/property-provider" "^3.1.11" - "@smithy/smithy-client" "^3.7.0" - "@smithy/types" "^3.7.2" - bowser "^2.11.0" - tslib "^2.6.2" - -"@smithy/util-defaults-mode-browser@^4.3.43": - version "4.3.43" - resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.3.43.tgz#8e2667c31cacdc0d59d414863f9a475daef79b28" - integrity sha512-Qd/0wCKMaXxev/z00TvNzGCH2jlKKKxXP1aDxB6oKwSQthe3Og2dMhSayGCnsma1bK/kQX1+X7SMP99t6FgiiQ== - dependencies: - "@smithy/property-provider" "^4.2.12" - "@smithy/smithy-client" "^4.12.7" - "@smithy/types" "^4.13.1" - tslib "^2.6.2" - -"@smithy/util-defaults-mode-node@^3.0.4": - version "3.0.34" - resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.34.tgz#5eb0d97231a34e137980abfb08ea5e3a8f2156f7" - integrity sha512-vN6aHfzW9dVVzkI0wcZoUXvfjkl4CSbM9nE//08lmUMyf00S75uuCpTrqF9uD4bD9eldIXlt53colrlwKAT8Gw== - dependencies: - "@smithy/config-resolver" "^3.0.13" - "@smithy/credential-provider-imds" "^3.2.8" - "@smithy/node-config-provider" "^3.1.12" - "@smithy/property-provider" "^3.1.11" - "@smithy/smithy-client" "^3.7.0" - "@smithy/types" "^3.7.2" - tslib "^2.6.2" - -"@smithy/util-defaults-mode-node@^4.2.47": - version "4.2.47" - resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.2.47.tgz#95ab7663f21513dff5c13b5ab7fa2957418254c5" - integrity sha512-qSRbYp1EQ7th+sPFuVcVO05AE0QH635hycdEXlpzIahqHHf2Fyd/Zl+8v0XYMJ3cgDVPa0lkMefU7oNUjAP+DQ== - dependencies: - "@smithy/config-resolver" "^4.4.13" - "@smithy/credential-provider-imds" "^4.2.12" - "@smithy/node-config-provider" "^4.3.12" - "@smithy/property-provider" "^4.2.12" - "@smithy/smithy-client" "^4.12.7" - "@smithy/types" "^4.13.1" - tslib "^2.6.2" - -"@smithy/util-endpoints@^2.0.2": - version "2.1.7" - resolved "https://registry.yarnpkg.com/@smithy/util-endpoints/-/util-endpoints-2.1.7.tgz#a088ebfab946a7219dd4763bfced82709894b82d" - integrity sha512-tSfcqKcN/Oo2STEYCABVuKgJ76nyyr6skGl9t15hs+YaiU06sgMkN7QYjo0BbVw+KT26zok3IzbdSOksQ4YzVw== - dependencies: - "@smithy/node-config-provider" "^3.1.12" - "@smithy/types" "^3.7.2" - tslib "^2.6.2" - -"@smithy/util-endpoints@^3.3.3": - version "3.3.3" - resolved "https://registry.yarnpkg.com/@smithy/util-endpoints/-/util-endpoints-3.3.3.tgz#0119f15bcac30b3b9af1d3cc0a8477e7199d0185" - integrity sha512-VACQVe50j0HZPjpwWcjyT51KUQ4AnsvEaQ2lKHOSL4mNLD0G9BjEniQ+yCt1qqfKfiAHRAts26ud7hBjamrwig== - dependencies: - "@smithy/node-config-provider" "^4.3.12" - "@smithy/types" "^4.13.1" - tslib "^2.6.2" - -"@smithy/util-hex-encoding@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@smithy/util-hex-encoding/-/util-hex-encoding-3.0.0.tgz#32938b33d5bf2a15796cd3f178a55b4155c535e6" - integrity sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ== - dependencies: - tslib "^2.6.2" - -"@smithy/util-hex-encoding@^4.2.2": - version "4.2.2" - resolved "https://registry.yarnpkg.com/@smithy/util-hex-encoding/-/util-hex-encoding-4.2.2.tgz#4abf3335dd1eb884041d8589ca7628d81a6fd1d3" - integrity sha512-Qcz3W5vuHK4sLQdyT93k/rfrUwdJ8/HZ+nMUOyGdpeGA1Wxt65zYwi3oEl9kOM+RswvYq90fzkNDahPS8K0OIg== - dependencies: - tslib "^2.6.2" - -"@smithy/util-middleware@^3.0.1", "@smithy/util-middleware@^3.0.11", "@smithy/util-middleware@^3.0.3": - version "3.0.11" - resolved "https://registry.yarnpkg.com/@smithy/util-middleware/-/util-middleware-3.0.11.tgz#2ab5c17266b42c225e62befcffb048afa682b5bf" - integrity sha512-dWpyc1e1R6VoXrwLoLDd57U1z6CwNSdkM69Ie4+6uYh2GC7Vg51Qtan7ITzczuVpqezdDTKJGJB95fFvvjU/ow== - dependencies: - "@smithy/types" "^3.7.2" - tslib "^2.6.2" - -"@smithy/util-middleware@^4.2.12": - version "4.2.12" - resolved "https://registry.yarnpkg.com/@smithy/util-middleware/-/util-middleware-4.2.12.tgz#d6cb837c2390375e2b6957e7f917350ca4bd8757" - integrity sha512-Er805uFUOvgc0l8nv0e0su0VFISoxhJ/AwOn3gL2NWNY2LUEldP5WtVcRYSQBcjg0y9NfG8JYrCJaYDpupBHJQ== - dependencies: - "@smithy/types" "^4.13.1" - tslib "^2.6.2" - -"@smithy/util-retry@^3.0.1", "@smithy/util-retry@^3.0.11": - version "3.0.11" - resolved "https://registry.yarnpkg.com/@smithy/util-retry/-/util-retry-3.0.11.tgz#d267e5ccb290165cee69732547fea17b695a7425" - integrity sha512-hJUC6W7A3DQgaee3Hp9ZFcOxVDZzmBIRBPlUAk8/fSOEl7pE/aX7Dci0JycNOnm9Mfr0KV2XjIlUOcGWXQUdVQ== - dependencies: - "@smithy/service-error-classification" "^3.0.11" - "@smithy/types" "^3.7.2" - tslib "^2.6.2" - -"@smithy/util-retry@^4.2.12": - version "4.2.12" - resolved "https://registry.yarnpkg.com/@smithy/util-retry/-/util-retry-4.2.12.tgz#be4805afee530f95b00a6ba771e18cb4c324f822" - integrity sha512-1zopLDUEOwumjcHdJ1mwBHddubYF8GMQvstVCLC54Y46rqoHwlIU+8ZzUeaBcD+WCJHyDGSeZ2ml9YSe9aqcoQ== - dependencies: - "@smithy/service-error-classification" "^4.2.12" - "@smithy/types" "^4.13.1" - tslib "^2.6.2" - -"@smithy/util-stream@^3.0.2", "@smithy/util-stream@^3.3.4": - version "3.3.4" - resolved "https://registry.yarnpkg.com/@smithy/util-stream/-/util-stream-3.3.4.tgz#c506ac41310ebcceb0c3f0ba20755e4fe0a90b8d" - integrity sha512-SGhGBG/KupieJvJSZp/rfHHka8BFgj56eek9px4pp7lZbOF+fRiVr4U7A3y3zJD8uGhxq32C5D96HxsTC9BckQ== - dependencies: - "@smithy/fetch-http-handler" "^4.1.3" - "@smithy/node-http-handler" "^3.3.3" - "@smithy/types" "^3.7.2" - "@smithy/util-base64" "^3.0.0" - "@smithy/util-buffer-from" "^3.0.0" - "@smithy/util-hex-encoding" "^3.0.0" - "@smithy/util-utf8" "^3.0.0" - tslib "^2.6.2" - -"@smithy/util-stream@^4.5.20": - version "4.5.20" - resolved "https://registry.yarnpkg.com/@smithy/util-stream/-/util-stream-4.5.20.tgz#2d312ac8b9ea1780561a77048b027e7db1c6a3d4" - integrity sha512-4yXLm5n/B5SRBR2p8cZ90Sbv4zL4NKsgxdzCzp/83cXw2KxLEumt5p+GAVyRNZgQOSrzXn9ARpO0lUe8XSlSDw== - dependencies: - "@smithy/fetch-http-handler" "^5.3.15" - "@smithy/node-http-handler" "^4.5.0" - "@smithy/types" "^4.13.1" - "@smithy/util-base64" "^4.3.2" - "@smithy/util-buffer-from" "^4.2.2" - "@smithy/util-hex-encoding" "^4.2.2" - "@smithy/util-utf8" "^4.2.2" - tslib "^2.6.2" - -"@smithy/util-uri-escape@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@smithy/util-uri-escape/-/util-uri-escape-3.0.0.tgz#e43358a78bf45d50bb736770077f0f09195b6f54" - integrity sha512-LqR7qYLgZTD7nWLBecUi4aqolw8Mhza9ArpNEQ881MJJIU2sE5iHCK6TdyqqzcDLy0OPe10IY4T8ctVdtynubg== - dependencies: - tslib "^2.6.2" - -"@smithy/util-uri-escape@^4.2.2": - version "4.2.2" - resolved "https://registry.yarnpkg.com/@smithy/util-uri-escape/-/util-uri-escape-4.2.2.tgz#48e40206e7fe9daefc8d44bb43a1ab17e76abf4a" - integrity sha512-2kAStBlvq+lTXHyAZYfJRb/DfS3rsinLiwb+69SstC9Vb0s9vNWkRwpnj918Pfi85mzi42sOqdV72OLxWAISnw== - dependencies: - tslib "^2.6.2" - -"@smithy/util-utf8@^2.0.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@smithy/util-utf8/-/util-utf8-2.3.0.tgz#dd96d7640363259924a214313c3cf16e7dd329c5" - integrity sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A== - dependencies: - "@smithy/util-buffer-from" "^2.2.0" - tslib "^2.6.2" - -"@smithy/util-utf8@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@smithy/util-utf8/-/util-utf8-3.0.0.tgz#1a6a823d47cbec1fd6933e5fc87df975286d9d6a" - integrity sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA== - dependencies: - "@smithy/util-buffer-from" "^3.0.0" - tslib "^2.6.2" - -"@smithy/util-utf8@^4.2.2": - version "4.2.2" - resolved "https://registry.yarnpkg.com/@smithy/util-utf8/-/util-utf8-4.2.2.tgz#21db686982e6f3393ac262e49143b42370130f13" - integrity sha512-75MeYpjdWRe8M5E3AW0O4Cx3UadweS+cwdXjwYGBW5h/gxxnbeZ877sLPX/ZJA9GVTlL/qG0dXP29JWFCD1Ayw== - dependencies: - "@smithy/util-buffer-from" "^4.2.2" - tslib "^2.6.2" - -"@smithy/util-waiter@^3.0.1": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@smithy/util-waiter/-/util-waiter-3.2.0.tgz#1e52f870e77d2e5572025f7606053e6ff00df93d" - integrity sha512-PpjSboaDUE6yl+1qlg3Si57++e84oXdWGbuFUSAciXsVfEZJJJupR2Nb0QuXHiunt2vGR+1PTizOMvnUPaG2Qg== - dependencies: - "@smithy/abort-controller" "^3.1.9" - "@smithy/types" "^3.7.2" - tslib "^2.6.2" - -"@smithy/util-waiter@^4.2.13": - version "4.2.13" - resolved "https://registry.yarnpkg.com/@smithy/util-waiter/-/util-waiter-4.2.13.tgz#fea123340d650825a0ae3cc6c4525337806811ca" - integrity sha512-2zdZ9DTHngRtcYxJK1GUDxruNr53kv5W2Lupe0LMU+Imr6ohQg8M2T14MNkj1Y0wS3FFwpgpGQyvuaMF7CiTmQ== - dependencies: - "@smithy/abort-controller" "^4.2.12" - "@smithy/types" "^4.13.1" - tslib "^2.6.2" - -"@smithy/uuid@^1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@smithy/uuid/-/uuid-1.1.2.tgz#b6e97c7158615e4a3c775e809c00d8c269b5a12e" - integrity sha512-O/IEdcCUKkubz60tFbGA7ceITTAJsty+lBjNoorP4Z6XRqaFb/OjQjZODophEcuq68nKm6/0r+6/lLQ+XVpk8g== - dependencies: - tslib "^2.6.2" - -"@solidity-parser/parser@0.12.1": - version "0.12.1" - resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.12.1.tgz#10ce249890d32ba500e9ce449e60a2b26b11be7a" - integrity sha512-ikxVpwskNxEp2fvYS1BdRImnevHmM97zdPFBa1cVtjtNpoqCm/EmljATTZk0s9G/zsN5ZbPf9OAIAW4gbBJiRA== - -"@solidity-parser/parser@^0.13.2": - version "0.13.2" - resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.13.2.tgz#b6c71d8ca0b382d90a7bbed241f9bc110af65cbe" - integrity sha512-RwHnpRnfrnD2MSPveYoPh8nhofEvX7fgjHk1Oq+NNvCcLx4r1js91CO9o+F/F3fBzOCyvm8kKRTriFICX/odWw== - dependencies: - antlr4ts "^0.5.0-alpha.4" - -"@solidity-parser/parser@^0.16.0": - version "0.16.2" - resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.16.2.tgz#42cb1e3d88b3e8029b0c9befff00b634cd92d2fa" - integrity sha512-PI9NfoA3P8XK2VBkK5oIfRgKDsicwDZfkVq9ZTBCQYGOP1N2owgY2dyLGyU5/J/hQs8KRk55kdmvTLjy3Mu3vg== - dependencies: - antlr4ts "^0.5.0-alpha.4" - -"@solidity-parser/parser@^0.19.0": - version "0.19.0" - resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.19.0.tgz#37a8983b2725af9b14ff8c4a475fa0e98d773c3f" - integrity sha512-RV16k/qIxW/wWc+mLzV3ARyKUaMUTBy9tOLMzFhtNSKYeTAanQ3a5MudJKf/8arIFnA2L27SNjarQKmFg0w/jA== - -"@solidity-parser/parser@^0.20.1": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.20.2.tgz#e07053488ed60dae1b54f6fe37bb6d2c5fe146a7" - integrity sha512-rbu0bzwNvMcwAjH86hiEAcOeRI2EeK8zCkHDrFykh/Al8mvJeFmjy3UrE7GYQjNwOgbGUUtCn5/k8CB8zIu7QA== - -"@standard-schema/spec@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@standard-schema/spec/-/spec-1.1.0.tgz#a79b55dbaf8604812f52d140b2c9ab41bc150bb8" - integrity sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w== - -"@szmarczak/http-timer@^1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" - integrity sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA== - dependencies: - defer-to-connect "^1.0.1" - -"@szmarczak/http-timer@^4.0.5": - version "4.0.6" - resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-4.0.6.tgz#b4a914bb62e7c272d4e5989fe4440f812ab1d807" - integrity sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w== - dependencies: - defer-to-connect "^2.0.0" - -"@trufflesuite/bigint-buffer@1.1.10": - version "1.1.10" - resolved "https://registry.yarnpkg.com/@trufflesuite/bigint-buffer/-/bigint-buffer-1.1.10.tgz#a1d9ca22d3cad1a138b78baaf15543637a3e1692" - integrity sha512-pYIQC5EcMmID74t26GCC67946mgTJFiLXOT/BYozgrd4UEY2JHEGLhWi9cMiQCt5BSqFEvKkCHNnoj82SRjiEw== - dependencies: - node-gyp-build "4.4.0" - -"@trufflesuite/bigint-buffer@1.1.9": - version "1.1.9" - resolved "https://registry.yarnpkg.com/@trufflesuite/bigint-buffer/-/bigint-buffer-1.1.9.tgz#e2604d76e1e4747b74376d68f1312f9944d0d75d" - integrity sha512-bdM5cEGCOhDSwminryHJbRmXc1x7dPKg6Pqns3qyTwFlxsqUgxE29lsERS3PlIW1HTjoIGMUqsk1zQQwST1Yxw== - dependencies: - node-gyp-build "4.3.0" - -"@tybys/wasm-util@^0.10.1": - version "0.10.1" - resolved "https://registry.yarnpkg.com/@tybys/wasm-util/-/wasm-util-0.10.1.tgz#ecddd3205cf1e2d5274649ff0eedd2991ed7f414" - integrity sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg== - dependencies: - tslib "^2.4.0" - -"@typechain/ethers-v5@^10.0.0": - version "10.2.1" - resolved "https://registry.yarnpkg.com/@typechain/ethers-v5/-/ethers-v5-10.2.1.tgz#50241e6957683281ecfa03fb5a6724d8a3ce2391" - integrity sha512-n3tQmCZjRE6IU4h6lqUGiQ1j866n5MTCBJreNEHHVWXa2u9GJTaeYyU1/k+1qLutkyw+sS6VAN+AbeiTqsxd/A== - dependencies: - lodash "^4.17.15" - ts-essentials "^7.0.1" - -"@types/abstract-leveldown@*": - version "7.2.5" - resolved "https://registry.yarnpkg.com/@types/abstract-leveldown/-/abstract-leveldown-7.2.5.tgz#db2cf364c159fb1f12be6cd3549f56387eaf8d73" - integrity sha512-/2B0nQF4UdupuxeKTJA2+Rj1D+uDemo6P4kMwKCpbfpnzeVaWSELTsAw4Lxn3VJD6APtRrZOCuYo+4nHUQfTfg== - -"@types/bn.js@^4.11.3", "@types/bn.js@^4.11.5": - version "4.11.6" - resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-4.11.6.tgz#c306c70d9358aaea33cd4eda092a742b9505967c" - integrity sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg== - dependencies: - "@types/node" "*" - -"@types/bn.js@^5.1.0": - version "5.2.0" - resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-5.2.0.tgz#4349b9710e98f9ab3cdc50f1c5e4dcbd8ef29c80" - integrity sha512-DLbJ1BPqxvQhIGbeu8VbUC1DiAiahHtAYvA0ZEAa4P31F7IaArc8z3C3BRQdWX4mtLQuABG4yzp76ZrS02Ui1Q== - dependencies: - "@types/node" "*" - -"@types/cacheable-request@^6.0.1": - version "6.0.3" - resolved "https://registry.yarnpkg.com/@types/cacheable-request/-/cacheable-request-6.0.3.tgz#a430b3260466ca7b5ca5bfd735693b36e7a9d183" - integrity sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw== - dependencies: - "@types/http-cache-semantics" "*" - "@types/keyv" "^3.1.4" - "@types/node" "*" - "@types/responselike" "^1.0.0" - -"@types/chai@^5.2.2": - version "5.2.3" - resolved "https://registry.yarnpkg.com/@types/chai/-/chai-5.2.3.tgz#8e9cd9e1c3581fa6b341a5aed5588eb285be0b4a" - integrity sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA== - dependencies: - "@types/deep-eql" "*" - assertion-error "^2.0.1" - -"@types/deep-eql@*": - version "4.0.2" - resolved "https://registry.yarnpkg.com/@types/deep-eql/-/deep-eql-4.0.2.tgz#334311971d3a07121e7eb91b684a605e7eea9cbd" - integrity sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw== - -"@types/estree@*", "@types/estree@1.0.8", "@types/estree@^1.0.0": - version "1.0.8" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.8.tgz#958b91c991b1867ced318bedea0e215ee050726e" - integrity sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w== - -"@types/figlet@^1.5.4": - version "1.7.0" - resolved "https://registry.yarnpkg.com/@types/figlet/-/figlet-1.7.0.tgz#f3bc4e47ebebacc93223211bb61245bc72598254" - integrity sha512-KwrT7p/8Eo3Op/HBSIwGXOsTZKYiM9NpWRBJ5sVjWP/SmlS+oxxRvJht/FNAtliJvja44N3ul1yATgohnVBV0Q== - -"@types/glob@^7.1.1": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.2.0.tgz#bc1b5bf3aa92f25bd5dd39f35c57361bdce5b2eb" - integrity sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA== - dependencies: - "@types/minimatch" "*" - "@types/node" "*" - -"@types/http-cache-semantics@*": - version "4.2.0" - resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz#f6a7788f438cbfde15f29acad46512b4c01913b3" - integrity sha512-L3LgimLHXtGkWikKnsPg0/VFx9OGZaC+eN1u4r+OB1XRqH3meBIAVC2zr1WdMH+RHmnRkqliQAOHNJ/E0j/e0Q== - -"@types/keyv@^3.1.4": - version "3.1.4" - resolved "https://registry.yarnpkg.com/@types/keyv/-/keyv-3.1.4.tgz#3ccdb1c6751b0c7e52300bcdacd5bcbf8faa75b6" - integrity sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg== - dependencies: - "@types/node" "*" - -"@types/level-errors@*": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@types/level-errors/-/level-errors-3.0.2.tgz#f33ec813c50780b547463da9ad8acac89ee457d9" - integrity sha512-gyZHbcQ2X5hNXf/9KS2qGEmgDe9EN2WDM3rJ5Ele467C0nA1sLhtmv1bZiPMDYfAYCfPWft0uQIaTvXbASSTRA== - -"@types/levelup@^4.3.0": - version "4.3.3" - resolved "https://registry.yarnpkg.com/@types/levelup/-/levelup-4.3.3.tgz#4dc2b77db079b1cf855562ad52321aa4241b8ef4" - integrity sha512-K+OTIjJcZHVlZQN1HmU64VtrC0jC3dXWQozuEIR9zVvltIk90zaGPM2AgT+fIkChpzHhFE3YnvFLCbLtzAmexA== - dependencies: - "@types/abstract-leveldown" "*" - "@types/level-errors" "*" - "@types/node" "*" - -"@types/lru-cache@5.1.1": - version "5.1.1" - resolved "https://registry.yarnpkg.com/@types/lru-cache/-/lru-cache-5.1.1.tgz#c48c2e27b65d2a153b19bfc1a317e30872e01eef" - integrity sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw== - -"@types/minimatch@*": - version "6.0.0" - resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-6.0.0.tgz#4d207b1cc941367bdcd195a3a781a7e4fc3b1e03" - integrity sha512-zmPitbQ8+6zNutpwgcQuLcsEpn/Cj54Kbn7L5pX0Os5kdWplB7xPgEh/g+SWOB/qmows2gpuCaPyduq8ZZRnxA== - dependencies: - minimatch "*" - -"@types/mkdirp@^0.5.2": - version "0.5.2" - resolved "https://registry.yarnpkg.com/@types/mkdirp/-/mkdirp-0.5.2.tgz#503aacfe5cc2703d5484326b1b27efa67a339c1f" - integrity sha512-U5icWpv7YnZYGsN4/cmh3WD2onMY0aJIiTE6+51TwJCttdHvtCYmkBNOobHlXwrJRL0nkH9jH4kD+1FAdMN4Tg== - dependencies: - "@types/node" "*" - -"@types/node-fetch@^2.6.1": - version "2.6.13" - resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.6.13.tgz#e0c9b7b5edbdb1b50ce32c127e85e880872d56ee" - integrity sha512-QGpRVpzSaUs30JBSGPjOg4Uveu384erbHBoT1zeONvyCfwQxIkUshLAOqN/k9EjGviPRmWTTe6aH2qySWKTVSw== - dependencies: - "@types/node" "*" - form-data "^4.0.4" - -"@types/node@*": - version "25.5.0" - resolved "https://registry.yarnpkg.com/@types/node/-/node-25.5.0.tgz#5c99f37c443d9ccc4985866913f1ed364217da31" - integrity sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw== - dependencies: - undici-types "~7.18.0" - -"@types/node@11.11.6": - version "11.11.6" - resolved "https://registry.yarnpkg.com/@types/node/-/node-11.11.6.tgz#df929d1bb2eee5afdda598a41930fe50b43eaa6a" - integrity sha512-Exw4yUWMBXM3X+8oqzJNRqZSwUAaS4+7NdvHqQuFi/d+synz++xmX3QIf+BFqneW8N31R8Ky+sikfZUXq07ggQ== - -"@types/node@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.12.6": - version "12.20.55" - resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.55.tgz#c329cbd434c42164f846b909bd6f85b5537f6240" - integrity sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ== - -"@types/node@^15.12.2": - version "15.14.9" - resolved "https://registry.yarnpkg.com/@types/node/-/node-15.14.9.tgz#bc43c990c3c9be7281868bbc7b8fdd6e2b57adfa" - integrity sha512-qjd88DrCxupx/kJD5yQgZdcYKZKSIGBVDIBE1/LTGcNm3d2Np/jxojkdePDdfnBHJc5W7vSMpbJ1aB7p/Py69A== - -"@types/pbkdf2@^3.0.0": - version "3.1.2" - resolved "https://registry.yarnpkg.com/@types/pbkdf2/-/pbkdf2-3.1.2.tgz#2dc43808e9985a2c69ff02e2d2027bd4fe33e8dc" - integrity sha512-uRwJqmiXmh9++aSu1VNEn3iIxWOhd8AHXNSdlaLfdAAdSTY9jYVeGWnzejM3dvrkbqE3/hyQkQQ29IFATEGlew== - dependencies: - "@types/node" "*" - -"@types/prettier@^2.1.1": - version "2.7.3" - resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.3.tgz#3e51a17e291d01d17d3fc61422015a933af7a08f" - integrity sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA== - -"@types/qs@^6.9.7": - version "6.15.0" - resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.15.0.tgz#963ab61779843fe910639a50661b48f162bc7f79" - integrity sha512-JawvT8iBVWpzTrz3EGw9BTQFg3BQNmwERdKE22vlTxawwtbyUSlMppvZYKLZzB5zgACXdXxbD3m1bXaMqP/9ow== - -"@types/resolve@1.20.2": - version "1.20.2" - resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.20.2.tgz#97d26e00cd4a0423b4af620abecf3e6f442b7975" - integrity sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q== - -"@types/responselike@^1.0.0": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@types/responselike/-/responselike-1.0.3.tgz#cc29706f0a397cfe6df89debfe4bf5cea159db50" - integrity sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw== - dependencies: - "@types/node" "*" - -"@types/secp256k1@^4.0.1": - version "4.0.7" - resolved "https://registry.yarnpkg.com/@types/secp256k1/-/secp256k1-4.0.7.tgz#534c9814eb80964962108ad45d549d1555c75fa0" - integrity sha512-Rcvjl6vARGAKRO6jHeKMatGrvOMGrR/AR11N1x2LqintPCyDZ7NBhrh238Z2VZc7aM7KIwnFpFQ7fnfK4H/9Qw== - dependencies: - "@types/node" "*" - -"@types/seedrandom@3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@types/seedrandom/-/seedrandom-3.0.1.tgz#1254750a4fec4aff2ebec088ccd0bb02e91fedb4" - integrity sha512-giB9gzDeiCeloIXDgzFBCgjj1k4WxcDrZtGl6h1IqmUPlxF+Nx8Ve+96QCyDZ/HseB/uvDsKbpib9hU5cU53pw== - -"@types/underscore@^1.11.4": - version "1.13.0" - resolved "https://registry.yarnpkg.com/@types/underscore/-/underscore-1.13.0.tgz#dd8c034a92e5b8e24650c31af43d807c5340cee4" - integrity sha512-L6LBgy1f0EFQZ+7uSA57+n2g/s4Qs5r06Vwrwn0/nuK1de+adz00NWaztRQ30aEqw5qOaWbPI8u2cGQ52lj6VA== - -"@types/yargs-parser@*": - version "21.0.3" - resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.3.tgz#815e30b786d2e8f0dcd85fd5bcf5e1a04d008f15" - integrity sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ== - -"@types/yargs@^17.0.12": - version "17.0.35" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.35.tgz#07013e46aa4d7d7d50a49e15604c1c5340d4eb24" - integrity sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg== - dependencies: - "@types/yargs-parser" "*" - -"@ungap/structured-clone@^1.2.0": - version "1.3.0" - resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.3.0.tgz#d06bbb384ebcf6c505fde1c3d0ed4ddffe0aaff8" - integrity sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g== - -"@uniswap/lib@^4.0.1-alpha": - version "4.0.1-alpha" - resolved "https://registry.yarnpkg.com/@uniswap/lib/-/lib-4.0.1-alpha.tgz#2881008e55f075344675b3bca93f020b028fbd02" - integrity sha512-f6UIliwBbRsgVLxIaBANF6w09tYqc6Y/qXdsrbEmXHyFA7ILiKrIwRFXe1yOg8M3cksgVsO9N7yuL2DdCGQKBA== - -"@uniswap/v2-core@1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@uniswap/v2-core/-/v2-core-1.0.1.tgz#af8f508bf183204779938969e2e54043e147d425" - integrity sha512-MtybtkUPSyysqLY2U210NBDeCHX+ltHt3oADGdjqoThZaFRDKwM6k1Nb3F0A3hk5hwuQvytFWhrWHOEq6nVJ8Q== - -"@uniswap/v3-core@1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@uniswap/v3-core/-/v3-core-1.0.0.tgz#6c24adacc4c25dceee0ba3ca142b35adbd7e359d" - integrity sha512-kSC4djMGKMHj7sLMYVnn61k9nu+lHjMIxgg9CDQT+s2QYLoA56GbSK9Oxr+qJXzzygbkrmuY6cwgP6cW2JXPFA== - -"@uniswap/v3-core@1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@uniswap/v3-core/-/v3-core-1.0.1.tgz#b6d2bdc6ba3c3fbd610bdc502395d86cd35264a0" - integrity sha512-7pVk4hEm00j9tc71Y9+ssYpO6ytkeI0y7WE9P6UcmNzhxPePwyAxImuhVsTqWK9YFvzgtvzJHi64pBl4jUzKMQ== - -"@uniswap/v3-periphery@1.4.3": - version "1.4.3" - resolved "https://registry.yarnpkg.com/@uniswap/v3-periphery/-/v3-periphery-1.4.3.tgz#a6da4632dbd46b139cc13a410e4ec09ad22bd19f" - integrity sha512-80c+wtVzl5JJT8UQskxVYYG3oZb4pkhY0zDe0ab/RX4+8f9+W5d8wI4BT0wLB0wFQTSnbW+QdBSpkHA/vRyGBA== - dependencies: - "@openzeppelin/contracts" "3.4.2-solc-0.7" - "@uniswap/lib" "^4.0.1-alpha" - "@uniswap/v2-core" "1.0.1" - "@uniswap/v3-core" "1.0.0" - base64-sol "1.0.1" - -"@vekexasia/bigint-buffer2@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@vekexasia/bigint-buffer2/-/bigint-buffer2-1.1.1.tgz#19c25ecfe9d326e05d50adbf811224b4510c1306" - integrity sha512-uL63NGANn85oKrsrvD0CzgmkuMlWQnGv/J7sz0QQ2CnRaF1nMF0fAoRFH9PFtGRr62ZCA14qkHZATyBZbKYlRQ== - -"@vitest/expect@4.1.2": - version "4.1.2" - resolved "https://registry.yarnpkg.com/@vitest/expect/-/expect-4.1.2.tgz#2aec02233db4eac14777e6a7d14a535c63ae2d9b" - integrity sha512-gbu+7B0YgUJ2nkdsRJrFFW6X7NTP44WlhiclHniUhxADQJH5Szt9mZ9hWnJPJ8YwOK5zUOSSlSvyzRf0u1DSBQ== - dependencies: - "@standard-schema/spec" "^1.1.0" - "@types/chai" "^5.2.2" - "@vitest/spy" "4.1.2" - "@vitest/utils" "4.1.2" - chai "^6.2.2" - tinyrainbow "^3.1.0" - -"@vitest/mocker@4.1.2": - version "4.1.2" - resolved "https://registry.yarnpkg.com/@vitest/mocker/-/mocker-4.1.2.tgz#3f23523697f9ab9e851b58b2213c4ab6181aa0e6" - integrity sha512-Ize4iQtEALHDttPRCmN+FKqOl2vxTiNUhzobQFFt/BM1lRUTG7zRCLOykG/6Vo4E4hnUdfVLo5/eqKPukcWW7Q== - dependencies: - "@vitest/spy" "4.1.2" - estree-walker "^3.0.3" - magic-string "^0.30.21" - -"@vitest/pretty-format@4.1.2": - version "4.1.2" - resolved "https://registry.yarnpkg.com/@vitest/pretty-format/-/pretty-format-4.1.2.tgz#c2671aa1c931dc8f2759589fc87ea4b2602892c5" - integrity sha512-dwQga8aejqeuB+TvXCMzSQemvV9hNEtDDpgUKDzOmNQayl2OG241PSWeJwKRH3CiC+sESrmoFd49rfnq7T4RnA== - dependencies: - tinyrainbow "^3.1.0" - -"@vitest/runner@4.1.2": - version "4.1.2" - resolved "https://registry.yarnpkg.com/@vitest/runner/-/runner-4.1.2.tgz#6f744fa0d92d31f4c8c255b64bbe073cb75fd96e" - integrity sha512-Gr+FQan34CdiYAwpGJmQG8PgkyFVmARK8/xSijia3eTFgVfpcpztWLuP6FttGNfPLJhaZVP/euvujeNYar36OQ== - dependencies: - "@vitest/utils" "4.1.2" - pathe "^2.0.3" - -"@vitest/snapshot@4.1.2": - version "4.1.2" - resolved "https://registry.yarnpkg.com/@vitest/snapshot/-/snapshot-4.1.2.tgz#3972b8ed7a311133e12cb833bf86463d26cdd455" - integrity sha512-g7yfUmxYS4mNxk31qbOYsSt2F4m1E02LFqO53Xpzg3zKMhLAPZAjjfyl9e6z7HrW6LvUdTwAQR3HHfLjpko16A== - dependencies: - "@vitest/pretty-format" "4.1.2" - "@vitest/utils" "4.1.2" - magic-string "^0.30.21" - pathe "^2.0.3" - -"@vitest/spy@4.1.2": - version "4.1.2" - resolved "https://registry.yarnpkg.com/@vitest/spy/-/spy-4.1.2.tgz#1f312cef5756256639b4c0614f74c8ad9a036ef9" - integrity sha512-DU4fBnbVCJGNBwVA6xSToNXrkZNSiw59H8tcuUspVMsBDBST4nfvsPsEHDHGtWRRnqBERBQu7TrTKskmjqTXKA== - -"@vitest/utils@4.1.2": - version "4.1.2" - resolved "https://registry.yarnpkg.com/@vitest/utils/-/utils-4.1.2.tgz#32be8f42eb6683a598b1c61d7ec9f55596c60ecb" - integrity sha512-xw2/TiX82lQHA06cgbqRKFb5lCAy3axQ4H4SoUFhUsg+wztiet+co86IAMDtF6Vm1hc7J6j09oh/rgDn+JdKIQ== - dependencies: - "@vitest/pretty-format" "4.1.2" - convert-source-map "^2.0.0" - tinyrainbow "^3.1.0" - -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== - -abbrev@1.0.x: - version "1.0.9" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135" - integrity sha512-LEyx4aLEC3x6T0UguF6YILf+ntvmOaWsVfENmIW0E9H09vKlLDGelMjjSm0jkDHALj8A8quZ/HapKNigzwge+Q== - -abitype@1.2.3, abitype@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/abitype/-/abitype-1.2.3.tgz#bec3e09dea97d99ef6c719140bee663a329ad1f4" - integrity sha512-Ofer5QUnuUdTFsBRwARMoWKOH1ND5ehwYhJ3OJ/BQO+StkwQjHw0XyVh4vDttzHB7QOFhPHa/o413PJ82gU/Tg== - -abstract-leveldown@^6.2.1: - version "6.3.0" - resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-6.3.0.tgz#d25221d1e6612f820c35963ba4bd739928f6026a" - integrity sha512-TU5nlYgta8YrBMNpc9FwQzRbiXsj49gsALsXadbGHt9CROPzX5fB0rWDR5mtdpOOKa5XqRFpbj1QroPAoPzVjQ== - dependencies: - buffer "^5.5.0" - immediate "^3.2.3" - level-concat-iterator "~2.0.0" - level-supports "~1.0.0" - xtend "~4.0.0" - -abstract-leveldown@^7.2.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz#08d19d4e26fb5be426f7a57004851b39e1795a2e" - integrity sha512-DnhQwcFEaYsvYDnACLZhMmCWd3rkOeEvglpa4q5i/5Jlm3UIsWaxVzuXvDLFCSCWRO3yy2/+V/G7FusFgejnfQ== - dependencies: - buffer "^6.0.3" - catering "^2.0.0" - is-buffer "^2.0.5" - level-concat-iterator "^3.0.0" - level-supports "^2.0.1" - queue-microtask "^1.2.3" - -abstract-leveldown@~6.2.1: - version "6.2.3" - resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz#036543d87e3710f2528e47040bc3261b77a9a8eb" - integrity sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ== - dependencies: - buffer "^5.5.0" - immediate "^3.2.3" - level-concat-iterator "~2.0.0" - level-supports "~1.0.0" - xtend "~4.0.0" - -accepts@~1.3.8: - version "1.3.8" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" - integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== - dependencies: - mime-types "~2.1.34" - negotiator "0.6.3" - -acorn-jsx@^5.0.0, 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@^6.0.7: - version "6.4.2" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" - integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ== - -acorn@^8.9.0: - version "8.16.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.16.0.tgz#4ce79c89be40afe7afe8f3adb902a1f1ce9ac08a" - integrity sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw== - -adm-zip@^0.4.16: - version "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" - integrity sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q== - -aes-js@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.1.2.tgz#db9aabde85d5caabbfc0d4f2a4446960f627146a" - integrity sha512-e5pEa2kBnBOgR4Y/p20pskXI74UEz7de8ZGVo58asOtvSVG5YAbJeELPZxOmt+Bnz3rX753YKhfIn4X4l1PPRQ== - -agent-base@6: - version "6.0.2" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" - integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== - dependencies: - debug "4" - -aggregate-error@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" - integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== - dependencies: - clean-stack "^2.0.0" - indent-string "^4.0.0" - -ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.6, ajv@^6.6.1, ajv@^6.9.1: - version "6.14.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.14.0.tgz#fd067713e228210636ebb08c60bd3765d6dbe73a" - integrity sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw== - dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -ajv@^8.0.1: - version "8.18.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.18.0.tgz#8864186b6738d003eb3a933172bb3833e10cefbc" - integrity sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A== - dependencies: - fast-deep-equal "^3.1.3" - fast-uri "^3.0.1" - json-schema-traverse "^1.0.0" - require-from-string "^2.0.2" - -amazon-cognito-identity-js@^6.0.1, amazon-cognito-identity-js@^6.3.6: - version "6.3.16" - resolved "https://registry.yarnpkg.com/amazon-cognito-identity-js/-/amazon-cognito-identity-js-6.3.16.tgz#4a6aceb64c80406b9ee4344980794ff9e506017a" - integrity sha512-HPGSBGD6Q36t99puWh0LnptxO/4icnk2kqIQ9cTJ2tFQo5NMUnWQIgtrTAk8nm+caqUbjDzXzG56GBjI2tS6jQ== - dependencies: - "@aws-crypto/sha256-js" "1.2.2" - buffer "4.9.2" - fast-base64-decode "^1.0.0" - isomorphic-unfetch "^3.0.0" - js-cookie "^2.2.1" - -amdefine@>=0.0.4: - version "1.0.1" - resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" - integrity sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg== - -ansi-align@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.1.tgz#0cdf12e111ace773a86e9a1fad1225c43cb19a59" - integrity sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w== - dependencies: - string-width "^4.1.0" - -ansi-colors@4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" - integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== - -ansi-colors@^4.1.1, ansi-colors@^4.1.3: - version "4.1.3" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" - integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== - -ansi-escapes@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" - integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== - -ansi-escapes@^4.3.0: - version "4.3.2" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" - integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== - dependencies: - type-fest "^0.21.3" - -ansi-regex@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.1.tgz#123d6479e92ad45ad897d4054e3c7ca7db4944e1" - integrity sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw== - -ansi-regex@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.1.tgz#164daac87ab2d6f6db3a29875e2d1766582dabed" - integrity sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g== - -ansi-regex@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" - integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== - -ansi-regex@^6.2.2: - version "6.2.2" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.2.2.tgz#60216eea464d864597ce2832000738a0589650c1" - integrity sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg== - -ansi-styles@^3.2.0, ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - -ansi-styles@^4.0.0, ansi-styles@^4.1.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -ansi-styles@^6.1.0: - version "6.2.3" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.3.tgz#c044d5dcc521a076413472597a1acb1f103c4041" - integrity sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg== - -antlr4@4.7.1: - version "4.7.1" - resolved "https://registry.yarnpkg.com/antlr4/-/antlr4-4.7.1.tgz#69984014f096e9e775f53dd9744bf994d8959773" - integrity sha512-haHyTW7Y9joE5MVs37P2lNYfU2RWBLfcRDD8OWldcdZm5TiCE91B5Xl1oWSwiDUSd4rlExpt2pu1fksYQjRBYQ== - -antlr4@^4.11.0: - version "4.13.2" - resolved "https://registry.yarnpkg.com/antlr4/-/antlr4-4.13.2.tgz#0d084ad0e32620482a9c3a0e2470c02e72e4006d" - integrity sha512-QiVbZhyy4xAZ17UPEuG3YTOt8ZaoeOR1CvEAqrEsDBsOqINslaB147i9xqljZqoyf5S+EUlGStaj+t22LT9MOg== - -antlr4ts@^0.5.0-alpha.4: - version "0.5.0-alpha.4" - resolved "https://registry.yarnpkg.com/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz#71702865a87478ed0b40c0709f422cf14d51652a" - integrity sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ== - -any-signal@^4.1.1: - version "4.2.0" - resolved "https://registry.yarnpkg.com/any-signal/-/any-signal-4.2.0.tgz#a0bdf89affa9aa6962fc2f933741bedb02b26d1e" - integrity sha512-LndMvYuAPf4rC195lk7oSFuHOYFpOszIYrNYv0gHAvz+aEhE9qPZLhmrIz5pXP2BSsPOXvsuHDXEGaiQhIh9wA== - -anymatch@~3.1.2: - version "3.1.3" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" - integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== - dependencies: - sprintf-js "~1.0.2" - -argparse@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" - integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== - -array-back@^3.0.1, array-back@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/array-back/-/array-back-3.1.0.tgz#b8859d7a508871c9a7b2cf42f99428f65e96bfb0" - integrity sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q== - -array-back@^4.0.1, array-back@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/array-back/-/array-back-4.0.2.tgz#8004e999a6274586beeb27342168652fdb89fa1e" - integrity sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg== - -array-flatten@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" - integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== - -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== - -asn1.js@^4.10.1: - version "4.10.1" - resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0" - integrity sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw== - dependencies: - bn.js "^4.0.0" - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - -asn1@~0.2.3: - version "0.2.6" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d" - integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ== - dependencies: - safer-buffer "~2.1.0" - -assert-plus@1.0.0, assert-plus@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" - integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw== - -assert@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/assert/-/assert-2.1.0.tgz#6d92a238d05dc02e7427c881fb8be81c8448b2dd" - integrity sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw== - dependencies: - call-bind "^1.0.2" - is-nan "^1.3.2" - object-is "^1.1.5" - object.assign "^4.1.4" - util "^0.12.5" - -assertion-error@^1.1.0: - version "1.1.0" - resolved "https://registry.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-parents@^0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/ast-parents/-/ast-parents-0.0.1.tgz#508fd0f05d0c48775d9eccda2e174423261e8dd3" - integrity sha512-XHusKxKz3zoYk1ic8Un640joHbFMhbqneyoZfoKnEGtf2ey9Uh/IdpcQplODdO/kENaMIWsD0nJm4+wX3UNLHA== - -astral-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" - integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== - -astral-regex@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" - integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== - -async-eventemitter@^0.2.4: - version "0.2.4" - resolved "https://registry.yarnpkg.com/async-eventemitter/-/async-eventemitter-0.2.4.tgz#f5e7c8ca7d3e46aab9ec40a292baf686a0bafaca" - integrity sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw== - dependencies: - async "^2.4.0" - -async-limiter@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" - integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== - -async-retry@^1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/async-retry/-/async-retry-1.3.3.tgz#0e7f36c04d8478e7a58bdbed80cedf977785f280" - integrity sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw== - dependencies: - retry "0.13.1" - -async@1.x: - version "1.5.2" - resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" - integrity sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w== - -async@^2.4.0: - version "2.6.4" - resolved "https://registry.yarnpkg.com/async/-/async-2.6.4.tgz#706b7ff6084664cd7eae713f6f965433b5504221" - integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA== - dependencies: - lodash "^4.17.14" - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== - -atob@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" - integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== - -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" - -aws-sign2@~0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" - integrity sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA== - -aws4@^1.8.0: - version "1.13.2" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.13.2.tgz#0aa167216965ac9474ccfa83892cfb6b3e1e52ef" - integrity sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw== - -axios@1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.4.0.tgz#38a7bf1224cd308de271146038b551d725f0be1f" - integrity sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA== - dependencies: - follow-redirects "^1.15.0" - form-data "^4.0.0" - proxy-from-env "^1.1.0" - -axios@^0.21.1, axios@^0.21.2: - version "0.21.4" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.4.tgz#c67b90dc0568e5c1cf2b0b858c43ba28e2eda575" - integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg== - dependencies: - follow-redirects "^1.14.0" - -axios@^1.6.7, axios@^1.7.4: - version "1.13.6" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.13.6.tgz#c3f92da917dc209a15dd29936d20d5089b6b6c98" - integrity sha512-ChTCHMouEe2kn713WHbQGcuYrr6fXTBiu460OTwWrWob16g1bXn4vtz07Ope7ewMozJAnEquLk5lWQWtBig9DQ== - dependencies: - follow-redirects "^1.15.11" - form-data "^4.0.5" - proxy-from-env "^1.1.0" - -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - -balanced-match@^4.0.2: - version "4.0.4" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-4.0.4.tgz#bfb10662feed8196a2c62e7c68e17720c274179a" - integrity sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA== - -base-x@^3.0.2, base-x@^3.0.8: - version "3.0.11" - resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.11.tgz#40d80e2a1aeacba29792ccc6c5354806421287ff" - integrity sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA== - dependencies: - safe-buffer "^5.0.1" - -base-x@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/base-x/-/base-x-4.0.1.tgz#817fb7b57143c501f649805cb247617ad016a885" - integrity sha512-uAZ8x6r6S3aUM9rbHGVOIsR15U/ZSc82b3ymnCPsT45Gk1DDvhDPdIgB5MrhirZWt+5K0EEPQH985kNqZgNPFw== - -base-x@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/base-x/-/base-x-5.0.1.tgz#16bf35254be1df8aca15e36b7c1dda74b2aa6b03" - integrity sha512-M7uio8Zt++eg3jPj+rHMfCC+IuygQHHCOU+IYsVtik6FWjuYpVt/+MRKcgsAMHh8mMFAwnB+Bs+mTrFiXjMzKg== - -base64-js@^1.0.2, base64-js@^1.3.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - -base64-sol@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/base64-sol/-/base64-sol-1.0.1.tgz#91317aa341f0bc763811783c5729f1c2574600f6" - integrity sha512-ld3cCNMeXt4uJXmLZBHFGMvVpK9KsLVEhPpFRXnvSVAqABKbuNZg/+dsq3NuM+wxFLb/UrVkz7m1ciWmkMfTbg== - -bcrypt-pbkdf@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" - integrity sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w== - dependencies: - tweetnacl "^0.14.3" - -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== - -bignumber.js@^9.0.0, bignumber.js@^9.1.2: - version "9.3.1" - resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.3.1.tgz#759c5aaddf2ffdc4f154f7b493e1c8770f88c4d7" - integrity sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ== - -binary-extensions@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" - integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== - -bip39@3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/bip39/-/bip39-3.0.4.tgz#5b11fed966840b5e1b8539f0f54ab6392969b2a0" - integrity sha512-YZKQlb752TrUWqHWj7XAwCSjYEgGAk+/Aas3V7NyjQeZYsztO8JnQUaCWhcnL4T+jL8nvB8typ2jRPzTlgugNw== - dependencies: - "@types/node" "11.11.6" - create-hash "^1.1.0" - pbkdf2 "^3.0.9" - randombytes "^2.0.1" - -blakejs@^1.1.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/blakejs/-/blakejs-1.2.1.tgz#5057e4206eadb4a97f7c0b6e197a505042fc3814" - integrity sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ== - -bls-eth-wasm@^1.0.4, bls-eth-wasm@^1.1.1: - version "1.4.0" - resolved "https://registry.yarnpkg.com/bls-eth-wasm/-/bls-eth-wasm-1.4.0.tgz#7e68ac6cf897ec6227b15e3567d7c392b5f50f76" - integrity sha512-9TJR3r3CUJQR97PU6zokV2kVA80H8g4tkVBnaf9HNH3lFMBZUKZETNCwIuN+exFLujdbt1K188rH3mnq8UgmKw== - -bls-signatures@^0.2.5: - version "0.2.5" - resolved "https://registry.yarnpkg.com/bls-signatures/-/bls-signatures-0.2.5.tgz#7c285e3cb535f279d842e53d1f6e0c8ceda793d1" - integrity sha512-5TzQNCtR4zWE4lM08EOMIT8l3b4h8g5LNKu50fUYP1PnupaLGSLklAcTto4lnH7VXpyhsar+74L9wNJII4E/4Q== - -bluebird@^3.5.0: - version "3.7.2" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" - integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== - -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.1.0, bn.js@^4.11.0, bn.js@^4.11.1, bn.js@^4.11.6, bn.js@^4.11.8, bn.js@^4.11.9: - version "4.12.3" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.3.tgz#2cc2c679188eb35b006f2d0d4710bed8437a769e" - integrity sha512-fGTi3gxV/23FTYdAoUtLYp6qySe2KE3teyZitipKNRuVYcBkoP/bB3guXN/XVKUe9mxCHXnc9C4ocyz8OmgN0g== - -bn.js@^5.1.2, bn.js@^5.2.0, bn.js@^5.2.1, bn.js@^5.2.2: - version "5.2.3" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.3.tgz#16a9e409616b23fef3ccbedb8d42f13bff80295e" - integrity sha512-EAcmnPkxpntVL+DS7bO1zhcZNvCkxqtkd0ZY53h06GNQ3DEkkGZ/gKgmDv6DdZQGj9BgfSPKtJJ7Dp1GPP8f7w== - -body-parser@^1.16.0, body-parser@~1.20.3: - version "1.20.4" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.4.tgz#f8e20f4d06ca8a50a71ed329c15dccad1cdc547f" - integrity sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA== - dependencies: - bytes "~3.1.2" - content-type "~1.0.5" - debug "2.6.9" - depd "2.0.0" - destroy "~1.2.0" - http-errors "~2.0.1" - iconv-lite "~0.4.24" - on-finished "~2.4.1" - qs "~6.14.0" - raw-body "~2.5.3" - type-is "~1.6.18" - unpipe "~1.0.0" - -bowser@^2.11.0: - version "2.14.1" - resolved "https://registry.yarnpkg.com/bowser/-/bowser-2.14.1.tgz#4ea39bf31e305184522d7ad7bfd91389e4f0cb79" - integrity sha512-tzPjzCxygAKWFOJP011oxFHs57HzIhOEracIgAePE4pqB3LikALKnSzUyU4MGs9/iCEUuHlAJTjTc5M+u7YEGg== - -boxen@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/boxen/-/boxen-5.1.2.tgz#788cb686fc83c1f486dfa8a40c68fc2b831d2b50" - integrity sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ== - dependencies: - ansi-align "^3.0.0" - camelcase "^6.2.0" - chalk "^4.1.0" - cli-boxes "^2.2.1" - string-width "^4.2.2" - type-fest "^0.20.2" - widest-line "^3.1.0" - wrap-ansi "^7.0.0" - -brace-expansion@^1.1.7: - version "1.1.12" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.12.tgz#ab9b454466e5a8cc3a187beaad580412a9c5b843" - integrity sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -brace-expansion@^2.0.1, brace-expansion@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.2.tgz#54fc53237a613d854c7bd37463aad17df87214e7" - integrity sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ== - dependencies: - balanced-match "^1.0.0" - -brace-expansion@^5.0.2: - version "5.0.5" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-5.0.5.tgz#dcc3a37116b79f3e1b46db994ced5d570e930fdb" - integrity sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ== - dependencies: - balanced-match "^4.0.2" - -braces@^3.0.3, braces@~3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" - integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== - dependencies: - fill-range "^7.1.1" - -brorand@^1.0.1, brorand@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" - integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== - -brotli-wasm@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/brotli-wasm/-/brotli-wasm-2.0.1.tgz#2b3f4dc3db0c3e60d2635c055e6bac4ddf4bd3f5" - integrity sha512-+3USgYsC7bzb5yU0/p2HnnynZl0ak0E6uoIm4UW4Aby/8s8HFCq6NCfrrf1E9c3O8OCSzq3oYO1tUVqIi61Nww== - -browser-stdout@1.3.1, browser-stdout@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" - integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== - -browserify-aes@^1.0.4, browserify-aes@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" - integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== - dependencies: - buffer-xor "^1.0.3" - cipher-base "^1.0.0" - create-hash "^1.1.0" - evp_bytestokey "^1.0.3" - inherits "^2.0.1" - safe-buffer "^5.0.1" - -browserify-cipher@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" - integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== - dependencies: - browserify-aes "^1.0.4" - browserify-des "^1.0.0" - evp_bytestokey "^1.0.0" - -browserify-des@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" - integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== - dependencies: - cipher-base "^1.0.1" - des.js "^1.0.0" - inherits "^2.0.1" - safe-buffer "^5.1.2" - -browserify-rsa@^4.0.0, browserify-rsa@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.1.1.tgz#06e530907fe2949dc21fc3c2e2302e10b1437238" - integrity sha512-YBjSAiTqM04ZVei6sXighu679a3SqWORA3qZTEqZImnlkDIFtKc6pNutpjyZ8RJTjQtuYfeetkxM11GwoYXMIQ== - dependencies: - bn.js "^5.2.1" - randombytes "^2.1.0" - safe-buffer "^5.2.1" - -browserify-sign@^4.0.0: - version "4.2.5" - resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.5.tgz#3979269fa8af55ba18aac35deef11b45515cd27d" - integrity sha512-C2AUdAJg6rlM2W5QMp2Q4KGQMVBwR1lIimTsUnutJ8bMpW5B52pGpR2gEnNBNwijumDo5FojQ0L9JrXA8m4YEw== - dependencies: - bn.js "^5.2.2" - browserify-rsa "^4.1.1" - create-hash "^1.2.0" - create-hmac "^1.1.7" - elliptic "^6.6.1" - inherits "^2.0.4" - parse-asn1 "^5.1.9" - readable-stream "^2.3.8" - safe-buffer "^5.2.1" - -bs58@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a" - integrity sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw== - dependencies: - base-x "^3.0.2" - -bs58@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/bs58/-/bs58-5.0.0.tgz#865575b4d13c09ea2a84622df6c8cbeb54ffc279" - integrity sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ== - dependencies: - base-x "^4.0.0" - -bs58@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/bs58/-/bs58-6.0.0.tgz#a2cda0130558535dd281a2f8697df79caaf425d8" - integrity sha512-PD0wEnEYg6ijszw/u8s+iI3H17cTymlrwkKhDhPZq+Sokl3AU4htyBFTjAeNAlCCmg0f53g6ih3jATyCKftTfw== - dependencies: - base-x "^5.0.0" - -bs58check@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/bs58check/-/bs58check-2.1.2.tgz#53b018291228d82a5aa08e7d796fdafda54aebfc" - integrity sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA== - dependencies: - bs58 "^4.0.0" - create-hash "^1.1.0" - safe-buffer "^5.1.2" - -btoa@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/btoa/-/btoa-1.2.1.tgz#01a9909f8b2c93f6bf680ba26131eb30f7fa3d73" - integrity sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g== - -buffer-from@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" - integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== - -buffer-to-arraybuffer@^0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz#6064a40fa76eb43c723aba9ef8f6e1216d10511a" - integrity sha512-3dthu5CYiVB1DEJp61FtApNnNndTckcqe4pFcLdvHtrpG+kcyekCJKg4MRiDcFW7A6AODnXB9U4dwQiCW5kzJQ== - -buffer-xor@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" - integrity sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ== - -buffer-xor@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-2.0.2.tgz#34f7c64f04c777a1f8aac5e661273bb9dd320289" - integrity sha512-eHslX0bin3GB+Lx2p7lEYRShRewuNZL3fUl4qlVJGGiwoPGftmt8JQgk2Y9Ji5/01TnVDo33E5b5O3vUB1HdqQ== - dependencies: - safe-buffer "^5.1.1" - -buffer@4.9.2: - version "4.9.2" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8" - integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg== - dependencies: - base64-js "^1.0.2" - ieee754 "^1.1.4" - isarray "^1.0.0" - -buffer@^5.0.5, buffer@^5.5.0, buffer@^5.6.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" - integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.1.13" - -buffer@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" - integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.2.1" - -bufferutil@4.0.5: - version "4.0.5" - resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.5.tgz#da9ea8166911cc276bf677b8aed2d02d31f59028" - integrity sha512-HTm14iMQKK2FjFLRTM5lAVcyaUzOnqbPtesFIvREgXpJHdQm8bWS+GkQgIkfaBYRHuCnea7w8UVNfwiAQhlr9A== - dependencies: - node-gyp-build "^4.3.0" - -bufferutil@^4.0.1: - version "4.1.0" - resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.1.0.tgz#a4623541dd23867626bb08a051ec0d2ec0b70294" - integrity sha512-ZMANVnAixE6AWWnPzlW2KpUrxhm9woycYvPOo67jWHyFowASTEd9s+QN1EIMsSDtwhIxN4sWE1jotpuDUIgyIw== - dependencies: - node-gyp-build "^4.3.0" - -bufio@^1.0.7: - version "1.2.3" - resolved "https://registry.yarnpkg.com/bufio/-/bufio-1.2.3.tgz#25049c13f05e7cf56c88aa00f2503202b4bf2799" - integrity sha512-5Tt66bRzYUSlVZatc0E92uDenreJ+DpTBmSAUwL4VSxJn3e6cUyYwx+PoqML0GRZatgA/VX8ybhxItF8InZgqA== - -builtin-modules@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" - integrity sha512-wxXCdllwGhI2kCC0MnvTGYTMvnVZTvqgypkiTI8Pa5tcz2i6VqsqwYGgqwXji+4RgCzms6EajE4IxiUH6HH8nQ== - -bytes@~3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" - integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== - -cacheable-lookup@^5.0.3: - version "5.0.4" - resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz#5a6b865b2c44357be3d5ebc2a467b032719a7005" - integrity sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA== - -cacheable-request@^6.0.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" - integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg== - dependencies: - clone-response "^1.0.2" - get-stream "^5.1.0" - http-cache-semantics "^4.0.0" - keyv "^3.0.0" - lowercase-keys "^2.0.0" - normalize-url "^4.1.0" - responselike "^1.0.2" - -cacheable-request@^7.0.2: - version "7.0.4" - resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-7.0.4.tgz#7a33ebf08613178b403635be7b899d3e69bbe817" - integrity sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg== - dependencies: - clone-response "^1.0.2" - get-stream "^5.1.0" - http-cache-semantics "^4.0.0" - keyv "^4.0.0" - lowercase-keys "^2.0.0" - normalize-url "^6.0.1" - responselike "^2.0.0" - -call-bind-apply-helpers@^1.0.0, call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz#4b5428c222be985d79c3d82657479dbe0b59b2d6" - integrity sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ== - 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.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, call-bound@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/call-bound/-/call-bound-1.0.4.tgz#238de935d2a2a692928c538c7ccfa91067fd062a" - integrity sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg== - dependencies: - call-bind-apply-helpers "^1.0.2" - get-intrinsic "^1.3.0" - -caller-callsite@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" - integrity sha512-JuG3qI4QOftFsZyOn1qq87fq5grLIyk1JYd5lJmdA+fG7aQ9pA/i3JIJGcO3q0MrRcHlOt1U+ZeHW8Dq9axALQ== - dependencies: - callsites "^2.0.0" - -caller-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4" - integrity sha512-MCL3sf6nCSXOwCTzvPKhN18TU7AHTvdtam8DAogxcrJ8Rjfbbg7Lgng64H9Iy+vUV6VGFClN/TyxBkAebLRR4A== - dependencies: - caller-callsite "^2.0.0" - -callsites@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" - integrity sha512-ksWePWBloaWPxJYQ8TL0JHvtci6G5QTKwQ95RcWAa/lzoAKuAOflGdAK92hpHXjkwb8zLxoLNUoNYZgVsaJzvQ== - -callsites@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" - integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== - -camelcase@^6.0.0, camelcase@^6.2.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" - integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== - -case@^1.6.3: - version "1.6.3" - resolved "https://registry.yarnpkg.com/case/-/case-1.6.3.tgz#0a4386e3e9825351ca2e6216c60467ff5f1ea1c9" - integrity sha512-mzDSXIPaFwVDvZAHqZ9VlbyF4yyXRuX6IvB06WvPYkqJVO24kX1PPhv9bfpKNFZyxYFmmgo03HUiD8iklmJYRQ== - -caseless@~0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" - integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw== - -catering@^2.0.0, catering@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/catering/-/catering-2.1.1.tgz#66acba06ed5ee28d5286133982a927de9a04b510" - integrity sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w== - -cbor@^10.0.0: - version "10.0.12" - resolved "https://registry.yarnpkg.com/cbor/-/cbor-10.0.12.tgz#2ae291481ef6f28127ba39a9f8ee22f29677e04f" - integrity sha512-exQDevYd7ZQLP4moMQcZkKCVZsXLAtUSflObr3xTh4xzFIv/xBCdvCd6L259kQOUP2kcTC0jvC6PpZIf/WmRXA== - dependencies: - nofilter "^3.0.2" - -cbor@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/cbor/-/cbor-8.1.0.tgz#cfc56437e770b73417a2ecbfc9caf6b771af60d5" - integrity sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg== - dependencies: - nofilter "^3.1.0" - -chai@4.3.7: - version "4.3.7" - resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.7.tgz#ec63f6df01829088e8bf55fca839bcd464a8ec51" - integrity sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A== - dependencies: - assertion-error "^1.1.0" - check-error "^1.0.2" - deep-eql "^4.1.2" - get-func-name "^2.0.0" - loupe "^2.3.1" - pathval "^1.1.1" - type-detect "^4.0.5" - -chai@^4.3.4, chai@^4.3.6: - version "4.5.0" - resolved "https://registry.yarnpkg.com/chai/-/chai-4.5.0.tgz#707e49923afdd9b13a8b0b47d33d732d13812fd8" - integrity sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw== - 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.1.0" - -chai@^6.2.2: - version "6.2.2" - resolved "https://registry.yarnpkg.com/chai/-/chai-6.2.2.tgz#ae41b52c9aca87734505362717f3255facda360e" - integrity sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg== - -chalk@4.1.2, chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chalk@^2.1.0, chalk@^2.3.0, 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== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chardet@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" - integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== - -"charenc@>= 0.0.1": - version "0.0.2" - resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" - integrity sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA== - -check-error@^1.0.2, 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" - -chokidar@3.5.3: - version "3.5.3" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" - integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== - 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@^3.5.2, chokidar@^3.5.3: - 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.0: - 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" - -chownr@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" - integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== - -ci-info@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" - integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== - -cids@^0.7.1: - version "0.7.5" - resolved "https://registry.yarnpkg.com/cids/-/cids-0.7.5.tgz#60a08138a99bfb69b6be4ceb63bfef7a396b28b2" - integrity sha512-zT7mPeghoWAu+ppn8+BS1tQ5qGmbMfB4AregnQjA/qHY3GC1m1ptI9GkWNlgeu38r7CuRdXB47uY2XgAYt6QVA== - dependencies: - buffer "^5.5.0" - class-is "^1.1.0" - multibase "~0.6.0" - multicodec "^1.0.0" - multihashes "~0.4.15" - -cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: - version "1.0.7" - resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.7.tgz#bd094bfef42634ccfd9e13b9fc73274997111e39" - integrity sha512-Mz9QMT5fJe7bKI7MH31UilT5cEK5EHHRCccw/YRFsRY47AuNgaV6HY3rscp0/I4Q+tTW/5zoqpSeRRI54TkDWA== - dependencies: - inherits "^2.0.4" - safe-buffer "^5.2.1" - to-buffer "^1.2.2" - -class-is@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/class-is/-/class-is-1.1.0.tgz#9d3c0fba0440d211d843cec3dedfa48055005825" - integrity sha512-rhjH9AG1fvabIDoGRVH587413LPjTZgmDF9fOFCbFJQV4yuocX1mHxxvXI4g3cGwbVY9wAYIoKlg1N79frJKQw== - -class-validator@^0.13.2: - version "0.13.2" - resolved "https://registry.yarnpkg.com/class-validator/-/class-validator-0.13.2.tgz#64b031e9f3f81a1e1dcd04a5d604734608b24143" - integrity sha512-yBUcQy07FPlGzUjoLuUfIOXzgynnQPPruyK1Ge2B74k9ROwnle1E+NxLWnUv5OLU8hA/qL5leAE9XnXq3byaBw== - dependencies: - libphonenumber-js "^1.9.43" - validator "^13.7.0" - -clean-stack@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" - integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== - -cli-boxes@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f" - integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw== - -cli-cursor@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" - integrity sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw== - dependencies: - restore-cursor "^2.0.0" - -cli-progress@^3.11.2: - version "3.12.0" - resolved "https://registry.yarnpkg.com/cli-progress/-/cli-progress-3.12.0.tgz#807ee14b66bcc086258e444ad0f19e7d42577942" - integrity sha512-tRkV3HJ1ASwm19THiiLIXLO7Im7wlTuKnvkYaTkyoAPefqjNg7W7DHKUlGRxy9vxDvbyCYQkQozvptuMkGCg8A== - dependencies: - string-width "^4.2.3" - -cli-table3@^0.6.0, cli-table3@^0.6.3: - version "0.6.5" - resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.5.tgz#013b91351762739c16a9567c21a04632e449bf2f" - integrity sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ== - dependencies: - string-width "^4.2.0" - optionalDependencies: - "@colors/colors" "1.5.0" - -cli-width@^2.0.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.1.tgz#b0433d0b4e9c847ef18868a4ef16fd5fc8271c48" - integrity sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw== - -cliui@^7.0.2: - version "7.0.4" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" - integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.0" - wrap-ansi "^7.0.0" - -cliui@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" - integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.1" - wrap-ansi "^7.0.0" - -clone-response@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.3.tgz#af2032aa47816399cf5f0a1d0db902f517abb8c3" - integrity sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA== - dependencies: - mimic-response "^1.0.0" - -color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== - -color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -colors@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" - integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== - -combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: - version "1.0.8" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" - integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== - dependencies: - delayed-stream "~1.0.0" - -command-exists@^1.2.8: - version "1.2.9" - resolved "https://registry.yarnpkg.com/command-exists/-/command-exists-1.2.9.tgz#c50725af3808c8ab0260fd60b01fbfa25b954f69" - integrity sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w== - -command-line-args@^5.1.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/command-line-args/-/command-line-args-5.2.1.tgz#c44c32e437a57d7c51157696893c5909e9cec42e" - integrity sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg== - dependencies: - array-back "^3.1.0" - find-replace "^3.0.0" - lodash.camelcase "^4.3.0" - typical "^4.0.0" - -command-line-usage@^6.1.0: - version "6.1.3" - resolved "https://registry.yarnpkg.com/command-line-usage/-/command-line-usage-6.1.3.tgz#428fa5acde6a838779dfa30e44686f4b6761d957" - integrity sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw== - dependencies: - array-back "^4.0.2" - chalk "^2.4.2" - table-layout "^1.0.2" - typical "^5.2.0" - -commander@2.18.0: - version "2.18.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.18.0.tgz#2bf063ddee7c7891176981a2cc798e5754bc6970" - integrity sha512-6CYPa+JP2ftfRU2qkDK+UTVeQYosOg/2GbcjIcKPHfinyOLPVGXu/ovN86RP49Re5ndJK1N0kuiidFFuepc4ZQ== - -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@^10.0.0: - version "10.0.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06" - integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug== - -commander@^14.0.0: - version "14.0.3" - resolved "https://registry.yarnpkg.com/commander/-/commander-14.0.3.tgz#425d79b48f9af82fcd9e4fc1ea8af6c5ec07bbc2" - integrity sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw== - -commander@^2.12.1: - version "2.20.3" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" - integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== - -commander@^8.1.0: - version "8.3.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" - integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== - -commondir@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" - integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== - -compare-versions@^6.0.0: - version "6.1.1" - resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-6.1.1.tgz#7af3cc1099ba37d244b3145a9af5201b629148a9" - integrity sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg== - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== - -content-disposition@~0.5.4: - version "0.5.4" - resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" - integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== - dependencies: - safe-buffer "5.2.1" - -content-hash@^2.5.2: - version "2.5.2" - resolved "https://registry.yarnpkg.com/content-hash/-/content-hash-2.5.2.tgz#bbc2655e7c21f14fd3bfc7b7d4bfe6e454c9e211" - integrity sha512-FvIQKy0S1JaWV10sMsA7TRx8bpU+pqPkhbsfvOJAdjRXvYxEckAwQWGwtRjiaJfh+E0DvcWUGqcdjwMGFjsSdw== - dependencies: - cids "^0.7.1" - multicodec "^0.5.5" - multihashes "^0.4.15" - -content-type@~1.0.4, content-type@~1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" - integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== - -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" - integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== - -cookie-signature@~1.0.6: - version "1.0.7" - resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.7.tgz#ab5dd7ab757c54e60f37ef6550f481c426d10454" - integrity sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA== - -cookie@^0.4.1: - version "0.4.2" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" - integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== - -cookie@~0.7.1: - version "0.7.2" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.7.2.tgz#556369c472a2ba910f2979891b526b3436237ed7" - integrity sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w== - -cookiejar@^2.1.1: - version "2.1.4" - resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.4.tgz#ee669c1fea2cf42dc31585469d193fef0d65771b" - integrity sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw== - -core-js-pure@^3.0.1: - version "3.49.0" - resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.49.0.tgz#ff8436b7251a3832f5fdbbe3e10f7f2e58e51fb1" - integrity sha512-XM4RFka59xATyJv/cS3O3Kml72hQXUeGRuuTmMYFxwzc9/7C8OYTaIR/Ji+Yt8DXzsFLNhat15cE/JP15HrCgw== - -core-util-is@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ== - -core-util-is@~1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" - integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== - -cors@^2.8.1: - version "2.8.6" - resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.6.tgz#ff5dd69bd95e547503820d29aba4f8faf8dfec96" - integrity sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw== - dependencies: - object-assign "^4" - vary "^1" - -cosmiconfig@^5.0.7: - version "5.2.1" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" - integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA== - dependencies: - import-fresh "^2.0.0" - is-directory "^0.3.1" - js-yaml "^3.13.1" - parse-json "^4.0.0" - -cosmiconfig@^8.0.0: - version "8.3.6" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-8.3.6.tgz#060a2b871d66dba6c8538ea1118ba1ac16f5fae3" - integrity sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA== - dependencies: - import-fresh "^3.3.0" - js-yaml "^4.1.0" - parse-json "^5.2.0" - path-type "^4.0.0" - -crc-32@^1.2.0: - version "1.2.2" - resolved "https://registry.yarnpkg.com/crc-32/-/crc-32-1.2.2.tgz#3cad35a934b8bf71f25ca524b6da51fb7eace2ff" - integrity sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ== - -create-ecdh@^4.0.0: - version "4.0.4" - resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.4.tgz#d6e7f4bffa66736085a0762fd3a632684dabcc4e" - integrity sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A== - dependencies: - bn.js "^4.1.0" - elliptic "^6.5.3" - -create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" - integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== - dependencies: - cipher-base "^1.0.1" - inherits "^2.0.1" - md5.js "^1.3.4" - ripemd160 "^2.0.1" - sha.js "^2.4.0" - -create-hmac@^1.1.0, create-hmac@^1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" - integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== - dependencies: - cipher-base "^1.0.3" - create-hash "^1.1.0" - inherits "^2.0.1" - ripemd160 "^2.0.0" - safe-buffer "^5.0.1" - sha.js "^2.4.8" - -cross-spawn@^6.0.5: - version "6.0.6" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.6.tgz#30d0efa0712ddb7eb5a76e1e8721bffafa6b5d57" - integrity sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw== - dependencies: - nice-try "^1.0.4" - path-key "^2.0.1" - semver "^5.5.0" - shebang-command "^1.2.0" - which "^1.2.9" - -cross-spawn@^7.0.2, cross-spawn@^7.0.6: - 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" - -"crypt@>= 0.0.1": - version "0.0.2" - resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" - integrity sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow== - -crypto-browserify@3.12.0: - version "3.12.0" - resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" - integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== - dependencies: - browserify-cipher "^1.0.0" - browserify-sign "^4.0.0" - create-ecdh "^4.0.0" - create-hash "^1.1.0" - create-hmac "^1.1.0" - diffie-hellman "^5.0.0" - inherits "^2.0.1" - pbkdf2 "^3.0.3" - public-encrypt "^4.0.0" - randombytes "^2.0.0" - randomfill "^1.0.3" - -crypto@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/crypto/-/crypto-1.0.1.tgz#2af1b7cad8175d24c8a1b0778255794a21803037" - integrity sha512-VxBKmeNcqQdiUQUW2Tzq0t377b54N2bMtXO/qiLa+6eRRmmC4qT3D4OnTGoT/U6O9aklQ/jTwbOtRMTTY8G0Ig== - -d@1, d@^1.0.1, d@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/d/-/d-1.0.2.tgz#2aefd554b81981e7dccf72d6842ae725cb17e5de" - integrity sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw== - dependencies: - es5-ext "^0.10.64" - type "^2.7.2" - -dashdash@^1.12.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" - integrity sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g== - dependencies: - assert-plus "^1.0.0" - -death@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/death/-/death-1.1.0.tgz#01aa9c401edd92750514470b8266390c66c67318" - integrity sha512-vsV6S4KVHvTGxbEcij7hkWRv0It+sGGWVOM67dQde/o5Xjnr+KmLjxWJii2uEObIrt1CcM9w0Yaovx+iOlIL+w== - -debug@2.6.9, debug@^2.2.0: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - -debug@4, debug@^4.0.1, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4, debug@^4.3.5: - version "4.4.3" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a" - integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA== - dependencies: - ms "^2.1.3" - -debug@4.3.4: - version "4.3.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== - dependencies: - ms "2.1.2" - -debug@^3.1.0: - version "3.2.7" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" - integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== - dependencies: - ms "^2.1.1" - -decamelize@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" - integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== - -decode-uri-component@^0.2.0: - version "0.2.2" - resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9" - integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ== - -decompress-response@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" - integrity sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA== - dependencies: - mimic-response "^1.0.0" - -decompress-response@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" - integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== - dependencies: - mimic-response "^3.1.0" - -deep-eql@^4.1.2, deep-eql@^4.1.3: - version "4.1.4" - resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-4.1.4.tgz#d0d3912865911bb8fac5afb4e3acfa6a28dc72b7" - integrity sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg== - dependencies: - type-detect "^4.0.0" - -deep-extend@~0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" - integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== - -deep-is@^0.1.3, deep-is@~0.1.3: - version "0.1.4" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" - integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== - -deepmerge@^4.2.2: - version "4.3.1" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" - integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== - -defender-base-client@^1.44.0: - version "1.44.3" - resolved "https://registry.yarnpkg.com/defender-base-client/-/defender-base-client-1.44.3.tgz#c5ab770b24eec2b9ddcbb0f3cd859918faeafd3b" - integrity sha512-f8a2m8rlYkd+7sfqfnotkvW4dITBB4RVUF1XI1Gz7v3POszgXJIW0TKbVVs2xigmmEpmyCcRB3VnDw3VnQBvoA== - dependencies: - amazon-cognito-identity-js "^6.0.1" - async-retry "^1.3.3" - axios "^0.21.2" - lodash "^4.17.19" - node-fetch "^2.6.0" - -defer-to-connect@^1.0.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" - integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== - -defer-to-connect@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587" - integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== - -deferred-leveldown@~5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/deferred-leveldown/-/deferred-leveldown-5.3.0.tgz#27a997ad95408b61161aa69bd489b86c71b78058" - integrity sha512-a59VOT+oDy7vtAbLRCZwWgxu2BaCfd5Hk7wxJd48ei7I+nsg8Orlb9CLG0PMZienk9BSUKgeAqkO2+Lw+1+Ukw== - dependencies: - abstract-leveldown "~6.2.1" - inherits "^2.0.3" - -define-data-property@^1.0.1, define-data-property@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" - integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== - dependencies: - es-define-property "^1.0.0" - es-errors "^1.3.0" - gopd "^1.0.1" - -define-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.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" - integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== - dependencies: - define-data-property "^1.0.1" - has-property-descriptors "^1.0.0" - object-keys "^1.1.1" - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== - -depd@2.0.0, depd@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" - integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== - -des.js@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.1.0.tgz#1d37f5766f3bbff4ee9638e871a8768c173b81da" - integrity sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg== - dependencies: - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - -destroy@1.2.0, destroy@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" - integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== - -detect-libc@^2.0.3: - version "2.1.2" - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.1.2.tgz#689c5dcdc1900ef5583a4cb9f6d7b473742074ad" - integrity sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ== - -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.4" - resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.4.tgz#7a6dbfda325f25f07517e9b518f897c08332e07d" - integrity sha512-X07nttJQkwkfKfvTPG/KSnE2OMdcUCao6+eXF3wmnIQRn2aPAHH3VxDbDOdegkd6JbPsXqShpvEOHfAT+nCNwQ== - -diff@^5.2.0: - version "5.2.2" - resolved "https://registry.yarnpkg.com/diff/-/diff-5.2.2.tgz#0a4742797281d09cfa699b79ea32d27723623bad" - integrity sha512-vtcDfH3TOjP8UekytvnHH1o1P4FcUdt4eQ1Y+Abap1tk/OB2MWQvcwS2ClCd1zuIhc3JKOx6p3kod8Vfys3E+A== - -diffie-hellman@^5.0.0: - version "5.0.3" - resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" - integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== - dependencies: - bn.js "^4.1.0" - miller-rabin "^4.0.0" - randombytes "^2.0.0" - -difflib@^0.2.4: - version "0.2.4" - resolved "https://registry.yarnpkg.com/difflib/-/difflib-0.2.4.tgz#b5e30361a6db023176d562892db85940a718f47e" - integrity sha512-9YVwmMb0wQHQNr5J9m6BSj6fk4pfGITGQOOs+D9Fl+INODWFOfvhIU1hNv6GgR1RBoC/9NJcwu77zShxV0kT7w== - dependencies: - heap ">= 0.2.0" - -dir-glob@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" - integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== - dependencies: - path-type "^4.0.0" - -doctrine@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" - integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== - dependencies: - esutils "^2.0.2" - -dom-walk@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.2.tgz#0c548bef048f4d1f2a97249002236060daa3fd84" - integrity sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w== - -dotenv@10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-10.0.0.tgz#3d4227b8fb95f81096cdd2b66653fb2c7085ba81" - integrity sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q== - -dotenv@^16.3.1: - version "16.6.1" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.6.1.tgz#773f0e69527a8315c7285d5ee73c4459d20a8020" - integrity sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow== - -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: - call-bind-apply-helpers "^1.0.1" - es-errors "^1.3.0" - gopd "^1.2.0" - -duplexer3@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.5.tgz#0b5e4d7bad5de8901ea4440624c8e1d20099217e" - integrity sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA== - -eastasianwidth@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" - integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== - -ecc-jsbn@~0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" - integrity sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw== - dependencies: - jsbn "~0.1.0" - safer-buffer "^2.1.0" - -ee-first@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" - integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== - -elliptic@6.5.4: - version "6.5.4" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" - integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== - dependencies: - bn.js "^4.11.9" - brorand "^1.1.0" - hash.js "^1.0.0" - hmac-drbg "^1.0.1" - inherits "^2.0.4" - minimalistic-assert "^1.0.1" - minimalistic-crypto-utils "^1.0.1" - -elliptic@6.6.1, elliptic@^6.4.0, elliptic@^6.5.2, elliptic@^6.5.3, elliptic@^6.5.4, elliptic@^6.5.7, elliptic@^6.6.1: - 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" - -emitter-component@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/emitter-component/-/emitter-component-1.1.2.tgz#d65af5833dc7c682fd0ade35f902d16bc4bad772" - integrity sha512-QdXO3nXOzZB4pAjM0n6ZE+R9/+kPpECA/XSELIcc54NeYVnBqIk+4DFiBgK+8QbV3mdvTG6nedl7dTYgO+5wDw== - -emittery@0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.10.0.tgz#bb373c660a9d421bb44706ec4967ed50c02a8026" - integrity sha512-AGvFfs+d0JKCJQ4o01ASQLGPmSCxgfU9RFXvzPvZdjKK8oscynksuJhWrSTSw7j7Ep/sZct5b5ZhYCi8S/t0HQ== - -emoji-regex@^7.0.1: - version "7.0.3" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" - integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -emoji-regex@^9.2.2: - version "9.2.2" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" - integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== - -encode-utf8@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/encode-utf8/-/encode-utf8-1.0.3.tgz#f30fdd31da07fb596f281beb2f6b027851994cda" - integrity sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw== - -encodeurl@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-2.0.0.tgz#7b8ea898077d7e409d3ac45474ea38eaf0857a58" - integrity sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg== - -encoding-down@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/encoding-down/-/encoding-down-6.3.0.tgz#b1c4eb0e1728c146ecaef8e32963c549e76d082b" - integrity sha512-QKrV0iKR6MZVJV08QY0wp1e7vF6QbhnbQhb07bwpEyuz4uZiZgPlEGdkCROuFkUwdxlFaiPIhjyarH1ee/3vhw== - dependencies: - abstract-leveldown "^6.2.1" - inherits "^2.0.3" - level-codec "^9.0.0" - level-errors "^2.0.0" - -end-of-stream@^1.1.0: - version "1.4.5" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.5.tgz#7344d711dea40e0b74abc2ed49778743ccedb08c" - integrity sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg== - dependencies: - once "^1.4.0" - -enquirer@^2.3.0, enquirer@^2.3.6: - version "2.4.1" - resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.4.1.tgz#93334b3fbd74fc7097b224ab4a8fb7e40bf4ae56" - integrity sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ== - dependencies: - ansi-colors "^4.1.1" - strip-ansi "^6.0.1" - -env-paths@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" - integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== - -errno@~0.1.1: - version "0.1.8" - resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f" - integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A== - dependencies: - prr "~1.0.1" - -error-ex@^1.3.1: - version "1.3.4" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.4.tgz#b3a8d8bb6f92eecc1629e3e27d3c8607a8a32414" - integrity sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ== - dependencies: - is-arrayish "^0.2.1" - -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.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-module-lexer@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-2.0.0.tgz#f657cd7a9448dcdda9c070a3cb75e5dc1e85f5b1" - integrity sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw== - -es-object-atoms@^1.0.0, es-object-atoms@^1.1.1: - 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.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" - -es5-ext@^0.10.35, es5-ext@^0.10.62, es5-ext@^0.10.63, es5-ext@^0.10.64, es5-ext@~0.10.14: - version "0.10.64" - resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.64.tgz#12e4ffb48f1ba2ea777f1fcdd1918ef73ea21714" - integrity sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg== - dependencies: - es6-iterator "^2.0.3" - es6-symbol "^3.1.3" - esniff "^2.0.1" - next-tick "^1.1.0" - -es6-iterator@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" - integrity sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g== - dependencies: - d "1" - es5-ext "^0.10.35" - es6-symbol "^3.1.1" - -es6-symbol@^3.1.1, es6-symbol@^3.1.3: - version "3.1.4" - resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.4.tgz#f4e7d28013770b4208ecbf3e0bf14d3bcb557b8c" - integrity sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg== - dependencies: - d "^1.0.2" - ext "^1.7.0" - -escalade@^3.1.1: - version "3.2.0" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" - integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== - -escape-html@~1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" - integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== - -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.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== - -escodegen@1.8.x: - version "1.8.1" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.8.1.tgz#5a5b53af4693110bebb0867aa3430dd3b70a1018" - integrity sha512-yhi5S+mNTOuRvyW4gWlg5W1byMaQGWWSYHXsuFZ7GBo7tpyOwi2EdzMP/QWxh9hwkD2m+wDVHJsxhRIj+v/b/A== - dependencies: - esprima "^2.7.1" - estraverse "^1.9.1" - esutils "^2.0.2" - optionator "^0.8.1" - optionalDependencies: - source-map "~0.2.0" - -eslint-plugin-no-only-tests@3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-no-only-tests/-/eslint-plugin-no-only-tests-3.3.0.tgz#d9d42ccd4b5d099b4872fb5046cf95441188cfb5" - integrity sha512-brcKcxGnISN2CcVhXJ/kEQlNa0MEfGRtwKtWA16SkqXHKitaKIMrfemJKLKX1YqDU5C/5JY3PvZXd5jEW04e0Q== - -eslint-scope@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" - integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg== - dependencies: - esrecurse "^4.1.0" - estraverse "^4.1.1" - -eslint-scope@^7.2.2: - version "7.2.2" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f" - integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== - dependencies: - esrecurse "^4.3.0" - estraverse "^5.2.0" - -eslint-utils@^1.3.1: - version "1.4.3" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f" - integrity sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q== - dependencies: - eslint-visitor-keys "^1.1.0" - -eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" - integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== - -eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: - version "3.4.3" - 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@8.57.1: - version "8.57.1" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.57.1.tgz#7df109654aba7e3bbe5c8eae533c5e461d3c6ca9" - integrity sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA== - dependencies: - "@eslint-community/eslint-utils" "^4.2.0" - "@eslint-community/regexpp" "^4.6.1" - "@eslint/eslintrc" "^2.1.4" - "@eslint/js" "8.57.1" - "@humanwhocodes/config-array" "^0.13.0" - "@humanwhocodes/module-importer" "^1.0.1" - "@nodelib/fs.walk" "^1.2.8" - "@ungap/structured-clone" "^1.2.0" - ajv "^6.12.4" - chalk "^4.0.0" - cross-spawn "^7.0.2" - debug "^4.3.2" - doctrine "^3.0.0" - escape-string-regexp "^4.0.0" - eslint-scope "^7.2.2" - eslint-visitor-keys "^3.4.3" - espree "^9.6.1" - esquery "^1.4.2" - esutils "^2.0.2" - fast-deep-equal "^3.1.3" - file-entry-cache "^6.0.1" - find-up "^5.0.0" - glob-parent "^6.0.2" - globals "^13.19.0" - graphemer "^1.4.0" - ignore "^5.2.0" - imurmurhash "^0.1.4" - is-glob "^4.0.0" - is-path-inside "^3.0.3" - js-yaml "^4.1.0" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.4.1" - lodash.merge "^4.6.2" - minimatch "^3.1.2" - natural-compare "^1.4.0" - optionator "^0.9.3" - strip-ansi "^6.0.1" - text-table "^0.2.0" - -eslint@^5.6.0: - version "5.16.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-5.16.0.tgz#a1e3ac1aae4a3fbd8296fcf8f7ab7314cbb6abea" - integrity sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg== - dependencies: - "@babel/code-frame" "^7.0.0" - ajv "^6.9.1" - chalk "^2.1.0" - cross-spawn "^6.0.5" - debug "^4.0.1" - doctrine "^3.0.0" - eslint-scope "^4.0.3" - eslint-utils "^1.3.1" - eslint-visitor-keys "^1.0.0" - espree "^5.0.1" - esquery "^1.0.1" - esutils "^2.0.2" - file-entry-cache "^5.0.1" - functional-red-black-tree "^1.0.1" - glob "^7.1.2" - globals "^11.7.0" - ignore "^4.0.6" - import-fresh "^3.0.0" - imurmurhash "^0.1.4" - inquirer "^6.2.2" - js-yaml "^3.13.0" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.3.0" - lodash "^4.17.11" - minimatch "^3.0.4" - mkdirp "^0.5.1" - natural-compare "^1.4.0" - optionator "^0.8.2" - path-is-inside "^1.0.2" - progress "^2.0.0" - regexpp "^2.0.1" - semver "^5.5.1" - strip-ansi "^4.0.0" - strip-json-comments "^2.0.1" - table "^5.2.3" - text-table "^0.2.0" - -esniff@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/esniff/-/esniff-2.0.1.tgz#a4d4b43a5c71c7ec51c51098c1d8a29081f9b308" - integrity sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg== - dependencies: - d "^1.0.1" - es5-ext "^0.10.62" - event-emitter "^0.3.5" - type "^2.7.2" - -espree@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-5.0.1.tgz#5d6526fa4fc7f0788a5cf75b15f30323e2f81f7a" - integrity sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A== - dependencies: - acorn "^6.0.7" - acorn-jsx "^5.0.0" - eslint-visitor-keys "^1.0.0" - -espree@^9.6.0, espree@^9.6.1: - version "9.6.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" - integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== - dependencies: - acorn "^8.9.0" - acorn-jsx "^5.3.2" - eslint-visitor-keys "^3.4.1" - -esprima@2.7.x, esprima@^2.7.1: - version "2.7.3" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" - integrity sha512-OarPfz0lFCiW4/AV2Oy1Rp9qu0iusTKqykwTspGCZtPxmF81JR4MmIebvF1F9+UOKth2ZubLQ4XGGaU+hSn99A== - -esprima@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== - -esquery@^1.0.1, esquery@^1.4.2: - version "1.7.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.7.0.tgz#08d048f261f0ddedb5bae95f46809463d9c9496d" - integrity sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g== - dependencies: - estraverse "^5.1.0" - -esrecurse@^4.1.0, esrecurse@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" - integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== - dependencies: - estraverse "^5.2.0" - -estraverse@^1.9.1: - version "1.9.3" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44" - integrity sha512-25w1fMXQrGdoquWnScXZGckOv+Wes+JDnuN/+7ex3SauFRS72r2lFDec0EKPt2YD1wUJ/IrfEex+9yp4hfSOJA== - -estraverse@^4.1.1: - version "4.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" - integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== - -estraverse@^5.1.0, estraverse@^5.2.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" - integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== - -estree-walker@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" - integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== - -estree-walker@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-3.0.3.tgz#67c3e549ec402a487b4fc193d1953a524752340d" - integrity sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g== - dependencies: - "@types/estree" "^1.0.0" - -esutils@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== - -etag@~1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" - integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== - -eth-ens-namehash@2.0.8: - version "2.0.8" - resolved "https://registry.yarnpkg.com/eth-ens-namehash/-/eth-ens-namehash-2.0.8.tgz#229ac46eca86d52e0c991e7cb2aef83ff0f68bcf" - integrity sha512-VWEI1+KJfz4Km//dadyvBBoBeSQ0MHTXPvr8UIXiLW6IanxvAV+DmlZAijZwAyggqGUfwQBeHf7tc9wzc1piSw== - dependencies: - idna-uts46-hx "^2.3.1" - js-sha3 "^0.5.7" - -eth-lib@0.2.8: - version "0.2.8" - resolved "https://registry.yarnpkg.com/eth-lib/-/eth-lib-0.2.8.tgz#b194058bef4b220ad12ea497431d6cb6aa0623c8" - integrity sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw== - dependencies: - bn.js "^4.11.6" - elliptic "^6.4.0" - xhr-request-promise "^0.1.2" - -eth-lib@^0.1.26: - version "0.1.29" - resolved "https://registry.yarnpkg.com/eth-lib/-/eth-lib-0.1.29.tgz#0c11f5060d42da9f931eab6199084734f4dbd1d9" - integrity sha512-bfttrr3/7gG4E02HoWTDUcDDslN003OlOoBxk9virpAZQ1ja/jDgwkWB8QfJF7ojuEowrqy+lzp9VcJG7/k5bQ== - dependencies: - bn.js "^4.11.6" - elliptic "^6.4.0" - nano-json-stream-parser "^0.1.2" - servify "^0.1.12" - ws "^3.0.0" - xhr-request-promise "^0.1.2" - -eth2-keystore-js@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/eth2-keystore-js/-/eth2-keystore-js-1.0.8.tgz#f3ac4d6e6ec670d8d491dce25bfaf5b36475ed86" - integrity sha512-H5JLUeo7aiZs7zVAb+9gSJZZxfcx5na8zPxcgFbggNfac+atyO5H6KpvDUPJFRm/umHWM7++MdvS/q5Sbw+f9g== - dependencies: - "@types/node" "^15.12.2" - crypto "^1.0.1" - ethereumjs-util "^7.0.10" - ethereumjs-wallet "^1.0.1" - husky "^6.0.0" - scrypt-js "^3.0.1" - tslint "^6.1.3" - tslint-config-prettier "^1.18.0" - typescript "^4.3.2" - -ethereum-bloom-filters@^1.0.6: - version "1.2.0" - resolved "https://registry.yarnpkg.com/ethereum-bloom-filters/-/ethereum-bloom-filters-1.2.0.tgz#8294f074c1a6cbd32c39d2cc77ce86ff14797dab" - integrity sha512-28hyiE7HVsWubqhpVLVmZXFd4ITeHi+BUu05o9isf0GUpMtzBUi+8/gFrGaGYzvGAJQmJ3JKj77Mk9G98T84rA== - dependencies: - "@noble/hashes" "^1.4.0" - -ethereum-cryptography@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz#8d6143cfc3d74bf79bbd8edecdf29e4ae20dd191" - integrity sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ== - dependencies: - "@types/pbkdf2" "^3.0.0" - "@types/secp256k1" "^4.0.1" - blakejs "^1.1.0" - browserify-aes "^1.2.0" - bs58check "^2.1.2" - create-hash "^1.2.0" - create-hmac "^1.1.7" - hash.js "^1.1.7" - keccak "^3.0.0" - pbkdf2 "^3.0.17" - randombytes "^2.1.0" - safe-buffer "^5.1.2" - scrypt-js "^3.0.0" - secp256k1 "^4.0.1" - setimmediate "^1.0.5" - -ethereum-cryptography@^1.0.3: - version "1.2.0" - resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-1.2.0.tgz#5ccfa183e85fdaf9f9b299a79430c044268c9b3a" - integrity sha512-6yFQC9b5ug6/17CQpCyE3k9eKBMdhyVjzUy1WkiuY/E4vj/SXDBbCw8QEIaXqf0Mf2SnY6RmpDcwlUmBSS0EJw== - dependencies: - "@noble/hashes" "1.2.0" - "@noble/secp256k1" "1.7.1" - "@scure/bip32" "1.1.5" - "@scure/bip39" "1.1.1" - -ethereum-cryptography@^2.0.0, ethereum-cryptography@^2.1.2, ethereum-cryptography@^2.1.3, ethereum-cryptography@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-2.2.1.tgz#58f2810f8e020aecb97de8c8c76147600b0b8ccf" - integrity sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg== - dependencies: - "@noble/curves" "1.4.2" - "@noble/hashes" "1.4.0" - "@scure/bip32" "1.4.0" - "@scure/bip39" "1.3.0" - -ethereum-waffle@4.0.10: - version "4.0.10" - resolved "https://registry.yarnpkg.com/ethereum-waffle/-/ethereum-waffle-4.0.10.tgz#f1ef1564c0155236f1a66c6eae362a5d67c9f64c" - integrity sha512-iw9z1otq7qNkGDNcMoeNeLIATF9yKl1M8AIeu42ElfNBplq0e+5PeasQmm8ybY/elkZ1XyRO0JBQxQdVRb8bqQ== - dependencies: - "@ethereum-waffle/chai" "4.0.10" - "@ethereum-waffle/compiler" "4.0.3" - "@ethereum-waffle/mock-contract" "4.0.4" - "@ethereum-waffle/provider" "4.0.5" - solc "0.8.15" - typechain "^8.0.0" - -ethereumjs-abi@0.6.8: - version "0.6.8" - resolved "https://registry.yarnpkg.com/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz#71bc152db099f70e62f108b7cdfca1b362c6fcae" - integrity sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA== - dependencies: - bn.js "^4.11.8" - ethereumjs-util "^6.0.0" - -ethereumjs-util@7.1.3: - version "7.1.3" - resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-7.1.3.tgz#b55d7b64dde3e3e45749e4c41288238edec32d23" - integrity sha512-y+82tEbyASO0K0X1/SRhbJJoAlfcvq8JbrG4a5cjrOks7HS/36efU/0j2flxCPOUM++HFahk33kr/ZxyC4vNuw== - dependencies: - "@types/bn.js" "^5.1.0" - bn.js "^5.1.2" - create-hash "^1.1.2" - ethereum-cryptography "^0.1.3" - rlp "^2.2.4" - -ethereumjs-util@^6.0.0: - version "6.2.1" - resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz#fcb4e4dd5ceacb9d2305426ab1a5cd93e3163b69" - integrity sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw== - dependencies: - "@types/bn.js" "^4.11.3" - bn.js "^4.11.0" - create-hash "^1.1.2" - elliptic "^6.5.2" - ethereum-cryptography "^0.1.3" - ethjs-util "0.1.6" - rlp "^2.2.3" - -ethereumjs-util@^7.0.10, ethereumjs-util@^7.0.3, ethereumjs-util@^7.1.0, ethereumjs-util@^7.1.1, ethereumjs-util@^7.1.2, ethereumjs-util@^7.1.3, ethereumjs-util@^7.1.4, ethereumjs-util@^7.1.5: - version "7.1.5" - resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz#9ecf04861e4fbbeed7465ece5f23317ad1129181" - integrity sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg== - dependencies: - "@types/bn.js" "^5.1.0" - bn.js "^5.1.2" - create-hash "^1.1.2" - ethereum-cryptography "^0.1.3" - rlp "^2.2.4" - -ethereumjs-wallet@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/ethereumjs-wallet/-/ethereumjs-wallet-1.0.2.tgz#2c000504b4c71e8f3782dabe1113d192522e99b6" - integrity sha512-CCWV4RESJgRdHIvFciVQFnCHfqyhXWchTPlkfp28Qc53ufs+doi5I/cV2+xeK9+qEo25XCWfP9MiL+WEPAZfdA== - dependencies: - aes-js "^3.1.2" - bs58check "^2.1.2" - ethereum-cryptography "^0.1.3" - ethereumjs-util "^7.1.2" - randombytes "^2.1.0" - scrypt-js "^3.0.1" - utf8 "^3.0.0" - uuid "^8.3.2" - -ethers@5.7.2: - 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@^5.5.3, ethers@^5.6.1, ethers@^5.7.2: - version "5.8.0" - resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.8.0.tgz#97858dc4d4c74afce83ea7562fe9493cedb4d377" - integrity sha512-DUq+7fHrCg1aPDFCHx6UIPb3nmt2XMpM7Y/g2gLhsl3lIBqeAfOJIl1qEvRf2uq3BiKxmh6Fh5pfp2ieyek7Kg== - dependencies: - "@ethersproject/abi" "5.8.0" - "@ethersproject/abstract-provider" "5.8.0" - "@ethersproject/abstract-signer" "5.8.0" - "@ethersproject/address" "5.8.0" - "@ethersproject/base64" "5.8.0" - "@ethersproject/basex" "5.8.0" - "@ethersproject/bignumber" "5.8.0" - "@ethersproject/bytes" "5.8.0" - "@ethersproject/constants" "5.8.0" - "@ethersproject/contracts" "5.8.0" - "@ethersproject/hash" "5.8.0" - "@ethersproject/hdnode" "5.8.0" - "@ethersproject/json-wallets" "5.8.0" - "@ethersproject/keccak256" "5.8.0" - "@ethersproject/logger" "5.8.0" - "@ethersproject/networks" "5.8.0" - "@ethersproject/pbkdf2" "5.8.0" - "@ethersproject/properties" "5.8.0" - "@ethersproject/providers" "5.8.0" - "@ethersproject/random" "5.8.0" - "@ethersproject/rlp" "5.8.0" - "@ethersproject/sha2" "5.8.0" - "@ethersproject/signing-key" "5.8.0" - "@ethersproject/solidity" "5.8.0" - "@ethersproject/strings" "5.8.0" - "@ethersproject/transactions" "5.8.0" - "@ethersproject/units" "5.8.0" - "@ethersproject/wallet" "5.8.0" - "@ethersproject/web" "5.8.0" - "@ethersproject/wordlists" "5.8.0" - -ethers@^6.13.2, ethers@^6.9.0: - version "6.16.0" - resolved "https://registry.yarnpkg.com/ethers/-/ethers-6.16.0.tgz#fff9b4f05d7a359c774ad6e91085a800f7fccf65" - integrity sha512-U1wulmetNymijEhpSEQ7Ct/P/Jw9/e7R1j5XIbPRydgV2DjLVMsULDlNksq3RQnFgKoLlZf88ijYtWEXcPa07A== - dependencies: - "@adraffy/ens-normalize" "1.10.1" - "@noble/curves" "1.2.0" - "@noble/hashes" "1.3.2" - "@types/node" "22.7.5" - aes-js "4.0.0-beta.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: - version "0.1.6" - resolved "https://registry.yarnpkg.com/ethjs-util/-/ethjs-util-0.1.6.tgz#f308b62f185f9fe6237132fb2a9818866a5cd536" - integrity sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w== - dependencies: - is-hex-prefixed "1.0.0" - strip-hex-prefix "1.0.0" - -event-emitter@^0.3.5: - version "0.3.5" - resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39" - integrity sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA== - dependencies: - d "1" - es5-ext "~0.10.14" - -eventemitter3@4.0.4: - version "4.0.4" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.4.tgz#b5463ace635a083d018bdc7c917b4c5f10a85384" - integrity sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ== - -eventemitter3@5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-5.0.1.tgz#53f5ffd0a492ac800721bb42c66b841de96423c4" - integrity sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA== - -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== - -eventsource@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-2.0.2.tgz#76dfcc02930fb2ff339520b6d290da573a9e8508" - integrity sha512-IzUmBGPR3+oUG9dUeXynyNmf91/3zUSJg1lCktzKw47OXuhco54U3r9B7O4XX+Rb1Itm9OZ2b0RkTs10bICOxA== - -evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" - integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== - dependencies: - md5.js "^1.3.4" - safe-buffer "^5.1.1" - -expect-type@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/expect-type/-/expect-type-1.3.0.tgz#0d58ed361877a31bbc4dd6cf71bbfef7faf6bd68" - integrity sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA== - -exponential-backoff@~3.1.1: - version "3.1.3" - resolved "https://registry.yarnpkg.com/exponential-backoff/-/exponential-backoff-3.1.3.tgz#51cf92c1c0493c766053f9d3abee4434c244d2f6" - integrity sha512-ZgEeZXj30q+I0EN+CbSSpIyPaJ5HVQD18Z1m+u1FXbAeT94mr1zw50q4q6jiiC447Nl/YTcIYSAftiGqetwXCA== - -express@^4.14.0: - version "4.22.1" - resolved "https://registry.yarnpkg.com/express/-/express-4.22.1.tgz#1de23a09745a4fffdb39247b344bb5eaff382069" - integrity sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g== - dependencies: - accepts "~1.3.8" - array-flatten "1.1.1" - body-parser "~1.20.3" - content-disposition "~0.5.4" - content-type "~1.0.4" - cookie "~0.7.1" - cookie-signature "~1.0.6" - debug "2.6.9" - depd "2.0.0" - encodeurl "~2.0.0" - escape-html "~1.0.3" - etag "~1.8.1" - finalhandler "~1.3.1" - fresh "~0.5.2" - http-errors "~2.0.0" - merge-descriptors "1.0.3" - methods "~1.1.2" - on-finished "~2.4.1" - parseurl "~1.3.3" - path-to-regexp "~0.1.12" - proxy-addr "~2.0.7" - qs "~6.14.0" - range-parser "~1.2.1" - safe-buffer "5.2.1" - send "~0.19.0" - serve-static "~1.16.2" - setprototypeof "1.2.0" - statuses "~2.0.1" - type-is "~1.6.18" - utils-merge "1.0.1" - vary "~1.1.2" - -ext@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/ext/-/ext-1.7.0.tgz#0ea4383c0103d60e70be99e9a7f11027a33c4f5f" - integrity sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw== - dependencies: - type "^2.7.2" - -extend@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" - integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== - -external-editor@^3.0.3: - version "3.1.0" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" - integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== - dependencies: - chardet "^0.7.0" - iconv-lite "^0.4.24" - tmp "^0.0.33" - -extsprintf@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" - integrity sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g== - -extsprintf@^1.2.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07" - integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA== - -fast-base64-decode@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fast-base64-decode/-/fast-base64-decode-1.0.0.tgz#b434a0dd7d92b12b43f26819300d2dafb83ee418" - integrity sha512-qwaScUgUGBYeDNRnbc/KyllVU88Jk1pRHPStuF/lO7B0/RTRLj7U0lkdTAutlBblY08rwZDff6tNU9cjv6j//Q== - -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" - integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== - -fast-diff@^1.1.2, fast-diff@^1.2.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.3.0.tgz#ece407fa550a64d638536cd727e129c61616e0f0" - integrity sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw== - -fast-glob@^3.0.3: - 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: - 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== - -fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== - -fast-uri@^3.0.1: - version "3.1.0" - resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-3.1.0.tgz#66eecff6c764c0df9b762e62ca7edcfb53b4edfa" - integrity sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA== - -fast-xml-builder@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/fast-xml-builder/-/fast-xml-builder-1.1.4.tgz#0c407a1d9d5996336c0cd76f7ff785cac6413017" - integrity sha512-f2jhpN4Eccy0/Uz9csxh3Nu6q4ErKxf0XIsasomfOihuSUa3/xw6w8dnOtCDgEItQFJG8KyXPzQXzcODDrrbOg== - dependencies: - path-expression-matcher "^1.1.3" - -fast-xml-parser@4.2.5: - version "4.2.5" - resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-4.2.5.tgz#a6747a09296a6cb34f2ae634019bf1738f3b421f" - integrity sha512-B9/wizE4WngqQftFPmdaMYlXoJlJOYxGQOanC77fq9k8+Z0v5dDSVh+3glErdIROP//s/jgb7ZuxKfB8nVyo0g== - dependencies: - strnum "^1.0.5" - -fast-xml-parser@5.5.8: - version "5.5.8" - resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-5.5.8.tgz#929571ed8c5eb96e6d9bd572ba14fc4b84875716" - integrity sha512-Z7Fh2nVQSb2d+poDViM063ix2ZGt9jmY1nWhPfHBOK2Hgnb/OW3P4Et3P/81SEej0J7QbWtJqxO05h8QYfK7LQ== - dependencies: - fast-xml-builder "^1.1.4" - path-expression-matcher "^1.2.0" - strnum "^2.2.0" - -fastq@^1.6.0: - version "1.20.1" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.20.1.tgz#ca750a10dc925bc8b18839fd203e3ef4b3ced675" - integrity sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw== - dependencies: - reusify "^1.0.4" - -fdir@^6.2.0, fdir@^6.5.0: - version "6.5.0" - resolved "https://registry.yarnpkg.com/fdir/-/fdir-6.5.0.tgz#ed2ab967a331ade62f18d077dae192684d50d350" - integrity sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg== - -figlet@^1.5.2: - version "1.11.0" - resolved "https://registry.yarnpkg.com/figlet/-/figlet-1.11.0.tgz#17b8a438ac75bfdbfbae79ecbc422e6e98d383fa" - integrity sha512-EEx3OS/l2bFqcUNN2NM9FPJp8vAMrgbCxsbl2hbcJNNxOEwVe3mEzrhan7TbJQViZa8mMqhihlbCaqD+LyYKTQ== - dependencies: - commander "^14.0.0" - -figures@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" - integrity sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA== - dependencies: - escape-string-regexp "^1.0.5" - -file-entry-cache@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" - integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g== - dependencies: - flat-cache "^2.0.1" - -file-entry-cache@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" - integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== - dependencies: - flat-cache "^3.0.4" - -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" - -finalhandler@~1.3.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.3.2.tgz#1ebc2228fc7673aac4a472c310cc05b77d852b88" - integrity sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg== - dependencies: - debug "2.6.9" - encodeurl "~2.0.0" - escape-html "~1.0.3" - on-finished "~2.4.1" - parseurl "~1.3.3" - statuses "~2.0.2" - unpipe "~1.0.0" - -find-replace@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/find-replace/-/find-replace-3.0.0.tgz#3e7e23d3b05167a76f770c9fbd5258b0def68c38" - integrity sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ== - dependencies: - array-back "^3.0.1" - -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" - integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== - dependencies: - locate-path "^6.0.0" - path-exists "^4.0.0" - -flat-cache@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" - integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA== - dependencies: - flatted "^2.0.0" - rimraf "2.6.3" - write "1.0.3" - -flat-cache@^3.0.4: - version "3.2.0" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.2.0.tgz#2c0c2d5040c99b1632771a9d105725c0115363ee" - integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw== - dependencies: - flatted "^3.2.9" - keyv "^4.5.3" - rimraf "^3.0.2" - -flat@^5.0.2: - version "5.0.2" - resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" - integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== - -flatted@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" - integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA== - -flatted@^3.2.9: - version "3.4.2" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.4.2.tgz#f5c23c107f0f37de8dbdf24f13722b3b98d52726" - integrity sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA== - -fmix@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/fmix/-/fmix-0.1.0.tgz#c7bbf124dec42c9d191cfb947d0a9778dd986c0c" - integrity sha512-Y6hyofImk9JdzU8k5INtTXX1cu8LDlePWDFU5sftm9H+zKCr5SGrVjdhkvsim646cw5zD0nADj8oHyXMZmCZ9w== - dependencies: - imul "^1.0.0" - -follow-redirects@^1.12.1, follow-redirects@^1.14.0, follow-redirects@^1.15.0, follow-redirects@^1.15.11: - version "1.15.11" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.11.tgz#777d73d72a92f8ec4d2e410eb47352a56b8e8340" - integrity sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ== - -for-each@^0.3.5: - version "0.3.5" - resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.5.tgz#d650688027826920feeb0af747ee7b9421a41d47" - integrity sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg== - dependencies: - is-callable "^1.2.7" - -foreground-child@^3.1.0, foreground-child@^3.3.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.3.1.tgz#32e8e9ed1b68a3497befb9ac2b6adf92a638576f" - integrity sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw== - dependencies: - cross-spawn "^7.0.6" - signal-exit "^4.0.1" - -forever-agent@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" - integrity sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw== - -form-data@^4.0.0, form-data@^4.0.4, form-data@^4.0.5: - version "4.0.5" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.5.tgz#b49e48858045ff4cbf6b03e1805cebcad3679053" - integrity sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.8" - es-set-tostringtag "^2.1.0" - hasown "^2.0.2" - mime-types "^2.1.12" - -form-data@~2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" - integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.6" - mime-types "^2.1.12" - -forwarded@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" - integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== - -fp-ts@1.19.3: - version "1.19.3" - resolved "https://registry.yarnpkg.com/fp-ts/-/fp-ts-1.19.3.tgz#261a60d1088fbff01f91256f91d21d0caaaaa96f" - integrity sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg== - -fp-ts@^1.0.0: - version "1.19.5" - resolved "https://registry.yarnpkg.com/fp-ts/-/fp-ts-1.19.5.tgz#3da865e585dfa1fdfd51785417357ac50afc520a" - integrity sha512-wDNqTimnzs8QqpldiId9OavWK2NptormjXnRJTQecNjzwfyp6P/8s/zG8e4h3ja3oqkKaY72UlTjQYt/1yXf9A== - -fresh@~0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" - integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== - -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@^10.0.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" - integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fs-extra@^11.2.0: - version "11.3.4" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.3.4.tgz#ab6934eca8bcf6f7f6b82742e33591f86301d6fc" - integrity sha512-CTXd6rk/M3/ULNQj8FBqBWHYBVYybQ3VPBw0xGKFe3tuH7ytT6ACnvzpIQ3UZtB8yvUKC2cXn1a+x+5EVQLovA== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fs-extra@^4.0.2: - version "4.0.3" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94" - integrity sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg== - dependencies: - graceful-fs "^4.1.2" - jsonfile "^4.0.0" - universalify "^0.1.0" - -fs-extra@^7.0.0, fs-extra@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" - integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== - dependencies: - graceful-fs "^4.1.2" - jsonfile "^4.0.0" - universalify "^0.1.0" - -fs-extra@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" - integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^4.0.0" - universalify "^0.1.0" - -fs-minipass@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" - integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA== - dependencies: - minipass "^2.6.0" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== - -fsevents@~2.3.2, fsevents@~2.3.3: - version "2.3.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" - integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== - -function-bind@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" - integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== - -functional-red-black-tree@^1.0.1, functional-red-black-tree@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" - integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g== - -ganache@7.4.3: - version "7.4.3" - resolved "https://registry.yarnpkg.com/ganache/-/ganache-7.4.3.tgz#e995f1250697264efbb34d4241c374a2b0271415" - integrity sha512-RpEDUiCkqbouyE7+NMXG26ynZ+7sGiODU84Kz+FVoXUnQ4qQM4M8wif3Y4qUCt+D/eM1RVeGq0my62FPD6Y1KA== - dependencies: - "@trufflesuite/bigint-buffer" "1.1.10" - "@types/bn.js" "^5.1.0" - "@types/lru-cache" "5.1.1" - "@types/seedrandom" "3.0.1" - emittery "0.10.0" - keccak "3.0.2" - leveldown "6.1.0" - secp256k1 "4.0.3" - optionalDependencies: - bufferutil "4.0.5" - utf-8-validate "5.0.7" - -generator-function@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/generator-function/-/generator-function-2.0.1.tgz#0e75dd410d1243687a0ba2e951b94eedb8f737a2" - integrity sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g== - -get-caller-file@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" - integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== - -get-func-name@^2.0.0, 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.2.4, get-intrinsic@^1.2.5, get-intrinsic@^1.2.6, get-intrinsic@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01" - integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ== - dependencies: - call-bind-apply-helpers "^1.0.2" - es-define-property "^1.0.1" - es-errors "^1.3.0" - es-object-atoms "^1.1.1" - function-bind "^1.1.2" - get-proto "^1.0.1" - gopd "^1.2.0" - has-symbols "^1.1.0" - hasown "^2.0.2" - math-intrinsics "^1.1.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-random-values@^1.2.0: - version "1.2.2" - resolved "https://registry.yarnpkg.com/get-random-values/-/get-random-values-1.2.2.tgz#f1d944d0025433d53a2bd9941b9e975d98a2f7ff" - integrity sha512-lMyPjQyl0cNNdDf2oR+IQ/fM3itDvpoHy45Ymo2r0L1EjazeSl13SfbKZs7KtZ/3MDCeueiaJiuOEfKqRTsSgA== - dependencies: - global "^4.4.0" - -get-stream@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" - integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== - dependencies: - pump "^3.0.0" - -get-stream@^5.1.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" - integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== - dependencies: - pump "^3.0.0" - -getpass@^0.1.1: - version "0.1.7" - resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" - integrity sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng== - dependencies: - assert-plus "^1.0.0" - -ghost-testrpc@^0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/ghost-testrpc/-/ghost-testrpc-0.0.2.tgz#c4de9557b1d1ae7b2d20bbe474a91378ca90ce92" - integrity sha512-i08dAEgJ2g8z5buJIrCTduwPIhih3DP+hOCTyyryikfV8T0bNvHnGXO67i0DD1H4GBDETTclPy9njZbfluQYrQ== - dependencies: - chalk "^2.4.2" - node-emoji "^1.10.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" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - -glob-parent@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" - integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== - dependencies: - is-glob "^4.0.3" - -glob@7.1.7: - version "7.1.7" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" - integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== - 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@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@^10.3.10: - version "10.5.0" - resolved "https://registry.yarnpkg.com/glob/-/glob-10.5.0.tgz#8ec0355919cd3338c28428a23d4f24ecc5fe738c" - integrity sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg== - dependencies: - foreground-child "^3.1.0" - jackspeak "^3.1.2" - minimatch "^9.0.4" - minipass "^7.1.2" - package-json-from-dist "^1.0.0" - path-scurry "^1.11.1" - -glob@^11.0.0: - version "11.1.0" - resolved "https://registry.yarnpkg.com/glob/-/glob-11.1.0.tgz#4f826576e4eb99c7dad383793d2f9f08f67e50a6" - integrity sha512-vuNwKSaKiqm7g0THUBu2x7ckSs3XJLXE+2ssL7/MfTGPLLcrJQ/4Uq1CjPTtO5cCIiRxqvN6Twy1qOwhL0Xjcw== - dependencies: - foreground-child "^3.3.1" - jackspeak "^4.1.1" - minimatch "^10.1.1" - minipass "^7.1.2" - package-json-from-dist "^1.0.0" - path-scurry "^2.0.0" - -glob@^5.0.15: - version "5.0.15" - resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" - integrity sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA== - dependencies: - inflight "^1.0.4" - inherits "2" - minimatch "2 || 3" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^7.0.0, glob@^7.1.1, glob@^7.1.2, 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== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.1.1" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^8.0.3, glob@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" - integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^5.0.1" - once "^1.3.0" - -glob@^9.2.0: - version "9.3.5" - resolved "https://registry.yarnpkg.com/glob/-/glob-9.3.5.tgz#ca2ed8ca452781a3009685607fdf025a899dfe21" - integrity sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q== - dependencies: - fs.realpath "^1.0.0" - minimatch "^8.0.2" - minipass "^4.2.4" - path-scurry "^1.6.1" - -global-modules@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" - integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A== - dependencies: - global-prefix "^3.0.0" - -global-prefix@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97" - integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg== - dependencies: - ini "^1.3.5" - kind-of "^6.0.2" - which "^1.3.1" - -global@^4.4.0, global@~4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/global/-/global-4.4.0.tgz#3e7b105179006a323ed71aafca3e9c57a5cc6406" - integrity sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w== - dependencies: - min-document "^2.19.0" - process "^0.11.10" - -globals@^11.7.0: - version "11.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" - integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== - -globals@^13.19.0: - version "13.24.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171" - integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ== - dependencies: - type-fest "^0.20.2" - -globby@^10.0.1: - version "10.0.2" - resolved "https://registry.yarnpkg.com/globby/-/globby-10.0.2.tgz#277593e745acaa4646c3ab411289ec47a0392543" - integrity sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg== - dependencies: - "@types/glob" "^7.1.1" - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.0.3" - glob "^7.1.3" - ignore "^5.1.1" - merge2 "^1.2.3" - slash "^3.0.0" - -gopd@^1.0.1, 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== - -got@9.6.0: - version "9.6.0" - resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" - integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q== - dependencies: - "@sindresorhus/is" "^0.14.0" - "@szmarczak/http-timer" "^1.1.2" - cacheable-request "^6.0.0" - decompress-response "^3.3.0" - duplexer3 "^0.1.4" - get-stream "^4.1.0" - lowercase-keys "^1.0.1" - mimic-response "^1.0.1" - p-cancelable "^1.0.0" - to-readable-stream "^1.0.0" - url-parse-lax "^3.0.0" - -got@^11.8.5: - version "11.8.6" - resolved "https://registry.yarnpkg.com/got/-/got-11.8.6.tgz#276e827ead8772eddbcfc97170590b841823233a" - integrity sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g== - dependencies: - "@sindresorhus/is" "^4.0.0" - "@szmarczak/http-timer" "^4.0.5" - "@types/cacheable-request" "^6.0.1" - "@types/responselike" "^1.0.0" - cacheable-lookup "^5.0.3" - cacheable-request "^7.0.2" - decompress-response "^6.0.0" - http2-wrapper "^1.0.0-beta.5.2" - lowercase-keys "^2.0.0" - p-cancelable "^2.0.0" - responselike "^2.0.0" - -graceful-fs@^4.1.2, 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" - integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== - -graphemer@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" - integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== - -handlebars@^4.0.1: - version "4.7.9" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.9.tgz#6f139082ab58dc4e5a0e51efe7db5ae890d56a0f" - integrity sha512-4E71E0rpOaQuJR2A3xDZ+GM1HyWYv1clR58tC8emQNeQe3RH7MAzSbat+V0wG78LQBo6m6bzSG/L4pBuCsgnUQ== - 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" - -har-schema@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" - integrity sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q== - -har-validator@~5.1.3: - version "5.1.5" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" - integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== - dependencies: - ajv "^6.12.3" - har-schema "^2.0.0" - -hardhat-contract-sizer@2.10.0: - version "2.10.0" - resolved "https://registry.yarnpkg.com/hardhat-contract-sizer/-/hardhat-contract-sizer-2.10.0.tgz#72646f43bfe50e9a5702c9720c9bc3e77d93a2c9" - integrity sha512-QiinUgBD5MqJZJh1hl1jc9dNnpJg7eE/w4/4GEnrcmZJJTDbVFNe3+/3Ep24XqISSkYxRz36czcPHKHd/a0dwA== - dependencies: - chalk "^4.0.0" - cli-table3 "^0.6.0" - strip-ansi "^6.0.0" - -hardhat-deploy-ethers@0.3.0-beta.13: - version "0.3.0-beta.13" - resolved "https://registry.yarnpkg.com/hardhat-deploy-ethers/-/hardhat-deploy-ethers-0.3.0-beta.13.tgz#b96086ff768ddf69928984d5eb0a8d78cfca9366" - integrity sha512-PdWVcKB9coqWV1L7JTpfXRCI91Cgwsm7KLmBcwZ8f0COSm1xtABHZTyz3fvF6p42cTnz1VM0QnfDvMFlIRkSNw== - -hardhat-deploy@0.11.30: - version "0.11.30" - resolved "https://registry.yarnpkg.com/hardhat-deploy/-/hardhat-deploy-0.11.30.tgz#d47203b584446dce8136ac6d0a96fce2827fb532" - integrity sha512-FpMP1zSa24NEARVh/vwFCJJa9Gws3SBRZbVIDYMIvleoH3yOwFcdWY68zfGoxrm4kRHNcaiVNAXVFTm0enKR0A== - dependencies: - "@ethersproject/abi" "^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/contracts" "^5.7.0" - "@ethersproject/providers" "^5.7.2" - "@ethersproject/solidity" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - "@ethersproject/wallet" "^5.7.0" - "@types/qs" "^6.9.7" - axios "^0.21.1" - chalk "^4.1.2" - chokidar "^3.5.2" - debug "^4.3.2" - enquirer "^2.3.6" - ethers "^5.5.3" - form-data "^4.0.0" - fs-extra "^10.0.0" - match-all "^1.2.6" - murmur-128 "^0.2.1" - qs "^6.9.4" - zksync-web3 "^0.14.3" - -hardhat-gas-reporter@2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/hardhat-gas-reporter/-/hardhat-gas-reporter-2.3.0.tgz#8605131a9130925b2f19a77576f93a637a2911d8" - integrity sha512-ySdA+044xMQv1BlJu5CYXToHzMexKFfIWxlQTBNNoerx1x96+d15IMdN01iQZ/TJ7NH2V5sU73bz77LoS/PEVw== - dependencies: - "@ethersproject/abi" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/units" "^5.7.0" - "@solidity-parser/parser" "^0.20.1" - axios "^1.6.7" - brotli-wasm "^2.0.1" - chalk "4.1.2" - cli-table3 "^0.6.3" - ethereum-cryptography "^2.1.3" - glob "^10.3.10" - jsonschema "^1.4.1" - lodash "^4.17.21" - markdown-table "2.0.0" - sha1 "^1.1.1" - viem "^2.27.0" - -hardhat-tracer@3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/hardhat-tracer/-/hardhat-tracer-3.2.1.tgz#1d8172dd41229fb09d66a8dcadc73bbb19c928da" - integrity sha512-nCRCi8zQYDkNw9xDngokbmBmBDNuX9BadgvoRNVgpVpFkriRirdBVinYfBc7P+vufZhNNOjxyIDOPQs+ViRN9Q== - dependencies: - chalk "^4.1.2" - debug "^4.3.4" - ethers "^5.6.1" - semver "^7.6.2" - -hardhat@2.26.2: - version "2.26.2" - resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.26.2.tgz#e331ad9c64730d00e1c71217a0161f204796b02d" - integrity sha512-uIETdC1MAWSnu+48B+583r3b8JqHtkBGEiXoAPV5hcXYGkCW5Fnnpn7SIgPa8owhObm9oUqIqMXMJ6H92N7Pyg== - dependencies: - "@ethereumjs/util" "^9.1.0" - "@ethersproject/abi" "^5.1.2" - "@nomicfoundation/edr" "^0.11.3" - "@nomicfoundation/solidity-analyzer" "^0.1.0" - "@sentry/node" "^5.18.1" - adm-zip "^0.4.16" - aggregate-error "^3.0.0" - ansi-escapes "^4.3.0" - boxen "^5.1.2" - 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" - find-up "^5.0.0" - fp-ts "1.19.3" - fs-extra "^7.0.1" - 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" - micro-eth-signer "^0.14.0" - 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.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" - ws "^7.4.6" - -has-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" - integrity sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA== - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== - -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" - integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== - dependencies: - es-define-property "^1.0.0" - -has-symbols@^1.0.3, 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.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" - integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== - dependencies: - has-symbols "^1.0.3" - -hash-base@^3.0.0, hash-base@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.2.tgz#79d72def7611c3f6e3c3b5730652638001b10a74" - integrity sha512-Bb33KbowVTIj5s7Ked1OsqHUeCpz//tPwR+E2zJgJKo9Z5XolZ9b6bdUgjmYlwnWhoOQKoTd1TYToZGn5mAYOg== - dependencies: - inherits "^2.0.4" - readable-stream "^2.3.8" - safe-buffer "^5.2.1" - to-buffer "^1.2.1" - -hash.js@1.1.7, hash.js@^1.0.0, hash.js@^1.0.3, hash.js@^1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" - integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== - dependencies: - inherits "^2.0.3" - minimalistic-assert "^1.0.1" - -hasown@^2.0.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, he@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" - integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== - -"heap@>= 0.2.0": - version "0.2.7" - resolved "https://registry.yarnpkg.com/heap/-/heap-0.2.7.tgz#1e6adf711d3f27ce35a81fe3b7bd576c2260a8fc" - integrity sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg== - -hmac-drbg@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" - integrity sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg== - dependencies: - hash.js "^1.0.3" - minimalistic-assert "^1.0.0" - minimalistic-crypto-utils "^1.0.1" - -hosted-git-info@^2.6.0: - 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== - -http-cache-semantics@^4.0.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz#205f4db64f8562b76a4ff9235aa5279839a09dd5" - integrity sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ== - -http-errors@~2.0.0, http-errors@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.1.tgz#36d2f65bc909c8790018dd36fb4d93da6caae06b" - integrity sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ== - dependencies: - depd "~2.0.0" - inherits "~2.0.4" - setprototypeof "~1.2.0" - statuses "~2.0.2" - toidentifier "~1.0.1" - -http-https@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/http-https/-/http-https-1.0.0.tgz#2f908dd5f1db4068c058cd6e6d4ce392c913389b" - integrity sha512-o0PWwVCSp3O0wS6FvNr6xfBCHgt0m1tvPLFOCc2iFDKTRAXhB7m8klDf7ErowFH8POa6dVdGatKU5I1YYwzUyg== - -http-signature@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" - integrity sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ== - dependencies: - assert-plus "^1.0.0" - jsprim "^1.2.2" - sshpk "^1.7.0" - -http2-wrapper@^1.0.0-beta.5.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-1.0.3.tgz#b8f55e0c1f25d4ebd08b3b0c2c079f9590800b3d" - integrity sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg== - dependencies: - quick-lru "^5.1.1" - resolve-alpn "^1.0.0" - -https-proxy-agent@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" - integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== - dependencies: - agent-base "6" - debug "4" - -husky@7.0.4: - version "7.0.4" - resolved "https://registry.yarnpkg.com/husky/-/husky-7.0.4.tgz#242048245dc49c8fb1bf0cc7cfb98dd722531535" - integrity sha512-vbaCKN2QLtP/vD4yvs6iz6hBEo6wkSzs8HpRah1Z6aGmF2KW5PdYuAd7uX5a+OyBZHBhd+TFLqgjUgytQr4RvQ== - -husky@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/husky/-/husky-6.0.0.tgz#810f11869adf51604c32ea577edbc377d7f9319e" - integrity sha512-SQS2gDTB7tBN486QSoKPKQItZw97BMOd+Kdb6ghfpBc0yXyzrddI0oDV5MkDAbuB4X2mO3/nj60TRMcYxwzZeQ== - -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" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - -idna-uts46-hx@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/idna-uts46-hx/-/idna-uts46-hx-2.3.1.tgz#a1dc5c4df37eee522bf66d969cc980e00e8711f9" - integrity sha512-PWoF9Keq6laYdIRwwCdhTPl60xRqAloYNMQLiyUnG42VjT53oW07BXIRM+NK7eQjzXjAk2gUvX9caRxlnF9TAA== - dependencies: - punycode "2.1.0" - -ieee754@^1.1.13, ieee754@^1.1.4, ieee754@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - -ignore@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" - integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== - -ignore@^5.1.1, ignore@^5.2.0, ignore@^5.2.4: - version "5.3.2" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" - integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== - -immediate@^3.2.3: - version "3.3.0" - resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.3.0.tgz#1aef225517836bcdf7f2a2de2600c79ff0269266" - integrity sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q== - -immediate@~3.0.5: - version "3.0.6" - resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" - integrity sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ== - -immediate@~3.2.3: - version "3.2.3" - resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.2.3.tgz#d140fa8f614659bd6541233097ddaac25cdd991c" - integrity sha512-RrGCXRm/fRVqMIhqXrGEX9rRADavPiDFSoMb/k64i9XMk8uH4r/Omi5Ctierj6XzNecwDbO4WuFbDD1zmpl3Tg== - -immutable@^4.0.0-rc.12: - version "4.3.8" - resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.8.tgz#02d183c7727fb2bb1d5d0380da0d779dce9296a7" - integrity sha512-d/Ld9aLbKpNwyl0KiM2CT1WYvkitQ1TSvmRtkcV8FKStiDoA7Slzgjmb/1G2yhKM1p0XeNOieaTbFZmU1d3Xuw== - -import-fresh@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" - integrity sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg== - dependencies: - caller-path "^2.0.0" - resolve-from "^3.0.0" - -import-fresh@^3.0.0, import-fresh@^3.2.1, import-fresh@^3.3.0: - version "3.3.1" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.1.tgz#9cecb56503c0ada1f2741dbbd6546e4b13b57ccf" - integrity sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ== - dependencies: - parent-module "^1.0.0" - resolve-from "^4.0.0" - -imul@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/imul/-/imul-1.0.1.tgz#9d5867161e8b3de96c2c38d5dc7cb102f35e2ac9" - integrity sha512-WFAgfwPLAjU66EKt6vRdTlKj4nAgIDQzh29JonLa4Bqtl6D8JrIMvWjCnx7xEjVNmP3U0fM5o8ZObk7d0f62bA== - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== - -indent-string@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" - integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3, inherits@~2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -ini@^1.3.5: - version "1.3.8" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" - integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== - -inquirer@^6.2.2: - version "6.5.2" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.5.2.tgz#ad50942375d036d327ff528c08bd5fab089928ca" - integrity sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ== - dependencies: - ansi-escapes "^3.2.0" - chalk "^2.4.2" - cli-cursor "^2.1.0" - cli-width "^2.0.0" - external-editor "^3.0.3" - figures "^2.0.0" - lodash "^4.17.12" - mute-stream "0.0.7" - run-async "^2.2.0" - rxjs "^6.4.0" - string-width "^2.1.0" - strip-ansi "^5.1.0" - through "^2.3.6" - -interpret@^1.0.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" - integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== - -io-ts@1.10.4: - version "1.10.4" - resolved "https://registry.yarnpkg.com/io-ts/-/io-ts-1.10.4.tgz#cd5401b138de88e4f920adbcb7026e2d1967e6e2" - integrity sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g== - dependencies: - fp-ts "^1.0.0" - -ipaddr.js@1.9.1: - version "1.9.1" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" - integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== - -is-arguments@^1.0.4: - version "1.2.0" - resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.2.0.tgz#ad58c6aecf563b78ef2bf04df540da8f5d7d8e1b" - integrity sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA== - dependencies: - call-bound "^1.0.2" - has-tostringtag "^1.0.2" - -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== - -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" - integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== - dependencies: - binary-extensions "^2.0.0" - -is-buffer@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" - integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== - -is-callable@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" - integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== - -is-core-module@^2.16.1: - version "2.16.1" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.16.1.tgz#2a98801a849f43e2add644fbb6bc6229b19a4ef4" - integrity sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w== - dependencies: - hasown "^2.0.2" - -is-directory@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" - integrity sha512-yVChGzahRFvbkscn2MlwGismPO12i9+znNruC5gVEntG3qu0xQMzsGg/JFbrsqDOHtHFPci+V5aP5T9I+yeKqw== - -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-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== - -is-fullwidth-code-point@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" - integrity sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w== - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - -is-function@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-function/-/is-function-1.0.2.tgz#4f097f30abf6efadac9833b17ca5dc03f8144e08" - integrity sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ== - -is-generator-function@^1.0.7: - version "1.1.2" - resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.1.2.tgz#ae3b61e3d5ea4e4839b90bad22b02335051a17d5" - integrity sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA== - dependencies: - call-bound "^1.0.4" - generator-function "^2.0.0" - get-proto "^1.0.1" - has-tostringtag "^1.0.2" - safe-regex-test "^1.1.0" - -is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: - version "4.0.3" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" - integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== - dependencies: - is-extglob "^2.1.1" - -is-hex-prefixed@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz#7d8d37e6ad77e5d127148913c573e082d777f554" - integrity sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA== - -is-module@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" - integrity sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g== - -is-nan@^1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/is-nan/-/is-nan-1.3.2.tgz#043a54adea31748b55b6cd4e09aadafa69bd9e1d" - integrity sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w== - dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - -is-path-inside@^3.0.3: - version "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@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" - integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== - -is-reference@1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/is-reference/-/is-reference-1.2.1.tgz#8b2dac0b371f4bc994fdeaba9eb542d03002d0b7" - integrity sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ== - dependencies: - "@types/estree" "*" - -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-typed-array@^1.1.14, is-typed-array@^1.1.3: - 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-typedarray@^1.0.0, is-typedarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== - -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" - integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== - -is-url@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/is-url/-/is-url-1.2.4.tgz#04a4df46d28c4cff3d73d01ff06abeb318a1aa52" - integrity sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww== - -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" - -isarray@^1.0.0, isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== - -isarray@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" - integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== - -isomorphic-unfetch@^3.0.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.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/isows/-/isows-1.0.7.tgz#1c06400b7eed216fbba3bcbd68f12490fc342915" - integrity sha512-I1fSfDCZL5P0v33sVqeTDSpcstAg/N+wF5HS033mogOVIp4B+oHC7oOCsA3axAbBSGTJ8QubbNmnIRN/h8U7hg== - -isstream@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" - integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g== - -jackspeak@^3.1.2: - version "3.4.3" - resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-3.4.3.tgz#8833a9d89ab4acde6188942bd1c53b6390ed5a8a" - integrity sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw== - dependencies: - "@isaacs/cliui" "^8.0.2" - optionalDependencies: - "@pkgjs/parseargs" "^0.11.0" - -jackspeak@^4.1.1: - version "4.2.3" - resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-4.2.3.tgz#27ef80f33b93412037c3bea4f8eddf80e1931483" - integrity sha512-ykkVRwrYvFm1nb2AJfKKYPr0emF6IiXDYUaFx4Zn9ZuIH7MrzEZ3sD5RlqGXNRpHtvUHJyOnCEFxOlNDtGo7wg== - dependencies: - "@isaacs/cliui" "^9.0.0" - -js-base64@^3.7.2: - version "3.7.8" - resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-3.7.8.tgz#af44496bc09fa178ed9c4adf67eb2b46f5c6d2a4" - integrity sha512-hNngCeKxIUQiEUN3GPJOkz4wF/YvdUdbNL9hsBcMQTkKzboD7T/q3OYOuuPZLUE6dBxSGpwhk5mwuDud7JVAow== - -js-cookie@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/js-cookie/-/js-cookie-2.2.1.tgz#69e106dc5d5806894562902aa5baec3744e9b2b8" - integrity sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ== - -js-sha3@0.8.0, js-sha3@^0.8.0: - version "0.8.0" - resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" - integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== - -js-sha3@^0.5.7: - version "0.5.7" - resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.5.7.tgz#0d4ffd8002d5333aabaf4a23eed2f6374c9f28e7" - integrity sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g== - -js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - -js-yaml@3.x, js-yaml@^3.12.0, js-yaml@^3.13.0, js-yaml@^3.13.1: - version "3.14.2" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.2.tgz#77485ce1dd7f33c061fd1b16ecea23b55fcb04b0" - integrity sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -js-yaml@4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" - integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== - dependencies: - argparse "^2.0.1" - -js-yaml@^4.1.0, js-yaml@~4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.1.tgz#854c292467705b699476e1a2decc0c8a3458806b" - integrity sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA== - dependencies: - argparse "^2.0.1" - -jsbn@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" - integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg== - -jsencrypt@3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/jsencrypt/-/jsencrypt-3.2.1.tgz#09766983cc760088ff26b12fe7e574252af97727" - integrity sha512-k1sD5QV0KPn+D8uG9AdGzTQuamt82QZ3A3l6f7TRwMU6Oi2Vg0BsL+wZIQBONcraO1pc78ExMdvmBBJ8WhNYUA== - -json-bigint@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/json-bigint/-/json-bigint-1.0.0.tgz#ae547823ac0cad8398667f8cd9ef4730f5b01ff1" - integrity sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ== - dependencies: - bignumber.js "^9.0.0" - -json-buffer@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" - integrity sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ== - -json-buffer@3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" - integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== - -json-parse-better-errors@^1.0.1: - version "1.0.2" - 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-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" - integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - -json-schema-traverse@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" - integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== - -json-schema@0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" - integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== - -json-stable-stringify-without-jsonify@^1.0.1: - version "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== - -json-stringify-safe@~5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" - integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== - -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" - integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== - optionalDependencies: - graceful-fs "^4.1.6" - -jsonfile@^6.0.1: - version "6.2.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.2.0.tgz#7c265bd1b65de6977478300087c99f1c84383f62" - integrity sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg== - dependencies: - universalify "^2.0.0" - optionalDependencies: - graceful-fs "^4.1.6" - -jsonschema@^1.2.4, jsonschema@^1.4.1: - version "1.5.0" - resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.5.0.tgz#f6aceb1ab9123563dd901d05f81f9d4883d3b7d8" - integrity sha512-K+A9hhqbn0f3pJX17Q/7H6yQfD/5OXgdrR5UE12gMXCiN9D5Xq2o5mddV2QEcX/bjla99ASsAAQUyMCCRWAEhw== - -jsprim@^1.2.2: - version "1.4.2" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.2.tgz#712c65533a15c878ba59e9ed5f0e26d5b77c5feb" - integrity sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw== - dependencies: - assert-plus "1.0.0" - extsprintf "1.3.0" - json-schema "0.4.0" - verror "1.10.0" - -jssha@^3.2.0: - version "3.3.1" - resolved "https://registry.yarnpkg.com/jssha/-/jssha-3.3.1.tgz#c5b7fc7fb9aa745461923b87df0e247dd59c7ea8" - integrity sha512-VCMZj12FCFMQYcFLPRm/0lOBbLi8uM2BhXPTqw3U4YAfs4AZfiApOoBLoN8cQE60Z50m1MYMTQVCfgF/KaCVhQ== - -jszip@^3.10.1: - version "3.10.1" - resolved "https://registry.yarnpkg.com/jszip/-/jszip-3.10.1.tgz#34aee70eb18ea1faec2f589208a157d1feb091c2" - integrity sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g== - dependencies: - lie "~3.3.0" - pako "~1.0.2" - readable-stream "~2.3.6" - setimmediate "^1.0.5" - -keccak@3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.1.tgz#ae30a0e94dbe43414f741375cff6d64c8bea0bff" - integrity sha512-epq90L9jlFWCW7+pQa6JOnKn2Xgl2mtI664seYR6MHskvI9agt7AnDqmAlp9TqU4/caMYbA08Hi5DMZAl5zdkA== - dependencies: - node-addon-api "^2.0.0" - node-gyp-build "^4.2.0" - -keccak@3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.2.tgz#4c2c6e8c54e04f2670ee49fa734eb9da152206e0" - integrity sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ== - dependencies: - node-addon-api "^2.0.0" - node-gyp-build "^4.2.0" - readable-stream "^3.6.0" - -keccak@^3.0.0, keccak@^3.0.2: - version "3.0.4" - resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.4.tgz#edc09b89e633c0549da444432ecf062ffadee86d" - integrity sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q== - dependencies: - node-addon-api "^2.0.0" - node-gyp-build "^4.2.0" - readable-stream "^3.6.0" - -keyv@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" - integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA== - dependencies: - json-buffer "3.0.0" - -keyv@^4.0.0, keyv@^4.5.3: - version "4.5.4" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" - integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== - dependencies: - json-buffer "3.0.1" - -kind-of@^6.0.2: - version "6.0.3" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" - integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== - -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@^4.0.1: - version "4.1.5" - resolved "https://registry.yarnpkg.com/kleur/-/kleur-4.1.5.tgz#95106101795f7050c6c650f350c683febddb1780" - integrity sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ== - -level-codec@^9.0.0: - version "9.0.2" - resolved "https://registry.yarnpkg.com/level-codec/-/level-codec-9.0.2.tgz#fd60df8c64786a80d44e63423096ffead63d8cbc" - integrity sha512-UyIwNb1lJBChJnGfjmO0OR+ezh2iVu1Kas3nvBS/BzGnx79dv6g7unpKIDNPMhfdTEGoc7mC8uAu51XEtX+FHQ== - dependencies: - buffer "^5.6.0" - -level-concat-iterator@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/level-concat-iterator/-/level-concat-iterator-3.1.0.tgz#5235b1f744bc34847ed65a50548aa88d22e881cf" - integrity sha512-BWRCMHBxbIqPxJ8vHOvKUsaO0v1sLYZtjN3K2iZJsRBYtp+ONsY6Jfi6hy9K3+zolgQRryhIn2NRZjZnWJ9NmQ== - dependencies: - catering "^2.1.0" - -level-concat-iterator@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/level-concat-iterator/-/level-concat-iterator-2.0.1.tgz#1d1009cf108340252cb38c51f9727311193e6263" - integrity sha512-OTKKOqeav2QWcERMJR7IS9CUo1sHnke2C0gkSmcR7QuEtFNLLzHQAvnMw8ykvEcv0Qtkg0p7FOwP1v9e5Smdcw== - -level-errors@^2.0.0, level-errors@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/level-errors/-/level-errors-2.0.1.tgz#2132a677bf4e679ce029f517c2f17432800c05c8" - integrity sha512-UVprBJXite4gPS+3VznfgDSU8PTRuVX0NXwoWW50KLxd2yw4Y1t2JUR5In1itQnudZqRMT9DlAM3Q//9NCjCFw== - dependencies: - errno "~0.1.1" - -level-iterator-stream@~4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/level-iterator-stream/-/level-iterator-stream-4.0.2.tgz#7ceba69b713b0d7e22fcc0d1f128ccdc8a24f79c" - integrity sha512-ZSthfEqzGSOMWoUGhTXdX9jv26d32XJuHz/5YnuHZzH6wldfWMOVwI9TBtKcya4BKTyTt3XVA0A3cF3q5CY30Q== - dependencies: - inherits "^2.0.4" - readable-stream "^3.4.0" - xtend "^4.0.2" - -level-mem@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/level-mem/-/level-mem-5.0.1.tgz#c345126b74f5b8aa376dc77d36813a177ef8251d" - integrity sha512-qd+qUJHXsGSFoHTziptAKXoLX87QjR7v2KMbqncDXPxQuCdsQlzmyX+gwrEHhlzn08vkf8TyipYyMmiC6Gobzg== - dependencies: - level-packager "^5.0.3" - memdown "^5.0.0" - -level-packager@^5.0.3: - version "5.1.1" - resolved "https://registry.yarnpkg.com/level-packager/-/level-packager-5.1.1.tgz#323ec842d6babe7336f70299c14df2e329c18939" - integrity sha512-HMwMaQPlTC1IlcwT3+swhqf/NUO+ZhXVz6TY1zZIIZlIR0YSn8GtAAWmIvKjNY16ZkEg/JcpAuQskxsXqC0yOQ== - dependencies: - encoding-down "^6.3.0" - levelup "^4.3.2" - -level-supports@^2.0.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/level-supports/-/level-supports-2.1.0.tgz#9af908d853597ecd592293b2fad124375be79c5f" - integrity sha512-E486g1NCjW5cF78KGPrMDRBYzPuueMZ6VBXHT6gC7A8UYWGiM14fGgp+s/L1oFfDWSPV/+SFkYCmZ0SiESkRKA== - -level-supports@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/level-supports/-/level-supports-1.0.1.tgz#2f530a596834c7301622521988e2c36bb77d122d" - integrity sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg== - dependencies: - xtend "^4.0.2" - -level-ws@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/level-ws/-/level-ws-2.0.0.tgz#207a07bcd0164a0ec5d62c304b4615c54436d339" - integrity sha512-1iv7VXx0G9ec1isqQZ7y5LmoZo/ewAsyDHNA8EFDW5hqH2Kqovm33nSFkSdnLLAK+I5FlT+lo5Cw9itGe+CpQA== - dependencies: - inherits "^2.0.3" - readable-stream "^3.1.0" - xtend "^4.0.1" - -leveldown@6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/leveldown/-/leveldown-6.1.0.tgz#7ab1297706f70c657d1a72b31b40323aa612b9ee" - integrity sha512-8C7oJDT44JXxh04aSSsfcMI8YiaGRhOFI9/pMEL7nWJLVsWajDPTRxsSHTM2WcTVY5nXM+SuRHzPPi0GbnDX+w== - dependencies: - abstract-leveldown "^7.2.0" - napi-macros "~2.0.0" - node-gyp-build "^4.3.0" - -levelup@^4.3.2: - version "4.4.0" - resolved "https://registry.yarnpkg.com/levelup/-/levelup-4.4.0.tgz#f89da3a228c38deb49c48f88a70fb71f01cafed6" - integrity sha512-94++VFO3qN95cM/d6eBXvd894oJE0w3cInq9USsyQzzoJxmiYzPAocNcuGCPGGjoXqDVJcr3C1jzt1TSjyaiLQ== - dependencies: - deferred-leveldown "~5.3.0" - level-errors "~2.0.0" - level-iterator-stream "~4.0.0" - level-supports "~1.0.0" - xtend "~4.0.0" - -levn@^0.3.0, levn@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" - integrity sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA== - dependencies: - prelude-ls "~1.1.2" - type-check "~0.3.2" - -levn@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" - integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== - dependencies: - prelude-ls "^1.2.1" - type-check "~0.4.0" - -libphonenumber-js@^1.9.43: - version "1.12.40" - resolved "https://registry.yarnpkg.com/libphonenumber-js/-/libphonenumber-js-1.12.40.tgz#4b743571462a0f3fdafab7a941d89ee842aa25e0" - integrity sha512-HKGs7GowShNls3Zh+7DTr6wYpPk5jC78l508yQQY3e8ZgJChM3A9JZghmMJZuK+5bogSfuTafpjksGSR3aMIEg== - -lie@~3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/lie/-/lie-3.3.0.tgz#dcf82dee545f46074daf200c7c1c5a08e0f40f6a" - integrity sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ== - dependencies: - immediate "~3.0.5" - -lightningcss-android-arm64@1.32.0: - version "1.32.0" - resolved "https://registry.yarnpkg.com/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz#f033885116dfefd9c6f54787523e3514b61e1968" - integrity sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg== - -lightningcss-darwin-arm64@1.32.0: - version "1.32.0" - resolved "https://registry.yarnpkg.com/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.32.0.tgz#50b71871b01c8199584b649e292547faea7af9b5" - integrity sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ== - -lightningcss-darwin-x64@1.32.0: - version "1.32.0" - resolved "https://registry.yarnpkg.com/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.32.0.tgz#35f3e97332d130b9ca181e11b568ded6aebc6d5e" - integrity sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w== - -lightningcss-freebsd-x64@1.32.0: - version "1.32.0" - resolved "https://registry.yarnpkg.com/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz#9777a76472b64ed6ff94342ad64c7bafd794a575" - integrity sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig== - -lightningcss-linux-arm-gnueabihf@1.32.0: - version "1.32.0" - resolved "https://registry.yarnpkg.com/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz#13ae652e1ab73b9135d7b7da172f666c410ad53d" - integrity sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw== - -lightningcss-linux-arm64-gnu@1.32.0: - version "1.32.0" - resolved "https://registry.yarnpkg.com/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz#417858795a94592f680123a1b1f9da8a0e1ef335" - integrity sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ== - -lightningcss-linux-arm64-musl@1.32.0: - version "1.32.0" - resolved "https://registry.yarnpkg.com/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz#6be36692e810b718040802fd809623cffe732133" - integrity sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg== - -lightningcss-linux-x64-gnu@1.32.0: - version "1.32.0" - resolved "https://registry.yarnpkg.com/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz#0b7803af4eb21cfd38dd39fe2abbb53c7dd091f6" - integrity sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA== - -lightningcss-linux-x64-musl@1.32.0: - version "1.32.0" - resolved "https://registry.yarnpkg.com/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz#88dc8ba865ddddb1ac5ef04b0f161804418c163b" - integrity sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg== - -lightningcss-win32-arm64-msvc@1.32.0: - version "1.32.0" - resolved "https://registry.yarnpkg.com/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz#4f30ba3fa5e925f5b79f945e8cc0d176c3b1ab38" - integrity sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw== - -lightningcss-win32-x64-msvc@1.32.0: - version "1.32.0" - resolved "https://registry.yarnpkg.com/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz#141aa5605645064928902bb4af045fa7d9f4220a" - integrity sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q== - -lightningcss@^1.32.0: - version "1.32.0" - resolved "https://registry.yarnpkg.com/lightningcss/-/lightningcss-1.32.0.tgz#b85aae96486dcb1bf49a7c8571221273f4f1e4a9" - integrity sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ== - dependencies: - detect-libc "^2.0.3" - optionalDependencies: - lightningcss-android-arm64 "1.32.0" - lightningcss-darwin-arm64 "1.32.0" - lightningcss-darwin-x64 "1.32.0" - lightningcss-freebsd-x64 "1.32.0" - lightningcss-linux-arm-gnueabihf "1.32.0" - lightningcss-linux-arm64-gnu "1.32.0" - lightningcss-linux-arm64-musl "1.32.0" - lightningcss-linux-x64-gnu "1.32.0" - lightningcss-linux-x64-musl "1.32.0" - lightningcss-win32-arm64-msvc "1.32.0" - lightningcss-win32-x64-msvc "1.32.0" - -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== - -locate-path@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" - integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== - dependencies: - p-locate "^5.0.0" - -lodash.camelcase@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" - integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA== - -lodash.clonedeep@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" - integrity sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ== - -lodash.merge@^4.6.2: - version "4.6.2" - resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" - integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== - -lodash.truncate@^4.4.2: - version "4.4.2" - resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" - integrity sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw== - -lodash@4.17.21: - version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - -lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.21: - version "4.17.23" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.23.tgz#f113b0378386103be4f6893388c73d0bde7f2c5a" - integrity sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w== - -log-symbols@4.1.0, log-symbols@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" - integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== - dependencies: - chalk "^4.1.0" - is-unicode-supported "^0.1.0" - -loupe@^2.3.1, loupe@^2.3.6: - version "2.3.7" - resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.7.tgz#6e69b7d4db7d3ab436328013d37d1c8c3540c697" - integrity sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA== - dependencies: - get-func-name "^2.0.1" - -lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" - integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== - -lowercase-keys@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" - integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== - -lru-cache@^10.2.0: - 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.0: - version "11.2.7" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-11.2.7.tgz#9127402617f34cd6767b96daee98c28e74458d35" - integrity sha512-aY/R+aEsRelme17KGQa/1ZSIpLpNYYrhcrepKTZgE+W3WM16YMCaPwOHLHsmopZHELU0Ojin1lPVxKR0MihncA== - -lru-cache@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" - integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== - dependencies: - yallist "^3.0.2" - -lru_map@^0.3.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/lru_map/-/lru_map-0.3.3.tgz#b5c8351b9464cbd750335a79650a0ec0e56118dd" - integrity sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ== - -ltgt@~2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/ltgt/-/ltgt-2.2.1.tgz#f35ca91c493f7b73da0e07495304f17b31f87ee5" - integrity sha512-AI2r85+4MquTw9ZYqabu4nMwy9Oftlfa/e/52t9IjtfG+mGBbTNdAoZ3RQKLHR6r0wQnwZnPIEh/Ya6XTWAKNA== - -magic-string@^0.30.21, magic-string@^0.30.3: - version "0.30.21" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.21.tgz#56763ec09a0fa8091df27879fd94d19078c00d91" - integrity sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ== - dependencies: - "@jridgewell/sourcemap-codec" "^1.5.5" - -markdown-table@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-2.0.0.tgz#194a90ced26d31fe753d8b9434430214c011865b" - integrity sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A== - dependencies: - repeat-string "^1.0.0" - -match-all@^1.2.6: - version "1.2.7" - resolved "https://registry.yarnpkg.com/match-all/-/match-all-1.2.7.tgz#3c03b7f7ee372ae177aac5eca08c3ad6af59633a" - integrity sha512-qSpsBKarh55r9KyXzFC3xBLRf2GlGasba2em9kbpRsSlGvdTAqjx3QD0r3FKSARiW+OE4iMHYsolM3aX9n5djw== - -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== - -mcl-wasm@^0.7.1: - version "0.7.9" - resolved "https://registry.yarnpkg.com/mcl-wasm/-/mcl-wasm-0.7.9.tgz#c1588ce90042a8700c3b60e40efb339fc07ab87f" - integrity sha512-iJIUcQWA88IJB/5L15GnJVnSQJmf/YaxxV6zRavv83HILHaJQb6y0iFyDMdDO0gN8X37tdxmAOrH/P8B6RB8sQ== - -md5.js@^1.3.4: - version "1.3.5" - resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" - integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - safe-buffer "^5.1.2" - -media-typer@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" - integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== - -memdown@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/memdown/-/memdown-5.1.0.tgz#608e91a9f10f37f5b5fe767667a8674129a833cb" - integrity sha512-B3J+UizMRAlEArDjWHTMmadet+UKwHd3UjMgGBkZcKAxAYVPS9o0Yeiha4qvz7iGiL2Sb3igUft6p7nbFWctpw== - dependencies: - abstract-leveldown "~6.2.1" - functional-red-black-tree "~1.0.1" - immediate "~3.2.3" - inherits "~2.0.1" - ltgt "~2.2.0" - safe-buffer "~5.2.0" - -memorystream@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2" - integrity sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw== - -merge-descriptors@1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.3.tgz#d80319a65f3c7935351e5cfdac8f9318504dbed5" - integrity sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ== - -merge2@^1.2.3, merge2@^1.3.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== - -merkle-patricia-tree@^4.2.2, merkle-patricia-tree@^4.2.4: - version "4.2.4" - resolved "https://registry.yarnpkg.com/merkle-patricia-tree/-/merkle-patricia-tree-4.2.4.tgz#ff988d045e2bf3dfa2239f7fabe2d59618d57413" - integrity sha512-eHbf/BG6eGNsqqfbLED9rIqbsF4+sykEaBn6OLNs71tjclbMcMOk1tEPmJKcNcNCLkvbpY/lwyOlizWsqPNo8w== - dependencies: - "@types/levelup" "^4.3.0" - ethereumjs-util "^7.1.4" - level-mem "^5.0.1" - level-ws "^2.0.0" - readable-stream "^3.6.0" - semaphore-async-await "^1.5.1" - -methods@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" - integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== - -micro-eth-signer@^0.14.0: - version "0.14.0" - resolved "https://registry.yarnpkg.com/micro-eth-signer/-/micro-eth-signer-0.14.0.tgz#8aa1fe997d98d6bdf42f2071cef7eb01a66ecb22" - integrity sha512-5PLLzHiVYPWClEvZIXXFu5yutzpadb73rnQCpUqIHu3No3coFuWQNfE5tkBQJ7djuLYl6aRLaS0MgWJYGoqiBw== - dependencies: - "@noble/curves" "~1.8.1" - "@noble/hashes" "~1.7.1" - micro-packed "~0.7.2" - -micro-ftch@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/micro-ftch/-/micro-ftch-0.3.1.tgz#6cb83388de4c1f279a034fb0cf96dfc050853c5f" - integrity sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg== - -micro-packed@~0.7.2: - version "0.7.3" - resolved "https://registry.yarnpkg.com/micro-packed/-/micro-packed-0.7.3.tgz#59e96b139dffeda22705c7a041476f24cabb12b6" - integrity sha512-2Milxs+WNC00TRlem41oRswvw31146GiSaoCT7s3Xi2gMUglW5QBeqlQaZeHr5tJx9nm3i57LNXPqxOOaWtTYg== - dependencies: - "@scure/base" "~1.2.5" - -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" - -miller-rabin@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" - integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== - dependencies: - bn.js "^4.0.0" - brorand "^1.0.1" - -mime-db@1.52.0: - version "1.52.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" - integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== - -mime-types@^2.1.12, mime-types@^2.1.16, mime-types@~2.1.19, mime-types@~2.1.24, mime-types@~2.1.34: - version "2.1.35" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" - integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== - dependencies: - mime-db "1.52.0" - -mime@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" - integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== - -mimic-fn@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" - integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== - -mimic-response@^1.0.0, mimic-response@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" - integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== - -mimic-response@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" - integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== - -min-document@^2.19.0: - version "2.19.2" - resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.2.tgz#f95db44639eaae3ac8ea85ae6809ae85ff7e3b81" - integrity sha512-8S5I8db/uZN8r9HSLFVWPdJCvYOejMcEC82VIzNUc6Zkklf/d1gg2psfE79/vyhWOj4+J8MtwmoOz3TmvaGu5A== - dependencies: - dom-walk "^0.1.0" - -minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" - integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== - -minimalistic-crypto-utils@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" - integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== - -minimatch@*, minimatch@^10.1.1: - version "10.2.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-10.2.4.tgz#465b3accbd0218b8281f5301e27cedc697f96fde" - integrity sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg== - dependencies: - brace-expansion "^5.0.2" - -"minimatch@2 || 3", minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: - version "3.1.5" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.5.tgz#580c88f8d5445f2bd6aa8f3cadefa0de79fbd69e" - integrity sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w== - dependencies: - brace-expansion "^1.1.7" - -minimatch@5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.0.1.tgz#fb9022f7528125187c92bd9e9b6366be1cf3415b" - integrity sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g== - dependencies: - brace-expansion "^2.0.1" - -minimatch@^5.0.1, minimatch@^5.1.6: - version "5.1.9" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.9.tgz#1293ef15db0098b394540e8f9f744f9fda8dee4b" - integrity sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw== - dependencies: - brace-expansion "^2.0.1" - -minimatch@^8.0.2: - version "8.0.7" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-8.0.7.tgz#954766e22da88a3e0a17ad93b58c15c9d8a579de" - integrity sha512-V+1uQNdzybxa14e/p00HZnQNNcTjnRJjDxg2V8wtkjFctq4M7hXFws4oekyTP0Jebeq7QYtpFyOeBAjc88zvYg== - dependencies: - brace-expansion "^2.0.1" - -minimatch@^9.0.4, minimatch@^9.0.5: - version "9.0.9" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.9.tgz#9b0cb9fcb78087f6fd7eababe2511c4d3d60574e" - integrity sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg== - dependencies: - brace-expansion "^2.0.2" - -minimist@^1.2.5, minimist@^1.2.6, minimist@^1.2.7: - version "1.2.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" - integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== - -minipass@^2.6.0, minipass@^2.9.0: - version "2.9.0" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" - integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== - dependencies: - safe-buffer "^5.1.2" - yallist "^3.0.0" - -minipass@^4.2.4: - version "4.2.8" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-4.2.8.tgz#f0010f64393ecfc1d1ccb5f582bcaf45f48e1a3a" - integrity sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ== - -"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.1.2: - version "7.1.3" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.3.tgz#79389b4eb1bb2d003a9bba87d492f2bd37bdc65b" - integrity sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A== - -minizlib@^1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" - integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q== - dependencies: - minipass "^2.9.0" - -mkdirp-promise@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz#e9b8f68e552c68a9c1713b84883f7a1dd039b8a1" - integrity sha512-Hepn5kb1lJPtVW84RFT40YG1OddBNTOVUZR2bzQUHc+Z03en8/3uX0+060JDhcEzyO08HmipsN9DcnFMxhIL9w== - dependencies: - mkdirp "*" - -mkdirp@*: - version "3.0.1" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-3.0.1.tgz#e44e4c5607fb279c168241713cc6e0fea9adcb50" - integrity sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg== - -mkdirp@0.5.x, mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.5: - version "0.5.6" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" - integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== - dependencies: - minimist "^1.2.6" - -mkdirp@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" - integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== - -mnemonist@^0.38.0: - version "0.38.5" - resolved "https://registry.yarnpkg.com/mnemonist/-/mnemonist-0.38.5.tgz#4adc7f4200491237fe0fa689ac0b86539685cade" - integrity sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg== - dependencies: - obliterator "^2.0.0" - -mocha@10.2.0: - version "10.2.0" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.2.0.tgz#1fd4a7c32ba5ac372e03a17eef435bd00e5c68b8" - integrity sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg== - dependencies: - ansi-colors "4.1.1" - browser-stdout "1.3.1" - chokidar "3.5.3" - debug "4.3.4" - diff "5.0.0" - escape-string-regexp "4.0.0" - find-up "5.0.0" - glob "7.2.0" - he "1.2.0" - js-yaml "4.1.0" - log-symbols "4.1.0" - minimatch "5.0.1" - ms "2.1.3" - nanoid "3.3.3" - serialize-javascript "6.0.0" - strip-json-comments "3.1.1" - supports-color "8.1.1" - workerpool "6.2.1" - yargs "16.2.0" - yargs-parser "20.2.4" - yargs-unparser "2.0.0" - -mocha@^10.0.0, mocha@^10.2.0: - version "10.8.2" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.8.2.tgz#8d8342d016ed411b12a429eb731b825f961afb96" - integrity sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg== - dependencies: - ansi-colors "^4.1.3" - browser-stdout "^1.3.1" - chokidar "^3.5.3" - debug "^4.3.5" - diff "^5.2.0" - escape-string-regexp "^4.0.0" - find-up "^5.0.0" - glob "^8.1.0" - he "^1.2.0" - js-yaml "^4.1.0" - log-symbols "^4.1.0" - minimatch "^5.1.6" - ms "^2.1.3" - serialize-javascript "^6.0.2" - strip-json-comments "^3.1.1" - supports-color "^8.1.1" - workerpool "^6.5.1" - yargs "^16.2.0" - yargs-parser "^20.2.9" - yargs-unparser "^2.0.0" - -mock-fs@^4.1.0: - version "4.14.0" - resolved "https://registry.yarnpkg.com/mock-fs/-/mock-fs-4.14.0.tgz#ce5124d2c601421255985e6e94da80a7357b1b18" - integrity sha512-qYvlv/exQ4+svI3UOvPUpLDF0OMX5euvUH0Ny4N5QyRyhNdgAgUrVH3iUINSzEPLvx0kbo/Bp28GJKIqvE7URw== - -moment@^2.29.3: - version "2.30.1" - resolved "https://registry.yarnpkg.com/moment/-/moment-2.30.1.tgz#f8c91c07b7a786e30c59926df530b4eac96974ae" - integrity sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how== - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== - -ms@2.1.2: - version "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: - version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - -multibase@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/multibase/-/multibase-0.7.0.tgz#1adfc1c50abe05eefeb5091ac0c2728d6b84581b" - integrity sha512-TW8q03O0f6PNFTQDvh3xxH03c8CjGaaYrjkl9UQPG6rz53TQzzxJVCIWVjzcbN/Q5Y53Zd0IBQBMVktVgNx4Fg== - dependencies: - base-x "^3.0.8" - buffer "^5.5.0" - -multibase@~0.6.0: - version "0.6.1" - resolved "https://registry.yarnpkg.com/multibase/-/multibase-0.6.1.tgz#b76df6298536cc17b9f6a6db53ec88f85f8cc12b" - integrity sha512-pFfAwyTjbbQgNc3G7D48JkJxWtoJoBMaR4xQUOuB8RnCgRqaYmWNFeJTTvrJ2w51bjLq2zTby6Rqj9TQ9elSUw== - dependencies: - base-x "^3.0.8" - buffer "^5.5.0" - -multicodec@^0.5.5: - version "0.5.7" - resolved "https://registry.yarnpkg.com/multicodec/-/multicodec-0.5.7.tgz#1fb3f9dd866a10a55d226e194abba2dcc1ee9ffd" - integrity sha512-PscoRxm3f+88fAtELwUnZxGDkduE2HD9Q6GHUOywQLjOGT/HAdhjLDYNZ1e7VR0s0TP0EwZ16LNUTFpoBGivOA== - dependencies: - varint "^5.0.0" - -multicodec@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/multicodec/-/multicodec-1.0.4.tgz#46ac064657c40380c28367c90304d8ed175a714f" - integrity sha512-NDd7FeS3QamVtbgfvu5h7fd1IlbaC4EQ0/pgU4zqE2vdHCmBGsUa0TiM8/TdSeG6BMPC92OOCf8F1ocE/Wkrrg== - dependencies: - buffer "^5.6.0" - varint "^5.0.0" - -multihashes@^0.4.15, multihashes@~0.4.15: - version "0.4.21" - resolved "https://registry.yarnpkg.com/multihashes/-/multihashes-0.4.21.tgz#dc02d525579f334a7909ade8a122dabb58ccfcb5" - integrity sha512-uVSvmeCWf36pU2nB4/1kzYZjsXD9vofZKpgudqkceYY5g2aZZXJ5r9lxuzoRLl1OAp28XljXsEJ/X/85ZsKmKw== - dependencies: - buffer "^5.5.0" - multibase "^0.7.0" - varint "^5.0.0" - -murmur-128@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/murmur-128/-/murmur-128-0.2.1.tgz#a9f6568781d2350ecb1bf80c14968cadbeaa4b4d" - integrity sha512-WseEgiRkI6aMFBbj8Cg9yBj/y+OdipwVC7zUo3W2W1JAJITwouUOtpqsmGSg67EQmwwSyod7hsVsWY5LsrfQVg== - dependencies: - encode-utf8 "^1.0.2" - fmix "^0.1.0" - imul "^1.0.0" - -mute-stream@0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" - integrity sha512-r65nCZhrbXXb6dXOACihYApHw2Q6pV0M3V0PSxd74N0+D8nzAdEAITq2oAjA1jVnKI+tGvEBUpqiMh0+rW6zDQ== - -nano-json-stream-parser@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/nano-json-stream-parser/-/nano-json-stream-parser-0.1.2.tgz#0cc8f6d0e2b622b479c40d499c46d64b755c6f5f" - integrity sha512-9MqxMH/BSJC7dnLsEMPyfN5Dvoo49IsPFYMcHw3Bcfc2kN0lpHRBSzlMSVx4HGyJ7s9B31CyBTVehWJoQ8Ctew== - -nanoid@3.3.3: - version "3.3.3" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.3.tgz#fd8e8b7aa761fe807dba2d1b98fb7241bb724a25" - integrity sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w== - -nanoid@^3.3.11: - version "3.3.11" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.11.tgz#4f4f112cefbe303202f2199838128936266d185b" - integrity sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w== - -napi-macros@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/napi-macros/-/napi-macros-2.0.0.tgz#2b6bae421e7b96eb687aa6c77a7858640670001b" - integrity sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg== - -natural-compare@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" - integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== - -negotiator@0.6.3: - version "0.6.3" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" - integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== - -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-tick@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.1.0.tgz#1836ee30ad56d67ef281b22bd199f709449b35eb" - integrity sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ== - -nice-try@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" - integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== - -node-addon-api@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-2.0.2.tgz#432cfa82962ce494b132e9d72a15b29f71ff5d32" - integrity sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA== - -node-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-emoji@^1.10.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-1.11.0.tgz#69a0150e6946e2f115e9d7ea4df7971e2628301c" - integrity sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A== - dependencies: - lodash "^4.17.21" - -node-fetch@^2.6.0, node-fetch@^2.6.1, node-fetch@^2.6.7: - version "2.7.0" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" - integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== - dependencies: - whatwg-url "^5.0.0" - -node-gyp-build@4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.3.0.tgz#9f256b03e5826150be39c764bf51e993946d71a3" - integrity sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q== - -node-gyp-build@4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.4.0.tgz#42e99687ce87ddeaf3a10b99dc06abc11021f3f4" - integrity sha512-amJnQCcgtRVw9SvoebO3BKGESClrfXGCUTX9hSn1OuGQTQBOZmVd0Z0OlecpuRksKvbsUqALE8jls/ErClAPuQ== - -node-gyp-build@^4.2.0, node-gyp-build@^4.3.0: - version "4.8.4" - resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.8.4.tgz#8a70ee85464ae52327772a90d66c6077a900cfc8" - integrity sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ== - -node-jsencrypt@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/node-jsencrypt/-/node-jsencrypt-1.0.0.tgz#83ffced414ecbe12fea017c6c585c9bfc49ad19b" - integrity sha512-ANQ/XkOVS02R89MtfoelFxarMsLA12nlOT802VS4LVhl+JRSRZIvkLIjvKYZmIar+mENUkR9mBKUdcdiPy/7lA== - dependencies: - get-random-values "^1.2.0" - -nofilter@^3.0.2, nofilter@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/nofilter/-/nofilter-3.1.0.tgz#c757ba68801d41ff930ba2ec55bab52ca184aa66" - integrity sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g== - -nopt@3.x: - version "3.0.6" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" - integrity sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg== - 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" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -normalize-url@^4.1.0: - version "4.5.1" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.1.tgz#0dd90cf1288ee1d1313b87081c9a5932ee48518a" - integrity sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA== - -normalize-url@^6.0.1: - version "6.1.0" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" - integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== - -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" - -oauth-sign@~0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" - integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== - -object-assign@^4, object-assign@^4.1.0, 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== - -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-is@^1.1.5: - version "1.1.6" - resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.6.tgz#1a6a53aed2dd8f7e6775ff870bea58545956ab07" - integrity sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - -object-keys@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" - integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== - -object.assign@^4.1.4: - version "4.1.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" - -obliterator@^2.0.0: - version "2.0.5" - resolved "https://registry.yarnpkg.com/obliterator/-/obliterator-2.0.5.tgz#031e0145354b0c18840336ae51d41e7d6d2c76aa" - integrity sha512-42CPE9AhahZRsMNslczq0ctAEtqk8Eka26QofnqC346BZdHDySk3LWka23LI7ULIw11NmltpiLagIq8gBozxTw== - -oboe@2.1.5: - version "2.1.5" - resolved "https://registry.yarnpkg.com/oboe/-/oboe-2.1.5.tgz#5554284c543a2266d7a38f17e073821fbde393cd" - integrity sha512-zRFWiF+FoicxEs3jNI/WYUrVEgA7DeET/InK0XQuudGHRg8iIob3cNPrJTKaz4004uaA9Pbe+Dwa8iluhjLZWA== - dependencies: - http-https "^1.0.0" - -obug@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/obug/-/obug-2.1.1.tgz#2cba74ff241beb77d63055ddf4cd1e9f90b538be" - integrity sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ== - -on-finished@~2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" - integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== - dependencies: - ee-first "1.1.1" - -once@1.x, once@^1.3.0, once@^1.3.1, once@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== - dependencies: - wrappy "1" - -onetime@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" - integrity sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ== - dependencies: - mimic-fn "^1.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" - -optionator@^0.8.1, optionator@^0.8.2: - version "0.8.3" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" - integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== - dependencies: - deep-is "~0.1.3" - fast-levenshtein "~2.0.6" - levn "~0.3.0" - prelude-ls "~1.1.2" - type-check "~0.3.2" - word-wrap "~1.2.3" - -optionator@^0.9.3: - version "0.9.4" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.4.tgz#7ea1c1a5d91d764fb282139c88fe11e182a3a734" - integrity sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g== - dependencies: - deep-is "^0.1.3" - fast-levenshtein "^2.0.6" - levn "^0.4.1" - prelude-ls "^1.2.1" - type-check "^0.4.0" - word-wrap "^1.2.5" - -os-tmpdir@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== - -ox@0.14.7: - version "0.14.7" - resolved "https://registry.yarnpkg.com/ox/-/ox-0.14.7.tgz#efe6770f7a138f823fb2df26001b679c2565b0a4" - integrity sha512-zSQ/cfBdolj7U4++NAvH7sI+VG0T3pEohITCgcQj8KlawvTDY4vGVhDT64Atsm0d6adWfIYHDpu88iUBMMp+AQ== - dependencies: - "@adraffy/ens-normalize" "^1.11.0" - "@noble/ciphers" "^1.3.0" - "@noble/curves" "1.9.1" - "@noble/hashes" "^1.8.0" - "@scure/bip32" "^1.7.0" - "@scure/bip39" "^1.6.0" - abitype "^1.2.3" - eventemitter3 "5.0.1" - -p-cancelable@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" - integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== - -p-cancelable@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-2.1.1.tgz#aab7fbd416582fa32a3db49859c122487c5ed2cf" - integrity sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg== - -p-limit@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" - integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== - dependencies: - yocto-queue "^0.1.0" - -p-locate@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" - integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== - dependencies: - p-limit "^3.0.2" - -p-map@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" - integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== - dependencies: - aggregate-error "^3.0.0" - -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== - -pako@~1.0.2: - version "1.0.11" - resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" - integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== - -papaparse@5.4.1: - version "5.4.1" - resolved "https://registry.yarnpkg.com/papaparse/-/papaparse-5.4.1.tgz#f45c0f871853578bd3a30f92d96fdcfb6ebea127" - integrity sha512-HipMsgJkZu8br23pW15uvo6sib6wne/4woLZPlFf3rpDyMe9ywEXUsuD7+6K9PRkJlVT51j/sCOYDKGGS3ZJrw== - -parent-module@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" - integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== - dependencies: - callsites "^3.0.0" - -parse-asn1@^5.0.0, parse-asn1@^5.1.9: - version "5.1.9" - resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.9.tgz#8dd24c3ea8da77dffbc708d94eaf232fd6156e95" - integrity sha512-fIYNuZ/HastSb80baGOuPRo1O9cf4baWw5WsAp7dBuUzeTD/BoaG8sVTdlPFksBE2lF21dN+A1AnrpIjSWqHHg== - dependencies: - asn1.js "^4.10.1" - browserify-aes "^1.2.0" - evp_bytestokey "^1.0.3" - pbkdf2 "^3.1.5" - safe-buffer "^5.2.1" - -parse-headers@^2.0.0: - version "2.0.6" - resolved "https://registry.yarnpkg.com/parse-headers/-/parse-headers-2.0.6.tgz#7940f0abe5fe65df2dd25d4ce8800cb35b49d01c" - integrity sha512-Tz11t3uKztEW5FEVZnj1ox8GKblWn+PvHY9TmJV5Mll2uHEwRdR/5Li1OlXoECjLYkApdhWy44ocONwXLiKO5A== - -parse-json@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" - integrity sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw== - dependencies: - error-ex "^1.3.1" - json-parse-better-errors "^1.0.1" - -parse-json@^5.2.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" - -parseurl@~1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" - integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== - -path-browserify@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-1.0.1.tgz#d98454a9c3753d5790860f16f68867b9e46be1fd" - integrity sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g== - -path-exists@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" - integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== - -path-expression-matcher@^1.1.3, path-expression-matcher@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/path-expression-matcher/-/path-expression-matcher-1.2.0.tgz#9bdae3787f43b0857b0269e9caaa586c12c8abee" - integrity sha512-DwmPWeFn+tq7TiyJ2CxezCAirXjFxvaiD03npak3cRjlP9+OjTmSy1EpIrEbh+l6JgUundniloMLDQ/6VTdhLQ== - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== - -path-is-inside@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" - integrity sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w== - -path-key@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" - integrity sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw== - -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== - -path-parse@^1.0.6, path-parse@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" - integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== - -path-scurry@^1.11.1, path-scurry@^1.6.1: - version "1.11.1" - resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.11.1.tgz#7960a668888594a0720b12a911d1a742ab9f11d2" - integrity sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA== - dependencies: - lru-cache "^10.2.0" - minipass "^5.0.0 || ^6.0.2 || ^7.0.0" - -path-scurry@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-2.0.2.tgz#6be0d0ee02a10d9e0de7a98bae65e182c9061f85" - integrity sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg== - dependencies: - lru-cache "^11.0.0" - minipass "^7.1.2" - -path-to-regexp@~0.1.12: - version "0.1.13" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.13.tgz#9b22ec16bc3ab88d05a0c7e369869421401ab17d" - integrity sha512-A/AGNMFN3c8bOlvV9RreMdrv7jsmF9XIfDeCd87+I8RNg6s78BhJxMu69NEMHBSJFxKidViTEdruRwEk/WIKqA== - -path-type@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" - integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== - -pathe@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/pathe/-/pathe-2.0.3.tgz#3ecbec55421685b70a9da872b2cff3e1cbed1716" - integrity sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w== - -pathval@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d" - integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== - -pbkdf2@^3.0.17, pbkdf2@^3.0.3, pbkdf2@^3.0.9, pbkdf2@^3.1.5: - version "3.1.5" - resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.5.tgz#444a59d7a259a95536c56e80c89de31cc01ed366" - integrity sha512-Q3CG/cYvCO1ye4QKkuH7EXxs3VC/rI1/trd+qX2+PolbaKG0H+bgcZzrTt96mMyRtejk+JMCiLUn3y29W8qmFQ== - dependencies: - create-hash "^1.2.0" - create-hmac "^1.1.7" - ripemd160 "^2.0.3" - safe-buffer "^5.2.1" - sha.js "^2.4.12" - to-buffer "^1.2.1" - -performance-now@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" - integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow== - -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== - -picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: - version "2.3.2" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.2.tgz#5a942915e26b372dc0f0e6753149a16e6b1c5601" - integrity sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA== - -picomatch@^4.0.2, picomatch@^4.0.3, picomatch@^4.0.4: - version "4.0.4" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.4.tgz#fd6f5e00a143086e074dffe4c924b8fb293b0589" - integrity sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A== - -pify@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" - integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== - -platform-deploy-client@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/platform-deploy-client/-/platform-deploy-client-0.6.0.tgz#1f7a59d0cbae2e78f65ad253d7cc1aff67e3de0e" - integrity sha512-mBfnOvF2gb9acGJjlXBQ6VOAkKFRdljsNKHUVY5xKqzKP2PNh/RqCIvi5AR5NqLMrQ3XaMIwRvmwAjtGw7JhYg== - dependencies: - "@ethersproject/abi" "^5.6.3" - axios "^0.21.2" - defender-base-client "^1.44.0" - lodash "^4.17.19" - node-fetch "^2.6.0" - -pluralize@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-8.0.0.tgz#1a6fa16a38d12a1901e0320fa017051c539ce3b1" - integrity sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA== - -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@^8.5.8: - version "8.5.8" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.5.8.tgz#6230ecc8fb02e7a0f6982e53990937857e13f399" - integrity sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg== - dependencies: - nanoid "^3.3.11" - picocolors "^1.1.1" - source-map-js "^1.2.1" - -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== - -prelude-ls@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" - integrity sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w== - -prepend-http@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" - integrity sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA== - -prettier-plugin-solidity@1.0.0-beta.17: - version "1.0.0-beta.17" - resolved "https://registry.yarnpkg.com/prettier-plugin-solidity/-/prettier-plugin-solidity-1.0.0-beta.17.tgz#fc0fe977202b6503763a338383efeceaa6c7661e" - integrity sha512-YFkxV/rHi1mphi17/XKcJ9QjZlb+L/J0yY2erix21BZfzPv2BN9dfmSRGr/poDp/FBOFSW+jteP2BCMe7HndVQ== - dependencies: - "@solidity-parser/parser" "^0.13.2" - emoji-regex "^9.2.2" - escape-string-regexp "^4.0.0" - semver "^7.3.5" - solidity-comments-extractor "^0.0.7" - string-width "^4.2.2" - -prettier@2.8.8, prettier@^2.3.1, prettier@^2.8.3: - version "2.8.8" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" - integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== - -prettier@^1.14.3: - version "1.19.1" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb" - integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew== - -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" - integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== - -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== - -progress@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" - integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== - -"prompts@git+https://github.com/meshin-blox/prompts.git": - version "2.4.2" - resolved "git+https://github.com/meshin-blox/prompts.git#a22bdac044f6b32ba67adb4eacc2e58322512a2d" - dependencies: - kleur "^4.0.1" - sisteransi "^1.0.5" - -proper-lockfile@^4.1.1: - version "4.1.2" - resolved "https://registry.yarnpkg.com/proper-lockfile/-/proper-lockfile-4.1.2.tgz#c8b9de2af6b2f1601067f98e01ac66baa223141f" - integrity sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA== - dependencies: - graceful-fs "^4.2.4" - retry "^0.12.0" - signal-exit "^3.0.2" - -proxy-addr@~2.0.7: - version "2.0.7" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" - integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== - dependencies: - forwarded "0.2.0" - ipaddr.js "1.9.1" - -proxy-from-env@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" - integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== - -prr@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" - integrity sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw== - -psl@^1.1.28: - version "1.15.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.15.0.tgz#bdace31896f1d97cec6a79e8224898ce93d974c6" - integrity sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w== - dependencies: - punycode "^2.3.1" - -public-encrypt@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" - integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== - dependencies: - bn.js "^4.1.0" - browserify-rsa "^4.0.0" - create-hash "^1.1.0" - parse-asn1 "^5.0.0" - randombytes "^2.0.1" - safe-buffer "^5.1.2" - -pump@^3.0.0: - version "3.0.4" - resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.4.tgz#1f313430527fa8b905622ebd22fe1444e757ab3c" - integrity sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -punycode@2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.0.tgz#5f863edc89b96db09074bad7947bf09056ca4e7d" - integrity sha512-Yxz2kRwT90aPiWEMHVYnEf4+rhwF1tBmmZ4KepCP+Wkium9JxtWnUm1nqGwpiAHr/tnTSeHqr3wb++jgSkXjhA== - -punycode@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" - integrity sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ== - -punycode@^2.1.0, punycode@^2.1.1, punycode@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" - integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== - -qs@^6.11.1, qs@^6.12.3, qs@^6.9.4: - version "6.15.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.15.0.tgz#db8fd5d1b1d2d6b5b33adaf87429805f1909e7b3" - integrity sha512-mAZTtNCeetKMH+pSjrb76NAM8V9a05I9aBZOHztWy/UqcJdQYNsf59vrRKWnojAT9Y+GbIvoTBC++CPHqpDBhQ== - dependencies: - side-channel "^1.1.0" - -qs@~6.14.0: - version "6.14.2" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.14.2.tgz#b5634cf9d9ad9898e31fba3504e866e8efb6798c" - integrity sha512-V/yCWTTF7VJ9hIh18Ugr2zhJMP01MY7c5kh4J870L7imm6/DIzBsNLTXzMwUA3yZ5b/KBqLx8Kp3uRvd7xSe3Q== - dependencies: - side-channel "^1.1.0" - -qs@~6.5.2: - version "6.5.5" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.5.tgz#7c9442fc3f1c58bb52ac57ad09db63ba68916395" - integrity sha512-mzR4sElr1bfCaPJe7m8ilJ6ZXdDaGoObcYR0ZHSsktM/Lt21MVHj5De30GQH2eiZ1qGRTO7LCAzQsUeXTNexWQ== - -query-string@^5.0.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/query-string/-/query-string-5.1.1.tgz#a78c012b71c17e05f2e3fa2319dd330682efb3cb" - integrity sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw== - dependencies: - decode-uri-component "^0.2.0" - object-assign "^4.1.0" - strict-uri-encode "^1.0.0" - -queue-microtask@^1.2.2, queue-microtask@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" - integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== - -quick-lru@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" - integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== - -randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" - integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== - dependencies: - safe-buffer "^5.1.0" - -randomfill@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" - integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== - dependencies: - randombytes "^2.0.5" - safe-buffer "^5.1.0" - -range-parser@~1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" - integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== - -raw-body@^2.4.1, raw-body@~2.5.3: - version "2.5.3" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.3.tgz#11c6650ee770a7de1b494f197927de0c923822e2" - integrity sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA== - dependencies: - bytes "~3.1.2" - http-errors "~2.0.1" - iconv-lite "~0.4.24" - unpipe "~1.0.0" - -readable-stream@^2.3.8, 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== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - -readable-stream@^3.1.0, readable-stream@^3.4.0, readable-stream@^3.6.0: - version "3.6.2" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" - integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readdirp@^4.0.1: - version "4.1.2" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-4.1.2.tgz#eb85801435fbf2a7ee58f19e0921b068fc69948d" - integrity sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg== - -readdirp@~3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" - integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== - dependencies: - picomatch "^2.2.1" - -rechoir@^0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" - integrity sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw== - dependencies: - resolve "^1.1.6" - -recursive-readdir@^2.2.2: - version "2.2.3" - resolved "https://registry.yarnpkg.com/recursive-readdir/-/recursive-readdir-2.2.3.tgz#e726f328c0d69153bcabd5c322d3195252379372" - integrity sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA== - dependencies: - minimatch "^3.0.5" - -reduce-flatten@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/reduce-flatten/-/reduce-flatten-2.0.0.tgz#734fd84e65f375d7ca4465c69798c25c9d10ae27" - integrity sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w== - -regexpp@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" - integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw== - -repeat-string@^1.0.0: - version "1.6.1" - resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" - integrity sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w== - -request@^2.79.0, request@^2.85.0: - version "2.88.2" - resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" - integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== - dependencies: - aws-sign2 "~0.7.0" - aws4 "^1.8.0" - caseless "~0.12.0" - combined-stream "~1.0.6" - extend "~3.0.2" - forever-agent "~0.6.1" - form-data "~2.3.2" - har-validator "~5.1.3" - http-signature "~1.2.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.19" - oauth-sign "~0.9.0" - performance-now "^2.1.0" - qs "~6.5.2" - safe-buffer "^5.1.2" - tough-cookie "~2.5.0" - tunnel-agent "^0.6.0" - uuid "^3.3.2" - -require-directory@^2.1.1: - version "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: - 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== - -resolve-alpn@^1.0.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.2.1.tgz#b7adbdac3546aaaec20b45e7d8265927072726f9" - integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g== - -resolve-from@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" - integrity sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw== - -resolve-from@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" - integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== - -resolve@1.1.x: - version "1.1.7" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" - integrity sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg== - -resolve@1.17.0: - version "1.17.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" - integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== - dependencies: - path-parse "^1.0.6" - -resolve@^1.1.6, resolve@^1.22.1, resolve@^1.3.2: - version "1.22.11" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.11.tgz#aad857ce1ffb8bfa9b0b1ac29f1156383f68c262" - integrity sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ== - dependencies: - is-core-module "^2.16.1" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - -responselike@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" - integrity sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ== - dependencies: - lowercase-keys "^1.0.0" - -responselike@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/responselike/-/responselike-2.0.1.tgz#9a0bc8fdc252f3fb1cca68b016591059ba1422bc" - integrity sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw== - dependencies: - lowercase-keys "^2.0.0" - -restore-cursor@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" - integrity sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q== - dependencies: - onetime "^2.0.0" - signal-exit "^3.0.2" - -retry@0.13.1: - version "0.13.1" - resolved "https://registry.yarnpkg.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658" - integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg== - -retry@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" - integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== - -reusify@^1.0.4: - version "1.1.0" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.1.0.tgz#0fe13b9522e1473f51b558ee796e08f11f9b489f" - integrity sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw== - -rimraf@2.6.3: - version "2.6.3" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" - integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== - dependencies: - glob "^7.1.3" - -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" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - -rimraf@^4.4.1: - version "4.4.1" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-4.4.1.tgz#bd33364f67021c5b79e93d7f4fa0568c7c21b755" - integrity sha512-Gk8NlF062+T9CqNGn6h4tls3k6T1+/nXdOcSZVikNVtlRdYpA7wRJJMoXmuvOnLW844rPjdQ7JgXCYM6PPC/og== - dependencies: - glob "^9.2.0" - -ripemd160@^2.0.0, ripemd160@^2.0.1, ripemd160@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.3.tgz#9be54e4ba5e3559c8eee06a25cd7648bbccdf5a8" - integrity sha512-5Di9UC0+8h1L6ZD2d7awM7E/T4uA1fJRlx6zk/NvdCCVEoAnFqvHmCuNeIKoCeIixBX/q8uM+6ycDvF8woqosA== - dependencies: - hash-base "^3.1.2" - inherits "^2.0.4" - -rlp@2.2.6: - version "2.2.6" - resolved "https://registry.yarnpkg.com/rlp/-/rlp-2.2.6.tgz#c80ba6266ac7a483ef1e69e8e2f056656de2fb2c" - integrity sha512-HAfAmL6SDYNWPUOJNrM500x4Thn4PZsEy5pijPh40U9WfNk0z15hUYzO9xVIMAdIHdFtD8CBDHd75Td1g36Mjg== - dependencies: - bn.js "^4.11.1" - -rlp@^2.2.3, rlp@^2.2.4: - version "2.2.7" - resolved "https://registry.yarnpkg.com/rlp/-/rlp-2.2.7.tgz#33f31c4afac81124ac4b283e2bd4d9720b30beaf" - integrity sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ== - dependencies: - bn.js "^5.2.0" - -rolldown@1.0.0-rc.12: - version "1.0.0-rc.12" - resolved "https://registry.yarnpkg.com/rolldown/-/rolldown-1.0.0-rc.12.tgz#e226fa74a4c21c71a13f8e44f778f81d58853ad5" - integrity sha512-yP4USLIMYrwpPHEFB5JGH1uxhcslv6/hL0OyvTuY+3qlOSJvZ7ntYnoWpehBxufkgN0cvXxppuTu5hHa/zPh+A== - dependencies: - "@oxc-project/types" "=0.122.0" - "@rolldown/pluginutils" "1.0.0-rc.12" - optionalDependencies: - "@rolldown/binding-android-arm64" "1.0.0-rc.12" - "@rolldown/binding-darwin-arm64" "1.0.0-rc.12" - "@rolldown/binding-darwin-x64" "1.0.0-rc.12" - "@rolldown/binding-freebsd-x64" "1.0.0-rc.12" - "@rolldown/binding-linux-arm-gnueabihf" "1.0.0-rc.12" - "@rolldown/binding-linux-arm64-gnu" "1.0.0-rc.12" - "@rolldown/binding-linux-arm64-musl" "1.0.0-rc.12" - "@rolldown/binding-linux-ppc64-gnu" "1.0.0-rc.12" - "@rolldown/binding-linux-s390x-gnu" "1.0.0-rc.12" - "@rolldown/binding-linux-x64-gnu" "1.0.0-rc.12" - "@rolldown/binding-linux-x64-musl" "1.0.0-rc.12" - "@rolldown/binding-openharmony-arm64" "1.0.0-rc.12" - "@rolldown/binding-wasm32-wasi" "1.0.0-rc.12" - "@rolldown/binding-win32-arm64-msvc" "1.0.0-rc.12" - "@rolldown/binding-win32-x64-msvc" "1.0.0-rc.12" - -rollup-plugin-visualizer@5.12.0: - 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.54.0: - version "4.54.0" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.54.0.tgz#930f4dfc41ff94d720006f9f62503612a6c319b8" - integrity sha512-3nk8Y3a9Ea8szgKhinMlGMhGMw89mqule3KWczxhIzqudyHdCIOHw8WJlj/r329fACjKLEh13ZSk7oE22kyeIw== - dependencies: - "@types/estree" "1.0.8" - optionalDependencies: - "@rollup/rollup-android-arm-eabi" "4.54.0" - "@rollup/rollup-android-arm64" "4.54.0" - "@rollup/rollup-darwin-arm64" "4.54.0" - "@rollup/rollup-darwin-x64" "4.54.0" - "@rollup/rollup-freebsd-arm64" "4.54.0" - "@rollup/rollup-freebsd-x64" "4.54.0" - "@rollup/rollup-linux-arm-gnueabihf" "4.54.0" - "@rollup/rollup-linux-arm-musleabihf" "4.54.0" - "@rollup/rollup-linux-arm64-gnu" "4.54.0" - "@rollup/rollup-linux-arm64-musl" "4.54.0" - "@rollup/rollup-linux-loong64-gnu" "4.54.0" - "@rollup/rollup-linux-ppc64-gnu" "4.54.0" - "@rollup/rollup-linux-riscv64-gnu" "4.54.0" - "@rollup/rollup-linux-riscv64-musl" "4.54.0" - "@rollup/rollup-linux-s390x-gnu" "4.54.0" - "@rollup/rollup-linux-x64-gnu" "4.54.0" - "@rollup/rollup-linux-x64-musl" "4.54.0" - "@rollup/rollup-openharmony-arm64" "4.54.0" - "@rollup/rollup-win32-arm64-msvc" "4.54.0" - "@rollup/rollup-win32-ia32-msvc" "4.54.0" - "@rollup/rollup-win32-x64-gnu" "4.54.0" - "@rollup/rollup-win32-x64-msvc" "4.54.0" - fsevents "~2.3.2" - -run-async@^2.2.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" - integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== - -run-parallel@^1.1.9: - version "1.2.0" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" - integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== - dependencies: - queue-microtask "^1.2.2" - -rustbn.js@~0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/rustbn.js/-/rustbn.js-0.2.0.tgz#8082cb886e707155fd1cb6f23bd591ab8d55d0ca" - integrity sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA== - -rxjs@^6.4.0: - version "6.6.7" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9" - integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== - dependencies: - tslib "^1.9.0" - -safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.1, safe-buffer@~5.2.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -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" - -"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -sc-istanbul@^0.4.5: - version "0.4.6" - resolved "https://registry.yarnpkg.com/sc-istanbul/-/sc-istanbul-0.4.6.tgz#cf6784355ff2076f92d70d59047d71c13703e839" - integrity sha512-qJFF/8tW/zJsbyfh/iT/ZM5QNHE3CXxtLJbZsL+CzdJLBsPD7SedJZoUA4d8iAcN2IoMp/Dx80shOOd2x96X/g== - dependencies: - abbrev "1.0.x" - async "1.x" - escodegen "1.8.x" - esprima "2.7.x" - glob "^5.0.15" - handlebars "^4.0.1" - js-yaml "3.x" - mkdirp "0.5.x" - nopt "3.x" - once "1.x" - resolve "1.1.x" - supports-color "^3.1.0" - which "^1.1.1" - wordwrap "^1.0.0" - -scrypt-js@3.0.1, scrypt-js@^3.0.0, scrypt-js@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-3.0.1.tgz#d314a57c2aef69d1ad98a138a21fe9eafa9ee312" - integrity sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA== - -secp256k1@4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-4.0.3.tgz#c4559ecd1b8d3c1827ed2d1b94190d69ce267303" - integrity sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA== - dependencies: - elliptic "^6.5.4" - node-addon-api "^2.0.0" - node-gyp-build "^4.2.0" - -secp256k1@^4.0.1: - version "4.0.4" - resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-4.0.4.tgz#58f0bfe1830fe777d9ca1ffc7574962a8189f8ab" - integrity sha512-6JfvwvjUOn8F/jUoBY2Q1v5WY5XS+rj8qSe0v8Y4ezH4InLgTEeOOPQsRll9OV429Pvo6BCHGavIyJfr3TAhsw== - dependencies: - elliptic "^6.5.7" - node-addon-api "^5.0.0" - node-gyp-build "^4.2.0" - -seedrandom@3.0.5: - version "3.0.5" - resolved "https://registry.yarnpkg.com/seedrandom/-/seedrandom-3.0.5.tgz#54edc85c95222525b0c7a6f6b3543d8e0b3aa0a7" - integrity sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg== - -semaphore-async-await@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/semaphore-async-await/-/semaphore-async-await-1.5.1.tgz#857bef5e3644601ca4b9570b87e9df5ca12974fa" - integrity sha512-b/ptP11hETwYWpeilHXXQiV5UJNJl7ZWWooKRE5eBIYWoom6dZ0SluCIdCtKycsMtZgKWE01/qAw6jblw1YVhg== - -semver@^5.3.0, semver@^5.5.0, semver@^5.5.1: - version "5.7.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" - integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== - -semver@^6.3.0: - version "6.3.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" - integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== - -semver@^7.3.4, semver@^7.3.5, semver@^7.5.1, semver@^7.6.2: - version "7.7.4" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.4.tgz#28464e36060e991fa7a11d0279d2d3f3b57a7e8a" - integrity sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA== - -send@~0.19.0, send@~0.19.1: - version "0.19.2" - resolved "https://registry.yarnpkg.com/send/-/send-0.19.2.tgz#59bc0da1b4ea7ad42736fd642b1c4294e114ff29" - integrity sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg== - dependencies: - debug "2.6.9" - depd "2.0.0" - destroy "1.2.0" - encodeurl "~2.0.0" - escape-html "~1.0.3" - etag "~1.8.1" - fresh "~0.5.2" - http-errors "~2.0.1" - mime "1.6.0" - ms "2.1.3" - on-finished "~2.4.1" - range-parser "~1.2.1" - statuses "~2.0.2" - -serialize-javascript@6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" - integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== - dependencies: - randombytes "^2.1.0" - -serialize-javascript@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.2.tgz#defa1e055c83bf6d59ea805d8da862254eb6a6c2" - integrity sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g== - dependencies: - randombytes "^2.1.0" - -serve-static@~1.16.2: - version "1.16.3" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.16.3.tgz#a97b74d955778583f3862a4f0b841eb4d5d78cf9" - integrity sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA== - dependencies: - encodeurl "~2.0.0" - escape-html "~1.0.3" - parseurl "~1.3.3" - send "~0.19.1" - -servify@^0.1.12: - version "0.1.12" - resolved "https://registry.yarnpkg.com/servify/-/servify-0.1.12.tgz#142ab7bee1f1d033b66d0707086085b17c06db95" - integrity sha512-/xE6GvsKKqyo1BAY+KxOWXcLpPsUUyji7Qg3bVD7hh1eRze5bR1uYiuDA/k3Gof1s9BTzQZEJK8sNcNGFIzeWw== - dependencies: - body-parser "^1.16.0" - cors "^2.8.1" - express "^4.14.0" - request "^2.79.0" - xhr "^2.3.3" - -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" - -setimmediate@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" - integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== - -setprototypeof@1.2.0, setprototypeof@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" - integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== - -sha.js@^2.4.0, sha.js@^2.4.12, sha.js@^2.4.8: - version "2.4.12" - resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.12.tgz#eb8b568bf383dfd1867a32c3f2b74eb52bdbf23f" - integrity sha512-8LzC5+bvI45BjpfXU8V5fdU2mfeKiQe1D1gIMn7XUlF3OTUrpdJpPPH4EMAnF0DsHHdSZqCdSss5qCmJKuiO3w== - dependencies: - inherits "^2.0.4" - safe-buffer "^5.2.1" - to-buffer "^1.2.0" - -sha1@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/sha1/-/sha1-1.1.1.tgz#addaa7a93168f393f19eb2b15091618e2700f848" - integrity sha512-dZBS6OrMjtgVkopB1Gmo4RQCDKiZsqcpAQpkV/aaj+FCrCg8r4I4qMkDPQjBgLIxlmu9k4nUbWq6ohXahOneYA== - dependencies: - charenc ">= 0.0.1" - crypt ">= 0.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" - integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - 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" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - -shelljs@^0.8.3: - version "0.8.5" - resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.5.tgz#de055408d8361bed66c669d2f000538ced8ee20c" - integrity sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow== - dependencies: - glob "^7.0.0" - interpret "^1.0.0" - rechoir "^0.6.2" - -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.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" - integrity sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g== - -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== - -signal-exit@^4.0.1: - version "4.1.0" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" - integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== - -simple-concat@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" - integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== - -simple-get@^2.7.0: - version "2.8.2" - resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-2.8.2.tgz#5708fb0919d440657326cd5fe7d2599d07705019" - integrity sha512-Ijd/rV5o+mSBBs4F/x9oDPtTx9Zb6X9brmnXvMW4J7IR15ngi9q5xxqWBKU744jTZiaXtxaPL7uHG6vtN8kUkw== - dependencies: - decompress-response "^3.3.0" - once "^1.3.1" - simple-concat "^1.0.0" - -sisteransi@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" - integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== - -slash@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" - integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== - -slice-ansi@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" - integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== - dependencies: - ansi-styles "^3.2.0" - astral-regex "^1.0.0" - is-fullwidth-code-point "^2.0.0" - -slice-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" - integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== - dependencies: - ansi-styles "^4.0.0" - astral-regex "^2.0.0" - is-fullwidth-code-point "^3.0.0" - -snappyjs@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/snappyjs/-/snappyjs-0.7.0.tgz#6096eac06382700ae7fdefa579dea5e2aa20f51c" - integrity sha512-u5iEEXkMe2EInQio6Wv9LWHOQYRDbD2O9hzS27GpT/lwfIQhTCnHCTqedqHIHe9ZcvQo+9au6vngQayipz1NYw== - -solc@0.8.15: - version "0.8.15" - resolved "https://registry.yarnpkg.com/solc/-/solc-0.8.15.tgz#d274dca4d5a8b7d3c9295d4cbdc9291ee1c52152" - integrity sha512-Riv0GNHNk/SddN/JyEuFKwbcWcEeho15iyupTSHw5Np6WuXA5D8kEHbyzDHi6sqmvLzu2l+8b1YmL8Ytple+8w== - dependencies: - command-exists "^1.2.8" - commander "^8.1.0" - follow-redirects "^1.12.1" - js-sha3 "0.8.0" - memorystream "^0.3.1" - semver "^5.5.0" - tmp "0.0.33" - -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 "^8.1.0" - follow-redirects "^1.12.1" - js-sha3 "0.8.0" - memorystream "^0.3.1" - semver "^5.5.0" - tmp "0.0.33" - -solc@0.8.6: - version "0.8.6" - resolved "https://registry.yarnpkg.com/solc/-/solc-0.8.6.tgz#e4341fa6780137df97b94a0cfbd59b3f2037d0e0" - integrity sha512-miiDaWdaUnD7A6Cktb/2ug9f+ajcOCDYRr7vgbPEsMoutSlBtp5rca57oMg8iHSuM7jilwdxePujWI/+rbNftQ== - dependencies: - command-exists "^1.2.8" - commander "3.0.2" - 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" - -solhint@3.4.1: - version "3.4.1" - resolved "https://registry.yarnpkg.com/solhint/-/solhint-3.4.1.tgz#8ea15b21c13d1be0b53fd46d605a24d0b36a0c46" - integrity sha512-pzZn2RlZhws1XwvLPVSsxfHrwsteFf5eySOhpAytzXwKQYbTCJV6z8EevYDiSVKMpWrvbKpEtJ055CuEmzp4Xg== - dependencies: - "@solidity-parser/parser" "^0.16.0" - ajv "^6.12.6" - antlr4 "^4.11.0" - ast-parents "^0.0.1" - chalk "^4.1.2" - commander "^10.0.0" - cosmiconfig "^8.0.0" - fast-diff "^1.2.0" - glob "^8.0.3" - ignore "^5.2.4" - js-yaml "^4.1.0" - lodash "^4.17.21" - pluralize "^8.0.0" - semver "^6.3.0" - strip-ansi "^6.0.1" - table "^6.8.1" - text-table "^0.2.0" - optionalDependencies: - prettier "^2.8.3" - -solhint@^2.0.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/solhint/-/solhint-2.3.1.tgz#6fee8fc2635112bf5812f7cba8359c14e9d9a491" - integrity sha512-wP/G+Dqj8LNWlCI9Mt6XiQRWQfZwv1rkZe/V+HKtip5SAZJVvp144PdH28KE45ZvR99Hhrp/Mujt74fSmXsFiw== - dependencies: - ajv "^6.6.1" - antlr4 "4.7.1" - chalk "^2.4.2" - commander "2.18.0" - cosmiconfig "^5.0.7" - eslint "^5.6.0" - fast-diff "^1.1.2" - glob "^7.1.3" - ignore "^4.0.6" - js-yaml "^3.12.0" - lodash "^4.17.11" - semver "^6.3.0" - optionalDependencies: - prettier "^1.14.3" - -solidifier@2.2.3: - version "2.2.3" - resolved "https://registry.yarnpkg.com/solidifier/-/solidifier-2.2.3.tgz#8f50b80bf0506eaa44ba04e4c289380614faa57c" - integrity sha512-5xpR931zT+DWu/xuLUtWjlABMuqE8jvk8hTxpBAXZBf9JQJzQo9eSZ5Sa3Rqwua4UJHOVNTdt8pzm9SuQWX07w== - dependencies: - "@solidity-parser/parser" "0.12.1" - -solidity-ast@^0.4.60: - version "0.4.62" - resolved "https://registry.yarnpkg.com/solidity-ast/-/solidity-ast-0.4.62.tgz#dda2cc377da4cbffe150d056610c186e35b6cc81" - integrity sha512-jSC7msQCkJXIzM8LlDjRZ5cif5w40g6THlXHFk3zchbL5dm3YLoBETvqPGo5KndYkftjhcs5kz1fnTu4d34lVQ== - -solidity-bytes-utils@0.8.4: - version "0.8.4" - resolved "https://registry.yarnpkg.com/solidity-bytes-utils/-/solidity-bytes-utils-0.8.4.tgz#646588b7031153770350f982665b8c9033f7dc26" - integrity sha512-/bjac5YR12i0plOKvGlhE51F5IWGP6rI8DJetCQlXcnwKWz/Hgf/vr+Qlk1BWz56xVcwVhmhCaDkTMnx5xvt0g== - -solidity-comments-extractor@^0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/solidity-comments-extractor/-/solidity-comments-extractor-0.0.7.tgz#99d8f1361438f84019795d928b931f4e5c39ca19" - integrity sha512-wciNMLg/Irp8OKGrh3S2tfvZiZ0NEyILfcRCXCD4mp7SgK/i9gzLfhY2hY7VMCQJ3kH9UB9BzNdibIVMchzyYw== - -solidity-coverage@0.8.14: - version "0.8.14" - resolved "https://registry.yarnpkg.com/solidity-coverage/-/solidity-coverage-0.8.14.tgz#db9bfcc10e3bc369fc074b35b267d665bcc6ae2e" - integrity sha512-ItAAObe5GaEOp20kXC2BZRnph+9P7Rtoqg2mQc2SXGEHgSDF2wWd1Wxz3ntzQWXkbCtIIGdJT918HG00cObwbA== - dependencies: - "@ethersproject/abi" "^5.0.9" - "@solidity-parser/parser" "^0.19.0" - chalk "^2.4.2" - death "^1.1.0" - difflib "^0.2.4" - fs-extra "^8.1.0" - ghost-testrpc "^0.0.2" - global-modules "^2.0.0" - globby "^10.0.1" - jsonschema "^1.2.4" - lodash "^4.17.21" - mocha "^10.2.0" - node-emoji "^1.10.0" - pify "^4.0.1" - recursive-readdir "^2.2.2" - sc-istanbul "^0.4.5" - semver "^7.3.4" - shelljs "^0.8.3" - web3-utils "^1.3.6" - -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" - integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map@^0.6.0, source-map@^0.6.1: - 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.6" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.6.tgz#a3658ab87e5b6429c8a1f3ba0083d4c61ca3ef02" - integrity sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ== - -source-map@~0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.2.0.tgz#dab73fbcfc2ba819b4de03bd6f6eaa48164b3f9d" - integrity sha512-CBdZ2oa/BHhS4xj5DlhjWNHcan57/5YuvfdLf17iVmIpd9KRm+DFLmC6nBNj+6Ua7Kt3TmOjDpQT1aTYOQtoUA== - dependencies: - amdefine ">=0.0.4" - -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== - -sshpk@^1.7.0: - version "1.18.0" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.18.0.tgz#1663e55cddf4d688b86a46b77f0d5fe363aba028" - integrity sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ== - dependencies: - asn1 "~0.2.3" - assert-plus "^1.0.0" - bcrypt-pbkdf "^1.0.0" - dashdash "^1.12.0" - ecc-jsbn "~0.1.1" - getpass "^0.1.1" - jsbn "~0.1.0" - safer-buffer "^2.0.2" - tweetnacl "~0.14.0" - -ssv-keys@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/ssv-keys/-/ssv-keys-1.1.0.tgz#bbd5f7c0c51cb16899938c8ea6aab543f1ef6963" - integrity sha512-nKxKbGkqhw3pPHfDvwOgOSD5IYLRx7WPxBJQRMorzv0q6FIFUl7T+sBbBzL0AHvv4H/BBNUFQyHBRSo6TIrRyA== - dependencies: - "@types/figlet" "^1.5.4" - "@types/underscore" "^1.11.4" - "@types/yargs" "^17.0.12" - argparse "^2.0.1" - assert "^2.0.0" - atob "^2.1.2" - bls-eth-wasm "^1.0.4" - bls-signatures "^0.2.5" - btoa "^1.2.1" - class-validator "^0.13.2" - colors "^1.4.0" - crypto "^1.0.1" - eth2-keystore-js "^1.0.8" - ethereumjs-util "^7.1.5" - ethereumjs-wallet "^1.0.1" - ethers "^5.7.2" - events "^3.3.0" - figlet "^1.5.2" - js-base64 "^3.7.2" - jsencrypt "3.2.1" - minimist "^1.2.6" - moment "^2.29.3" - node-jsencrypt "^1.0.0" - prompts "https://github.com/meshin-blox/prompts.git" - scrypt-js "^3.0.1" - semver "^7.5.1" - stream "^0.0.2" - underscore "^1.13.4" - web3 "1.7.3" - yargs "^17.5.1" - -"ssv-scanner@github:bloxapp/ssv-scanner#v1.0.5": - version "1.0.4" - resolved "https://codeload.github.com/bloxapp/ssv-scanner/tar.gz/45068c93b3de84495f6cfad2767787c91d98aa8f" - dependencies: - "@types/figlet" "^1.5.4" - argparse "^2.0.1" - cli-progress "^3.11.2" - ethers "^6.13.2" - figlet "^1.5.2" - -stackback@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/stackback/-/stackback-0.0.2.tgz#1ac8a0d9483848d1695e418b6d031a3c3ce68e3b" - integrity sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw== - -stacktrace-parser@^0.1.10: - version "0.1.11" - resolved "https://registry.yarnpkg.com/stacktrace-parser/-/stacktrace-parser-0.1.11.tgz#c7c08f9b29ef566b9a6f7b255d7db572f66fabc4" - integrity sha512-WjlahMgHmCJpqzU8bIBy4qtsZdU9lRlcZE3Lvyej6t4tuOuv1vk57OW3MBrj6hXBFx/nNoC9MPMTcr5YA7NQbg== - dependencies: - type-fest "^0.7.1" - -statuses@~2.0.1, statuses@~2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.2.tgz#8f75eecef765b5e1cfcdc080da59409ed424e382" - integrity sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw== - -std-env@^4.0.0-rc.1: - version "4.0.0" - resolved "https://registry.yarnpkg.com/std-env/-/std-env-4.0.0.tgz#ba3dc31c3a46bc5ba21138aa20a6a4ceb5bb9b7e" - integrity sha512-zUMPtQ/HBY3/50VbpkupYHbRroTRZJPRLvreamgErJVys0ceuzMkD44J/QjqhHjOzK42GQ3QZIeFG1OYfOtKqQ== - -stream@^0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/stream/-/stream-0.0.2.tgz#7f5363f057f6592c5595f00bc80a27f5cec1f0ef" - integrity sha512-gCq3NDI2P35B2n6t76YJuOp7d6cN/C7Rt0577l91wllh0sY9ZBuw9KaSGqH/b0hzn3CWWJbpbW0W0WvQ1H/Q7g== - dependencies: - emitter-component "^1.1.1" - -strict-uri-encode@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" - integrity sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ== - -string-format@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/string-format/-/string-format-2.0.0.tgz#f2df2e7097440d3b65de31b6d40d54c96eaffb9b" - integrity sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA== - -"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@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" - integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== - dependencies: - is-fullwidth-code-point "^2.0.0" - strip-ansi "^4.0.0" - -string-width@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" - integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== - dependencies: - emoji-regex "^7.0.1" - is-fullwidth-code-point "^2.0.0" - strip-ansi "^5.1.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: - 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@^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== - dependencies: - eastasianwidth "^0.2.0" - emoji-regex "^9.2.2" - strip-ansi "^7.0.1" - -string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - -"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== - dependencies: - ansi-regex "^5.0.1" - -strip-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" - integrity sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow== - dependencies: - ansi-regex "^3.0.0" - -strip-ansi@^5.1.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" - integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== - dependencies: - ansi-regex "^4.1.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: - version "7.2.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.2.0.tgz#d22a269522836a627af8d04b5c3fd2c7fa3e32e3" - integrity sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w== - dependencies: - ansi-regex "^6.2.2" - -strip-hex-prefix@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz#0c5f155fef1151373377de9dbb588da05500e36f" - integrity sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A== - dependencies: - is-hex-prefixed "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" - integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== - -strip-json-comments@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== - -strnum@^1.0.5: - version "1.1.2" - resolved "https://registry.yarnpkg.com/strnum/-/strnum-1.1.2.tgz#57bca4fbaa6f271081715dbc9ed7cee5493e28e4" - integrity sha512-vrN+B7DBIoTTZjnPNewwhx6cBA/H+IS7rfW68n7XxC1y7uoiGQBxaKzqucGUgavX15dJgiGztLJ8vxuEzwqBdA== - -strnum@^2.2.0: - version "2.2.2" - resolved "https://registry.yarnpkg.com/strnum/-/strnum-2.2.2.tgz#f11fd94ab62b536ba2ecc615858f3747c2881b3f" - integrity sha512-DnR90I+jtXNSTXWdwrEy9FakW7UX+qUZg28gj5fk2vxxl7uS/3bpI4fjFYVmdK9etptYBPNkpahuQnEwhwECqA== - -supports-color@8.1.1, supports-color@^8.1.1: - version "8.1.1" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" - integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== - dependencies: - has-flag "^4.0.0" - -supports-color@^3.1.0: - version "3.2.3" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" - integrity sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A== - dependencies: - has-flag "^1.0.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== - dependencies: - has-flag "^3.0.0" - -supports-color@^7.1.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - dependencies: - has-flag "^4.0.0" - -supports-preserve-symlinks-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" - integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== - -swarm-js@^0.1.40: - version "0.1.42" - resolved "https://registry.yarnpkg.com/swarm-js/-/swarm-js-0.1.42.tgz#497995c62df6696f6e22372f457120e43e727979" - integrity sha512-BV7c/dVlA3R6ya1lMlSSNPLYrntt0LUq4YMgy3iwpCIc6rZnS5W2wUoctarZ5pXlpKtxDDf9hNziEkcfrxdhqQ== - dependencies: - bluebird "^3.5.0" - buffer "^5.0.5" - eth-lib "^0.1.26" - fs-extra "^4.0.2" - got "^11.8.5" - mime-types "^2.1.16" - mkdirp-promise "^5.0.1" - mock-fs "^4.1.0" - setimmediate "^1.0.5" - tar "^4.0.2" - xhr-request "^1.0.1" - -sync-fetch@0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/sync-fetch/-/sync-fetch-0.5.2.tgz#65e7ae1133219938dc92eb19aa21d5eb79ebadec" - integrity sha512-6gBqqkHrYvkH65WI2bzrDwrIKmt3U10s4Exnz3dYuE5Ah62FIfNv/F63inrNhu2Nyh3GH5f42GKU3RrSJoaUyQ== - dependencies: - node-fetch "^2.6.1" - -table-layout@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/table-layout/-/table-layout-1.0.2.tgz#c4038a1853b0136d63365a734b6931cf4fad4a04" - integrity sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A== - dependencies: - array-back "^4.0.1" - deep-extend "~0.6.0" - typical "^5.2.0" - wordwrapjs "^4.0.0" - -table@^5.2.3: - version "5.4.6" - resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" - integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug== - dependencies: - ajv "^6.10.2" - lodash "^4.17.14" - slice-ansi "^2.1.0" - string-width "^3.0.0" - -table@^6.8.0, table@^6.8.1: - version "6.9.0" - resolved "https://registry.yarnpkg.com/table/-/table-6.9.0.tgz#50040afa6264141c7566b3b81d4d82c47a8668f5" - integrity sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A== - dependencies: - ajv "^8.0.1" - lodash.truncate "^4.4.2" - slice-ansi "^4.0.0" - string-width "^4.2.3" - strip-ansi "^6.0.1" - -tar@^4.0.2: - version "4.4.19" - resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.19.tgz#2e4d7263df26f2b914dee10c825ab132123742f3" - integrity sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA== - dependencies: - chownr "^1.1.4" - fs-minipass "^1.2.7" - minipass "^2.9.0" - minizlib "^1.3.3" - mkdirp "^0.5.5" - safe-buffer "^5.2.1" - yallist "^3.1.1" - -text-table@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== - -through@^2.3.6: - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== - -timed-out@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" - integrity sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA== - -tiny-invariant@^1.3.1: - version "1.3.3" - resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.3.3.tgz#46680b7a873a0d5d10005995eb90a70d74d60127" - integrity sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg== - -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== - -tinyexec@^1.0.2: - version "1.0.4" - resolved "https://registry.yarnpkg.com/tinyexec/-/tinyexec-1.0.4.tgz#6c60864fe1d01331b2f17c6890f535d7e5385408" - integrity sha512-u9r3uZC0bdpGOXtlxUIdwf9pkmvhqJdrVCH9fapQtgy/OeTTMZ1nqH7agtvEfmGui6e1XxjcdrlxvxJvc3sMqw== - -tinyglobby@^0.2.15, tinyglobby@^0.2.6: - version "0.2.15" - resolved "https://registry.yarnpkg.com/tinyglobby/-/tinyglobby-0.2.15.tgz#e228dd1e638cea993d2fdb4fcd2d4602a79951c2" - integrity sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ== - dependencies: - fdir "^6.5.0" - picomatch "^4.0.3" - -tinyrainbow@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/tinyrainbow/-/tinyrainbow-3.1.0.tgz#1d8a623893f95cf0a2ddb9e5d11150e191409421" - integrity sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw== - -tmp@0.0.33, tmp@^0.0.33: - version "0.0.33" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" - integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== - dependencies: - os-tmpdir "~1.0.2" - -to-buffer@^1.2.0, to-buffer@^1.2.1, to-buffer@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/to-buffer/-/to-buffer-1.2.2.tgz#ffe59ef7522ada0a2d1cb5dfe03bb8abc3cdc133" - integrity sha512-db0E3UJjcFhpDhAF4tLo03oli3pwl3dbnzXOUIlRKrp+ldk/VUxzpWYZENsw2SZiuBjHAk7DfB0VU7NKdpb6sw== - dependencies: - isarray "^2.0.5" - safe-buffer "^5.2.1" - typed-array-buffer "^1.0.3" - -to-readable-stream@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771" - integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q== - -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" - -toidentifier@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" - integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== - -tough-cookie@~2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" - integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== - dependencies: - psl "^1.1.28" - punycode "^2.1.1" - -tr46@~0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" - integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== - -ts-command-line-args@^2.2.0: - version "2.5.1" - resolved "https://registry.yarnpkg.com/ts-command-line-args/-/ts-command-line-args-2.5.1.tgz#e64456b580d1d4f6d948824c274cf6fa5f45f7f0" - integrity sha512-H69ZwTw3rFHb5WYpQya40YAX2/w7Ut75uUECbgBIsLmM+BNuYnxsltfyyLMxy6sEeKxgijLTnQtLd0nKd6+IYw== - dependencies: - chalk "^4.1.0" - command-line-args "^5.1.1" - command-line-usage "^6.1.0" - string-format "^2.0.0" - -ts-essentials@^7.0.1: - version "7.0.3" - resolved "https://registry.yarnpkg.com/ts-essentials/-/ts-essentials-7.0.3.tgz#686fd155a02133eedcc5362dc8b5056cde3e5a38" - integrity sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ== - -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@^1.11.1, tslib@^1.13.0, tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3: - version "1.14.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== - -tslib@^2.3.1, tslib@^2.4.0, tslib@^2.6.0, tslib@^2.6.2: - version "2.8.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" - integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== - -tslint-config-prettier@^1.18.0: - version "1.18.0" - resolved "https://registry.yarnpkg.com/tslint-config-prettier/-/tslint-config-prettier-1.18.0.tgz#75f140bde947d35d8f0d238e0ebf809d64592c37" - integrity sha512-xPw9PgNPLG3iKRxmK7DWr+Ea/SzrvfHtjFt5LBl61gk2UBG/DB9kCXRjv+xyIU1rUtnayLeMUVJBcMX8Z17nDg== - -tslint@^6.1.3: - version "6.1.3" - resolved "https://registry.yarnpkg.com/tslint/-/tslint-6.1.3.tgz#5c23b2eccc32487d5523bd3a470e9aa31789d904" - integrity sha512-IbR4nkT96EQOvKE2PW/djGz8iGNeJ4rF2mBfiYaR/nvUWYKJhLwimoJKgjIFEIDibBtOevj7BqCRL4oHeWWUCg== - dependencies: - "@babel/code-frame" "^7.0.0" - builtin-modules "^1.1.1" - chalk "^2.3.0" - commander "^2.12.1" - diff "^4.0.1" - glob "^7.1.1" - js-yaml "^3.13.1" - minimatch "^3.0.4" - mkdirp "^0.5.3" - resolve "^1.3.2" - semver "^5.3.0" - tslib "^1.13.0" - tsutils "^2.29.0" - -tsort@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/tsort/-/tsort-0.0.1.tgz#e2280f5e817f8bf4275657fd0f9aebd44f5a2786" - integrity sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw== - -tsutils@^2.29.0: - version "2.29.0" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.29.0.tgz#32b488501467acbedd4b85498673a0812aca0b99" - integrity sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA== - dependencies: - tslib "^1.8.1" - -tunnel-agent@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" - integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== - dependencies: - safe-buffer "^5.0.1" - -tweetnacl@^0.14.3, tweetnacl@~0.14.0: - version "0.14.5" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" - integrity sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA== - -type-check@^0.4.0, type-check@~0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" - integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== - dependencies: - prelude-ls "^1.2.1" - -type-check@~0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" - integrity sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg== - dependencies: - prelude-ls "~1.1.2" - -type-detect@^4.0.0, type-detect@^4.0.5, type-detect@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.1.0.tgz#deb2453e8f08dcae7ae98c626b13dddb0155906c" - integrity sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw== - -type-fest@^0.20.2: - version "0.20.2" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" - integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== - -type-fest@^0.21.3: - version "0.21.3" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" - integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== - -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-is@~1.6.18: - version "1.6.18" - resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" - integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== - dependencies: - media-typer "0.3.0" - mime-types "~2.1.24" - -type@^2.7.2: - version "2.7.3" - resolved "https://registry.yarnpkg.com/type/-/type-2.7.3.tgz#436981652129285cc3ba94f392886c2637ea0486" - integrity sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ== - -typechain@^8.0.0: - version "8.3.2" - resolved "https://registry.yarnpkg.com/typechain/-/typechain-8.3.2.tgz#1090dd8d9c57b6ef2aed3640a516bdbf01b00d73" - integrity sha512-x/sQYr5w9K7yv3es7jo4KTX05CLxOf7TRWwoHlrjRh8H82G64g+k7VuWPJlgMo6qrjfCulOdfBjiaDtmhFYD/Q== - dependencies: - "@types/prettier" "^2.1.1" - debug "^4.3.1" - fs-extra "^7.0.0" - glob "7.1.7" - js-sha3 "^0.8.0" - lodash "^4.17.15" - mkdirp "^1.0.4" - prettier "^2.3.1" - ts-command-line-args "^2.2.0" - ts-essentials "^7.0.1" - -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" - -typedarray-to-buffer@^3.1.5: - version "3.1.5" - resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" - integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== - dependencies: - is-typedarray "^1.0.0" - -typescript@^4.3.2: - version "4.9.5" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" - integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== - -typical@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/typical/-/typical-4.0.0.tgz#cbeaff3b9d7ae1e2bbfaf5a4e6f11eccfde94fc4" - integrity sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw== - -typical@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/typical/-/typical-5.2.0.tgz#4daaac4f2b5315460804f0acf6cb69c52bb93066" - integrity sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg== - -uglify-js@^3.1.4: - version "3.19.3" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.19.3.tgz#82315e9bbc6f2b25888858acd1fff8441035b77f" - integrity sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ== - -ultron@~1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c" - integrity sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og== - -underscore@^1.13.4: - version "1.13.8" - resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.13.8.tgz#a93a21186c049dbf0e847496dba72b7bd8c1e92b" - integrity sha512-DXtD3ZtEQzc7M8m4cXotyHR+FAS18C64asBYY5vqZexfYryNNnDc02W4hKg3rdQuqOYas1jkseX0+nZXjTXnvQ== - -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@~7.18.0: - version "7.18.2" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-7.18.2.tgz#29357a89e7b7ca4aef3bf0fd3fd0cd73884229e9" - integrity sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w== - -undici@^5.14.0: - version "5.29.0" - resolved "https://registry.yarnpkg.com/undici/-/undici-5.29.0.tgz#419595449ae3f2cdcba3580a2e8903399bd1f5a3" - integrity sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg== - dependencies: - "@fastify/busboy" "^2.0.0" - -unfetch@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/unfetch/-/unfetch-4.2.0.tgz#7e21b0ef7d363d8d9af0fb929a5555f6ef97a3be" - integrity sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA== - -universalify@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" - integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== - -universalify@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" - integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== - -unpipe@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" - integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== - -uri-js@^4.2.2: - version "4.4.1" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" - integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== - dependencies: - punycode "^2.1.0" - -url-parse-lax@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" - integrity sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ== - dependencies: - prepend-http "^2.0.0" - -url-set-query@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/url-set-query/-/url-set-query-1.0.0.tgz#016e8cfd7c20ee05cafe7795e892bd0702faa339" - integrity sha512-3AChu4NiXquPfeckE5R5cGdiHCMWJx1dwCWOmWIL4KHAziJNOFIYJlpGFeKDvwLPHovZRCxK3cYlwzqI9Vp+Gg== - -url@^0.11.0: - version "0.11.4" - resolved "https://registry.yarnpkg.com/url/-/url-0.11.4.tgz#adca77b3562d56b72746e76b330b7f27b6721f3c" - integrity sha512-oCwdVC7mTuWiPyjLUz/COz5TLk6wgp0RCsN+wHZ2Ekneac9w8uuV0njcbbie2ME+Vs+d6duwmYuR3HgQXs1fOg== - dependencies: - punycode "^1.4.1" - qs "^6.12.3" - -utf-8-validate@5.0.7: - version "5.0.7" - resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.7.tgz#c15a19a6af1f7ad9ec7ddc425747ca28c3644922" - integrity sha512-vLt1O5Pp+flcArHGIyKEQq883nBt8nN8tVBcoL0qUXj2XT1n7p70yGIq2VK98I5FdZ1YHc0wk/koOnHjnXWk1Q== - dependencies: - node-gyp-build "^4.3.0" - -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" - -utf8@3.0.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.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== - -util@^0.12.0, util@^0.12.5: - version "0.12.5" - resolved "https://registry.yarnpkg.com/util/-/util-0.12.5.tgz#5f17a6059b73db61a875668781a1c2b136bd6fbc" - integrity sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA== - dependencies: - inherits "^2.0.3" - is-arguments "^1.0.4" - is-generator-function "^1.0.7" - is-typed-array "^1.1.3" - which-typed-array "^1.1.2" - -utils-merge@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" - integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== - -uuid@3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" - integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA== - -uuid@9.0.1, uuid@^9.0.1: - version "9.0.1" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30" - integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== - -uuid@^3.3.2: - version "3.4.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" - integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== - -uuid@^8.3.2: - version "8.3.2" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" - integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== - -validator@^13.7.0: - version "13.15.26" - resolved "https://registry.yarnpkg.com/validator/-/validator-13.15.26.tgz#36c3deeab30e97806a658728a155c66fcaa5b944" - integrity sha512-spH26xU080ydGggxRyR1Yhcbgx+j3y5jbNXk/8L+iRvdIEQ4uTRH2Sgf2dokud6Q4oAtsbNvJ1Ft+9xmm6IZcA== - -varint@^5.0.0: - version "5.0.2" - resolved "https://registry.yarnpkg.com/varint/-/varint-5.0.2.tgz#5b47f8a947eb668b848e034dcfa87d0ff8a7f7a4" - integrity sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow== - -vary@^1, vary@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" - integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== - -verror@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" - integrity sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw== - dependencies: - assert-plus "^1.0.0" - core-util-is "1.0.2" - extsprintf "^1.2.0" - -viem@^2.27.0: - version "2.47.6" - resolved "https://registry.yarnpkg.com/viem/-/viem-2.47.6.tgz#0249c166d5e0555074ffd3d320f2be2057551796" - integrity sha512-zExmbI99NGvMdYa7fmqSTLgkwh48dmhgEqFrUgkpL4kfG4XkVefZ8dZqIKVUhZo6Uhf0FrrEXOsHm9LUyIvI2Q== - dependencies: - "@noble/curves" "1.9.1" - "@noble/hashes" "1.8.0" - "@scure/bip32" "1.7.0" - "@scure/bip39" "1.6.0" - abitype "1.2.3" - isows "1.0.7" - ox "0.14.7" - ws "8.18.3" - -"vite@^6.0.0 || ^7.0.0 || ^8.0.0": - version "8.0.3" - resolved "https://registry.yarnpkg.com/vite/-/vite-8.0.3.tgz#036d9e3b077ff57b128660b3e3a5d2d12bac9b42" - integrity sha512-B9ifbFudT1TFhfltfaIPgjo9Z3mDynBTJSUYxTjOQruf/zHH+ezCQKcoqO+h7a9Pw9Nm/OtlXAiGT1axBgwqrQ== - dependencies: - lightningcss "^1.32.0" - picomatch "^4.0.4" - postcss "^8.5.8" - rolldown "1.0.0-rc.12" - tinyglobby "^0.2.15" - optionalDependencies: - fsevents "~2.3.3" - -"vitest@catalog:": - version "4.1.2" - resolved "https://registry.yarnpkg.com/vitest/-/vitest-4.1.2.tgz#3f7b36838ddf1067160489bea9a21ef465496265" - integrity sha512-xjR1dMTVHlFLh98JE3i/f/WePqJsah4A0FK9cc8Ehp9Udk0AZk6ccpIZhh1qJ/yxVWRZ+Q54ocnD8TXmkhspGg== - dependencies: - "@vitest/expect" "4.1.2" - "@vitest/mocker" "4.1.2" - "@vitest/pretty-format" "4.1.2" - "@vitest/runner" "4.1.2" - "@vitest/snapshot" "4.1.2" - "@vitest/spy" "4.1.2" - "@vitest/utils" "4.1.2" - es-module-lexer "^2.0.0" - expect-type "^1.3.0" - magic-string "^0.30.21" - obug "^2.1.1" - pathe "^2.0.3" - picomatch "^4.0.3" - std-env "^4.0.0-rc.1" - tinybench "^2.9.0" - tinyexec "^1.0.2" - tinyglobby "^0.2.15" - tinyrainbow "^3.1.0" - vite "^6.0.0 || ^7.0.0 || ^8.0.0" - why-is-node-running "^2.3.0" - -web3-bzz@1.7.3: - version "1.7.3" - resolved "https://registry.yarnpkg.com/web3-bzz/-/web3-bzz-1.7.3.tgz#6860a584f748838af5e3932b6798e024ab8ae951" - integrity sha512-y2i2IW0MfSqFc1JBhBSQ59Ts9xE30hhxSmLS13jLKWzie24/An5dnoGarp2rFAy20tevJu1zJVPYrEl14jiL5w== - dependencies: - "@types/node" "^12.12.6" - got "9.6.0" - swarm-js "^0.1.40" - -web3-core-helpers@1.7.3: - version "1.7.3" - resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.7.3.tgz#9a8d7830737d0e9c48694b244f4ce0f769ba67b9" - integrity sha512-qS2t6UKLhRV/6C7OFHtMeoHphkcA+CKUr2vfpxy4hubs3+Nj28K9pgiqFuvZiXmtEEwIAE2A28GBOC3RdcSuFg== - dependencies: - web3-eth-iban "1.7.3" - web3-utils "1.7.3" - -web3-core-method@1.7.3: - version "1.7.3" - resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.7.3.tgz#eb2a4f140448445c939518c0fa6216b3d265c5e9" - integrity sha512-SeF8YL/NVFbj/ddwLhJeS0io8y7wXaPYA2AVT0h2C2ESYkpvOtQmyw2Bc3aXxBmBErKcbOJjE2ABOKdUmLSmMA== - dependencies: - "@ethersproject/transactions" "^5.0.0-beta.135" - web3-core-helpers "1.7.3" - web3-core-promievent "1.7.3" - web3-core-subscriptions "1.7.3" - web3-utils "1.7.3" - -web3-core-promievent@1.7.3: - version "1.7.3" - resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.7.3.tgz#2d0eeef694569b61355054c721578f67df925b80" - integrity sha512-+mcfNJLP8h2JqcL/UdMGdRVfTdm+bsoLzAFtLpazE4u9kU7yJUgMMAqnK59fKD3Zpke3DjaUJKwz1TyiGM5wig== - dependencies: - eventemitter3 "4.0.4" - -web3-core-requestmanager@1.7.3: - version "1.7.3" - resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.7.3.tgz#226f79d16e546c9157d00908de215e984cae84e9" - integrity sha512-bC+jeOjPbagZi2IuL1J5d44f3zfPcgX+GWYUpE9vicNkPUxFBWRG+olhMo7L+BIcD57cTmukDlnz+1xBULAjFg== - dependencies: - util "^0.12.0" - web3-core-helpers "1.7.3" - web3-providers-http "1.7.3" - web3-providers-ipc "1.7.3" - web3-providers-ws "1.7.3" - -web3-core-subscriptions@1.7.3: - version "1.7.3" - resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.7.3.tgz#ca456dfe2c219a0696c5cf34c13b03c3599ec5d5" - integrity sha512-/i1ZCLW3SDxEs5mu7HW8KL4Vq7x4/fDXY+yf/vPoDljlpvcLEOnI8y9r7om+0kYwvuTlM6DUHHafvW0221TyRQ== - dependencies: - eventemitter3 "4.0.4" - web3-core-helpers "1.7.3" - -web3-core@1.7.3: - version "1.7.3" - resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.7.3.tgz#2ef25c4cc023997f43af9f31a03b571729ff3cda" - integrity sha512-4RNxueGyevD1XSjdHE57vz/YWRHybpcd3wfQS33fgMyHZBVLFDNwhn+4dX4BeofVlK/9/cmPAokLfBUStZMLdw== - dependencies: - "@types/bn.js" "^4.11.5" - "@types/node" "^12.12.6" - bignumber.js "^9.0.0" - web3-core-helpers "1.7.3" - web3-core-method "1.7.3" - web3-core-requestmanager "1.7.3" - web3-utils "1.7.3" - -web3-eth-abi@1.7.3: - version "1.7.3" - resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.7.3.tgz#2a1123c7252c37100eecd0b1fb2fb2c51366071f" - integrity sha512-ZlD8DrJro0ocnbZViZpAoMX44x5aYAb73u2tMq557rMmpiluZNnhcCYF/NnVMy6UIkn7SF/qEA45GXA1ne6Tnw== - dependencies: - "@ethersproject/abi" "5.0.7" - web3-utils "1.7.3" - -web3-eth-accounts@1.7.3: - version "1.7.3" - resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.7.3.tgz#cd1789000f13ed3c438e96b3e80ee7be8d3f1a9b" - integrity sha512-aDaWjW1oJeh0LeSGRVyEBiTe/UD2/cMY4dD6pQYa8dOhwgMtNQjxIQ7kacBBXe7ZKhjbIFZDhvXN4mjXZ82R2Q== - dependencies: - "@ethereumjs/common" "^2.5.0" - "@ethereumjs/tx" "^3.3.2" - crypto-browserify "3.12.0" - eth-lib "0.2.8" - ethereumjs-util "^7.0.10" - scrypt-js "^3.0.1" - uuid "3.3.2" - web3-core "1.7.3" - web3-core-helpers "1.7.3" - web3-core-method "1.7.3" - web3-utils "1.7.3" - -web3-eth-contract@1.7.3: - version "1.7.3" - resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.7.3.tgz#c4efc118ed7adafbc1270b633f33e696a39c7fc7" - integrity sha512-7mjkLxCNMWlQrlfM/MmNnlKRHwFk5XrZcbndoMt3KejcqDP6dPHi2PZLutEcw07n/Sk8OMpSamyF3QiGfmyRxw== - dependencies: - "@types/bn.js" "^4.11.5" - web3-core "1.7.3" - web3-core-helpers "1.7.3" - web3-core-method "1.7.3" - web3-core-promievent "1.7.3" - web3-core-subscriptions "1.7.3" - web3-eth-abi "1.7.3" - web3-utils "1.7.3" - -web3-eth-ens@1.7.3: - version "1.7.3" - resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-1.7.3.tgz#ebc56a4dc7007f4f899259bbae1237d3095e2f3f" - integrity sha512-q7+hFGHIc0mBI3LwgRVcLCQmp6GItsWgUtEZ5bjwdjOnJdbjYddm7PO9RDcTDQ6LIr7hqYaY4WTRnDHZ6BEt5Q== - dependencies: - content-hash "^2.5.2" - eth-ens-namehash "2.0.8" - web3-core "1.7.3" - web3-core-helpers "1.7.3" - web3-core-promievent "1.7.3" - web3-eth-abi "1.7.3" - web3-eth-contract "1.7.3" - web3-utils "1.7.3" - -web3-eth-iban@1.7.3: - version "1.7.3" - resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.7.3.tgz#47433a73380322bba04e17b91fccd4a0e63a390a" - integrity sha512-1GPVWgajwhh7g53mmYDD1YxcftQniIixMiRfOqlnA1w0mFGrTbCoPeVaSQ3XtSf+rYehNJIZAUeDBnONVjXXmg== - dependencies: - bn.js "^4.11.9" - web3-utils "1.7.3" - -web3-eth-personal@1.7.3: - version "1.7.3" - resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.7.3.tgz#ca2464dca356d4335aa8141cf75a6947f10f45a6" - integrity sha512-iTLz2OYzEsJj2qGE4iXC1Gw+KZN924fTAl0ESBFs2VmRhvVaM7GFqZz/wx7/XESl3GVxGxlRje3gNK0oGIoYYQ== - dependencies: - "@types/node" "^12.12.6" - web3-core "1.7.3" - web3-core-helpers "1.7.3" - web3-core-method "1.7.3" - web3-net "1.7.3" - web3-utils "1.7.3" - -web3-eth@1.7.3: - version "1.7.3" - resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.7.3.tgz#9e92785ea18d682548b6044551abe7f2918fc0b5" - integrity sha512-BCIRMPwaMlTCbswXyGT6jj9chCh9RirbDFkPtvqozfQ73HGW7kP78TXXf9+Xdo1GjutQfxi/fQ9yPdxtDJEpDA== - dependencies: - web3-core "1.7.3" - web3-core-helpers "1.7.3" - web3-core-method "1.7.3" - web3-core-subscriptions "1.7.3" - web3-eth-abi "1.7.3" - web3-eth-accounts "1.7.3" - web3-eth-contract "1.7.3" - web3-eth-ens "1.7.3" - web3-eth-iban "1.7.3" - web3-eth-personal "1.7.3" - web3-net "1.7.3" - web3-utils "1.7.3" - -web3-net@1.7.3: - version "1.7.3" - resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.7.3.tgz#54e35bcc829fdc40cf5001a3870b885d95069810" - integrity sha512-zAByK0Qrr71k9XW0Adtn+EOuhS9bt77vhBO6epAeQ2/VKl8rCGLAwrl3GbeEl7kWa8s/su72cjI5OetG7cYR0g== - dependencies: - web3-core "1.7.3" - web3-core-method "1.7.3" - web3-utils "1.7.3" - -web3-providers-http@1.7.3: - version "1.7.3" - resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.7.3.tgz#8ea5e39f6ceee0b5bc4e45403fae75cad8ff4cf7" - integrity sha512-TQJfMsDQ5Uq9zGMYlu7azx1L7EvxW+Llks3MaWn3cazzr5tnrDbGh6V17x6LN4t8tFDHWx0rYKr3mDPqyTjOZw== - dependencies: - web3-core-helpers "1.7.3" - xhr2-cookies "1.1.0" - -web3-providers-ipc@1.7.3: - version "1.7.3" - resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.7.3.tgz#a34872103a8d37a03795fa2f9b259e869287dcaa" - integrity sha512-Z4EGdLKzz6I1Bw+VcSyqVN4EJiT2uAro48Am1eRvxUi4vktGoZtge1ixiyfrRIVb6nPe7KnTFl30eQBtMqS0zA== - dependencies: - oboe "2.1.5" - web3-core-helpers "1.7.3" - -web3-providers-ws@1.7.3: - version "1.7.3" - resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.7.3.tgz#87564facc47387c9004a043a6686e4881ed6acfe" - integrity sha512-PpykGbkkkKtxPgv7U4ny4UhnkqSZDfLgBEvFTXuXLAngbX/qdgfYkhIuz3MiGplfL7Yh93SQw3xDjImXmn2Rgw== - dependencies: - eventemitter3 "4.0.4" - web3-core-helpers "1.7.3" - websocket "^1.0.32" - -web3-shh@1.7.3: - version "1.7.3" - resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.7.3.tgz#84e10adf628556798244b58f73cda1447bb7075e" - integrity sha512-bQTSKkyG7GkuULdZInJ0osHjnmkHij9tAySibpev1XjYdjLiQnd0J9YGF4HjvxoG3glNROpuCyTaRLrsLwaZuw== - dependencies: - web3-core "1.7.3" - web3-core-method "1.7.3" - web3-core-subscriptions "1.7.3" - web3-net "1.7.3" - -web3-utils@1.7.3: - version "1.7.3" - resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.7.3.tgz#b214d05f124530d8694ad364509ac454d05f207c" - integrity sha512-g6nQgvb/bUpVUIxJE+ezVN+rYwYmlFyMvMIRSuqpi1dk6ApDD00YNArrk7sPcZnjvxOJ76813Xs2vIN2rgh4lg== - dependencies: - bn.js "^4.11.9" - ethereum-bloom-filters "^1.0.6" - ethereumjs-util "^7.1.0" - ethjs-unit "0.1.6" - number-to-bn "1.7.0" - randombytes "^2.1.0" - utf8 "3.0.0" - -web3-utils@^1.3.6: - version "1.10.4" - resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.10.4.tgz#0daee7d6841641655d8b3726baf33b08eda1cbec" - integrity sha512-tsu8FiKJLk2PzhDl9fXbGUWTkkVXYhtTA+SmEFkKft+9BgwLxfCRpU96sWv7ICC8zixBNd3JURVoiR3dUXgP8A== - 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" - -web3@1.7.3: - version "1.7.3" - resolved "https://registry.yarnpkg.com/web3/-/web3-1.7.3.tgz#30fe786338b2cc775881cb28c056ee5da4be65b8" - integrity sha512-UgBvQnKIXncGYzsiGacaiHtm0xzQ/JtGqcSO/ddzQHYxnNuwI72j1Pb4gskztLYihizV9qPNQYHMSCiBlStI9A== - dependencies: - web3-bzz "1.7.3" - web3-core "1.7.3" - web3-eth "1.7.3" - web3-eth-personal "1.7.3" - web3-net "1.7.3" - web3-shh "1.7.3" - web3-utils "1.7.3" - -webidl-conversions@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" - integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== - -websocket@^1.0.32: - version "1.0.35" - resolved "https://registry.yarnpkg.com/websocket/-/websocket-1.0.35.tgz#374197207d7d4cc4c36cbf8a1bb886ee52a07885" - integrity sha512-/REy6amwPZl44DDzvRCkaI1q1bIiQB0mEFQLUrhz3z2EK91cp3n72rAjUlrTP0zV22HJIUOVHQGPxhFRjxjt+Q== - dependencies: - bufferutil "^4.0.1" - debug "^2.2.0" - es5-ext "^0.10.63" - typedarray-to-buffer "^3.1.5" - utf-8-validate "^5.0.2" - yaeti "^0.0.6" - -whatwg-url@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" - integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== - dependencies: - tr46 "~0.0.3" - webidl-conversions "^3.0.0" - -which-typed-array@^1.1.16, which-typed-array@^1.1.2: - version "1.1.20" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.20.tgz#3fdb7adfafe0ea69157b1509f3a1cd892bd1d122" - integrity sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg== - dependencies: - available-typed-arrays "^1.0.7" - call-bind "^1.0.8" - call-bound "^1.0.4" - for-each "^0.3.5" - get-proto "^1.0.1" - gopd "^1.2.0" - has-tostringtag "^1.0.2" - -which@^1.1.1, which@^1.2.9, which@^1.3.1: - 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" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - -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" - -widest-line@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca" - integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg== - dependencies: - string-width "^4.0.0" - -word-wrap@^1.2.5, word-wrap@~1.2.3: - version "1.2.5" - resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" - integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== - -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== - -wordwrapjs@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/wordwrapjs/-/wordwrapjs-4.0.1.tgz#d9790bccfb110a0fc7836b5ebce0937b37a8b98f" - integrity sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA== - dependencies: - reduce-flatten "^2.0.0" - typical "^5.2.0" - -workerpool@6.2.1: - version "6.2.1" - resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.1.tgz#46fc150c17d826b86a008e5a4508656777e9c343" - integrity sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw== - -workerpool@^6.5.1: - version "6.5.1" - resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.5.1.tgz#060f73b39d0caf97c6db64da004cd01b4c099544" - integrity sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA== - -"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== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.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" - integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== - dependencies: - ansi-styles "^6.1.0" - string-width "^5.0.1" - strip-ansi "^7.0.1" - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== - -write@1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" - integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig== - dependencies: - mkdirp "^0.5.1" - -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.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.18.3: - version "8.18.3" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.3.tgz#b56b88abffde62791c639170400c93dcb0c95472" - integrity sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg== - -ws@^3.0.0: - version "3.3.3" - resolved "https://registry.yarnpkg.com/ws/-/ws-3.3.3.tgz#f1cf84fe2d5e901ebce94efaece785f187a228f2" - integrity sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA== - dependencies: - async-limiter "~1.0.0" - safe-buffer "~5.1.0" - ultron "~1.1.0" - -ws@^7.4.6: - version "7.5.10" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.10.tgz#58b5c20dc281633f6c19113f39b349bd8bd558d9" - integrity sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ== - -xhr-request-promise@^0.1.2: - version "0.1.3" - resolved "https://registry.yarnpkg.com/xhr-request-promise/-/xhr-request-promise-0.1.3.tgz#2d5f4b16d8c6c893be97f1a62b0ed4cf3ca5f96c" - integrity sha512-YUBytBsuwgitWtdRzXDDkWAXzhdGB8bYm0sSzMPZT7Z2MBjMSTHFsyCT1yCRATY+XC69DUrQraRAEgcoCRaIPg== - dependencies: - xhr-request "^1.1.0" - -xhr-request@^1.0.1, xhr-request@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/xhr-request/-/xhr-request-1.1.0.tgz#f4a7c1868b9f198723444d82dcae317643f2e2ed" - integrity sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA== - dependencies: - buffer-to-arraybuffer "^0.0.5" - object-assign "^4.1.1" - query-string "^5.0.1" - simple-get "^2.7.0" - timed-out "^4.0.1" - url-set-query "^1.0.0" - xhr "^2.0.4" - -xhr2-cookies@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/xhr2-cookies/-/xhr2-cookies-1.1.0.tgz#7d77449d0999197f155cb73b23df72505ed89d48" - integrity sha512-hjXUA6q+jl/bd8ADHcVfFsSPIf+tyLIjuO9TwJC9WI6JP2zKcS7C+p56I9kCLLsaCiNT035iYvEUUzdEFj/8+g== - dependencies: - cookiejar "^2.1.1" - -xhr@^2.0.4, xhr@^2.3.3: - version "2.6.0" - resolved "https://registry.yarnpkg.com/xhr/-/xhr-2.6.0.tgz#b69d4395e792b4173d6b7df077f0fc5e4e2b249d" - integrity sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA== - dependencies: - global "~4.4.0" - is-function "^1.0.1" - parse-headers "^2.0.0" - xtend "^4.0.0" - -xtend@^4.0.0, xtend@^4.0.1, xtend@^4.0.2, xtend@~4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" - integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== - -y18n@^5.0.5: - version "5.0.8" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" - integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== - -yaeti@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/yaeti/-/yaeti-0.0.6.tgz#f26f484d72684cf42bedfb76970aa1608fbf9577" - integrity sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug== - -yallist@^3.0.0, yallist@^3.0.2, yallist@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" - integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== - -yargs-parser@20.2.4: - version "20.2.4" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" - integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== - -yargs-parser@^20.2.2, yargs-parser@^20.2.9: - version "20.2.9" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" - integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== - -yargs-parser@^21.1.1: - version "21.1.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" - integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== - -yargs-unparser@2.0.0, yargs-unparser@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb" - integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== - dependencies: - camelcase "^6.0.0" - decamelize "^4.0.0" - flat "^5.0.2" - is-plain-obj "^2.1.0" - -yargs@16.2.0, yargs@^16.2.0: - version "16.2.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" - integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== - dependencies: - cliui "^7.0.2" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.0" - y18n "^5.0.5" - yargs-parser "^20.2.2" - -yargs@^17.5.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" - -yocto-queue@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" - integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== - -zksync-web3@^0.14.3: - version "0.14.4" - resolved "https://registry.yarnpkg.com/zksync-web3/-/zksync-web3-0.14.4.tgz#0b70a7e1a9d45cc57c0971736079185746d46b1f" - integrity sha512-kYehMD/S6Uhe1g434UnaMN+sBr9nQm23Ywn0EUP5BfQCsbjcr3ORuS68PosZw8xUTu3pac7G6YMSnNHk+fwzvg== From f52fbd3678977d2cde8f02d9fa6d9a86dd55afc8 Mon Sep 17 00:00:00 2001 From: Christopher Jacobs Date: Fri, 27 Mar 2026 14:16:09 -0700 Subject: [PATCH 14/62] test loki execution and ensure flush --- contracts/tasks/lib/action.ts | 4 ++- contracts/tasks/lib/logger.ts | 53 ++++++++++++++++++++--------------- 2 files changed, 33 insertions(+), 24 deletions(-) diff --git a/contracts/tasks/lib/action.ts b/contracts/tasks/lib/action.ts index a1fea1aac9..552570f8ad 100644 --- a/contracts/tasks/lib/action.ts +++ b/contracts/tasks/lib/action.ts @@ -4,7 +4,7 @@ import type { ConfigurableTaskDefinition } from "hardhat/types"; import type { Logger } from "winston"; import { getSigner } from "../../utils/signers"; -import logger from "./logger"; +import logger, { flushLogger } from "./logger"; export interface ActionContext { signer: ethers.Signer; @@ -71,6 +71,8 @@ export function action(config: ActionConfig) { const elapsed = ((Date.now() - startTime) / 1000).toFixed(1); log.error(`Failed after ${elapsed}s: ${err.message}`); throw err; + } finally { + await flushLogger(); } }); diff --git a/contracts/tasks/lib/logger.ts b/contracts/tasks/lib/logger.ts index 493ae72541..7883a1a4ee 100644 --- a/contracts/tasks/lib/logger.ts +++ b/contracts/tasks/lib/logger.ts @@ -5,38 +5,45 @@ const lokiUrl = process.env.LOKI_URL; const lokiUser = process.env.LOKI_USER; const lokiApiKey = process.env.LOKI_API_KEY; +const consoleFormat = format.combine( + format.timestamp(), + format.errors({ stack: true }), + format.printf(({ timestamp, level, message, action, ...rest }) => { + const prefix = action ? `[${action}] ` : ""; + const extra = Object.keys(rest).length ? ` ${JSON.stringify(rest)}` : ""; + return `${timestamp} ${level}: ${prefix}${message}${extra}`; + }) +); + const logTransports: InstanceType< typeof transports.Console | typeof LokiTransport ->[] = [new transports.Console()]; +>[] = [new transports.Console({ format: consoleFormat })]; +let lokiTransport: LokiTransport | undefined; if (lokiUrl) { - logTransports.push( - new LokiTransport({ - host: lokiUrl, - basicAuth: - lokiUser && lokiApiKey ? `${lokiUser}:${lokiApiKey}` : undefined, - labels: { app: "origin-dollar" }, - json: true, - replaceTimestamp: true, - onConnectionError: (err: Error) => { - console.error("Loki connection error:", err.message); - }, - }) - ); + lokiTransport = new LokiTransport({ + host: lokiUrl, + basicAuth: lokiUrl && lokiApiKey ? `${lokiUser}:${lokiApiKey}` : undefined, + labels: { app: "origin-dollar" }, + json: true, + format: format.json(), + replaceTimestamp: true, + batching: true, + onConnectionError: (err: unknown) => { + console.error("Loki connection error:", err); + }, + }); + logTransports.push(lokiTransport); } const logger = createLogger({ level: process.env.LOG_LEVEL ?? "info", - format: format.combine( - format.timestamp(), - format.errors({ stack: true }), - format.printf(({ timestamp, level, message, action, ...rest }) => { - const prefix = action ? `[${action}] ` : ""; - const extra = Object.keys(rest).length ? ` ${JSON.stringify(rest)}` : ""; - return `${timestamp} ${level}: ${prefix}${message}${extra}`; - }) - ), + format: format.combine(format.timestamp(), format.errors({ stack: true })), transports: logTransports, }); +export async function flushLogger(): Promise { + await lokiTransport?.flush(); +} + export default logger; From c728f9903b11387c840dfcfdb8322eda2d2335af Mon Sep 17 00:00:00 2001 From: Christopher Jacobs Date: Fri, 27 Mar 2026 14:28:17 -0700 Subject: [PATCH 15/62] prettier --- contracts/.eslintrc.js | 10 +++++----- contracts/package.json | 4 ++-- contracts/tasks/actions/harvest.ts | 6 +++--- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/contracts/.eslintrc.js b/contracts/.eslintrc.js index 2a28cef97f..953d510ee9 100644 --- a/contracts/.eslintrc.js +++ b/contracts/.eslintrc.js @@ -33,13 +33,13 @@ module.exports = { sourceType: "module", }, plugins: ["@typescript-eslint"], - extends: [ - "eslint:recommended", - "plugin:@typescript-eslint/recommended", - ], + extends: ["eslint:recommended", "plugin:@typescript-eslint/recommended"], rules: { "no-unused-vars": "off", - "@typescript-eslint/no-unused-vars": [2, { vars: "all", args: "after-used" }], + "@typescript-eslint/no-unused-vars": [ + 2, + { vars: "all", args: "after-used" }, + ], "@typescript-eslint/no-explicit-any": "off", "@typescript-eslint/no-require-imports": "off", }, diff --git a/contracts/package.json b/contracts/package.json index 75cdff5b99..5bb513686b 100644 --- a/contracts/package.json +++ b/contracts/package.json @@ -30,11 +30,11 @@ "node:anvil:sonic": "anvil --fork-url $SONIC_PROVIDER_URL --port 8545 --block-base-fee-per-gas 0 --auto-impersonate --disable-block-gas-limit", "node:anvil:hoodi": "anvil --fork-url $HOODI_PROVIDER_URL --port 8545 --block-base-fee-per-gas 0 --auto-impersonate --disable-block-gas-limit", "node:anvil:hyperevm": "anvil --fork-url $HYPEREVM_PROVIDER_URL --port 8545 --block-base-fee-per-gas 0 --auto-impersonate --disable-block-gas-limit", - "lint": "yarn run lint:js && yarn run lint:sol", + "lint": "yarn run lint:js && yarn run lint:ts && yarn run lint:sol", "lint:js": "eslint \"test/**/*.js\" \"tasks/**/*.js\" \"deploy/**/*.js\"", "lint:sol": "solhint \"contracts/**/*.sol\"", "lint:ts": "eslint \"tasks/actions/**/*.ts\" \"tasks/lib/**/*.ts\" \"scripts/**/*.ts\"", - "prettier": "yarn run prettier:js && yarn run prettier:sol", + "prettier": "yarn run prettier:js && yarn run prettier:ts && yarn run prettier:sol", "prettier:check": "prettier -c \"*.js\" \"deploy/**/*.js\" \"scripts/**/*.js\" \"scripts/**/*.js\" \"tasks/**/*.js\" \"test/**/*.js\" \"utils/**/*.js\"", "prettier:js": "prettier --write \"*.js\" \"deploy/**/*.js\" \"scripts/**/*.js\" \"scripts/**/*.js\" \"tasks/**/*.js\" \"test/**/*.js\" \"utils/**/*.js\"", "prettier:sol": "prettier --write --plugin=prettier-plugin-solidity \"contracts/**/*.sol\"", diff --git a/contracts/tasks/actions/harvest.ts b/contracts/tasks/actions/harvest.ts index de525cf39a..897d3cc2f3 100644 --- a/contracts/tasks/actions/harvest.ts +++ b/contracts/tasks/actions/harvest.ts @@ -42,9 +42,9 @@ action({ } if (strategiesToHarvest.length > 0) { - const tx = await harvester.connect(signer)["harvestAndTransfer(address[])"]( - strategiesToHarvest, - ); + const tx = await harvester + .connect(signer) + ["harvestAndTransfer(address[])"](strategiesToHarvest); await logTxDetails(tx, "harvestAndTransfer"); } else { log.info("No native staking strategies require harvesting at this time"); From f42b623067b838748d5ff778f987a94c1ac9f736 Mon Sep 17 00:00:00 2001 From: Christopher Jacobs Date: Fri, 27 Mar 2026 14:30:57 -0700 Subject: [PATCH 16/62] fix prettier/lint conflict --- contracts/tasks/actions/harvest.ts | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/contracts/tasks/actions/harvest.ts b/contracts/tasks/actions/harvest.ts index 897d3cc2f3..dd405a8dc2 100644 --- a/contracts/tasks/actions/harvest.ts +++ b/contracts/tasks/actions/harvest.ts @@ -42,9 +42,10 @@ action({ } if (strategiesToHarvest.length > 0) { - const tx = await harvester - .connect(signer) - ["harvestAndTransfer(address[])"](strategiesToHarvest); + const connection = harvester.connect(signer); + const tx = await connection["harvestAndTransfer(address[])"]( + strategiesToHarvest + ); await logTxDetails(tx, "harvestAndTransfer"); } else { log.info("No native staking strategies require harvesting at this time"); From 868b1ec8a66b64ed49ab813702c29b8160625c0d Mon Sep 17 00:00:00 2001 From: Christopher Jacobs Date: Fri, 27 Mar 2026 17:36:07 -0700 Subject: [PATCH 17/62] tweak how we log --- contracts/tasks/lib/logger.ts | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/contracts/tasks/lib/logger.ts b/contracts/tasks/lib/logger.ts index 7883a1a4ee..26ff27c745 100644 --- a/contracts/tasks/lib/logger.ts +++ b/contracts/tasks/lib/logger.ts @@ -26,9 +26,19 @@ if (lokiUrl) { basicAuth: lokiUrl && lokiApiKey ? `${lokiUser}:${lokiApiKey}` : undefined, labels: { app: "origin-dollar" }, json: true, - format: format.json(), + format: format.combine( + // Promote "action" from metadata to a Loki label + format((info) => { + if (info.action) { + info.labels = { ...(info.labels || {}), action: info.action }; + } + return info; + })(), + format.json() + ), replaceTimestamp: true, batching: true, + interval: 5, onConnectionError: (err: unknown) => { console.error("Loki connection error:", err); }, From 9ae2bfc89ed9fdd730e7d0a36fa3066480e170bb Mon Sep 17 00:00:00 2001 From: Christopher Jacobs Date: Fri, 27 Mar 2026 18:04:51 -0700 Subject: [PATCH 18/62] create docker-compose env for local execution --- contracts/cron/.gitignore | 1 + contracts/cron/cron-entrypoint.sh | 4 +++ .../{scripts => cron}/cron-supervisor.ts | 6 ++-- contracts/{scripts => cron}/render-crontab.ts | 5 ++-- contracts/docker-compose.yml | 21 ++++++++++++++ contracts/dockerfile-actions | 29 ++++++++++++------- contracts/scripts/cron-entrypoint.sh | 4 --- contracts/tsconfig.json | 2 +- 8 files changed, 50 insertions(+), 22 deletions(-) create mode 100644 contracts/cron/.gitignore create mode 100644 contracts/cron/cron-entrypoint.sh rename contracts/{scripts => cron}/cron-supervisor.ts (98%) rename contracts/{scripts => cron}/render-crontab.ts (94%) create mode 100644 contracts/docker-compose.yml delete mode 100644 contracts/scripts/cron-entrypoint.sh diff --git a/contracts/cron/.gitignore b/contracts/cron/.gitignore new file mode 100644 index 0000000000..885df5d5c5 --- /dev/null +++ b/contracts/cron/.gitignore @@ -0,0 +1 @@ +cronjob \ No newline at end of file diff --git a/contracts/cron/cron-entrypoint.sh b/contracts/cron/cron-entrypoint.sh new file mode 100644 index 0000000000..60c072e9f4 --- /dev/null +++ b/contracts/cron/cron-entrypoint.sh @@ -0,0 +1,4 @@ +#!/bin/sh +set -eu + +exec node -r ts-node/register /app/cron/cron-supervisor.ts diff --git a/contracts/scripts/cron-supervisor.ts b/contracts/cron/cron-supervisor.ts similarity index 98% rename from contracts/scripts/cron-supervisor.ts rename to contracts/cron/cron-supervisor.ts index 9047538476..d9af424034 100644 --- a/contracts/scripts/cron-supervisor.ts +++ b/contracts/cron/cron-supervisor.ts @@ -5,12 +5,10 @@ import http from "node:http"; import { type CronJob, renderCrontab } from "./render-crontab"; // --- Configuration --- - const host = process.env.HOST || "0.0.0.0"; const port = Number.parseInt(process.env.PORT || "8080", 10); -const cronConfigPath = - process.env.CRON_CONFIG_PATH || "/app/cron/cron-jobs.json"; -const cronOutputPath = process.env.CRON_OUTPUT_PATH || "/etc/cronjob"; +const cronConfigPath = process.env.CRON_CONFIG_PATH || "./cron/cron-jobs.json"; +const cronOutputPath = process.env.CRON_OUTPUT_PATH || "./cron/cronjob"; const supercronicBin = process.env.SUPERCRONIC_BIN || "supercronic"; const runHistoryLimit = Number.parseInt( process.env.ACTION_RUN_HISTORY_LIMIT || "500", diff --git a/contracts/scripts/render-crontab.ts b/contracts/cron/render-crontab.ts similarity index 94% rename from contracts/scripts/render-crontab.ts rename to contracts/cron/render-crontab.ts index 5d4e0f7587..e4c4cc848b 100644 --- a/contracts/scripts/render-crontab.ts +++ b/contracts/cron/render-crontab.ts @@ -1,9 +1,10 @@ import fs from "node:fs"; import path from "node:path"; +// Default to local paths const DEFAULT_CONFIG_PATH = - process.env.CRON_CONFIG_PATH || "/app/cron/cron-jobs.json"; -const DEFAULT_OUTPUT_PATH = process.env.CRON_OUTPUT_PATH || "/etc/cronjob"; + process.env.CRON_CONFIG_PATH || "./cron/cron-jobs.json"; +const DEFAULT_OUTPUT_PATH = process.env.CRON_OUTPUT_PATH || "./cron/cronjob"; export class RenderCrontabError extends Error {} diff --git a/contracts/docker-compose.yml b/contracts/docker-compose.yml new file mode 100644 index 0000000000..addefe7d39 --- /dev/null +++ b/contracts/docker-compose.yml @@ -0,0 +1,21 @@ +services: + actions: + build: + context: . + dockerfile: dockerfile-actions + ports: + - "8080:8080" + environment: + - PROVIDER_URL=${PROVIDER_URL:-} + - SONIC_PROVIDER_URL=${SONIC_PROVIDER_URL:-} + - PLUME_PROVIDER_URL=${PLUME_PROVIDER_URL:-} + - HOODI_PROVIDER_URL=${HOODI_PROVIDER_URL:-} + - BEACON_PROVIDER_URL=${BEACON_PROVIDER_URL:-} + - HARDHAT_NETWORK=${HARDHAT_NETWORK:-mainnet} + - ACTION_API_BEARER_TOKEN=${ACTION_API_BEARER_TOKEN:-test-token} + - LOKI_URL=${LOKI_URL:-} + - LOKI_USER=${LOKI_USER:-} + - LOKI_API_KEY=${LOKI_API_KEY:-} + - AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID:-} + - AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY:-} + - DEBUG=origin* diff --git a/contracts/dockerfile-actions b/contracts/dockerfile-actions index 8bb42c6edc..8050333809 100644 --- a/contracts/dockerfile-actions +++ b/contracts/dockerfile-actions @@ -1,4 +1,4 @@ -FROM public.ecr.aws/docker/library/node:22 +FROM node:20 ENV DEBIAN_FRONTEND=noninteractive \ DEBUG=origin* \ @@ -21,27 +21,34 @@ RUN mkdir -p /root/.ssh \ RUN git config --global url."https://github.com/".insteadOf "git@github.com:" -ENV SUPERCRONIC_URL=https://github.com/aptible/supercronic/releases/download/v0.2.39/supercronic-linux-amd64 \ - SUPERCRONIC_SHA1SUM=c98bbf82c5f648aaac8708c182cc83046fe48423 \ - SUPERCRONIC=supercronic-linux-amd64 +ARG TARGETARCH +ENV SUPERCRONIC_URL=https://github.com/aptible/supercronic/releases/download/v0.2.39/supercronic-linux-${TARGETARCH} \ + SUPERCRONIC=supercronic-linux-${TARGETARCH} + +# sha1sums from https://github.com/aptible/supercronic/releases/tag/v0.2.39 +COPY <<'EOF' /tmp/supercronic-checksums.txt +c98bbf82c5f648aaac8708c182cc83046fe48423 supercronic-linux-amd64 +5ef4ccc3d43f12d0f6c3763758bc37cc4e5af76e supercronic-linux-arm64 +EOF RUN curl -fsSLO "$SUPERCRONIC_URL" \ - && echo "${SUPERCRONIC_SHA1SUM} ${SUPERCRONIC}" | sha1sum -c - \ + && grep "$SUPERCRONIC" /tmp/supercronic-checksums.txt | sha1sum -c - \ && chmod +x "$SUPERCRONIC" \ - && mv "$SUPERCRONIC" "/usr/local/bin/${SUPERCRONIC}" \ - && ln -s "/usr/local/bin/${SUPERCRONIC}" /usr/local/bin/supercronic + && mv "$SUPERCRONIC" /usr/local/bin/supercronic \ + && rm /tmp/supercronic-checksums.txt WORKDIR /app # Enable pnpm via corepack and install dependencies first for better caching. COPY pnpm-lock.yaml package.json pnpm-workspace.yaml ./ RUN corepack enable \ - && pnpm install --frozen-lockfile + && pnpm install --frozen-lockfile # Copy the rest of the contracts workspace. COPY . . -RUN pnpm hardhat compile +# Compile contracts on amd64 (production). Skip on arm64 (Mac) where solcjs WASM crashes. +RUN if [ "$TARGETARCH" = "amd64" ]; then pnpm hardhat compile; else echo "Skipping compile on $TARGETARCH"; fi ENV PROVIDER_URL="" \ SONIC_PROVIDER_URL="" \ @@ -52,6 +59,6 @@ ENV PROVIDER_URL="" \ DEFENDER_API_SECRET="" \ HARDHAT_NETWORK="" -RUN chmod +x /app/scripts/cron-entrypoint.sh +RUN chmod +x /app/cron/cron-entrypoint.sh -ENTRYPOINT ["/app/scripts/cron-entrypoint.sh"] +ENTRYPOINT ["/app/cron/cron-entrypoint.sh"] diff --git a/contracts/scripts/cron-entrypoint.sh b/contracts/scripts/cron-entrypoint.sh deleted file mode 100644 index 008412ebda..0000000000 --- a/contracts/scripts/cron-entrypoint.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh -set -eu - -exec node -r ts-node/register /app/scripts/cron-supervisor.ts diff --git a/contracts/tsconfig.json b/contracts/tsconfig.json index 29ca948372..f31ba81313 100644 --- a/contracts/tsconfig.json +++ b/contracts/tsconfig.json @@ -12,6 +12,6 @@ "outDir": "dist", "types": ["node"] }, - "include": ["tasks/actions/**/*.ts", "tasks/lib/**/*.ts", "scripts/**/*.ts"], + "include": ["tasks/actions/**/*.ts", "tasks/lib/**/*.ts", "scripts/**/*.ts", "cron/cron-supervisor.ts", "cron/render-crontab.ts"], "exclude": ["node_modules", "dist"] } From 55ccb197d2a9868fb152e88557efe1f2e95e37dc Mon Sep 17 00:00:00 2001 From: Christopher Jacobs Date: Fri, 27 Mar 2026 18:04:59 -0700 Subject: [PATCH 19/62] add cron readme --- contracts/cron/README.md | 68 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 contracts/cron/README.md diff --git a/contracts/cron/README.md b/contracts/cron/README.md new file mode 100644 index 0000000000..0195db2fda --- /dev/null +++ b/contracts/cron/README.md @@ -0,0 +1,68 @@ +# Cron Actions + +Containerized scheduler for running hardhat tasks on a schedule. Replaces OpenZeppelin Defender actions. + +## How it works + +1. **`cron-jobs.json`** — Defines all scheduled jobs (name, cron schedule, command, enabled flag) +2. **`render-crontab.ts`** — Reads `cron-jobs.json`, filters to enabled jobs, writes a supercronic-compatible crontab file +3. **`cron-supervisor.ts`** — Starts supercronic with the generated crontab, runs an HTTP API for triggering actions on-demand and checking run status +4. **`cron-entrypoint.sh`** — Docker entrypoint that boots the supervisor + +Each job runs a hardhat task (e.g. `pnpm hardhat healthcheck`). Signing uses the existing KMS signer from `utils/signers.js` when `AWS_ACCESS_KEY_ID` is set. + +## Running locally + +```bash +cd contracts +docker compose up actions +``` + +## API + +The supervisor exposes an HTTP API (default port 8080): + +```bash +# Health check (no auth) +curl http://localhost:8080/healthz + +# List all actions (requires bearer token) +curl -H 'Authorization: Bearer $ACTION_API_BEARER_TOKEN' \ + http://localhost:8080/api/v1/actions + +# Trigger an action +curl -X POST -H 'Authorization: Bearer $ACTION_API_BEARER_TOKEN' \ + http://localhost:8080/api/v1/actions/healthcheck/runs + +# Check run status +curl -H 'Authorization: Bearer $ACTION_API_BEARER_TOKEN' \ + http://localhost:8080/api/v1/runs/ +``` + +## Adding a new job + +Add an entry to `cron-jobs.json`: + +```json +{ + "name": "my_new_job", + "schedule": "0 */6 * * *", + "enabled": true, + "command": "cd /app && pnpm hardhat myTask --network mainnet" +} +``` + +Set `enabled: false` to define a job that can only be triggered via the API. + +## Environment variables + +| Variable | Description | +|----------|-------------| +| `ACTION_API_BEARER_TOKEN` | Required. Auth token for the HTTP API | +| `PROVIDER_URL` | Mainnet RPC endpoint | +| `HARDHAT_NETWORK` | Default network for tasks | +| `LOKI_URL` | Grafana Loki push endpoint (optional) | +| `LOKI_USER` | Loki basic auth user (optional) | +| `LOKI_API_KEY` | Loki basic auth key (optional) | +| `AWS_ACCESS_KEY_ID` | For KMS signer (optional) | +| `AWS_SECRET_ACCESS_KEY` | For KMS signer (optional) | From baeeafba7f2a3c37de8bd501721db9dc1c6401b8 Mon Sep 17 00:00:00 2001 From: Christopher Jacobs Date: Fri, 27 Mar 2026 18:12:26 -0700 Subject: [PATCH 20/62] lint fix --- contracts/package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/contracts/package.json b/contracts/package.json index 5bb513686b..5fe1f73594 100644 --- a/contracts/package.json +++ b/contracts/package.json @@ -33,12 +33,12 @@ "lint": "yarn run lint:js && yarn run lint:ts && yarn run lint:sol", "lint:js": "eslint \"test/**/*.js\" \"tasks/**/*.js\" \"deploy/**/*.js\"", "lint:sol": "solhint \"contracts/**/*.sol\"", - "lint:ts": "eslint \"tasks/actions/**/*.ts\" \"tasks/lib/**/*.ts\" \"scripts/**/*.ts\"", + "lint:ts": "eslint \"tasks/actions/**/*.ts\" \"tasks/lib/**/*.ts\" \"cron/**/*.ts\"", "prettier": "yarn run prettier:js && yarn run prettier:ts && yarn run prettier:sol", "prettier:check": "prettier -c \"*.js\" \"deploy/**/*.js\" \"scripts/**/*.js\" \"scripts/**/*.js\" \"tasks/**/*.js\" \"test/**/*.js\" \"utils/**/*.js\"", "prettier:js": "prettier --write \"*.js\" \"deploy/**/*.js\" \"scripts/**/*.js\" \"scripts/**/*.js\" \"tasks/**/*.js\" \"test/**/*.js\" \"utils/**/*.js\"", "prettier:sol": "prettier --write --plugin=prettier-plugin-solidity \"contracts/**/*.sol\"", - "prettier:ts": "prettier --write \"tasks/actions/**/*.ts\" \"tasks/lib/**/*.ts\" \"scripts/**/*.ts\"", + "prettier:ts": "prettier --write \"tasks/actions/**/*.ts\" \"tasks/lib/**/*.ts\" \"cron/**/*.ts\"", "typecheck": "tsc --noEmit", "test": "rm -rf deployments/hardhat && IS_TEST=true npx hardhat test", "test:base": "rm -rf deployments/hardhat && UNIT_TESTS_NETWORK=base IS_TEST=true npx hardhat test", From ee58e991b555f102df84285b0da3eeef981d6931 Mon Sep 17 00:00:00 2001 From: Christopher Jacobs Date: Fri, 27 Mar 2026 18:22:49 -0700 Subject: [PATCH 21/62] path fix --- contracts/cron/cron-supervisor.ts | 4 ++-- contracts/docker-compose.yml | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/contracts/cron/cron-supervisor.ts b/contracts/cron/cron-supervisor.ts index d9af424034..72b2835c97 100644 --- a/contracts/cron/cron-supervisor.ts +++ b/contracts/cron/cron-supervisor.ts @@ -7,8 +7,8 @@ import { type CronJob, renderCrontab } from "./render-crontab"; // --- Configuration --- const host = process.env.HOST || "0.0.0.0"; const port = Number.parseInt(process.env.PORT || "8080", 10); -const cronConfigPath = process.env.CRON_CONFIG_PATH || "./cron/cron-jobs.json"; -const cronOutputPath = process.env.CRON_OUTPUT_PATH || "./cron/cronjob"; +const cronConfigPath = process.env.CRON_CONFIG_PATH || "/app/cron/cron-jobs.json"; +const cronOutputPath = process.env.CRON_OUTPUT_PATH || "/app/cron/cronjob"; const supercronicBin = process.env.SUPERCRONIC_BIN || "supercronic"; const runHistoryLimit = Number.parseInt( process.env.ACTION_RUN_HISTORY_LIMIT || "500", diff --git a/contracts/docker-compose.yml b/contracts/docker-compose.yml index addefe7d39..ec887cd44e 100644 --- a/contracts/docker-compose.yml +++ b/contracts/docker-compose.yml @@ -18,4 +18,6 @@ services: - LOKI_API_KEY=${LOKI_API_KEY:-} - AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID:-} - AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY:-} + - CRON_CONFIG_PATH=./cron/cron-jobs.json + - CRON_OUTPUT_PATH=./cron/cronjob - DEBUG=origin* From 5db60147ed37cd133bce5b4bcd11165e14eddfd5 Mon Sep 17 00:00:00 2001 From: Christopher Jacobs Date: Fri, 27 Mar 2026 18:34:43 -0700 Subject: [PATCH 22/62] fix output --- contracts/cron/cron-supervisor.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contracts/cron/cron-supervisor.ts b/contracts/cron/cron-supervisor.ts index 72b2835c97..d765e3be6d 100644 --- a/contracts/cron/cron-supervisor.ts +++ b/contracts/cron/cron-supervisor.ts @@ -118,7 +118,7 @@ const { config: renderedConfig, enabledJobs } = initCron(); console.log( `[cron-supervisor] Generated ${enabledJobs.length} enabled cron jobs at ${cronOutputPath}` ); -console.log("[cron-supervisor] Generated /etc/cronjob:"); +console.log(`[cron-supervisor] Generated ${cronOutputPath}:`); console.log(fs.readFileSync(cronOutputPath, "utf8")); const jobsByName = new Map( From a3c6ec1c497a14d081ec93d03815557f30b51cf3 Mon Sep 17 00:00:00 2001 From: Christopher Jacobs Date: Wed, 1 Apr 2026 11:37:01 -0700 Subject: [PATCH 23/62] healthcheck fix --- contracts/cron/cron-jobs.json | 2 +- contracts/tasks/actions/healthcheck.ts | 18 ++++++++++++------ contracts/tasks/lib/action.ts | 2 +- 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/contracts/cron/cron-jobs.json b/contracts/cron/cron-jobs.json index 42ce266884..a2653a0c66 100644 --- a/contracts/cron/cron-jobs.json +++ b/contracts/cron/cron-jobs.json @@ -4,7 +4,7 @@ "name": "healthcheck", "schedule": "*/5 * * * *", "enabled": true, - "command": "cd /app && pnpm hardhat healthcheck" + "command": "cd /app && pnpm hardhat healthcheck --network ${HARDHAT_NETWORK:-mainnet}" }, { "name": "hourly_snap_balances", diff --git a/contracts/tasks/actions/healthcheck.ts b/contracts/tasks/actions/healthcheck.ts index b32e701791..7a46bbaa91 100644 --- a/contracts/tasks/actions/healthcheck.ts +++ b/contracts/tasks/actions/healthcheck.ts @@ -2,14 +2,20 @@ import { action } from "../lib/action"; action({ name: "healthcheck", - description: "Simple test task to verify the action execution pipeline", - run: async ({ log, chainId, networkName }) => { - log.info(`Network: ${networkName} (${chainId})`); + description: "Verify the action execution pipeline (signer, network, logging)", + run: async ({ log, signer, chainId, networkName }) => { log.info(`Node version: ${process.version}`); + log.info(`Network: ${networkName} (${chainId})`); + + const address = await signer.getAddress(); + log.info(`Signer address: ${address}`); + + const balance = await signer.provider!.getBalance(address); + log.info(`Signer balance: ${balance.toString()} wei`); + log.info( - `AWS KMS available: ${!!( - process.env.AWS_ACCESS_KEY_ID && process.env.AWS_SECRET_ACCESS_KEY - )}` + `AWS KMS available: ${!!(process.env.AWS_ACCESS_KEY_ID && process.env.AWS_SECRET_ACCESS_KEY)}` ); + log.info("Healthcheck passed"); }, }); diff --git a/contracts/tasks/lib/action.ts b/contracts/tasks/lib/action.ts index 552570f8ad..db1d79848b 100644 --- a/contracts/tasks/lib/action.ts +++ b/contracts/tasks/lib/action.ts @@ -49,7 +49,7 @@ export function action(config: ActionConfig) { const signer = await getSigner(); const network = await signer.provider!.getNetwork(); - const chainId = network.chainId; + const chainId = Number(network.chainId); const networkName = CHAIN_NAMES[chainId] ?? `unknown-${chainId}`; if (chains && !chains.includes(chainId)) { From cd810639d21514d6ecd790f12ad92dbe7687c65e Mon Sep 17 00:00:00 2001 From: Christopher Jacobs Date: Wed, 1 Apr 2026 12:38:07 -0700 Subject: [PATCH 24/62] extract actions out of defender --- contracts/cron/TODO.md | 21 ++++++ contracts/cron/cron-jobs.json | 66 ++++++++++++++++++ .../actions/crossChainBalanceUpdate-base.ts | 19 ++++++ .../crossChainBalanceUpdate-hyperevm.ts | 17 +++++ .../actions/ogn-claimAndForwardRewards.ts | 28 ++++++++ .../tasks/actions/otoken-oethb-harvest.ts | 19 ++++++ .../tasks/actions/otoken-oethb-rebase.ts | 19 ++++++ .../actions/otoken-oethb-updateWoethPrice.ts | 18 +++++ ...token-oethp-addWithdrawalQueueLiquidity.ts | 18 +++++ .../actions/otoken-os-collectAndRelease.ts | 29 ++++++++ .../actions/otoken-os-sonicRestakeRewards.ts | 21 ++++++ .../actions/otoken-ousd-autoWithdrawal.ts | 18 +++++ .../tasks/actions/otoken-ousd-oeth-rebase.ts | 67 +++++++++++++++++++ 13 files changed, 360 insertions(+) create mode 100644 contracts/cron/TODO.md create mode 100644 contracts/tasks/actions/crossChainBalanceUpdate-base.ts create mode 100644 contracts/tasks/actions/crossChainBalanceUpdate-hyperevm.ts create mode 100644 contracts/tasks/actions/ogn-claimAndForwardRewards.ts create mode 100644 contracts/tasks/actions/otoken-oethb-harvest.ts create mode 100644 contracts/tasks/actions/otoken-oethb-rebase.ts create mode 100644 contracts/tasks/actions/otoken-oethb-updateWoethPrice.ts create mode 100644 contracts/tasks/actions/otoken-oethp-addWithdrawalQueueLiquidity.ts create mode 100644 contracts/tasks/actions/otoken-os-collectAndRelease.ts create mode 100644 contracts/tasks/actions/otoken-os-sonicRestakeRewards.ts create mode 100644 contracts/tasks/actions/otoken-ousd-autoWithdrawal.ts create mode 100644 contracts/tasks/actions/otoken-ousd-oeth-rebase.ts diff --git a/contracts/cron/TODO.md b/contracts/cron/TODO.md new file mode 100644 index 0000000000..ad08019cbf --- /dev/null +++ b/contracts/cron/TODO.md @@ -0,0 +1,21 @@ +# TODO List + +## Defender Actions which use compiled code: + +https://defender.openzeppelin.com/#/actions/automatic/076c59e4-4150-42c7-9ba0-9962069ac353 +https://defender.openzeppelin.com/#/actions/automatic/0b852456-96a0-4f1d-9d6c-39e1c6ae9dfc +https://defender.openzeppelin.com/#/actions/automatic/65b53496-e426-4850-8349-059e63eb2120 +https://defender.openzeppelin.com/#/actions/automatic/65f04f74-8da7-4fc5-94b3-96be31bac03b +https://defender.openzeppelin.com/#/actions/automatic/6a633bb0-aff8-4b37-aaae-b4c6f244ed87 +https://defender.openzeppelin.com/#/actions/automatic/6e4f764d-4126-45a5-b7d9-1ab90cd3ffd6 +https://defender.openzeppelin.com/#/actions/automatic/84988850-6816-4074-8e7b-c11cb2b32e7e +https://defender.openzeppelin.com/#/actions/automatic/a4f8ca5f-7144-469b-b84a-58b30fed72ce +https://defender.openzeppelin.com/#/actions/automatic/aa194c13-0dbf-49d2-8e87-70e61f3d71a8 +https://defender.openzeppelin.com/#/actions/automatic/b1d831f1-29d4-4943-bb2e-8e625b76e82c +https://defender.openzeppelin.com/#/actions/automatic/bb43e5da-f936-4185-84da-253394583665 +https://defender.openzeppelin.com/#/actions/automatic/e2929f53-db56-49b2-b054-35f7df7fc4fb +https://defender.openzeppelin.com/#/actions/automatic/e571409b-5399-48e4-bfb2-50b7af9903aa +https://defender.openzeppelin.com/#/actions/automatic/f74f24b4-d98b-4181-89cc-6608369b6f91 +https://defender.openzeppelin.com/#/actions/automatic/f92ea662-fc34-433b-8beb-b34e9ab74685 + +- [ ] Check hyper EVM network jobs for correct network usage diff --git a/contracts/cron/cron-jobs.json b/contracts/cron/cron-jobs.json index a2653a0c66..e9c094e9e8 100644 --- a/contracts/cron/cron-jobs.json +++ b/contracts/cron/cron-jobs.json @@ -53,6 +53,72 @@ "schedule": "20 0 * * *", "enabled": true, "command": "cd /app && pnpm hardhat rebase --network base --symbol OETH" + }, + { + "name": "otoken_os_collectAndRelease", + "schedule": "50 23 * * *", + "enabled": false, + "command": "cd /app && pnpm hardhat otoken-os-collectAndRelease --network sonic" + }, + { + "name": "otoken_ousd_autoWithdrawal", + "schedule": "40 11,23 * * *", + "enabled": false, + "command": "cd /app && pnpm hardhat otoken-ousd-autoWithdrawal --network mainnet" + }, + { + "name": "otoken_oethb_updateWoethPrice", + "schedule": "10 21 * * *", + "enabled": false, + "command": "cd /app && pnpm hardhat otoken-oethb-updateWoethPrice --network mainnet" + }, + { + "name": "otoken_oethp_addWithdrawalQueueLiquidity", + "schedule": "5 0 * * *", + "enabled": false, + "command": "cd /app && pnpm hardhat otoken-oethp-addWithdrawalQueueLiquidity --network mainnet" + }, + { + "name": "otoken_oethb_rebase", + "schedule": "25 9,21 * * *", + "enabled": false, + "command": "cd /app && pnpm hardhat otoken-oethb-rebase --network base" + }, + { + "name": "otoken_os_sonicRestakeRewards", + "schedule": "55 23 * * *", + "enabled": false, + "command": "cd /app && pnpm hardhat otoken-os-sonicRestakeRewards --network sonic" + }, + { + "name": "crossChainBalanceUpdate-base", + "schedule": "15 7,15,23 * * *", + "enabled": false, + "command": "cd /app && pnpm hardhat crossChainBalanceUpdate-base --network base" + }, + { + "name": "crossChainBalanceUpdate-hyperevm", + "schedule": "15 7,15,23 * * *", + "enabled": false, + "command": "cd /app && pnpm hardhat hyperevm-crossChainBalanceUpdate --network hyperevm" + }, + { + "name": "otoken_ousd_oeth_rebase", + "schedule": "50 11,23 * * *", + "enabled": false, + "command": "cd /app && pnpm hardhat otoken_ousd_oeth_rebase --network mainnet" + }, + { + "name": "ogn_claimAndForwardRewards", + "schedule": "0 0 * * 2", + "enabled": false, + "command": "cd /app && pnpm hardhat ogn-claimAndForwardRewards --network mainnet" + }, + { + "name": "otoken_oethb_harvest", + "schedule": "50 11 * * *", + "enabled": false, + "command": "cd /app && pnpm hardhat otoken-oethb-harvest --network base" } ] } diff --git a/contracts/tasks/actions/crossChainBalanceUpdate-base.ts b/contracts/tasks/actions/crossChainBalanceUpdate-base.ts new file mode 100644 index 0000000000..9eace7ebff --- /dev/null +++ b/contracts/tasks/actions/crossChainBalanceUpdate-base.ts @@ -0,0 +1,19 @@ +const { Defender } = require("@openzeppelin/defender-sdk"); + +exports.handler = async function (credentials) { + const client = new Defender(credentials); + + const txRes = await client.relaySigner.sendTransaction({ + to: "0xB1d624fc40824683e2bFBEfd19eB208DbBE00866", + value: 0, + speed: "fast", + gasLimit: "1000000", + // sendBalanceUpdate() + data: "0x3335ad7f", + }); + + console.log(txRes); + return txRes.hash; +}; + +// https://defender.openzeppelin.com/#/actions/automatic/8267c40e-825b-4b61-a339-fc9acef02acb diff --git a/contracts/tasks/actions/crossChainBalanceUpdate-hyperevm.ts b/contracts/tasks/actions/crossChainBalanceUpdate-hyperevm.ts new file mode 100644 index 0000000000..9765cbc736 --- /dev/null +++ b/contracts/tasks/actions/crossChainBalanceUpdate-hyperevm.ts @@ -0,0 +1,17 @@ +const { Defender } = require("@openzeppelin/defender-sdk"); + +exports.handler = async function (credentials) { + const client = new Defender(credentials); + + const txRes = await client.relaySigner.sendTransaction({ + to: "0xE0228DB13F8C4Eb00fD1e08e076b09eF5cD0EA1e", + value: 0, + speed: "fast", + gasLimit: "1000000", + // sendBalanceUpdate() + data: "0x3335ad7f", + }); + + console.log(txRes); + return txRes.hash; +}; diff --git a/contracts/tasks/actions/ogn-claimAndForwardRewards.ts b/contracts/tasks/actions/ogn-claimAndForwardRewards.ts new file mode 100644 index 0000000000..36912329fa --- /dev/null +++ b/contracts/tasks/actions/ogn-claimAndForwardRewards.ts @@ -0,0 +1,28 @@ +const { Defender } = require("@openzeppelin/defender-sdk"); + +exports.handler = async function (credentials) { + const client = new Defender(credentials); + + const moduleAddresses = [ + "0x15228dAE3B228175fBD9639d049265eFb08e60b6", + "0x8e32A930CcFE108DC560eC9e630BA6b5f7E179c9", + "0x460e4a0B14bD3F1e12f0c2194830c0204E5Bb147", + "0xFbBb82c4F3B6f479DE1451C04A76ea80da4ff010", + "0xAE67b612bD859378b7d0f6314E7Ee39ad4c6aBE6", + "0x046750A8106461d9826a8Ab32890B23753A5245e", + ]; + + for (const moduleAddress of moduleAddresses) { + const txRes = await client.relaySigner.sendTransaction({ + to: moduleAddress, + value: 0, + speed: "fast", + gasLimit: "500000", + data: "0x70bb45b3", + }); + + console.log(txRes); + } +}; + +// https://defender.openzeppelin.com/#/actions/automatic/9ed4d928-ac3b-4cd5-b679-4e50e428b8f8 diff --git a/contracts/tasks/actions/otoken-oethb-harvest.ts b/contracts/tasks/actions/otoken-oethb-harvest.ts new file mode 100644 index 0000000000..a905960f3a --- /dev/null +++ b/contracts/tasks/actions/otoken-oethb-harvest.ts @@ -0,0 +1,19 @@ +const { Defender } = require("@openzeppelin/defender-sdk"); + +exports.handler = async function (credentials) { + const client = new Defender(credentials); + + const txRes = await client.relaySigner.sendTransaction({ + to: "0x0CbEAcf86232fC04050cD679d860516F7254c22E", + value: 0, + speed: "fast", + gasLimit: "800000", + data: "0xb8a02d04000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000009cfcaf81600155e01c63e4d2993a8a81a8205829000000000000000000000000f611cc500eee7e4e4763a05fe623e2363c86d2af", + }); + + console.log(txRes); + + return txRes.hash; +}; + +// https://defender.openzeppelin.com/#/actions/automatic/e54e88e8-c9d3-4172-a6e4-686b276106b0 diff --git a/contracts/tasks/actions/otoken-oethb-rebase.ts b/contracts/tasks/actions/otoken-oethb-rebase.ts new file mode 100644 index 0000000000..759e2d702d --- /dev/null +++ b/contracts/tasks/actions/otoken-oethb-rebase.ts @@ -0,0 +1,19 @@ +const { Defender } = require("@openzeppelin/defender-sdk"); + +exports.handler = async function (credentials) { + const client = new Defender(credentials); + + const txRes = await client.relaySigner.sendTransaction({ + to: "0x98a0CbeF61bD2D21435f433bE4CD42B56B38CC93", + value: 0, + speed: "fast", + gasLimit: 300000, + data: "0xaf14052c", + }); + + console.log(txRes); + + return txRes.hash; +}; + +// https://defender.openzeppelin.com/#/actions/automatic/7d91be37-1cdf-4481-9f79-fb1e0a43277a diff --git a/contracts/tasks/actions/otoken-oethb-updateWoethPrice.ts b/contracts/tasks/actions/otoken-oethb-updateWoethPrice.ts new file mode 100644 index 0000000000..2ddf29add7 --- /dev/null +++ b/contracts/tasks/actions/otoken-oethb-updateWoethPrice.ts @@ -0,0 +1,18 @@ +const { Defender } = require("@openzeppelin/defender-sdk"); + +exports.handler = async function (credentials) { + const client = new Defender(credentials); + + const txRes = await client.relaySigner.sendTransaction({ + to: "0x80c864704DD06C3693ed5179190786EE38ACf835", + value: 0, + speed: "fast", + gasLimit: "200000", + data: "0x6c713833", + }); + + console.log(txRes); + return txRes.hash; +}; + +// https://defender.openzeppelin.com/#/actions/automatic/55082b52-4878-450c-8b5e-918bf7e27dc4 diff --git a/contracts/tasks/actions/otoken-oethp-addWithdrawalQueueLiquidity.ts b/contracts/tasks/actions/otoken-oethp-addWithdrawalQueueLiquidity.ts new file mode 100644 index 0000000000..e9b6f59d94 --- /dev/null +++ b/contracts/tasks/actions/otoken-oethp-addWithdrawalQueueLiquidity.ts @@ -0,0 +1,18 @@ +const { Defender } = require("@openzeppelin/defender-sdk"); + +exports.handler = async function (credentials) { + const client = new Defender(credentials); + + const tx = await client.relaySigner.sendTransaction({ + to: "0xc8c8F8bEA5631A8AF26440AF32a55002138cB76a", + value: 0, + speed: "fast", + gasLimit: "400000", + data: "0xb9b17f9f", + }); + + console.log(tx); + return tx.hash; +}; + +// https://defender.openzeppelin.com/#/actions/automatic/4fc4372d-05b3-4e6b-ad29-8fcff117737e diff --git a/contracts/tasks/actions/otoken-os-collectAndRelease.ts b/contracts/tasks/actions/otoken-os-collectAndRelease.ts new file mode 100644 index 0000000000..f10e938620 --- /dev/null +++ b/contracts/tasks/actions/otoken-os-collectAndRelease.ts @@ -0,0 +1,29 @@ +const { Defender } = require("@openzeppelin/defender-sdk"); + +exports.handler = async function (credentials) { + const client = new Defender(credentials); + + // Rebase on the Vault + const txRes = await client.relaySigner.sendTransaction({ + to: "0xa3c0eca00d2b76b4d1f170b0ab3fdea16c180186", + value: 0, + speed: "fast", + gasLimit: "400000", + data: "0xaf14052c", + }); + console.log(txRes); + + // Harvet and transfer + const harvestTx = await client.relaySigner.sendTransaction({ + to: "0x7B0383b31C7662E3f6B6E9C743Bc87b93C1f4498", + value: 0, + speed: "fast", + gasLimit: "400000", + data: "0x08765741000000000000000000000000be19cc5654e30daf04ad3b5e06213d70f4e882ee", + }); + console.log(harvestTx); + + return txRes.hash; +}; + +// https://defender.openzeppelin.com/#/actions/automatic/f558b0a0-45d5-4a7e-b0a8-c6fa8b3c19e5 diff --git a/contracts/tasks/actions/otoken-os-sonicRestakeRewards.ts b/contracts/tasks/actions/otoken-os-sonicRestakeRewards.ts new file mode 100644 index 0000000000..0241897493 --- /dev/null +++ b/contracts/tasks/actions/otoken-os-sonicRestakeRewards.ts @@ -0,0 +1,21 @@ +const { Defender } = require("@openzeppelin/defender-sdk"); + +exports.handler = async function (credentials) { + const client = new Defender(credentials); + + const txRes = await client.relaySigner.sendTransaction({ + // calls the SonicStakingStrategyProxy + to: "0x596B0401479f6DfE1cAF8c12838311FeE742B95c", + value: 0, + speed: "fast", + gasLimit: "300000", + // calls restakeRewards for validator 18 + data: "0xdc25cf9200000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000000f000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000110000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000002D", + }); + + console.log(txRes); + + return txRes.hash; +}; + +// https://defender.openzeppelin.com/#/actions/automatic/81fad098-1ca4-4407-8053-dc665c877641 diff --git a/contracts/tasks/actions/otoken-ousd-autoWithdrawal.ts b/contracts/tasks/actions/otoken-ousd-autoWithdrawal.ts new file mode 100644 index 0000000000..3ff7009dbb --- /dev/null +++ b/contracts/tasks/actions/otoken-ousd-autoWithdrawal.ts @@ -0,0 +1,18 @@ +const { Defender } = require("@openzeppelin/defender-sdk"); + +exports.handler = async function (credentials) { + const client = new Defender(credentials); + + const txRes = await client.relaySigner.sendTransaction({ + to: "0x90d588fc0eC3DB9c4b417dB4537fE08e063D2ae5", + value: 0, + speed: "fast", + gasLimit: "4000000", + data: "0x80bef06d", + }); + + console.log(txRes); + return txRes.hash; +}; + +// https://defender.openzeppelin.com/#/actions/automatic/0d2bd50d-5c95-4c59-9a4b-e59363d30584 diff --git a/contracts/tasks/actions/otoken-ousd-oeth-rebase.ts b/contracts/tasks/actions/otoken-ousd-oeth-rebase.ts new file mode 100644 index 0000000000..c680a17e3a --- /dev/null +++ b/contracts/tasks/actions/otoken-ousd-oeth-rebase.ts @@ -0,0 +1,67 @@ +const { + DefenderRelaySigner, + DefenderRelayProvider, +} = require("defender-relay-client/lib/ethers"); +const ethers = require("ethers"); + +const abi = + '[{"inputs": [], "name": "rebase", "outputs": [], "stateMutability": "nonpayable", "type": "function"},{"inputs":[],"name":"collectAndRebase","outputs":[],"stateMutability":"nonpayable","type":"function"}]'; + +exports.handler = async function (event) { + const provider = new DefenderRelayProvider(event); + const signer = new DefenderRelaySigner(event, provider, { speed: "fast" }); + + const oethDripper = new ethers.Contract( + "0xe3B3b4Fc77505EcfAACf6dD21619a8Cc12fcc501", + abi, + signer + ); + const ousdVault = new ethers.Contract( + "0xe75d77b1865ae93c7eaa3040b038d7aa7bc02f70", + abi, + signer + ); + + const multiplier = 1.1; + + // For oethDripper.collectAndRebase() + let oethTx; + try { + const estimatedGas = await oethDripper.estimateGas.collectAndRebase(); + const bumpedGasLimit = estimatedGas + .mul(Math.floor(multiplier * 100)) + .div(100); + + oethTx = await oethDripper.collectAndRebase({ + gasLimit: bumpedGasLimit, + }); + console.log("OETH tx sent with gasLimit:", bumpedGasLimit.toString()); + } catch (err) { + console.error("OETH estimation/send failed:", err); + throw err; // or handle fallback + } + + // For ousdVault.rebase() + let ousdTx; + try { + const estimatedGas = await ousdVault.estimateGas.rebase(); + const bumpedGasLimit = estimatedGas + .mul(Math.floor(multiplier * 100)) + .div(100); + + ousdTx = await ousdVault.rebase({ + gasLimit: bumpedGasLimit, + }); + console.log("OUSD tx sent with gasLimit:", bumpedGasLimit.toString()); + } catch (err) { + console.error("OUSD estimation/send failed:", err); + throw err; + } + + return { + oeth: oethTx.hash, + ousd: ousdTx.hash, + }; +}; + +// https://defender.openzeppelin.com/#/actions/automatic/8d3da519-c3c2-47e8-9853-07494905c470 From 243dba7d5fbf5b48320b81d7b1be575f74470c7a Mon Sep 17 00:00:00 2001 From: Christopher Jacobs Date: Thu, 2 Apr 2026 11:14:46 -0700 Subject: [PATCH 25/62] convert files to ts --- contracts/cron/cron-supervisor.ts | 3 +- .../actions/crossChainBalanceUpdate-base.ts | 34 +++--- .../crossChainBalanceUpdate-hyperevm.ts | 32 ++--- contracts/tasks/actions/healthcheck.ts | 7 +- .../actions/ogn-claimAndForwardRewards.ts | 52 +++++---- .../tasks/actions/otoken-oethb-harvest.ts | 43 ++++--- .../tasks/actions/otoken-oethb-rebase.ts | 34 +++--- .../actions/otoken-oethb-updateWoethPrice.ts | 33 +++--- ...token-oethp-addWithdrawalQueueLiquidity.ts | 36 +++--- .../actions/otoken-os-collectAndRelease.ts | 60 ++++++---- .../actions/otoken-os-sonicRestakeRewards.ts | 43 ++++--- .../actions/otoken-ousd-autoWithdrawal.ts | 33 +++--- .../tasks/actions/otoken-ousd-oeth-rebase.ts | 109 +++++++----------- 13 files changed, 279 insertions(+), 240 deletions(-) diff --git a/contracts/cron/cron-supervisor.ts b/contracts/cron/cron-supervisor.ts index d765e3be6d..d75b1fed81 100644 --- a/contracts/cron/cron-supervisor.ts +++ b/contracts/cron/cron-supervisor.ts @@ -7,7 +7,8 @@ import { type CronJob, renderCrontab } from "./render-crontab"; // --- Configuration --- const host = process.env.HOST || "0.0.0.0"; const port = Number.parseInt(process.env.PORT || "8080", 10); -const cronConfigPath = process.env.CRON_CONFIG_PATH || "/app/cron/cron-jobs.json"; +const cronConfigPath = + process.env.CRON_CONFIG_PATH || "/app/cron/cron-jobs.json"; const cronOutputPath = process.env.CRON_OUTPUT_PATH || "/app/cron/cronjob"; const supercronicBin = process.env.SUPERCRONIC_BIN || "supercronic"; const runHistoryLimit = Number.parseInt( diff --git a/contracts/tasks/actions/crossChainBalanceUpdate-base.ts b/contracts/tasks/actions/crossChainBalanceUpdate-base.ts index 9eace7ebff..ac25d9da84 100644 --- a/contracts/tasks/actions/crossChainBalanceUpdate-base.ts +++ b/contracts/tasks/actions/crossChainBalanceUpdate-base.ts @@ -1,19 +1,21 @@ -const { Defender } = require("@openzeppelin/defender-sdk"); +import { encodeFunctionData, parseAbi } from "viem"; -exports.handler = async function (credentials) { - const client = new Defender(credentials); +import { action } from "../lib/action"; - const txRes = await client.relaySigner.sendTransaction({ - to: "0xB1d624fc40824683e2bFBEfd19eB208DbBE00866", - value: 0, - speed: "fast", - gasLimit: "1000000", - // sendBalanceUpdate() - data: "0x3335ad7f", - }); +const CROSS_CHAIN_CONTROLLER = "0xB1d624fc40824683e2bFBEfd19eB208DbBE00866"; +const abi = parseAbi(["function sendBalanceUpdate() external"]); - console.log(txRes); - return txRes.hash; -}; - -// https://defender.openzeppelin.com/#/actions/automatic/8267c40e-825b-4b61-a339-fc9acef02acb +action({ + name: "crossChainBalanceUpdate-base", + description: "Send cross-chain balance update from Base", + chains: [8453], + run: async ({ signer, log }) => { + const tx = await signer.sendTransaction({ + to: CROSS_CHAIN_CONTROLLER, + data: encodeFunctionData({ abi, functionName: "sendBalanceUpdate" }), + gasLimit: 1000000, + }); + log.info(`sendBalanceUpdate tx: ${tx.hash}`); + await tx.wait(); + }, +}); diff --git a/contracts/tasks/actions/crossChainBalanceUpdate-hyperevm.ts b/contracts/tasks/actions/crossChainBalanceUpdate-hyperevm.ts index 9765cbc736..8c0f353b01 100644 --- a/contracts/tasks/actions/crossChainBalanceUpdate-hyperevm.ts +++ b/contracts/tasks/actions/crossChainBalanceUpdate-hyperevm.ts @@ -1,17 +1,21 @@ -const { Defender } = require("@openzeppelin/defender-sdk"); +import { encodeFunctionData, parseAbi } from "viem"; -exports.handler = async function (credentials) { - const client = new Defender(credentials); +import { action } from "../lib/action"; - const txRes = await client.relaySigner.sendTransaction({ - to: "0xE0228DB13F8C4Eb00fD1e08e076b09eF5cD0EA1e", - value: 0, - speed: "fast", - gasLimit: "1000000", - // sendBalanceUpdate() - data: "0x3335ad7f", - }); +const CROSS_CHAIN_CONTROLLER = "0xE0228DB13F8C4Eb00fD1e08e076b09eF5cD0EA1e"; +const abi = parseAbi(["function sendBalanceUpdate() external"]); - console.log(txRes); - return txRes.hash; -}; +action({ + name: "hyperevm-crossChainBalanceUpdate", + description: "Send cross-chain balance update from HyperEVM", + chains: [999], + run: async ({ signer, log }) => { + const tx = await signer.sendTransaction({ + to: CROSS_CHAIN_CONTROLLER, + data: encodeFunctionData({ abi, functionName: "sendBalanceUpdate" }), + gasLimit: 1000000, + }); + log.info(`sendBalanceUpdate tx: ${tx.hash}`); + await tx.wait(); + }, +}); diff --git a/contracts/tasks/actions/healthcheck.ts b/contracts/tasks/actions/healthcheck.ts index 7a46bbaa91..0bf36ef16c 100644 --- a/contracts/tasks/actions/healthcheck.ts +++ b/contracts/tasks/actions/healthcheck.ts @@ -2,7 +2,8 @@ import { action } from "../lib/action"; action({ name: "healthcheck", - description: "Verify the action execution pipeline (signer, network, logging)", + description: + "Verify the action execution pipeline (signer, network, logging)", run: async ({ log, signer, chainId, networkName }) => { log.info(`Node version: ${process.version}`); log.info(`Network: ${networkName} (${chainId})`); @@ -14,7 +15,9 @@ action({ log.info(`Signer balance: ${balance.toString()} wei`); log.info( - `AWS KMS available: ${!!(process.env.AWS_ACCESS_KEY_ID && process.env.AWS_SECRET_ACCESS_KEY)}` + `AWS KMS available: ${!!( + process.env.AWS_ACCESS_KEY_ID && process.env.AWS_SECRET_ACCESS_KEY + )}` ); log.info("Healthcheck passed"); }, diff --git a/contracts/tasks/actions/ogn-claimAndForwardRewards.ts b/contracts/tasks/actions/ogn-claimAndForwardRewards.ts index 36912329fa..41aca63e8e 100644 --- a/contracts/tasks/actions/ogn-claimAndForwardRewards.ts +++ b/contracts/tasks/actions/ogn-claimAndForwardRewards.ts @@ -1,28 +1,32 @@ -const { Defender } = require("@openzeppelin/defender-sdk"); +import { encodeFunctionData, parseAbi } from "viem"; -exports.handler = async function (credentials) { - const client = new Defender(credentials); +import { action } from "../lib/action"; - const moduleAddresses = [ - "0x15228dAE3B228175fBD9639d049265eFb08e60b6", - "0x8e32A930CcFE108DC560eC9e630BA6b5f7E179c9", - "0x460e4a0B14bD3F1e12f0c2194830c0204E5Bb147", - "0xFbBb82c4F3B6f479DE1451C04A76ea80da4ff010", - "0xAE67b612bD859378b7d0f6314E7Ee39ad4c6aBE6", - "0x046750A8106461d9826a8Ab32890B23753A5245e", - ]; +const MODULE_ADDRESSES = [ + "0x15228dAE3B228175fBD9639d049265eFb08e60b6", + "0x8e32A930CcFE108DC560eC9e630BA6b5f7E179c9", + "0x460e4a0B14bD3F1e12f0c2194830c0204E5Bb147", + "0xFbBb82c4F3B6f479DE1451C04A76ea80da4ff010", + "0xAE67b612bD859378b7d0f6314E7Ee39ad4c6aBE6", + "0x046750A8106461d9826a8Ab32890B23753A5245e", +] as const; - for (const moduleAddress of moduleAddresses) { - const txRes = await client.relaySigner.sendTransaction({ - to: moduleAddress, - value: 0, - speed: "fast", - gasLimit: "500000", - data: "0x70bb45b3", - }); +const abi = parseAbi(["function claimAndForward() external"]); - console.log(txRes); - } -}; - -// https://defender.openzeppelin.com/#/actions/automatic/9ed4d928-ac3b-4cd5-b679-4e50e428b8f8 +action({ + name: "ogn-claimAndForwardRewards", + description: "Claim and forward OGN rewards from all modules", + chains: [1], + run: async ({ signer, log }) => { + for (const moduleAddress of MODULE_ADDRESSES) { + log.info(`Calling claimAndForward on ${moduleAddress}`); + const tx = await signer.sendTransaction({ + to: moduleAddress, + data: encodeFunctionData({ abi, functionName: "claimAndForward" }), + gasLimit: 500000, + }); + log.info(`claimAndForward tx: ${tx.hash}`); + await tx.wait(); + } + }, +}); diff --git a/contracts/tasks/actions/otoken-oethb-harvest.ts b/contracts/tasks/actions/otoken-oethb-harvest.ts index a905960f3a..b3bf624ca2 100644 --- a/contracts/tasks/actions/otoken-oethb-harvest.ts +++ b/contracts/tasks/actions/otoken-oethb-harvest.ts @@ -1,19 +1,32 @@ -const { Defender } = require("@openzeppelin/defender-sdk"); +import { encodeFunctionData, parseAbi } from "viem"; -exports.handler = async function (credentials) { - const client = new Defender(credentials); +import { action } from "../lib/action"; - const txRes = await client.relaySigner.sendTransaction({ - to: "0x0CbEAcf86232fC04050cD679d860516F7254c22E", - value: 0, - speed: "fast", - gasLimit: "800000", - data: "0xb8a02d04000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000009cfcaf81600155e01c63e4d2993a8a81a8205829000000000000000000000000f611cc500eee7e4e4763a05fe623e2363c86d2af", - }); +const HARVESTER = "0x0CbEAcf86232fC04050cD679d860516F7254c22E"; +const STRATEGIES = [ + "0x9cfcaf81600155e01c63e4d2993a8a81a8205829", + "0xf611cc500eee7e4e4763a05fe623e2363c86d2af", +] as const; - console.log(txRes); +const abi = parseAbi([ + "function harvestAndTransfer(address[] strategies) external", +]); - return txRes.hash; -}; - -// https://defender.openzeppelin.com/#/actions/automatic/e54e88e8-c9d3-4172-a6e4-686b276106b0 +action({ + name: "otoken-oethb-harvest", + description: "Harvest strategies on Base OETHb", + chains: [8453], + run: async ({ signer, log }) => { + const tx = await signer.sendTransaction({ + to: HARVESTER, + data: encodeFunctionData({ + abi, + functionName: "harvestAndTransfer", + args: [[...STRATEGIES]], + }), + gasLimit: 800000, + }); + log.info(`harvestAndTransfer tx: ${tx.hash}`); + await tx.wait(); + }, +}); diff --git a/contracts/tasks/actions/otoken-oethb-rebase.ts b/contracts/tasks/actions/otoken-oethb-rebase.ts index 759e2d702d..7e00958ed8 100644 --- a/contracts/tasks/actions/otoken-oethb-rebase.ts +++ b/contracts/tasks/actions/otoken-oethb-rebase.ts @@ -1,19 +1,21 @@ -const { Defender } = require("@openzeppelin/defender-sdk"); +import { encodeFunctionData, parseAbi } from "viem"; -exports.handler = async function (credentials) { - const client = new Defender(credentials); +import { action } from "../lib/action"; - const txRes = await client.relaySigner.sendTransaction({ - to: "0x98a0CbeF61bD2D21435f433bE4CD42B56B38CC93", - value: 0, - speed: "fast", - gasLimit: 300000, - data: "0xaf14052c", - }); +const VAULT = "0x98a0CbeF61bD2D21435f433bE4CD42B56B38CC93"; +const abi = parseAbi(["function rebase() external"]); - console.log(txRes); - - return txRes.hash; -}; - -// https://defender.openzeppelin.com/#/actions/automatic/7d91be37-1cdf-4481-9f79-fb1e0a43277a +action({ + name: "otoken-oethb-rebase", + description: "Rebase OETHb vault on Base", + chains: [8453], + run: async ({ signer, log }) => { + const tx = await signer.sendTransaction({ + to: VAULT, + data: encodeFunctionData({ abi, functionName: "rebase" }), + gasLimit: 300000, + }); + log.info(`rebase tx: ${tx.hash}`); + await tx.wait(); + }, +}); diff --git a/contracts/tasks/actions/otoken-oethb-updateWoethPrice.ts b/contracts/tasks/actions/otoken-oethb-updateWoethPrice.ts index 2ddf29add7..39cbf282dc 100644 --- a/contracts/tasks/actions/otoken-oethb-updateWoethPrice.ts +++ b/contracts/tasks/actions/otoken-oethb-updateWoethPrice.ts @@ -1,18 +1,21 @@ -const { Defender } = require("@openzeppelin/defender-sdk"); +import { encodeFunctionData, parseAbi } from "viem"; -exports.handler = async function (credentials) { - const client = new Defender(credentials); +import { action } from "../lib/action"; - const txRes = await client.relaySigner.sendTransaction({ - to: "0x80c864704DD06C3693ed5179190786EE38ACf835", - value: 0, - speed: "fast", - gasLimit: "200000", - data: "0x6c713833", - }); +const WOETH_ON_BASE = "0x80c864704DD06C3693ed5179190786EE38ACf835"; +const abi = parseAbi(["function updateWOETHPrice() external"]); - console.log(txRes); - return txRes.hash; -}; - -// https://defender.openzeppelin.com/#/actions/automatic/55082b52-4878-450c-8b5e-918bf7e27dc4 +action({ + name: "otoken-oethb-updateWoethPrice", + description: "Update WOETH price on Base", + chains: [8453], + run: async ({ signer, log }) => { + const tx = await signer.sendTransaction({ + to: WOETH_ON_BASE, + data: encodeFunctionData({ abi, functionName: "updateWOETHPrice" }), + gasLimit: 200000, + }); + log.info(`updateWOETHPrice tx: ${tx.hash}`); + await tx.wait(); + }, +}); diff --git a/contracts/tasks/actions/otoken-oethp-addWithdrawalQueueLiquidity.ts b/contracts/tasks/actions/otoken-oethp-addWithdrawalQueueLiquidity.ts index e9b6f59d94..b17aacf458 100644 --- a/contracts/tasks/actions/otoken-oethp-addWithdrawalQueueLiquidity.ts +++ b/contracts/tasks/actions/otoken-oethp-addWithdrawalQueueLiquidity.ts @@ -1,18 +1,24 @@ -const { Defender } = require("@openzeppelin/defender-sdk"); +import { encodeFunctionData, parseAbi } from "viem"; -exports.handler = async function (credentials) { - const client = new Defender(credentials); +import { action } from "../lib/action"; - const tx = await client.relaySigner.sendTransaction({ - to: "0xc8c8F8bEA5631A8AF26440AF32a55002138cB76a", - value: 0, - speed: "fast", - gasLimit: "400000", - data: "0xb9b17f9f", - }); +const VAULT = "0xc8c8F8bEA5631A8AF26440AF32a55002138cB76a"; +const abi = parseAbi(["function addWithdrawalQueueLiquidity() external"]); - console.log(tx); - return tx.hash; -}; - -// https://defender.openzeppelin.com/#/actions/automatic/4fc4372d-05b3-4e6b-ad29-8fcff117737e +action({ + name: "otoken-oethp-addWithdrawalQueueLiquidity", + description: "Add liquidity to Plume OETH withdrawal queue", + chains: [1], + run: async ({ signer, log }) => { + const tx = await signer.sendTransaction({ + to: VAULT, + data: encodeFunctionData({ + abi, + functionName: "addWithdrawalQueueLiquidity", + }), + gasLimit: 400000, + }); + log.info(`addWithdrawalQueueLiquidity tx: ${tx.hash}`); + await tx.wait(); + }, +}); diff --git a/contracts/tasks/actions/otoken-os-collectAndRelease.ts b/contracts/tasks/actions/otoken-os-collectAndRelease.ts index f10e938620..6a9307aeff 100644 --- a/contracts/tasks/actions/otoken-os-collectAndRelease.ts +++ b/contracts/tasks/actions/otoken-os-collectAndRelease.ts @@ -1,29 +1,41 @@ -const { Defender } = require("@openzeppelin/defender-sdk"); +import { encodeFunctionData, parseAbi } from "viem"; -exports.handler = async function (credentials) { - const client = new Defender(credentials); +import { action } from "../lib/action"; - // Rebase on the Vault - const txRes = await client.relaySigner.sendTransaction({ - to: "0xa3c0eca00d2b76b4d1f170b0ab3fdea16c180186", - value: 0, - speed: "fast", - gasLimit: "400000", - data: "0xaf14052c", - }); - console.log(txRes); +const OS_VAULT = "0xa3c0eca00d2b76b4d1f170b0ab3fdea16c180186"; +const OS_HARVESTER = "0x7B0383b31C7662E3f6B6E9C743Bc87b93C1f4498"; +const SONIC_STAKING_STRATEGY = "0xbe19cc5654e30daf04ad3b5e06213d70f4e882ee"; - // Harvet and transfer - const harvestTx = await client.relaySigner.sendTransaction({ - to: "0x7B0383b31C7662E3f6B6E9C743Bc87b93C1f4498", - value: 0, - speed: "fast", - gasLimit: "400000", - data: "0x08765741000000000000000000000000be19cc5654e30daf04ad3b5e06213d70f4e882ee", - }); - console.log(harvestTx); +const vaultAbi = parseAbi(["function rebase() external"]); +const harvesterAbi = parseAbi([ + "function harvestAndTransfer(address strategy) external", +]); - return txRes.hash; -}; +action({ + name: "otoken-os-collectAndRelease", + description: "Rebase OS vault and harvest on Sonic", + chains: [146], + run: async ({ signer, log }) => { + // Rebase the vault + const rebaseTx = await signer.sendTransaction({ + to: OS_VAULT, + data: encodeFunctionData({ abi: vaultAbi, functionName: "rebase" }), + gasLimit: 400000, + }); + log.info(`rebase tx: ${rebaseTx.hash}`); + await rebaseTx.wait(); -// https://defender.openzeppelin.com/#/actions/automatic/f558b0a0-45d5-4a7e-b0a8-c6fa8b3c19e5 + // Harvest and transfer + const harvestTx = await signer.sendTransaction({ + to: OS_HARVESTER, + data: encodeFunctionData({ + abi: harvesterAbi, + functionName: "harvestAndTransfer", + args: [SONIC_STAKING_STRATEGY], + }), + gasLimit: 400000, + }); + log.info(`harvestAndTransfer tx: ${harvestTx.hash}`); + await harvestTx.wait(); + }, +}); diff --git a/contracts/tasks/actions/otoken-os-sonicRestakeRewards.ts b/contracts/tasks/actions/otoken-os-sonicRestakeRewards.ts index 0241897493..81ecb806fd 100644 --- a/contracts/tasks/actions/otoken-os-sonicRestakeRewards.ts +++ b/contracts/tasks/actions/otoken-os-sonicRestakeRewards.ts @@ -1,21 +1,30 @@ -const { Defender } = require("@openzeppelin/defender-sdk"); +import { encodeFunctionData, parseAbi } from "viem"; -exports.handler = async function (credentials) { - const client = new Defender(credentials); +import { action } from "../lib/action"; - const txRes = await client.relaySigner.sendTransaction({ - // calls the SonicStakingStrategyProxy - to: "0x596B0401479f6DfE1cAF8c12838311FeE742B95c", - value: 0, - speed: "fast", - gasLimit: "300000", - // calls restakeRewards for validator 18 - data: "0xdc25cf9200000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000000f000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000110000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000002D", - }); +const SONIC_STAKING_STRATEGY = "0x596B0401479f6DfE1cAF8c12838311FeE742B95c"; +const VALIDATOR_IDS = [15n, 16n, 17n, 18n, 45n]; - console.log(txRes); +const abi = parseAbi([ + "function restakeRewards(uint256[] validatorIds) external", +]); - return txRes.hash; -}; - -// https://defender.openzeppelin.com/#/actions/automatic/81fad098-1ca4-4407-8053-dc665c877641 +action({ + name: "otoken-os-sonicRestakeRewards", + description: "Restake rewards for Sonic validators", + chains: [146], + run: async ({ signer, log }) => { + log.info(`Restaking rewards for validators: ${VALIDATOR_IDS.join(", ")}`); + const tx = await signer.sendTransaction({ + to: SONIC_STAKING_STRATEGY, + data: encodeFunctionData({ + abi, + functionName: "restakeRewards", + args: [VALIDATOR_IDS], + }), + gasLimit: 300000, + }); + log.info(`restakeRewards tx: ${tx.hash}`); + await tx.wait(); + }, +}); diff --git a/contracts/tasks/actions/otoken-ousd-autoWithdrawal.ts b/contracts/tasks/actions/otoken-ousd-autoWithdrawal.ts index 3ff7009dbb..4b18c4ee1e 100644 --- a/contracts/tasks/actions/otoken-ousd-autoWithdrawal.ts +++ b/contracts/tasks/actions/otoken-ousd-autoWithdrawal.ts @@ -1,18 +1,21 @@ -const { Defender } = require("@openzeppelin/defender-sdk"); +import { encodeFunctionData, parseAbi } from "viem"; -exports.handler = async function (credentials) { - const client = new Defender(credentials); +import { action } from "../lib/action"; - const txRes = await client.relaySigner.sendTransaction({ - to: "0x90d588fc0eC3DB9c4b417dB4537fE08e063D2ae5", - value: 0, - speed: "fast", - gasLimit: "4000000", - data: "0x80bef06d", - }); +const VAULT = "0x90d588fc0eC3DB9c4b417dB4537fE08e063D2ae5"; +const abi = parseAbi(["function autoWithdraw() external"]); - console.log(txRes); - return txRes.hash; -}; - -// https://defender.openzeppelin.com/#/actions/automatic/0d2bd50d-5c95-4c59-9a4b-e59363d30584 +action({ + name: "otoken-ousd-autoWithdrawal", + description: "Auto-process OUSD withdrawals", + chains: [1], + run: async ({ signer, log }) => { + const tx = await signer.sendTransaction({ + to: VAULT, + data: encodeFunctionData({ abi, functionName: "autoWithdraw" }), + gasLimit: 4000000, + }); + log.info(`autoWithdraw tx: ${tx.hash}`); + await tx.wait(); + }, +}); diff --git a/contracts/tasks/actions/otoken-ousd-oeth-rebase.ts b/contracts/tasks/actions/otoken-ousd-oeth-rebase.ts index c680a17e3a..66f6afa67e 100644 --- a/contracts/tasks/actions/otoken-ousd-oeth-rebase.ts +++ b/contracts/tasks/actions/otoken-ousd-oeth-rebase.ts @@ -1,67 +1,44 @@ -const { - DefenderRelaySigner, - DefenderRelayProvider, -} = require("defender-relay-client/lib/ethers"); -const ethers = require("ethers"); - -const abi = - '[{"inputs": [], "name": "rebase", "outputs": [], "stateMutability": "nonpayable", "type": "function"},{"inputs":[],"name":"collectAndRebase","outputs":[],"stateMutability":"nonpayable","type":"function"}]'; - -exports.handler = async function (event) { - const provider = new DefenderRelayProvider(event); - const signer = new DefenderRelaySigner(event, provider, { speed: "fast" }); - - const oethDripper = new ethers.Contract( - "0xe3B3b4Fc77505EcfAACf6dD21619a8Cc12fcc501", - abi, - signer - ); - const ousdVault = new ethers.Contract( - "0xe75d77b1865ae93c7eaa3040b038d7aa7bc02f70", - abi, - signer - ); - - const multiplier = 1.1; - - // For oethDripper.collectAndRebase() - let oethTx; - try { - const estimatedGas = await oethDripper.estimateGas.collectAndRebase(); - const bumpedGasLimit = estimatedGas - .mul(Math.floor(multiplier * 100)) - .div(100); - - oethTx = await oethDripper.collectAndRebase({ - gasLimit: bumpedGasLimit, +import { ethers } from "ethers"; + +import { action } from "../lib/action"; + +const OETH_DRIPPER = "0xe3B3b4Fc77505EcfAACf6dD21619a8Cc12fcc501"; +const OUSD_VAULT = "0xe75d77b1865ae93c7eaa3040b038d7aa7bc02f70"; + +const abi = [ + "function rebase() external", + "function collectAndRebase() external", +]; + +const GAS_MULTIPLIER = 1.1; + +action({ + name: "otoken_ousd_oeth_rebase", + description: + "Rebase both OETH (collectAndRebase) and OUSD (rebase) on mainnet", + chains: [1], + run: async ({ signer, log }) => { + const oethDripper = new ethers.Contract(OETH_DRIPPER, abi, signer); + const ousdVault = new ethers.Contract(OUSD_VAULT, abi, signer); + + // OETH collectAndRebase with gas estimation + 10% buffer + log.info("Estimating gas for OETH collectAndRebase"); + const oethGas = await oethDripper.estimateGas.collectAndRebase(); + const oethGasLimit = oethGas.mul(Math.floor(GAS_MULTIPLIER * 100)).div(100); + const oethTx = await oethDripper.collectAndRebase({ + gasLimit: oethGasLimit, }); - console.log("OETH tx sent with gasLimit:", bumpedGasLimit.toString()); - } catch (err) { - console.error("OETH estimation/send failed:", err); - throw err; // or handle fallback - } - - // For ousdVault.rebase() - let ousdTx; - try { - const estimatedGas = await ousdVault.estimateGas.rebase(); - const bumpedGasLimit = estimatedGas - .mul(Math.floor(multiplier * 100)) - .div(100); - - ousdTx = await ousdVault.rebase({ - gasLimit: bumpedGasLimit, - }); - console.log("OUSD tx sent with gasLimit:", bumpedGasLimit.toString()); - } catch (err) { - console.error("OUSD estimation/send failed:", err); - throw err; - } - - return { - oeth: oethTx.hash, - ousd: ousdTx.hash, - }; -}; - -// https://defender.openzeppelin.com/#/actions/automatic/8d3da519-c3c2-47e8-9853-07494905c470 + log.info( + `OETH collectAndRebase tx: ${oethTx.hash} (gasLimit: ${oethGasLimit})` + ); + await oethTx.wait(); + + // OUSD rebase with gas estimation + 10% buffer + log.info("Estimating gas for OUSD rebase"); + const ousdGas = await ousdVault.estimateGas.rebase(); + const ousdGasLimit = ousdGas.mul(Math.floor(GAS_MULTIPLIER * 100)).div(100); + const ousdTx = await ousdVault.rebase({ gasLimit: ousdGasLimit }); + log.info(`OUSD rebase tx: ${ousdTx.hash} (gasLimit: ${ousdGasLimit})`); + await ousdTx.wait(); + }, +}); From 22d77a45f1ee8c5eeea343fd2f347ddf1f18e4ef Mon Sep 17 00:00:00 2001 From: Domen Grabec Date: Thu, 2 Apr 2026 15:39:20 +0200 Subject: [PATCH 26/62] expose kms signer --- contracts/tasks/tasks.js | 7 ++++--- contracts/utils/signers.js | 1 + 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/contracts/tasks/tasks.js b/contracts/tasks/tasks.js index 77816c3e35..08a77adcdc 100644 --- a/contracts/tasks/tasks.js +++ b/contracts/tasks/tasks.js @@ -20,7 +20,7 @@ const { encryptMasterPrivateKey, decryptMasterPrivateKey, } = require("./amazon"); -const { getSigner, getDefenderSigner } = require("../utils/signers"); +const { getSigner, getDefenderSigner, getKmsSigner } = require("../utils/signers"); const { snapMorpho } = require("../utils/morpho"); const { snapAero } = require("./aero"); const { @@ -1210,8 +1210,9 @@ task( `.localKeyValueStorage.${networkName}` ); - // This action only works with the Defender Relayer signer - const signer = await getDefenderSigner(); + // This action used to only work with defender relayer signer, + // in future it will work with KMS signer + const signer = await getKmsSigner(); const store = keyValueStoreLocalClient({ _storePath: storeFilePath }); const isMainnet = networkName === "mainnet"; diff --git a/contracts/utils/signers.js b/contracts/utils/signers.js index e98c2c3074..e77eb33ae6 100644 --- a/contracts/utils/signers.js +++ b/contracts/utils/signers.js @@ -103,4 +103,5 @@ module.exports = { impersonateAccount, impersonateAndFund, getDefenderSigner, + getKmsSigner, }; From b6c9fb0500c985946e65fa19ac5b6b18187e3d31 Mon Sep 17 00:00:00 2001 From: Domen Grabec Date: Fri, 3 Apr 2026 00:03:52 +0200 Subject: [PATCH 27/62] unify names --- contracts/tasks/actions/crossChainBalanceUpdate-hyperevm.ts | 2 +- contracts/tasks/actions/harvest.ts | 1 + contracts/tasks/actions/manageBribes.ts | 2 +- contracts/tasks/actions/manageMerklBribes.ts | 2 +- contracts/tasks/actions/otoken-ousd-oeth-rebase.ts | 2 +- contracts/tasks/actions/sonicClaimWithdrawals.ts | 2 +- .../{sonicRequestWithdrawal.ts => undelegateValidator.ts} | 0 7 files changed, 6 insertions(+), 5 deletions(-) rename contracts/tasks/actions/{sonicRequestWithdrawal.ts => undelegateValidator.ts} (100%) diff --git a/contracts/tasks/actions/crossChainBalanceUpdate-hyperevm.ts b/contracts/tasks/actions/crossChainBalanceUpdate-hyperevm.ts index 8c0f353b01..d09ce08367 100644 --- a/contracts/tasks/actions/crossChainBalanceUpdate-hyperevm.ts +++ b/contracts/tasks/actions/crossChainBalanceUpdate-hyperevm.ts @@ -6,7 +6,7 @@ const CROSS_CHAIN_CONTROLLER = "0xE0228DB13F8C4Eb00fD1e08e076b09eF5cD0EA1e"; const abi = parseAbi(["function sendBalanceUpdate() external"]); action({ - name: "hyperevm-crossChainBalanceUpdate", + name: "crossChainBalanceUpdate-hyperevm", description: "Send cross-chain balance update from HyperEVM", chains: [999], run: async ({ signer, log }) => { diff --git a/contracts/tasks/actions/harvest.ts b/contracts/tasks/actions/harvest.ts index dd405a8dc2..8a0f2cdb6c 100644 --- a/contracts/tasks/actions/harvest.ts +++ b/contracts/tasks/actions/harvest.ts @@ -25,6 +25,7 @@ action({ const nativeStakingStrategies = [ addresses.mainnet.NativeStakingSSVStrategy2Proxy, + // TODO: NativeStakingSSVStrategy3Proxy will soon be obsolete addresses.mainnet.NativeStakingSSVStrategy3Proxy, ]; diff --git a/contracts/tasks/actions/manageBribes.ts b/contracts/tasks/actions/manageBribes.ts index 18591b4655..2fe85d97eb 100644 --- a/contracts/tasks/actions/manageBribes.ts +++ b/contracts/tasks/actions/manageBribes.ts @@ -3,7 +3,7 @@ import { action } from "../lib/action"; import { manageBribes } from "../poolBooster"; action({ - name: "manageCurvePoolBoosterBribes", + name: "manageBribes", description: "Calls manageBribes on the CurvePoolBoosterBribesModule and calculates the rewards per vote based on the target efficiency", chains: [1], diff --git a/contracts/tasks/actions/manageMerklBribes.ts b/contracts/tasks/actions/manageMerklBribes.ts index 95e9cba6ec..c49cc867d0 100644 --- a/contracts/tasks/actions/manageMerklBribes.ts +++ b/contracts/tasks/actions/manageMerklBribes.ts @@ -3,7 +3,7 @@ import { action } from "../lib/action"; import { manageMerklBribes } from "../merklPoolBooster"; action({ - name: "manageMerklPoolBoosterBribes", + name: "manageMerklBribes", description: "Calls bribeAll on the MerklPoolBoosterBribesModule through the Gnosis Safe", chains: [1], diff --git a/contracts/tasks/actions/otoken-ousd-oeth-rebase.ts b/contracts/tasks/actions/otoken-ousd-oeth-rebase.ts index 66f6afa67e..95b62d25f4 100644 --- a/contracts/tasks/actions/otoken-ousd-oeth-rebase.ts +++ b/contracts/tasks/actions/otoken-ousd-oeth-rebase.ts @@ -13,7 +13,7 @@ const abi = [ const GAS_MULTIPLIER = 1.1; action({ - name: "otoken_ousd_oeth_rebase", + name: "otoken-ousd-oeth-rebase", description: "Rebase both OETH (collectAndRebase) and OUSD (rebase) on mainnet", chains: [1], diff --git a/contracts/tasks/actions/sonicClaimWithdrawals.ts b/contracts/tasks/actions/sonicClaimWithdrawals.ts index 34057f9032..da0de122d4 100644 --- a/contracts/tasks/actions/sonicClaimWithdrawals.ts +++ b/contracts/tasks/actions/sonicClaimWithdrawals.ts @@ -2,7 +2,7 @@ import { withdrawFromSFC } from "../../utils/sonicActions"; import { action } from "../lib/action"; action({ - name: "sonicWithdraw", + name: "sonicClaimWithdrawals", description: "Withdraw native S from a previously undelegated validator", chains: [146], run: async ({ signer }) => { diff --git a/contracts/tasks/actions/sonicRequestWithdrawal.ts b/contracts/tasks/actions/undelegateValidator.ts similarity index 100% rename from contracts/tasks/actions/sonicRequestWithdrawal.ts rename to contracts/tasks/actions/undelegateValidator.ts From eadaae477aeb6ede1eceba62158cf7f84ea9c1b6 Mon Sep 17 00:00:00 2001 From: Domen Grabec Date: Fri, 3 Apr 2026 00:10:58 +0200 Subject: [PATCH 28/62] add support to base for handling bribes --- contracts/tasks/actions/manageMerklBribes.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contracts/tasks/actions/manageMerklBribes.ts b/contracts/tasks/actions/manageMerklBribes.ts index c49cc867d0..ff961de86d 100644 --- a/contracts/tasks/actions/manageMerklBribes.ts +++ b/contracts/tasks/actions/manageMerklBribes.ts @@ -6,7 +6,7 @@ action({ name: "manageMerklBribes", description: "Calls bribeAll on the MerklPoolBoosterBribesModule through the Gnosis Safe", - chains: [1], + chains: [1, 8453], params: (t) => { t.addOptionalParam( "exclusionList", From 1373e69b491e6c7ffcd90cad1f4c4372d5ef618a Mon Sep 17 00:00:00 2001 From: Domen Grabec Date: Fri, 3 Apr 2026 16:12:36 +0200 Subject: [PATCH 29/62] add some more cron-job configurations --- contracts/cron/cron-jobs.json | 63 +++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) diff --git a/contracts/cron/cron-jobs.json b/contracts/cron/cron-jobs.json index e9c094e9e8..2825412851 100644 --- a/contracts/cron/cron-jobs.json +++ b/contracts/cron/cron-jobs.json @@ -1,5 +1,68 @@ { "jobs": [ + { + "name": "manage_merkle_morpho_bribe", + "schedule": "0 13 * * 3", + "enabled": false, + "permmissioned": true, + "command": "cd /app && pnpm hardhat manageMerklBribes --network mainnet" + }, + { + "name": "manage_curve_pb_mainnet", + "schedule": "0 09 * * 5", + "enabled": false, + "permmissioned": true, + "command": "cd /app && pnpm hardhat manageBribes --network mainnet" + }, + { + "name": "OETHandOUSD_harvest_CRV_MOPRHO_native_staking", + "schedule": "40 11,23 * * *", + "enabled": false, + "permmissioned": false, + "command": "cd /app && pnpm hardhat harvest --network mainnet" + }, + { + "name": "OETH_native_staking_accounting", + "schedule": "430 23 * * *", + "enabled": false, + "permmissioned": true, + "command": "cd /app && pnpm hardhat doAccounting --network mainnet" + }, + { + "name": "manage_pass_through", + "schedule": "0 12 * * 0", + "enabled": false, + "permmissioned": false, + "command": "cd /app && pnpm hardhat managePassThrough --network mainnet" + }, + { + "name": "claim_bribes_base", + "schedule": "00 10 * * 4", + "enabled": false, + "permmissioned": true, + "command": "cd /app && pnpm hardhat claimBribes --network base" + }, + { + "name": "manage_bribes_base", + "schedule": "0 13 * * 3", + "enabled": false, + "permmissioned": true, + "command": "cd /app && pnpm hardhat manageMerklBribes --network base" + }, + { + "name": "sonic_staking_request_withdraw", + "schedule": "50 3,9,15,21 * * *", + "enabled": false, + "permmissioned": true, + "command": "cd /app && pnpm hardhat sonicUndelegate --network sonic" + }, + { + "name": "sonic_staking_claim_withdraw", + "schedule": "58 */2 * * *", + "enabled": false, + "permmissioned": true, + "command": "cd /app && pnpm hardhat sonicClaimWithdrawals --network sonic" + }, { "name": "healthcheck", "schedule": "*/5 * * * *", From da6abf3fc36c8b7b8af694cabd6b9be91c253624 Mon Sep 17 00:00:00 2001 From: Christopher Jacobs Date: Fri, 3 Apr 2026 17:13:51 -0700 Subject: [PATCH 30/62] Convert cron-jobs.json to typed cron-jobs.ts --- contracts/cron/README.md | 16 +-- contracts/cron/cron-jobs.json | 187 --------------------------- contracts/cron/cron-jobs.ts | 202 ++++++++++++++++++++++++++++++ contracts/cron/cron-supervisor.ts | 11 +- contracts/cron/render-crontab.ts | 69 ++-------- contracts/docker-compose.yml | 1 - 6 files changed, 222 insertions(+), 264 deletions(-) delete mode 100644 contracts/cron/cron-jobs.json create mode 100644 contracts/cron/cron-jobs.ts diff --git a/contracts/cron/README.md b/contracts/cron/README.md index 0195db2fda..2a0b477732 100644 --- a/contracts/cron/README.md +++ b/contracts/cron/README.md @@ -4,8 +4,8 @@ Containerized scheduler for running hardhat tasks on a schedule. Replaces OpenZe ## How it works -1. **`cron-jobs.json`** — Defines all scheduled jobs (name, cron schedule, command, enabled flag) -2. **`render-crontab.ts`** — Reads `cron-jobs.json`, filters to enabled jobs, writes a supercronic-compatible crontab file +1. **`cron-jobs.ts`** — Defines all scheduled jobs (name, cron schedule, command, enabled flag) with full TypeScript typing +2. **`render-crontab.ts`** — Imports jobs from `cron-jobs.ts`, filters to enabled jobs, writes a supercronic-compatible crontab file 3. **`cron-supervisor.ts`** — Starts supercronic with the generated crontab, runs an HTTP API for triggering actions on-demand and checking run status 4. **`cron-entrypoint.sh`** — Docker entrypoint that boots the supervisor @@ -41,14 +41,14 @@ curl -H 'Authorization: Bearer $ACTION_API_BEARER_TOKEN' \ ## Adding a new job -Add an entry to `cron-jobs.json`: +Add an entry to the `cronJobs` array in `cron-jobs.ts`: -```json +```ts { - "name": "my_new_job", - "schedule": "0 */6 * * *", - "enabled": true, - "command": "cd /app && pnpm hardhat myTask --network mainnet" + name: "my_new_job", + schedule: "0 */6 * * *", + enabled: true, + command: "cd /app && pnpm hardhat myTask --network mainnet", } ``` diff --git a/contracts/cron/cron-jobs.json b/contracts/cron/cron-jobs.json deleted file mode 100644 index 2825412851..0000000000 --- a/contracts/cron/cron-jobs.json +++ /dev/null @@ -1,187 +0,0 @@ -{ - "jobs": [ - { - "name": "manage_merkle_morpho_bribe", - "schedule": "0 13 * * 3", - "enabled": false, - "permmissioned": true, - "command": "cd /app && pnpm hardhat manageMerklBribes --network mainnet" - }, - { - "name": "manage_curve_pb_mainnet", - "schedule": "0 09 * * 5", - "enabled": false, - "permmissioned": true, - "command": "cd /app && pnpm hardhat manageBribes --network mainnet" - }, - { - "name": "OETHandOUSD_harvest_CRV_MOPRHO_native_staking", - "schedule": "40 11,23 * * *", - "enabled": false, - "permmissioned": false, - "command": "cd /app && pnpm hardhat harvest --network mainnet" - }, - { - "name": "OETH_native_staking_accounting", - "schedule": "430 23 * * *", - "enabled": false, - "permmissioned": true, - "command": "cd /app && pnpm hardhat doAccounting --network mainnet" - }, - { - "name": "manage_pass_through", - "schedule": "0 12 * * 0", - "enabled": false, - "permmissioned": false, - "command": "cd /app && pnpm hardhat managePassThrough --network mainnet" - }, - { - "name": "claim_bribes_base", - "schedule": "00 10 * * 4", - "enabled": false, - "permmissioned": true, - "command": "cd /app && pnpm hardhat claimBribes --network base" - }, - { - "name": "manage_bribes_base", - "schedule": "0 13 * * 3", - "enabled": false, - "permmissioned": true, - "command": "cd /app && pnpm hardhat manageMerklBribes --network base" - }, - { - "name": "sonic_staking_request_withdraw", - "schedule": "50 3,9,15,21 * * *", - "enabled": false, - "permmissioned": true, - "command": "cd /app && pnpm hardhat sonicUndelegate --network sonic" - }, - { - "name": "sonic_staking_claim_withdraw", - "schedule": "58 */2 * * *", - "enabled": false, - "permmissioned": true, - "command": "cd /app && pnpm hardhat sonicClaimWithdrawals --network sonic" - }, - { - "name": "healthcheck", - "schedule": "*/5 * * * *", - "enabled": true, - "command": "cd /app && pnpm hardhat healthcheck --network ${HARDHAT_NETWORK:-mainnet}" - }, - { - "name": "hourly_snap_balances", - "schedule": "0 * * * *", - "enabled": false, - "command": "cd /app && pnpm hardhat snapBalances --network ${HARDHAT_NETWORK:-mainnet}" - }, - { - "name": "hourly_verify_balances", - "schedule": "8 * * * *", - "enabled": false, - "command": "cd /app && pnpm hardhat verifyBalances --network ${HARDHAT_NETWORK:-mainnet}" - }, - { - "name": "hourly_verify_deposits", - "schedule": "10 * * * *", - "enabled": false, - "command": "cd /app && pnpm hardhat verifyDeposits --network ${HARDHAT_NETWORK:-mainnet}" - }, - { - "name": "hourly_auto_validator_deposits", - "schedule": "12 * * * *", - "enabled": false, - "command": "cd /app && pnpm hardhat autoValidatorDeposits --network ${HARDHAT_NETWORK:-mainnet}" - }, - { - "name": "hourly_auto_validator_withdrawals", - "schedule": "14 * * * *", - "enabled": false, - "command": "cd /app && pnpm hardhat autoValidatorWithdrawals --network ${HARDHAT_NETWORK:-mainnet}" - }, - { - "name": "daily_rebase_mainnet_oeth", - "schedule": "0 0 * * *", - "enabled": true, - "command": "cd /app && pnpm hardhat rebase --network mainnet --symbol OETH" - }, - { - "name": "daily_rebase_mainnet_ousd", - "schedule": "10 0 * * *", - "enabled": true, - "command": "cd /app && pnpm hardhat rebase --network mainnet --symbol OUSD" - }, - { - "name": "daily_rebase_base_oeth", - "schedule": "20 0 * * *", - "enabled": true, - "command": "cd /app && pnpm hardhat rebase --network base --symbol OETH" - }, - { - "name": "otoken_os_collectAndRelease", - "schedule": "50 23 * * *", - "enabled": false, - "command": "cd /app && pnpm hardhat otoken-os-collectAndRelease --network sonic" - }, - { - "name": "otoken_ousd_autoWithdrawal", - "schedule": "40 11,23 * * *", - "enabled": false, - "command": "cd /app && pnpm hardhat otoken-ousd-autoWithdrawal --network mainnet" - }, - { - "name": "otoken_oethb_updateWoethPrice", - "schedule": "10 21 * * *", - "enabled": false, - "command": "cd /app && pnpm hardhat otoken-oethb-updateWoethPrice --network mainnet" - }, - { - "name": "otoken_oethp_addWithdrawalQueueLiquidity", - "schedule": "5 0 * * *", - "enabled": false, - "command": "cd /app && pnpm hardhat otoken-oethp-addWithdrawalQueueLiquidity --network mainnet" - }, - { - "name": "otoken_oethb_rebase", - "schedule": "25 9,21 * * *", - "enabled": false, - "command": "cd /app && pnpm hardhat otoken-oethb-rebase --network base" - }, - { - "name": "otoken_os_sonicRestakeRewards", - "schedule": "55 23 * * *", - "enabled": false, - "command": "cd /app && pnpm hardhat otoken-os-sonicRestakeRewards --network sonic" - }, - { - "name": "crossChainBalanceUpdate-base", - "schedule": "15 7,15,23 * * *", - "enabled": false, - "command": "cd /app && pnpm hardhat crossChainBalanceUpdate-base --network base" - }, - { - "name": "crossChainBalanceUpdate-hyperevm", - "schedule": "15 7,15,23 * * *", - "enabled": false, - "command": "cd /app && pnpm hardhat hyperevm-crossChainBalanceUpdate --network hyperevm" - }, - { - "name": "otoken_ousd_oeth_rebase", - "schedule": "50 11,23 * * *", - "enabled": false, - "command": "cd /app && pnpm hardhat otoken_ousd_oeth_rebase --network mainnet" - }, - { - "name": "ogn_claimAndForwardRewards", - "schedule": "0 0 * * 2", - "enabled": false, - "command": "cd /app && pnpm hardhat ogn-claimAndForwardRewards --network mainnet" - }, - { - "name": "otoken_oethb_harvest", - "schedule": "50 11 * * *", - "enabled": false, - "command": "cd /app && pnpm hardhat otoken-oethb-harvest --network base" - } - ] -} diff --git a/contracts/cron/cron-jobs.ts b/contracts/cron/cron-jobs.ts new file mode 100644 index 0000000000..f3c5a81970 --- /dev/null +++ b/contracts/cron/cron-jobs.ts @@ -0,0 +1,202 @@ +import type { CronJob } from "./render-crontab"; + +export const cronJobs: CronJob[] = [ + { + name: "manage_merkle_morpho_bribe", + schedule: "0 13 * * 3", + enabled: false, + permmissioned: true, + command: "cd /app && pnpm hardhat manageMerklBribes --network mainnet", + }, + { + name: "manage_curve_pb_mainnet", + schedule: "0 09 * * 5", + enabled: false, + permmissioned: true, + command: "cd /app && pnpm hardhat manageBribes --network mainnet", + }, + { + name: "OETHandOUSD_harvest_CRV_MOPRHO_native_staking", + schedule: "40 11,23 * * *", + enabled: false, + permmissioned: false, + command: "cd /app && pnpm hardhat harvest --network mainnet", + }, + { + name: "OETH_native_staking_accounting", + schedule: "430 23 * * *", + enabled: false, + permmissioned: true, + command: "cd /app && pnpm hardhat doAccounting --network mainnet", + }, + { + name: "manage_pass_through", + schedule: "0 12 * * 0", + enabled: false, + permmissioned: false, + command: "cd /app && pnpm hardhat managePassThrough --network mainnet", + }, + { + name: "claim_bribes_base", + schedule: "00 10 * * 4", + enabled: false, + permmissioned: true, + command: "cd /app && pnpm hardhat claimBribes --network base", + }, + { + name: "manage_bribes_base", + schedule: "0 13 * * 3", + enabled: false, + permmissioned: true, + command: "cd /app && pnpm hardhat manageMerklBribes --network base", + }, + { + name: "sonic_staking_request_withdraw", + schedule: "50 3,9,15,21 * * *", + enabled: false, + permmissioned: true, + command: "cd /app && pnpm hardhat sonicUndelegate --network sonic", + }, + { + name: "sonic_staking_claim_withdraw", + schedule: "58 */2 * * *", + enabled: false, + permmissioned: true, + command: "cd /app && pnpm hardhat sonicClaimWithdrawals --network sonic", + }, + { + name: "healthcheck", + schedule: "*/5 * * * *", + enabled: true, + command: + "cd /app && pnpm hardhat healthcheck --network ${HARDHAT_NETWORK:-mainnet}", + }, + { + name: "hourly_snap_balances", + schedule: "0 * * * *", + enabled: false, + command: + "cd /app && pnpm hardhat snapBalances --network ${HARDHAT_NETWORK:-mainnet}", + }, + { + name: "hourly_verify_balances", + schedule: "8 * * * *", + enabled: false, + command: + "cd /app && pnpm hardhat verifyBalances --network ${HARDHAT_NETWORK:-mainnet}", + }, + { + name: "hourly_verify_deposits", + schedule: "10 * * * *", + enabled: false, + command: + "cd /app && pnpm hardhat verifyDeposits --network ${HARDHAT_NETWORK:-mainnet}", + }, + { + name: "hourly_auto_validator_deposits", + schedule: "12 * * * *", + enabled: false, + command: + "cd /app && pnpm hardhat autoValidatorDeposits --network ${HARDHAT_NETWORK:-mainnet}", + }, + { + name: "hourly_auto_validator_withdrawals", + schedule: "14 * * * *", + enabled: false, + command: + "cd /app && pnpm hardhat autoValidatorWithdrawals --network ${HARDHAT_NETWORK:-mainnet}", + }, + { + name: "daily_rebase_mainnet_oeth", + schedule: "0 0 * * *", + enabled: true, + command: "cd /app && pnpm hardhat rebase --network mainnet --symbol OETH", + }, + { + name: "daily_rebase_mainnet_ousd", + schedule: "10 0 * * *", + enabled: true, + command: "cd /app && pnpm hardhat rebase --network mainnet --symbol OUSD", + }, + { + name: "daily_rebase_base_oeth", + schedule: "20 0 * * *", + enabled: true, + command: "cd /app && pnpm hardhat rebase --network base --symbol OETH", + }, + { + name: "otoken_os_collectAndRelease", + schedule: "50 23 * * *", + enabled: false, + command: + "cd /app && pnpm hardhat otoken-os-collectAndRelease --network sonic", + }, + { + name: "otoken_ousd_autoWithdrawal", + schedule: "40 11,23 * * *", + enabled: false, + command: + "cd /app && pnpm hardhat otoken-ousd-autoWithdrawal --network mainnet", + }, + { + name: "otoken_oethb_updateWoethPrice", + schedule: "10 21 * * *", + enabled: false, + command: + "cd /app && pnpm hardhat otoken-oethb-updateWoethPrice --network mainnet", + }, + { + name: "otoken_oethp_addWithdrawalQueueLiquidity", + schedule: "5 0 * * *", + enabled: false, + command: + "cd /app && pnpm hardhat otoken-oethp-addWithdrawalQueueLiquidity --network mainnet", + }, + { + name: "otoken_oethb_rebase", + schedule: "25 9,21 * * *", + enabled: false, + command: "cd /app && pnpm hardhat otoken-oethb-rebase --network base", + }, + { + name: "otoken_os_sonicRestakeRewards", + schedule: "55 23 * * *", + enabled: false, + command: + "cd /app && pnpm hardhat otoken-os-sonicRestakeRewards --network sonic", + }, + { + name: "crossChainBalanceUpdate-base", + schedule: "15 7,15,23 * * *", + enabled: false, + command: + "cd /app && pnpm hardhat crossChainBalanceUpdate-base --network base", + }, + { + name: "crossChainBalanceUpdate-hyperevm", + schedule: "15 7,15,23 * * *", + enabled: false, + command: + "cd /app && pnpm hardhat hyperevm-crossChainBalanceUpdate --network hyperevm", + }, + { + name: "otoken_ousd_oeth_rebase", + schedule: "50 11,23 * * *", + enabled: false, + command: + "cd /app && pnpm hardhat otoken_ousd_oeth_rebase --network mainnet", + }, + { + name: "ogn_claimAndForwardRewards", + schedule: "0 0 * * 2", + enabled: false, + command: + "cd /app && pnpm hardhat ogn-claimAndForwardRewards --network mainnet", + }, + { + name: "otoken_oethb_harvest", + schedule: "50 11 * * *", + enabled: false, + command: "cd /app && pnpm hardhat otoken-oethb-harvest --network base", + }, +]; diff --git a/contracts/cron/cron-supervisor.ts b/contracts/cron/cron-supervisor.ts index d75b1fed81..72f4bd79a5 100644 --- a/contracts/cron/cron-supervisor.ts +++ b/contracts/cron/cron-supervisor.ts @@ -2,13 +2,12 @@ import { spawn } from "node:child_process"; import { randomUUID, timingSafeEqual } from "node:crypto"; import fs from "node:fs"; import http from "node:http"; +import { cronJobs } from "./cron-jobs"; import { type CronJob, renderCrontab } from "./render-crontab"; // --- Configuration --- const host = process.env.HOST || "0.0.0.0"; const port = Number.parseInt(process.env.PORT || "8080", 10); -const cronConfigPath = - process.env.CRON_CONFIG_PATH || "/app/cron/cron-jobs.json"; const cronOutputPath = process.env.CRON_OUTPUT_PATH || "/app/cron/cronjob"; const supercronicBin = process.env.SUPERCRONIC_BIN || "supercronic"; const runHistoryLimit = Number.parseInt( @@ -104,7 +103,7 @@ function storeRun(run: ActionRun) { function initCron() { try { const result = renderCrontab({ - configPath: cronConfigPath, + jobs: cronJobs, outputPath: cronOutputPath, }); return result; @@ -114,7 +113,7 @@ function initCron() { } } -const { config: renderedConfig, enabledJobs } = initCron(); +const { jobs: allJobs, enabledJobs } = initCron(); console.log( `[cron-supervisor] Generated ${enabledJobs.length} enabled cron jobs at ${cronOutputPath}` @@ -123,7 +122,7 @@ console.log(`[cron-supervisor] Generated ${cronOutputPath}:`); console.log(fs.readFileSync(cronOutputPath, "utf8")); const jobsByName = new Map( - renderedConfig.jobs.map((job) => [job.name, job]) + allJobs.map((job) => [job.name, job]) ); // --- Action execution --- @@ -255,7 +254,7 @@ const server = http.createServer((req, res) => { // List actions if (method === "GET" && url.pathname === "/api/v1/actions") { return json(res, 200, { - actions: renderedConfig.jobs.map((job) => ({ + actions: allJobs.map((job) => ({ name: job.name, schedule: job.schedule, enabled: job.enabled, diff --git a/contracts/cron/render-crontab.ts b/contracts/cron/render-crontab.ts index e4c4cc848b..c589887e17 100644 --- a/contracts/cron/render-crontab.ts +++ b/contracts/cron/render-crontab.ts @@ -1,9 +1,8 @@ import fs from "node:fs"; import path from "node:path"; -// Default to local paths -const DEFAULT_CONFIG_PATH = - process.env.CRON_CONFIG_PATH || "./cron/cron-jobs.json"; +import { cronJobs } from "./cron-jobs"; + const DEFAULT_OUTPUT_PATH = process.env.CRON_OUTPUT_PATH || "./cron/cronjob"; export class RenderCrontabError extends Error {} @@ -12,6 +11,7 @@ export interface CronJob { name: string; schedule: string; enabled: boolean; + permmissioned?: boolean; command: string; } @@ -19,66 +19,11 @@ export interface CronConfig { jobs: CronJob[]; } -function assertCronConfig(data: any): asserts data is CronConfig { - if (!data || typeof data !== "object" || Array.isArray(data)) { - throw new RenderCrontabError("config root must be an object"); - } - if (!Array.isArray(data.jobs)) { - throw new RenderCrontabError('config must include a "jobs" array'); - } - const names = new Set(); - for (let i = 0; i < data.jobs.length; i++) { - const job = data.jobs[i]; - if (!job || typeof job !== "object" || Array.isArray(job)) { - throw new RenderCrontabError(`jobs[${i}] must be an object`); - } - if (typeof job.name !== "string" || !job.name.trim()) { - throw new RenderCrontabError( - `jobs[${i}].name must be a non-empty string` - ); - } - if (names.has(job.name)) { - throw new RenderCrontabError(`duplicate job name "${job.name}"`); - } - names.add(job.name); - if ( - typeof job.schedule !== "string" || - job.schedule.trim().split(/\s+/).length !== 5 - ) { - throw new RenderCrontabError( - `jobs[${i}].schedule must be a valid 5-field cron expression` - ); - } - if (typeof job.enabled !== "boolean") { - throw new RenderCrontabError(`jobs[${i}].enabled must be a boolean`); - } - if (typeof job.command !== "string" || !job.command.trim()) { - throw new RenderCrontabError( - `jobs[${i}].command must be a non-empty string` - ); - } - } -} - -export function loadCronConfig(configPath = DEFAULT_CONFIG_PATH): CronConfig { - let parsed: any; - try { - parsed = JSON.parse(fs.readFileSync(configPath, "utf8")); - } catch (e: any) { - throw new RenderCrontabError( - `failed to read or parse config "${configPath}": ${e.message}` - ); - } - assertCronConfig(parsed); - return parsed; -} - export function renderCrontab({ - configPath = DEFAULT_CONFIG_PATH, + jobs = cronJobs, outputPath = DEFAULT_OUTPUT_PATH, -} = {}) { - const config = loadCronConfig(configPath); - const enabledJobs = config.jobs.filter((job) => job.enabled); +}: { jobs?: CronJob[]; outputPath?: string } = {}) { + const enabledJobs = jobs.filter((job) => job.enabled); if (enabledJobs.length === 0) { throw new RenderCrontabError("config has zero enabled jobs"); } @@ -92,7 +37,7 @@ export function renderCrontab({ fs.mkdirSync(path.dirname(outputPath), { recursive: true }); fs.writeFileSync(outputPath, `${lines.join("\n")}\n`, "utf8"); - return { config, enabledJobs, outputPath }; + return { jobs, enabledJobs, outputPath }; } if (require.main === module) { diff --git a/contracts/docker-compose.yml b/contracts/docker-compose.yml index ec887cd44e..0d60def93f 100644 --- a/contracts/docker-compose.yml +++ b/contracts/docker-compose.yml @@ -18,6 +18,5 @@ services: - LOKI_API_KEY=${LOKI_API_KEY:-} - AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID:-} - AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY:-} - - CRON_CONFIG_PATH=./cron/cron-jobs.json - CRON_OUTPUT_PATH=./cron/cronjob - DEBUG=origin* From 2d49c6a237ec52f01461c3c48617deddcbd19937 Mon Sep 17 00:00:00 2001 From: Domen Grabec Date: Sun, 5 Apr 2026 14:50:32 +0200 Subject: [PATCH 31/62] add skill file on how to transform actions from viem to hardhat --- contracts/tasks/actions/SKILL.md | 68 ++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 contracts/tasks/actions/SKILL.md diff --git a/contracts/tasks/actions/SKILL.md b/contracts/tasks/actions/SKILL.md new file mode 100644 index 0000000000..3be6449161 --- /dev/null +++ b/contracts/tasks/actions/SKILL.md @@ -0,0 +1,68 @@ +--- +name: action-migration-hardhat +description: Use this skill when migrating cron actions in contracts/tasks/actions from viem/raw signer.sendTransaction calls to readable ethers contract method calls resolved from Hardhat deployments. +--- + +# Action Migration Skill + +## Use This For + +- Migrating existing action tasks in `contracts/tasks/actions/*.ts` +- Replacing raw calldata + `signer.sendTransaction` patterns +- Standardizing actions on Hardhat deployments + ethers `Contract` calls + +## Target State + +- Keep the `action({ ... })` wrapper and chain restrictions. +- Prefer fetching deployed contracts by name via Hardhat (`ethers.getContract("")`). +- Call named contract methods (`contract.rebase()`) instead of encoding selectors manually. +- Keep logs clear and action-specific. + +## Migration Rules + +1. Remove `viem` usage (`parseAbi`, `encodeFunctionData`) from actions. +2. Avoid `signer.sendTransaction({ to, data })` for contract calls. +3. Prefer `ethers.getContract("")` and call methods on that contract. +4. Connect to action signer before write calls: `contract.connect(signer).myMethod()`. +5. Use `new ethers.Contract(address, abi, signer)` only as fallback when no deployment name is available. +6. For proxy contracts, check existing patterns in `contracts/deploy//*.js` (mainnet/base/sonic/etc.) and `contracts/test/**/*.js` to choose the correct binding style (`getContract`, `getContractAt("I...")`, or implementation ABI at proxy address). +7. Keep explicit `chains: [...]` guardrails for each action. +8. Keep waits (`await tx.wait()`) and useful tx hash logging. +9. When replacing a hard-coded contract address with `ethers.getContract("")`, verify the old address equals the deployment address for that contract on the target chain; if it does not match, stop and flag it. + +## Preferred Pattern + +```ts +import { ethers } from "hardhat"; +import { action } from "../lib/action"; + +action({ + name: "example-action", + description: "Example migration target", + chains: [1], + run: async ({ signer, log }) => { + const contract = await ethers.getContract("MyContractProxy"); + const tx = await contract.connect(signer).myMethod(); + log.info(`myMethod tx: ${tx.hash}`); + await tx.wait(); + }, +}); +``` + +Fallback only (if contract cannot be fetched by deployment name): + +```ts +// import { ethers } from "ethers"; +// import { abi, address } from "../../deployments/mainnet/MyContract.json"; +// const contract = new ethers.Contract(address, abi, signer); +``` + +## Review Checklist + +- Action still runs on intended chain(s) only. +- No manual calldata encoding for known contract methods. +- Contract source (deployment/address) is readable and obvious. +- For proxy targets, contract binding style matches existing deploy/test patterns for that proxy and network. +- If a hard-coded address was migrated, its value was checked against the deployment address for the chosen contract name and chain. +- Method name reflects protocol intent (better than raw selector calls). +- Logging includes enough context to debug failures. From 6d6b74eaab74c58c44e24ba7753936626d09bb46 Mon Sep 17 00:00:00 2001 From: Domen Grabec Date: Sun, 5 Apr 2026 14:50:50 +0200 Subject: [PATCH 32/62] convert first function from viem to hardhat --- .../deployments/mainnet/OETHDripper.json | 374 ------------------ .../deployments/mainnet/OETHDripperProxy.json | 284 ------------- .../tasks/actions/otoken-ousd-oeth-rebase.ts | 30 +- 3 files changed, 15 insertions(+), 673 deletions(-) delete mode 100644 contracts/deployments/mainnet/OETHDripper.json delete mode 100644 contracts/deployments/mainnet/OETHDripperProxy.json diff --git a/contracts/deployments/mainnet/OETHDripper.json b/contracts/deployments/mainnet/OETHDripper.json deleted file mode 100644 index 065627a40a..0000000000 --- a/contracts/deployments/mainnet/OETHDripper.json +++ /dev/null @@ -1,374 +0,0 @@ -{ - "address": "0x0929C0fbFF88e129ACaA51Bba0C959491325b4aD", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_vault", - "type": "address" - }, - { - "internalType": "address", - "name": "_token", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousGovernor", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newGovernor", - "type": "address" - } - ], - "name": "GovernorshipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousGovernor", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newGovernor", - "type": "address" - } - ], - "name": "PendingGovernorshipTransfer", - "type": "event" - }, - { - "inputs": [], - "name": "availableFunds", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "claimGovernance", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "collect", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "collectAndRebase", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "drip", - "outputs": [ - { - "internalType": "uint64", - "name": "lastCollect", - "type": "uint64" - }, - { - "internalType": "uint192", - "name": "perSecond", - "type": "uint192" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "dripDuration", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "governor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "isGovernor", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_durationSeconds", - "type": "uint256" - } - ], - "name": "setDripDuration", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_asset", - "type": "address" - }, - { - "internalType": "address", - "name": "_receiver", - "type": "address" - } - ], - "name": "transferAllToken", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_newGovernor", - "type": "address" - } - ], - "name": "transferGovernance", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_asset", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "transferToken", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "transactionHash": "0xe3caa74ee0d37c4878982cd7a492cec7140463f445462fc31a2cf34290808b1d", - "receipt": { - "to": null, - "from": "0x074105fdD39e982B2ffE749A193c942db1046AB9", - "contractAddress": "0x0929C0fbFF88e129ACaA51Bba0C959491325b4aD", - "transactionIndex": 8, - "gasUsed": "850925", - "logsBloom": "0x00000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000800000000000000000000000000000000000004000000000000000000000000000000000000000000000010000000000000000000000080000000000000000000000000000000010000000000000000000000000000000000000010000000000000000000000000400000000000000020000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x55db8223966a91b9441d9c5720994c4c0bef3c30e1e74b0fccaf30e748092548", - "transactionHash": "0xe3caa74ee0d37c4878982cd7a492cec7140463f445462fc31a2cf34290808b1d", - "logs": [ - { - "transactionIndex": 8, - "blockNumber": 21624125, - "transactionHash": "0xe3caa74ee0d37c4878982cd7a492cec7140463f445462fc31a2cf34290808b1d", - "address": "0x0929C0fbFF88e129ACaA51Bba0C959491325b4aD", - "topics": [ - "0xc7c0c772add429241571afb3805861fb3cfa2af374534088b76cdb4325a87e9a", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x000000000000000000000000074105fdd39e982b2ffe749a193c942db1046ab9" - ], - "data": "0x", - "logIndex": 38, - "blockHash": "0x55db8223966a91b9441d9c5720994c4c0bef3c30e1e74b0fccaf30e748092548" - } - ], - "blockNumber": 21624125, - "cumulativeGasUsed": "1821309", - "status": 1, - "byzantium": true - }, - "args": [ - "0x39254033945AA2E4809Cc2977E7087BEE48bd7Ab", - "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2" - ], - "numDeployments": 2, - "solcInputHash": "a79054f017f110f64fdd0ebd33e29bb2", - "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_vault\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousGovernor\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newGovernor\",\"type\":\"address\"}],\"name\":\"GovernorshipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousGovernor\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newGovernor\",\"type\":\"address\"}],\"name\":\"PendingGovernorshipTransfer\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"availableFunds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"claimGovernance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"collect\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"collectAndRebase\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"drip\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"lastCollect\",\"type\":\"uint64\"},{\"internalType\":\"uint192\",\"name\":\"perSecond\",\"type\":\"uint192\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"dripDuration\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isGovernor\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_durationSeconds\",\"type\":\"uint256\"}],\"name\":\"setDripDuration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"}],\"name\":\"transferAllToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_newGovernor\",\"type\":\"address\"}],\"name\":\"transferGovernance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"transferToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Origin Protocol Inc\",\"kind\":\"dev\",\"methods\":{\"availableFunds()\":{\"returns\":{\"_0\":\"The amount that would be sent if a collect was called\"}},\"setDripDuration(uint256)\":{\"details\":\"Change the drip duration. Governor only.\",\"params\":{\"_durationSeconds\":\"the number of seconds to drip out the entire balance over if no collects were called during that time.\"}},\"transferAllToken(address,address)\":{\"details\":\"Transfer out all ERC20 held by the contract. Governor only.\",\"params\":{\"_asset\":\"ERC20 token address\"}},\"transferGovernance(address)\":{\"params\":{\"_newGovernor\":\"Address of the new Governor\"}},\"transferToken(address,uint256)\":{\"details\":\"Transfer out ERC20 tokens held by the contract. Governor only.\",\"params\":{\"_amount\":\"amount to transfer\",\"_asset\":\"ERC20 token address\"}}},\"title\":\"OETH Dripper Contract\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"claimGovernance()\":{\"notice\":\"Claim Governance of the contract to a new account (`newGovernor`). Can only be called by the new Governor.\"},\"collect()\":{\"notice\":\"Collect all dripped funds and send to vault. Recalculate new drip rate.\"},\"collectAndRebase()\":{\"notice\":\"Collect all dripped funds, send to vault, recalculate new drip rate, and rebase OUSD.\"},\"governor()\":{\"notice\":\"Returns the address of the current Governor.\"},\"isGovernor()\":{\"notice\":\"Returns true if the caller is the current Governor.\"},\"transferGovernance(address)\":{\"notice\":\"Transfers Governance of the contract to a new account (`newGovernor`). Can only be called by the current Governor. Must be claimed for this to complete\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/harvest/OETHDripper.sol\":\"OETHDripper\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(\\n address sender,\\n address recipient,\\n uint256 amount\\n ) external returns (bool);\\n\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0x61437cb513a887a1bbad006e7b1c8b414478427d33de47c5600af3c748f108da\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/utils/SafeERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\nimport \\\"../../../utils/Address.sol\\\";\\n\\n/**\\n * @title SafeERC20\\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\\n * contract returns false). Tokens that return no value (and instead revert or\\n * throw on failure) are also supported, non-reverting calls are assumed to be\\n * successful.\\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\n */\\nlibrary SafeERC20 {\\n using Address for address;\\n\\n function safeTransfer(\\n IERC20 token,\\n address to,\\n uint256 value\\n ) internal {\\n _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\\n }\\n\\n function safeTransferFrom(\\n IERC20 token,\\n address from,\\n address to,\\n uint256 value\\n ) internal {\\n _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));\\n }\\n\\n /**\\n * @dev Deprecated. This function has issues similar to the ones found in\\n * {IERC20-approve}, and its usage is discouraged.\\n *\\n * Whenever possible, use {safeIncreaseAllowance} and\\n * {safeDecreaseAllowance} instead.\\n */\\n function safeApprove(\\n IERC20 token,\\n address spender,\\n uint256 value\\n ) internal {\\n // safeApprove should only be called when setting an initial allowance,\\n // or when resetting it to zero. To increase and decrease it, use\\n // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\\n require(\\n (value == 0) || (token.allowance(address(this), spender) == 0),\\n \\\"SafeERC20: approve from non-zero to non-zero allowance\\\"\\n );\\n _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\\n }\\n\\n function safeIncreaseAllowance(\\n IERC20 token,\\n address spender,\\n uint256 value\\n ) internal {\\n uint256 newAllowance = token.allowance(address(this), spender) + value;\\n _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n }\\n\\n function safeDecreaseAllowance(\\n IERC20 token,\\n address spender,\\n uint256 value\\n ) internal {\\n unchecked {\\n uint256 oldAllowance = token.allowance(address(this), spender);\\n require(oldAllowance >= value, \\\"SafeERC20: decreased allowance below zero\\\");\\n uint256 newAllowance = oldAllowance - value;\\n _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n }\\n }\\n\\n /**\\n * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n * on the return value: the return value is optional (but if data is returned, it must not be false).\\n * @param token The token targeted by the call.\\n * @param data The call data (encoded using abi.encode or one of its variants).\\n */\\n function _callOptionalReturn(IERC20 token, bytes memory data) private {\\n // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that\\n // the target address contains contract code and also asserts for success in the low-level call.\\n\\n bytes memory returndata = address(token).functionCall(data, \\\"SafeERC20: low-level call failed\\\");\\n if (returndata.length > 0) {\\n // Return data is optional\\n require(abi.decode(returndata, (bool)), \\\"SafeERC20: ERC20 operation did not succeed\\\");\\n }\\n }\\n}\\n\",\"keccak256\":\"0xc3d946432c0ddbb1f846a0d3985be71299df331b91d06732152117f62f0be2b5\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n assembly {\\n size := extcodesize(account)\\n }\\n return size > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x51b758a8815ecc9596c66c37d56b1d33883a444631a3f916b9fe65cb863ef7c4\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/math/SafeCast.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's uintXX/intXX casting operators with added overflow\\n * checks.\\n *\\n * Downcasting from uint256/int256 in Solidity does not revert on overflow. This can\\n * easily result in undesired exploitation or bugs, since developers usually\\n * assume that overflows raise errors. `SafeCast` restores this intuition by\\n * reverting the transaction when such an operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n *\\n * Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing\\n * all math on `uint256` and `int256` and then downcasting.\\n */\\nlibrary SafeCast {\\n /**\\n * @dev Returns the downcasted uint224 from uint256, reverting on\\n * overflow (when the input is greater than largest uint224).\\n *\\n * Counterpart to Solidity's `uint224` operator.\\n *\\n * Requirements:\\n *\\n * - input must fit into 224 bits\\n */\\n function toUint224(uint256 value) internal pure returns (uint224) {\\n require(value <= type(uint224).max, \\\"SafeCast: value doesn't fit in 224 bits\\\");\\n return uint224(value);\\n }\\n\\n /**\\n * @dev Returns the downcasted uint128 from uint256, reverting on\\n * overflow (when the input is greater than largest uint128).\\n *\\n * Counterpart to Solidity's `uint128` operator.\\n *\\n * Requirements:\\n *\\n * - input must fit into 128 bits\\n */\\n function toUint128(uint256 value) internal pure returns (uint128) {\\n require(value <= type(uint128).max, \\\"SafeCast: value doesn't fit in 128 bits\\\");\\n return uint128(value);\\n }\\n\\n /**\\n * @dev Returns the downcasted uint96 from uint256, reverting on\\n * overflow (when the input is greater than largest uint96).\\n *\\n * Counterpart to Solidity's `uint96` operator.\\n *\\n * Requirements:\\n *\\n * - input must fit into 96 bits\\n */\\n function toUint96(uint256 value) internal pure returns (uint96) {\\n require(value <= type(uint96).max, \\\"SafeCast: value doesn't fit in 96 bits\\\");\\n return uint96(value);\\n }\\n\\n /**\\n * @dev Returns the downcasted uint64 from uint256, reverting on\\n * overflow (when the input is greater than largest uint64).\\n *\\n * Counterpart to Solidity's `uint64` operator.\\n *\\n * Requirements:\\n *\\n * - input must fit into 64 bits\\n */\\n function toUint64(uint256 value) internal pure returns (uint64) {\\n require(value <= type(uint64).max, \\\"SafeCast: value doesn't fit in 64 bits\\\");\\n return uint64(value);\\n }\\n\\n /**\\n * @dev Returns the downcasted uint32 from uint256, reverting on\\n * overflow (when the input is greater than largest uint32).\\n *\\n * Counterpart to Solidity's `uint32` operator.\\n *\\n * Requirements:\\n *\\n * - input must fit into 32 bits\\n */\\n function toUint32(uint256 value) internal pure returns (uint32) {\\n require(value <= type(uint32).max, \\\"SafeCast: value doesn't fit in 32 bits\\\");\\n return uint32(value);\\n }\\n\\n /**\\n * @dev Returns the downcasted uint16 from uint256, reverting on\\n * overflow (when the input is greater than largest uint16).\\n *\\n * Counterpart to Solidity's `uint16` operator.\\n *\\n * Requirements:\\n *\\n * - input must fit into 16 bits\\n */\\n function toUint16(uint256 value) internal pure returns (uint16) {\\n require(value <= type(uint16).max, \\\"SafeCast: value doesn't fit in 16 bits\\\");\\n return uint16(value);\\n }\\n\\n /**\\n * @dev Returns the downcasted uint8 from uint256, reverting on\\n * overflow (when the input is greater than largest uint8).\\n *\\n * Counterpart to Solidity's `uint8` operator.\\n *\\n * Requirements:\\n *\\n * - input must fit into 8 bits.\\n */\\n function toUint8(uint256 value) internal pure returns (uint8) {\\n require(value <= type(uint8).max, \\\"SafeCast: value doesn't fit in 8 bits\\\");\\n return uint8(value);\\n }\\n\\n /**\\n * @dev Converts a signed int256 into an unsigned uint256.\\n *\\n * Requirements:\\n *\\n * - input must be greater than or equal to 0.\\n */\\n function toUint256(int256 value) internal pure returns (uint256) {\\n require(value >= 0, \\\"SafeCast: value must be positive\\\");\\n return uint256(value);\\n }\\n\\n /**\\n * @dev Returns the downcasted int128 from int256, reverting on\\n * overflow (when the input is less than smallest int128 or\\n * greater than largest int128).\\n *\\n * Counterpart to Solidity's `int128` operator.\\n *\\n * Requirements:\\n *\\n * - input must fit into 128 bits\\n *\\n * _Available since v3.1._\\n */\\n function toInt128(int256 value) internal pure returns (int128) {\\n require(value >= type(int128).min && value <= type(int128).max, \\\"SafeCast: value doesn't fit in 128 bits\\\");\\n return int128(value);\\n }\\n\\n /**\\n * @dev Returns the downcasted int64 from int256, reverting on\\n * overflow (when the input is less than smallest int64 or\\n * greater than largest int64).\\n *\\n * Counterpart to Solidity's `int64` operator.\\n *\\n * Requirements:\\n *\\n * - input must fit into 64 bits\\n *\\n * _Available since v3.1._\\n */\\n function toInt64(int256 value) internal pure returns (int64) {\\n require(value >= type(int64).min && value <= type(int64).max, \\\"SafeCast: value doesn't fit in 64 bits\\\");\\n return int64(value);\\n }\\n\\n /**\\n * @dev Returns the downcasted int32 from int256, reverting on\\n * overflow (when the input is less than smallest int32 or\\n * greater than largest int32).\\n *\\n * Counterpart to Solidity's `int32` operator.\\n *\\n * Requirements:\\n *\\n * - input must fit into 32 bits\\n *\\n * _Available since v3.1._\\n */\\n function toInt32(int256 value) internal pure returns (int32) {\\n require(value >= type(int32).min && value <= type(int32).max, \\\"SafeCast: value doesn't fit in 32 bits\\\");\\n return int32(value);\\n }\\n\\n /**\\n * @dev Returns the downcasted int16 from int256, reverting on\\n * overflow (when the input is less than smallest int16 or\\n * greater than largest int16).\\n *\\n * Counterpart to Solidity's `int16` operator.\\n *\\n * Requirements:\\n *\\n * - input must fit into 16 bits\\n *\\n * _Available since v3.1._\\n */\\n function toInt16(int256 value) internal pure returns (int16) {\\n require(value >= type(int16).min && value <= type(int16).max, \\\"SafeCast: value doesn't fit in 16 bits\\\");\\n return int16(value);\\n }\\n\\n /**\\n * @dev Returns the downcasted int8 from int256, reverting on\\n * overflow (when the input is less than smallest int8 or\\n * greater than largest int8).\\n *\\n * Counterpart to Solidity's `int8` operator.\\n *\\n * Requirements:\\n *\\n * - input must fit into 8 bits.\\n *\\n * _Available since v3.1._\\n */\\n function toInt8(int256 value) internal pure returns (int8) {\\n require(value >= type(int8).min && value <= type(int8).max, \\\"SafeCast: value doesn't fit in 8 bits\\\");\\n return int8(value);\\n }\\n\\n /**\\n * @dev Converts an unsigned uint256 into a signed int256.\\n *\\n * Requirements:\\n *\\n * - input must be less than or equal to maxInt256.\\n */\\n function toInt256(uint256 value) internal pure returns (int256) {\\n // Note: Unsafe cast below is okay because `type(int256).max` is guaranteed to be positive\\n require(value <= uint256(type(int256).max), \\\"SafeCast: value doesn't fit in an int256\\\");\\n return int256(value);\\n }\\n}\\n\",\"keccak256\":\"0x5c6caab697d302ad7eb59c234a4d2dbc965c1bae87709bd2850060b7695b28c7\",\"license\":\"MIT\"},\"contracts/governance/Governable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Base for contracts that are managed by the Origin Protocol's Governor.\\n * @dev Copy of the openzeppelin Ownable.sol contract with nomenclature change\\n * from owner to governor and renounce methods removed. Does not use\\n * Context.sol like Ownable.sol does for simplification.\\n * @author Origin Protocol Inc\\n */\\ncontract Governable {\\n // Storage position of the owner and pendingOwner of the contract\\n // keccak256(\\\"OUSD.governor\\\");\\n bytes32 private constant governorPosition =\\n 0x7bea13895fa79d2831e0a9e28edede30099005a50d652d8957cf8a607ee6ca4a;\\n\\n // keccak256(\\\"OUSD.pending.governor\\\");\\n bytes32 private constant pendingGovernorPosition =\\n 0x44c4d30b2eaad5130ad70c3ba6972730566f3e6359ab83e800d905c61b1c51db;\\n\\n // keccak256(\\\"OUSD.reentry.status\\\");\\n bytes32 private constant reentryStatusPosition =\\n 0x53bf423e48ed90e97d02ab0ebab13b2a235a6bfbe9c321847d5c175333ac4535;\\n\\n // See OpenZeppelin ReentrancyGuard implementation\\n uint256 constant _NOT_ENTERED = 1;\\n uint256 constant _ENTERED = 2;\\n\\n event PendingGovernorshipTransfer(\\n address indexed previousGovernor,\\n address indexed newGovernor\\n );\\n\\n event GovernorshipTransferred(\\n address indexed previousGovernor,\\n address indexed newGovernor\\n );\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial Governor.\\n */\\n constructor() {\\n _setGovernor(msg.sender);\\n emit GovernorshipTransferred(address(0), _governor());\\n }\\n\\n /**\\n * @notice Returns the address of the current Governor.\\n */\\n function governor() public view returns (address) {\\n return _governor();\\n }\\n\\n /**\\n * @dev Returns the address of the current Governor.\\n */\\n function _governor() internal view returns (address governorOut) {\\n bytes32 position = governorPosition;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n governorOut := sload(position)\\n }\\n }\\n\\n /**\\n * @dev Returns the address of the pending Governor.\\n */\\n function _pendingGovernor()\\n internal\\n view\\n returns (address pendingGovernor)\\n {\\n bytes32 position = pendingGovernorPosition;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n pendingGovernor := sload(position)\\n }\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the Governor.\\n */\\n modifier onlyGovernor() {\\n require(isGovernor(), \\\"Caller is not the Governor\\\");\\n _;\\n }\\n\\n /**\\n * @notice Returns true if the caller is the current Governor.\\n */\\n function isGovernor() public view returns (bool) {\\n return msg.sender == _governor();\\n }\\n\\n function _setGovernor(address newGovernor) internal {\\n bytes32 position = governorPosition;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(position, newGovernor)\\n }\\n }\\n\\n /**\\n * @dev Prevents a contract from calling itself, directly or indirectly.\\n * Calling a `nonReentrant` function from another `nonReentrant`\\n * function is not supported. It is possible to prevent this from happening\\n * by making the `nonReentrant` function external, and make it call a\\n * `private` function that does the actual work.\\n */\\n modifier nonReentrant() {\\n bytes32 position = reentryStatusPosition;\\n uint256 _reentry_status;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n _reentry_status := sload(position)\\n }\\n\\n // On the first call to nonReentrant, _notEntered will be true\\n require(_reentry_status != _ENTERED, \\\"Reentrant call\\\");\\n\\n // Any calls to nonReentrant after this point will fail\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(position, _ENTERED)\\n }\\n\\n _;\\n\\n // By storing the original value once again, a refund is triggered (see\\n // https://eips.ethereum.org/EIPS/eip-2200)\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(position, _NOT_ENTERED)\\n }\\n }\\n\\n function _setPendingGovernor(address newGovernor) internal {\\n bytes32 position = pendingGovernorPosition;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(position, newGovernor)\\n }\\n }\\n\\n /**\\n * @notice Transfers Governance of the contract to a new account (`newGovernor`).\\n * Can only be called by the current Governor. Must be claimed for this to complete\\n * @param _newGovernor Address of the new Governor\\n */\\n function transferGovernance(address _newGovernor) external onlyGovernor {\\n _setPendingGovernor(_newGovernor);\\n emit PendingGovernorshipTransfer(_governor(), _newGovernor);\\n }\\n\\n /**\\n * @notice Claim Governance of the contract to a new account (`newGovernor`).\\n * Can only be called by the new Governor.\\n */\\n function claimGovernance() external {\\n require(\\n msg.sender == _pendingGovernor(),\\n \\\"Only the pending Governor can complete the claim\\\"\\n );\\n _changeGovernor(msg.sender);\\n }\\n\\n /**\\n * @dev Change Governance of the contract to a new account (`newGovernor`).\\n * @param _newGovernor Address of the new Governor\\n */\\n function _changeGovernor(address _newGovernor) internal {\\n require(_newGovernor != address(0), \\\"New Governor is address(0)\\\");\\n emit GovernorshipTransferred(_governor(), _newGovernor);\\n _setGovernor(_newGovernor);\\n }\\n}\\n\",\"keccak256\":\"0xb7133d6ce7a9e673ff79fcedb3fd41ae6e58e251f94915bb65731abe524270b4\",\"license\":\"MIT\"},\"contracts/harvest/Dripper.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { SafeERC20 } from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\nimport { Governable } from \\\"../governance/Governable.sol\\\";\\nimport { IVault } from \\\"../interfaces/IVault.sol\\\";\\n\\n/**\\n * @title OUSD Dripper\\n *\\n * The dripper contract smooths out the yield from point-in-time yield events\\n * and spreads the yield out over a configurable time period. This ensures a\\n * continuous per block yield to makes users happy as their next rebase\\n * amount is always moving up. Also, this makes historical day to day yields\\n * smooth, rather than going from a near zero day, to a large APY day, then\\n * back to a near zero day again.\\n *\\n *\\n * Design notes\\n * - USDT has a smaller resolution than the number of seconds\\n * in a week, which can make per second payouts have a rounding error. However\\n * the total effect is not large - cents per day, and this money is\\n * not lost, just distributed in the future. While we could use a higher\\n * decimal precision for the drip perSecond, we chose simpler code.\\n * - By calculating the changing drip rates on collects only, harvests and yield\\n * events don't have to call anything on this contract or pay any extra gas.\\n * Collect() is already be paying for a single write, since it has to reset\\n * the lastCollect time.\\n * - By having a collectAndRebase method, and having our external systems call\\n * that, the OUSD vault does not need any changes, not even to know the address\\n * of the dripper.\\n * - A rejected design was to retro-calculate the drip rate on each collect,\\n * based on the balance at the time of the collect. While this would have\\n * required less state, and would also have made the contract respond more quickly\\n * to new income, it would break the predictability that is this contract's entire\\n * purpose. If we did this, the amount of fundsAvailable() would make sharp increases\\n * when funds were deposited.\\n * - When the dripper recalculates the rate, it targets spending the balance over\\n * the duration. This means that every time that collect is called, if no\\n * new funds have been deposited the duration is being pushed back and the\\n * rate decreases. This is expected, and ends up following a smoother but\\n * longer curve the more collect() is called without incoming yield.\\n *\\n */\\n\\ncontract Dripper is Governable {\\n using SafeERC20 for IERC20;\\n\\n struct Drip {\\n uint64 lastCollect; // overflows 262 billion years after the sun dies\\n uint192 perSecond; // drip rate per second\\n }\\n\\n address immutable vault; // OUSD vault\\n address immutable token; // token to drip out\\n uint256 public dripDuration; // in seconds\\n Drip public drip; // active drip parameters\\n\\n constructor(address _vault, address _token) {\\n vault = _vault;\\n token = _token;\\n }\\n\\n /// @notice How much funds have dripped out already and are currently\\n // available to be sent to the vault.\\n /// @return The amount that would be sent if a collect was called\\n function availableFunds() external view returns (uint256) {\\n uint256 balance = IERC20(token).balanceOf(address(this));\\n return _availableFunds(balance, drip);\\n }\\n\\n /// @notice Collect all dripped funds and send to vault.\\n /// Recalculate new drip rate.\\n function collect() external {\\n _collect();\\n }\\n\\n /// @notice Collect all dripped funds, send to vault, recalculate new drip\\n /// rate, and rebase OUSD.\\n function collectAndRebase() external {\\n _collect();\\n IVault(vault).rebase();\\n }\\n\\n /// @dev Change the drip duration. Governor only.\\n /// @param _durationSeconds the number of seconds to drip out the entire\\n /// balance over if no collects were called during that time.\\n function setDripDuration(uint256 _durationSeconds)\\n external\\n virtual\\n onlyGovernor\\n {\\n require(_durationSeconds > 0, \\\"duration must be non-zero\\\");\\n dripDuration = _durationSeconds;\\n _collect(); // duration change take immediate effect\\n }\\n\\n /// @dev Transfer out ERC20 tokens held by the contract. Governor only.\\n /// @param _asset ERC20 token address\\n /// @param _amount amount to transfer\\n function transferToken(address _asset, uint256 _amount)\\n external\\n onlyGovernor\\n {\\n IERC20(_asset).safeTransfer(governor(), _amount);\\n }\\n\\n /// @dev Calculate available funds by taking the lower of either the\\n /// currently dripped out funds or the balance available.\\n /// Uses passed in parameters to calculate with for gas savings.\\n /// @param _balance current balance in contract\\n /// @param _drip current drip parameters\\n function _availableFunds(uint256 _balance, Drip memory _drip)\\n internal\\n view\\n returns (uint256)\\n {\\n uint256 elapsed = block.timestamp - _drip.lastCollect;\\n uint256 allowed = (elapsed * _drip.perSecond);\\n return (allowed > _balance) ? _balance : allowed;\\n }\\n\\n /// @dev Sends the currently dripped funds to be vault, and sets\\n /// the new drip rate based on the new balance.\\n function _collect() internal virtual {\\n // Calculate send\\n uint256 balance = IERC20(token).balanceOf(address(this));\\n uint256 amountToSend = _availableFunds(balance, drip);\\n uint256 remaining = balance - amountToSend;\\n // Calculate new drip perSecond\\n // Gas savings by setting entire struct at one time\\n drip = Drip({\\n perSecond: uint192(remaining / dripDuration),\\n lastCollect: uint64(block.timestamp)\\n });\\n // Send funds\\n IERC20(token).safeTransfer(vault, amountToSend);\\n }\\n\\n /// @dev Transfer out all ERC20 held by the contract. Governor only.\\n /// @param _asset ERC20 token address\\n function transferAllToken(address _asset, address _receiver)\\n external\\n onlyGovernor\\n {\\n IERC20(_asset).safeTransfer(\\n _receiver,\\n IERC20(_asset).balanceOf(address(this))\\n );\\n }\\n}\\n\",\"keccak256\":\"0xc654ba3cdfd6763a1ba393d2ecd0aed776032dddafd2a3f916d1ba7497ea459b\",\"license\":\"MIT\"},\"contracts/harvest/OETHDripper.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { Dripper } from \\\"./Dripper.sol\\\";\\n\\n/**\\n * @title OETH Dripper Contract\\n * @author Origin Protocol Inc\\n */\\ncontract OETHDripper is Dripper {\\n constructor(address _vault, address _token) Dripper(_vault, _token) {}\\n}\\n\",\"keccak256\":\"0x793bb189f2419450b11a386f7a0e42cc0fdbf272624c8f93441046d9df6b8c83\",\"license\":\"MIT\"},\"contracts/interfaces/IBasicToken.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IBasicToken {\\n function symbol() external view returns (string memory);\\n\\n function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0xa562062698aa12572123b36dfd2072f1a39e44fed2031cc19c2c9fd522f96ec2\",\"license\":\"MIT\"},\"contracts/interfaces/IStrategy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Platform interface to integrate with lending platform like Compound, AAVE etc.\\n */\\ninterface IStrategy {\\n /**\\n * @dev Deposit the given asset to platform\\n * @param _asset asset address\\n * @param _amount Amount to deposit\\n */\\n function deposit(address _asset, uint256 _amount) external;\\n\\n /**\\n * @dev Deposit the entire balance of all supported assets in the Strategy\\n * to the platform\\n */\\n function depositAll() external;\\n\\n /**\\n * @dev Withdraw given asset from Lending platform\\n */\\n function withdraw(\\n address _recipient,\\n address _asset,\\n uint256 _amount\\n ) external;\\n\\n /**\\n * @dev Liquidate all assets in strategy and return them to Vault.\\n */\\n function withdrawAll() external;\\n\\n /**\\n * @dev Returns the current balance of the given asset.\\n */\\n function checkBalance(address _asset)\\n external\\n view\\n returns (uint256 balance);\\n\\n /**\\n * @dev Returns bool indicating whether strategy supports asset.\\n */\\n function supportsAsset(address _asset) external view returns (bool);\\n\\n /**\\n * @dev Collect reward tokens from the Strategy.\\n */\\n function collectRewardTokens() external;\\n\\n /**\\n * @dev The address array of the reward tokens for the Strategy.\\n */\\n function getRewardTokenAddresses() external view returns (address[] memory);\\n}\\n\",\"keccak256\":\"0xb291e409a9b95527f9ed19cd6bff8eeb9921a21c1f5194a48c0bb9ce6613959a\",\"license\":\"MIT\"},\"contracts/interfaces/IVault.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { VaultStorage } from \\\"../vault/VaultStorage.sol\\\";\\n\\ninterface IVault {\\n event AssetSupported(address _asset);\\n event AssetDefaultStrategyUpdated(address _asset, address _strategy);\\n event AssetAllocated(address _asset, address _strategy, uint256 _amount);\\n event StrategyApproved(address _addr);\\n event StrategyRemoved(address _addr);\\n event Mint(address _addr, uint256 _value);\\n event Redeem(address _addr, uint256 _value);\\n event CapitalPaused();\\n event CapitalUnpaused();\\n event RebasePaused();\\n event RebaseUnpaused();\\n event VaultBufferUpdated(uint256 _vaultBuffer);\\n event RedeemFeeUpdated(uint256 _redeemFeeBps);\\n event PriceProviderUpdated(address _priceProvider);\\n event AllocateThresholdUpdated(uint256 _threshold);\\n event RebaseThresholdUpdated(uint256 _threshold);\\n event StrategistUpdated(address _address);\\n event MaxSupplyDiffChanged(uint256 maxSupplyDiff);\\n event YieldDistribution(address _to, uint256 _yield, uint256 _fee);\\n event TrusteeFeeBpsChanged(uint256 _basis);\\n event TrusteeAddressChanged(address _address);\\n event SwapperChanged(address _address);\\n event SwapAllowedUndervalueChanged(uint256 _basis);\\n event SwapSlippageChanged(address _asset, uint256 _basis);\\n event Swapped(\\n address indexed _fromAsset,\\n address indexed _toAsset,\\n uint256 _fromAssetAmount,\\n uint256 _toAssetAmount\\n );\\n event StrategyAddedToMintWhitelist(address indexed strategy);\\n event StrategyRemovedFromMintWhitelist(address indexed strategy);\\n event DripperChanged(address indexed _dripper);\\n event WithdrawalRequested(\\n address indexed _withdrawer,\\n uint256 indexed _requestId,\\n uint256 _amount,\\n uint256 _queued\\n );\\n event WithdrawalClaimed(\\n address indexed _withdrawer,\\n uint256 indexed _requestId,\\n uint256 _amount\\n );\\n event WithdrawalClaimable(uint256 _claimable, uint256 _newClaimable);\\n\\n // Governable.sol\\n function transferGovernance(address _newGovernor) external;\\n\\n function claimGovernance() external;\\n\\n function governor() external view returns (address);\\n\\n // VaultAdmin.sol\\n function setPriceProvider(address _priceProvider) external;\\n\\n function priceProvider() external view returns (address);\\n\\n function setRedeemFeeBps(uint256 _redeemFeeBps) external;\\n\\n function redeemFeeBps() external view returns (uint256);\\n\\n function setVaultBuffer(uint256 _vaultBuffer) external;\\n\\n function vaultBuffer() external view returns (uint256);\\n\\n function setAutoAllocateThreshold(uint256 _threshold) external;\\n\\n function autoAllocateThreshold() external view returns (uint256);\\n\\n function setRebaseThreshold(uint256 _threshold) external;\\n\\n function rebaseThreshold() external view returns (uint256);\\n\\n function setStrategistAddr(address _address) external;\\n\\n function strategistAddr() external view returns (address);\\n\\n function setMaxSupplyDiff(uint256 _maxSupplyDiff) external;\\n\\n function maxSupplyDiff() external view returns (uint256);\\n\\n function setTrusteeAddress(address _address) external;\\n\\n function trusteeAddress() external view returns (address);\\n\\n function setTrusteeFeeBps(uint256 _basis) external;\\n\\n function trusteeFeeBps() external view returns (uint256);\\n\\n function ousdMetaStrategy() external view returns (address);\\n\\n function setSwapper(address _swapperAddr) external;\\n\\n function setSwapAllowedUndervalue(uint16 _percentageBps) external;\\n\\n function setOracleSlippage(address _asset, uint16 _allowedOracleSlippageBps)\\n external;\\n\\n function supportAsset(address _asset, uint8 _supportsAsset) external;\\n\\n function approveStrategy(address _addr) external;\\n\\n function removeStrategy(address _addr) external;\\n\\n function setAssetDefaultStrategy(address _asset, address _strategy)\\n external;\\n\\n function assetDefaultStrategies(address _asset)\\n external\\n view\\n returns (address);\\n\\n function pauseRebase() external;\\n\\n function unpauseRebase() external;\\n\\n function rebasePaused() external view returns (bool);\\n\\n function pauseCapital() external;\\n\\n function unpauseCapital() external;\\n\\n function capitalPaused() external view returns (bool);\\n\\n function transferToken(address _asset, uint256 _amount) external;\\n\\n function priceUnitMint(address asset) external view returns (uint256);\\n\\n function priceUnitRedeem(address asset) external view returns (uint256);\\n\\n function withdrawAllFromStrategy(address _strategyAddr) external;\\n\\n function withdrawAllFromStrategies() external;\\n\\n function withdrawFromStrategy(\\n address _strategyFromAddress,\\n address[] calldata _assets,\\n uint256[] calldata _amounts\\n ) external;\\n\\n function depositToStrategy(\\n address _strategyToAddress,\\n address[] calldata _assets,\\n uint256[] calldata _amounts\\n ) external;\\n\\n // VaultCore.sol\\n function mint(\\n address _asset,\\n uint256 _amount,\\n uint256 _minimumOusdAmount\\n ) external;\\n\\n function mintForStrategy(uint256 _amount) external;\\n\\n function redeem(uint256 _amount, uint256 _minimumUnitAmount) external;\\n\\n function burnForStrategy(uint256 _amount) external;\\n\\n function redeemAll(uint256 _minimumUnitAmount) external;\\n\\n function allocate() external;\\n\\n function rebase() external;\\n\\n function swapCollateral(\\n address fromAsset,\\n address toAsset,\\n uint256 fromAssetAmount,\\n uint256 minToAssetAmount,\\n bytes calldata data\\n ) external returns (uint256 toAssetAmount);\\n\\n function totalValue() external view returns (uint256 value);\\n\\n function checkBalance(address _asset) external view returns (uint256);\\n\\n function calculateRedeemOutputs(uint256 _amount)\\n external\\n view\\n returns (uint256[] memory);\\n\\n function getAssetCount() external view returns (uint256);\\n\\n function getAssetConfig(address _asset)\\n external\\n view\\n returns (VaultStorage.Asset memory config);\\n\\n function getAllAssets() external view returns (address[] memory);\\n\\n function getStrategyCount() external view returns (uint256);\\n\\n function swapper() external view returns (address);\\n\\n function allowedSwapUndervalue() external view returns (uint256);\\n\\n function getAllStrategies() external view returns (address[] memory);\\n\\n function isSupportedAsset(address _asset) external view returns (bool);\\n\\n function netOusdMintForStrategyThreshold() external view returns (uint256);\\n\\n function setOusdMetaStrategy(address _ousdMetaStrategy) external;\\n\\n function setNetOusdMintForStrategyThreshold(uint256 _threshold) external;\\n\\n function netOusdMintedForStrategy() external view returns (int256);\\n\\n function setDripper(address _dripper) external;\\n\\n function dripper() external view returns (address);\\n\\n function weth() external view returns (address);\\n\\n function cacheWETHAssetIndex() external;\\n\\n function wethAssetIndex() external view returns (uint256);\\n\\n function initialize(address, address) external;\\n\\n function setAdminImpl(address) external;\\n\\n function removeAsset(address _asset) external;\\n\\n // These are OETH specific functions\\n function addWithdrawalQueueLiquidity() external;\\n\\n function requestWithdrawal(uint256 _amount)\\n external\\n returns (uint256 requestId, uint256 queued);\\n\\n function claimWithdrawal(uint256 requestId)\\n external\\n returns (uint256 amount);\\n\\n function claimWithdrawals(uint256[] memory requestIds)\\n external\\n returns (uint256[] memory amounts, uint256 totalAmount);\\n\\n function withdrawalQueueMetadata()\\n external\\n view\\n returns (VaultStorage.WithdrawalQueueMetadata memory);\\n\\n function withdrawalRequests(uint256 requestId)\\n external\\n view\\n returns (VaultStorage.WithdrawalRequest memory);\\n\\n // OETHb specific functions\\n function addStrategyToMintWhitelist(address strategyAddr) external;\\n\\n function removeStrategyFromMintWhitelist(address strategyAddr) external;\\n\\n function isMintWhitelistedStrategy(address strategyAddr)\\n external\\n view\\n returns (bool);\\n\\n function withdrawalClaimDelay() external view returns (uint256);\\n\\n function setWithdrawalClaimDelay(uint256 newDelay) external;\\n}\\n\",\"keccak256\":\"0x4bf8eb02eb5fc4d46cb792bfd84ccb7970ee6a240157472f1120f32a63813d36\",\"license\":\"MIT\"},\"contracts/token/OUSD.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title OUSD Token Contract\\n * @dev ERC20 compatible contract for OUSD\\n * @dev Implements an elastic supply\\n * @author Origin Protocol Inc\\n */\\nimport { Governable } from \\\"../governance/Governable.sol\\\";\\nimport { SafeCast } from \\\"@openzeppelin/contracts/utils/math/SafeCast.sol\\\";\\n\\ncontract OUSD is Governable {\\n using SafeCast for int256;\\n using SafeCast for uint256;\\n\\n /// @dev Event triggered when the supply changes\\n /// @param totalSupply Updated token total supply\\n /// @param rebasingCredits Updated token rebasing credits\\n /// @param rebasingCreditsPerToken Updated token rebasing credits per token\\n event TotalSupplyUpdatedHighres(\\n uint256 totalSupply,\\n uint256 rebasingCredits,\\n uint256 rebasingCreditsPerToken\\n );\\n /// @dev Event triggered when an account opts in for rebasing\\n /// @param account Address of the account\\n event AccountRebasingEnabled(address account);\\n /// @dev Event triggered when an account opts out of rebasing\\n /// @param account Address of the account\\n event AccountRebasingDisabled(address account);\\n /// @dev Emitted when `value` tokens are moved from one account `from` to\\n /// another `to`.\\n /// @param from Address of the account tokens are moved from\\n /// @param to Address of the account tokens are moved to\\n /// @param value Amount of tokens transferred\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n /// @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n /// a call to {approve}. `value` is the new allowance.\\n /// @param owner Address of the owner approving allowance\\n /// @param spender Address of the spender allowance is granted to\\n /// @param value Amount of tokens spender can transfer\\n event Approval(\\n address indexed owner,\\n address indexed spender,\\n uint256 value\\n );\\n /// @dev Yield resulting from {changeSupply} that a `source` account would\\n /// receive is directed to `target` account.\\n /// @param source Address of the source forwarding the yield\\n /// @param target Address of the target receiving the yield\\n event YieldDelegated(address source, address target);\\n /// @dev Yield delegation from `source` account to the `target` account is\\n /// suspended.\\n /// @param source Address of the source suspending yield forwarding\\n /// @param target Address of the target no longer receiving yield from `source`\\n /// account\\n event YieldUndelegated(address source, address target);\\n\\n enum RebaseOptions {\\n NotSet,\\n StdNonRebasing,\\n StdRebasing,\\n YieldDelegationSource,\\n YieldDelegationTarget\\n }\\n\\n uint256[154] private _gap; // Slots to align with deployed contract\\n uint256 private constant MAX_SUPPLY = type(uint128).max;\\n /// @dev The amount of tokens in existence\\n uint256 public totalSupply;\\n mapping(address => mapping(address => uint256)) private allowances;\\n /// @dev The vault with privileges to execute {mint}, {burn}\\n /// and {changeSupply}\\n address public vaultAddress;\\n mapping(address => uint256) internal creditBalances;\\n // the 2 storage variables below need trailing underscores to not name collide with public functions\\n uint256 private rebasingCredits_; // Sum of all rebasing credits (creditBalances for rebasing accounts)\\n uint256 private rebasingCreditsPerToken_;\\n /// @dev The amount of tokens that are not rebasing - receiving yield\\n uint256 public nonRebasingSupply;\\n mapping(address => uint256) internal alternativeCreditsPerToken;\\n /// @dev A map of all addresses and their respective RebaseOptions\\n mapping(address => RebaseOptions) public rebaseState;\\n mapping(address => uint256) private __deprecated_isUpgraded;\\n /// @dev A map of addresses that have yields forwarded to. This is an\\n /// inverse mapping of {yieldFrom}\\n /// Key Account forwarding yield\\n /// Value Account receiving yield\\n mapping(address => address) public yieldTo;\\n /// @dev A map of addresses that are receiving the yield. This is an\\n /// inverse mapping of {yieldTo}\\n /// Key Account receiving yield\\n /// Value Account forwarding yield\\n mapping(address => address) public yieldFrom;\\n\\n uint256 private constant RESOLUTION_INCREASE = 1e9;\\n uint256[34] private __gap; // including below gap totals up to 200\\n\\n /// @dev Initializes the contract and sets necessary variables.\\n /// @param _vaultAddress Address of the vault contract\\n /// @param _initialCreditsPerToken The starting rebasing credits per token.\\n function initialize(address _vaultAddress, uint256 _initialCreditsPerToken)\\n external\\n onlyGovernor\\n {\\n require(_vaultAddress != address(0), \\\"Zero vault address\\\");\\n require(vaultAddress == address(0), \\\"Already initialized\\\");\\n\\n rebasingCreditsPerToken_ = _initialCreditsPerToken;\\n vaultAddress = _vaultAddress;\\n }\\n\\n /// @dev Returns the symbol of the token, a shorter version\\n /// of the name.\\n function symbol() external pure virtual returns (string memory) {\\n return \\\"OUSD\\\";\\n }\\n\\n /// @dev Returns the name of the token.\\n function name() external pure virtual returns (string memory) {\\n return \\\"Origin Dollar\\\";\\n }\\n\\n /// @dev Returns the number of decimals used to get its user representation.\\n function decimals() external pure virtual returns (uint8) {\\n return 18;\\n }\\n\\n /**\\n * @dev Verifies that the caller is the Vault contract\\n */\\n modifier onlyVault() {\\n require(vaultAddress == msg.sender, \\\"Caller is not the Vault\\\");\\n _;\\n }\\n\\n /**\\n * @return High resolution rebasingCreditsPerToken\\n */\\n function rebasingCreditsPerTokenHighres() external view returns (uint256) {\\n return rebasingCreditsPerToken_;\\n }\\n\\n /**\\n * @return Low resolution rebasingCreditsPerToken\\n */\\n function rebasingCreditsPerToken() external view returns (uint256) {\\n return rebasingCreditsPerToken_ / RESOLUTION_INCREASE;\\n }\\n\\n /**\\n * @return High resolution total number of rebasing credits\\n */\\n function rebasingCreditsHighres() external view returns (uint256) {\\n return rebasingCredits_;\\n }\\n\\n /**\\n * @return Low resolution total number of rebasing credits\\n */\\n function rebasingCredits() external view returns (uint256) {\\n return rebasingCredits_ / RESOLUTION_INCREASE;\\n }\\n\\n /**\\n * @notice Gets the balance of the specified address.\\n * @param _account Address to query the balance of.\\n * @return A uint256 representing the amount of base units owned by the\\n * specified address.\\n */\\n function balanceOf(address _account) public view returns (uint256) {\\n RebaseOptions state = rebaseState[_account];\\n if (state == RebaseOptions.YieldDelegationSource) {\\n // Saves a slot read when transferring to or from a yield delegating source\\n // since we know creditBalances equals the balance.\\n return creditBalances[_account];\\n }\\n uint256 baseBalance = (creditBalances[_account] * 1e18) /\\n _creditsPerToken(_account);\\n if (state == RebaseOptions.YieldDelegationTarget) {\\n // creditBalances of yieldFrom accounts equals token balances\\n return baseBalance - creditBalances[yieldFrom[_account]];\\n }\\n return baseBalance;\\n }\\n\\n /**\\n * @notice Gets the credits balance of the specified address.\\n * @dev Backwards compatible with old low res credits per token.\\n * @param _account The address to query the balance of.\\n * @return (uint256, uint256) Credit balance and credits per token of the\\n * address\\n */\\n function creditsBalanceOf(address _account)\\n external\\n view\\n returns (uint256, uint256)\\n {\\n uint256 cpt = _creditsPerToken(_account);\\n if (cpt == 1e27) {\\n // For a period before the resolution upgrade, we created all new\\n // contract accounts at high resolution. Since they are not changing\\n // as a result of this upgrade, we will return their true values\\n return (creditBalances[_account], cpt);\\n } else {\\n return (\\n creditBalances[_account] / RESOLUTION_INCREASE,\\n cpt / RESOLUTION_INCREASE\\n );\\n }\\n }\\n\\n /**\\n * @notice Gets the credits balance of the specified address.\\n * @param _account The address to query the balance of.\\n * @return (uint256, uint256, bool) Credit balance, credits per token of the\\n * address, and isUpgraded\\n */\\n function creditsBalanceOfHighres(address _account)\\n external\\n view\\n returns (\\n uint256,\\n uint256,\\n bool\\n )\\n {\\n return (\\n creditBalances[_account],\\n _creditsPerToken(_account),\\n true // all accounts have their resolution \\\"upgraded\\\"\\n );\\n }\\n\\n // Backwards compatible view\\n function nonRebasingCreditsPerToken(address _account)\\n external\\n view\\n returns (uint256)\\n {\\n return alternativeCreditsPerToken[_account];\\n }\\n\\n /**\\n * @notice Transfer tokens to a specified address.\\n * @param _to the address to transfer to.\\n * @param _value the amount to be transferred.\\n * @return true on success.\\n */\\n function transfer(address _to, uint256 _value) external returns (bool) {\\n require(_to != address(0), \\\"Transfer to zero address\\\");\\n\\n _executeTransfer(msg.sender, _to, _value);\\n\\n emit Transfer(msg.sender, _to, _value);\\n return true;\\n }\\n\\n /**\\n * @notice Transfer tokens from one address to another.\\n * @param _from The address you want to send tokens from.\\n * @param _to The address you want to transfer to.\\n * @param _value The amount of tokens to be transferred.\\n * @return true on success.\\n */\\n function transferFrom(\\n address _from,\\n address _to,\\n uint256 _value\\n ) external returns (bool) {\\n require(_to != address(0), \\\"Transfer to zero address\\\");\\n uint256 userAllowance = allowances[_from][msg.sender];\\n require(_value <= userAllowance, \\\"Allowance exceeded\\\");\\n\\n unchecked {\\n allowances[_from][msg.sender] = userAllowance - _value;\\n }\\n\\n _executeTransfer(_from, _to, _value);\\n\\n emit Transfer(_from, _to, _value);\\n return true;\\n }\\n\\n function _executeTransfer(\\n address _from,\\n address _to,\\n uint256 _value\\n ) internal {\\n (\\n int256 fromRebasingCreditsDiff,\\n int256 fromNonRebasingSupplyDiff\\n ) = _adjustAccount(_from, -_value.toInt256());\\n (\\n int256 toRebasingCreditsDiff,\\n int256 toNonRebasingSupplyDiff\\n ) = _adjustAccount(_to, _value.toInt256());\\n\\n _adjustGlobals(\\n fromRebasingCreditsDiff + toRebasingCreditsDiff,\\n fromNonRebasingSupplyDiff + toNonRebasingSupplyDiff\\n );\\n }\\n\\n function _adjustAccount(address _account, int256 _balanceChange)\\n internal\\n returns (int256 rebasingCreditsDiff, int256 nonRebasingSupplyDiff)\\n {\\n RebaseOptions state = rebaseState[_account];\\n int256 currentBalance = balanceOf(_account).toInt256();\\n if (currentBalance + _balanceChange < 0) {\\n revert(\\\"Transfer amount exceeds balance\\\");\\n }\\n uint256 newBalance = (currentBalance + _balanceChange).toUint256();\\n\\n if (state == RebaseOptions.YieldDelegationSource) {\\n address target = yieldTo[_account];\\n uint256 targetOldBalance = balanceOf(target);\\n uint256 targetNewCredits = _balanceToRebasingCredits(\\n targetOldBalance + newBalance\\n );\\n rebasingCreditsDiff =\\n targetNewCredits.toInt256() -\\n creditBalances[target].toInt256();\\n\\n creditBalances[_account] = newBalance;\\n creditBalances[target] = targetNewCredits;\\n } else if (state == RebaseOptions.YieldDelegationTarget) {\\n uint256 newCredits = _balanceToRebasingCredits(\\n newBalance + creditBalances[yieldFrom[_account]]\\n );\\n rebasingCreditsDiff =\\n newCredits.toInt256() -\\n creditBalances[_account].toInt256();\\n creditBalances[_account] = newCredits;\\n } else {\\n _autoMigrate(_account);\\n uint256 alternativeCreditsPerTokenMem = alternativeCreditsPerToken[\\n _account\\n ];\\n if (alternativeCreditsPerTokenMem > 0) {\\n nonRebasingSupplyDiff = _balanceChange;\\n if (alternativeCreditsPerTokenMem != 1e18) {\\n alternativeCreditsPerToken[_account] = 1e18;\\n }\\n creditBalances[_account] = newBalance;\\n } else {\\n uint256 newCredits = _balanceToRebasingCredits(newBalance);\\n rebasingCreditsDiff =\\n newCredits.toInt256() -\\n creditBalances[_account].toInt256();\\n creditBalances[_account] = newCredits;\\n }\\n }\\n }\\n\\n function _adjustGlobals(\\n int256 _rebasingCreditsDiff,\\n int256 _nonRebasingSupplyDiff\\n ) internal {\\n if (_rebasingCreditsDiff != 0) {\\n rebasingCredits_ = (rebasingCredits_.toInt256() +\\n _rebasingCreditsDiff).toUint256();\\n }\\n if (_nonRebasingSupplyDiff != 0) {\\n nonRebasingSupply = (nonRebasingSupply.toInt256() +\\n _nonRebasingSupplyDiff).toUint256();\\n }\\n }\\n\\n /**\\n * @notice Function to check the amount of tokens that _owner has allowed\\n * to `_spender`.\\n * @param _owner The address which owns the funds.\\n * @param _spender The address which will spend the funds.\\n * @return The number of tokens still available for the _spender.\\n */\\n function allowance(address _owner, address _spender)\\n external\\n view\\n returns (uint256)\\n {\\n return allowances[_owner][_spender];\\n }\\n\\n /**\\n * @notice Approve the passed address to spend the specified amount of\\n * tokens on behalf of msg.sender.\\n * @param _spender The address which will spend the funds.\\n * @param _value The amount of tokens to be spent.\\n * @return true on success.\\n */\\n function approve(address _spender, uint256 _value) external returns (bool) {\\n allowances[msg.sender][_spender] = _value;\\n emit Approval(msg.sender, _spender, _value);\\n return true;\\n }\\n\\n /**\\n * @notice Creates `_amount` tokens and assigns them to `_account`,\\n * increasing the total supply.\\n */\\n function mint(address _account, uint256 _amount) external onlyVault {\\n require(_account != address(0), \\\"Mint to the zero address\\\");\\n\\n // Account\\n (\\n int256 toRebasingCreditsDiff,\\n int256 toNonRebasingSupplyDiff\\n ) = _adjustAccount(_account, _amount.toInt256());\\n // Globals\\n _adjustGlobals(toRebasingCreditsDiff, toNonRebasingSupplyDiff);\\n totalSupply = totalSupply + _amount;\\n\\n require(totalSupply < MAX_SUPPLY, \\\"Max supply\\\");\\n emit Transfer(address(0), _account, _amount);\\n }\\n\\n /**\\n * @notice Destroys `_amount` tokens from `_account`,\\n * reducing the total supply.\\n */\\n function burn(address _account, uint256 _amount) external onlyVault {\\n require(_account != address(0), \\\"Burn from the zero address\\\");\\n if (_amount == 0) {\\n return;\\n }\\n\\n // Account\\n (\\n int256 toRebasingCreditsDiff,\\n int256 toNonRebasingSupplyDiff\\n ) = _adjustAccount(_account, -_amount.toInt256());\\n // Globals\\n _adjustGlobals(toRebasingCreditsDiff, toNonRebasingSupplyDiff);\\n totalSupply = totalSupply - _amount;\\n\\n emit Transfer(_account, address(0), _amount);\\n }\\n\\n /**\\n * @dev Get the credits per token for an account. Returns a fixed amount\\n * if the account is non-rebasing.\\n * @param _account Address of the account.\\n */\\n function _creditsPerToken(address _account)\\n internal\\n view\\n returns (uint256)\\n {\\n uint256 alternativeCreditsPerTokenMem = alternativeCreditsPerToken[\\n _account\\n ];\\n if (alternativeCreditsPerTokenMem != 0) {\\n return alternativeCreditsPerTokenMem;\\n } else {\\n return rebasingCreditsPerToken_;\\n }\\n }\\n\\n /**\\n * @dev Auto migrate contracts to be non rebasing,\\n * unless they have opted into yield.\\n * @param _account Address of the account.\\n */\\n function _autoMigrate(address _account) internal {\\n bool isContract = _account.code.length > 0;\\n // In previous code versions, contracts would not have had their\\n // rebaseState[_account] set to RebaseOptions.NonRebasing when migrated\\n // therefore we check the actual accounting used on the account instead.\\n if (\\n isContract &&\\n rebaseState[_account] == RebaseOptions.NotSet &&\\n alternativeCreditsPerToken[_account] == 0\\n ) {\\n _rebaseOptOut(_account);\\n }\\n }\\n\\n /**\\n * @dev Calculates credits from contract's global rebasingCreditsPerToken_, and\\n * also balance that corresponds to those credits. The latter is important\\n * when adjusting the contract's global nonRebasingSupply to circumvent any\\n * possible rounding errors.\\n *\\n * @param _balance Balance of the account.\\n */\\n function _balanceToRebasingCredits(uint256 _balance)\\n internal\\n view\\n returns (uint256 rebasingCredits)\\n {\\n // Rounds up, because we need to ensure that accounts always have\\n // at least the balance that they should have.\\n // Note this should always be used on an absolute account value,\\n // not on a possibly negative diff, because then the rounding would be wrong.\\n return ((_balance) * rebasingCreditsPerToken_ + 1e18 - 1) / 1e18;\\n }\\n\\n /**\\n * @notice The calling account will start receiving yield after a successful call.\\n * @param _account Address of the account.\\n */\\n function governanceRebaseOptIn(address _account) external onlyGovernor {\\n require(_account != address(0), \\\"Zero address not allowed\\\");\\n _rebaseOptIn(_account);\\n }\\n\\n /**\\n * @notice The calling account will start receiving yield after a successful call.\\n */\\n function rebaseOptIn() external {\\n _rebaseOptIn(msg.sender);\\n }\\n\\n function _rebaseOptIn(address _account) internal {\\n uint256 balance = balanceOf(_account);\\n\\n // prettier-ignore\\n require(\\n alternativeCreditsPerToken[_account] > 0 ||\\n // Accounts may explicitly `rebaseOptIn` regardless of\\n // accounting if they have a 0 balance.\\n creditBalances[_account] == 0\\n ,\\n \\\"Account must be non-rebasing\\\"\\n );\\n RebaseOptions state = rebaseState[_account];\\n // prettier-ignore\\n require(\\n state == RebaseOptions.StdNonRebasing ||\\n state == RebaseOptions.NotSet,\\n \\\"Only standard non-rebasing accounts can opt in\\\"\\n );\\n\\n uint256 newCredits = _balanceToRebasingCredits(balance);\\n\\n // Account\\n rebaseState[_account] = RebaseOptions.StdRebasing;\\n alternativeCreditsPerToken[_account] = 0;\\n creditBalances[_account] = newCredits;\\n // Globals\\n _adjustGlobals(newCredits.toInt256(), -balance.toInt256());\\n\\n emit AccountRebasingEnabled(_account);\\n }\\n\\n /**\\n * @notice The calling account will no longer receive yield\\n */\\n function rebaseOptOut() external {\\n _rebaseOptOut(msg.sender);\\n }\\n\\n function _rebaseOptOut(address _account) internal {\\n require(\\n alternativeCreditsPerToken[_account] == 0,\\n \\\"Account must be rebasing\\\"\\n );\\n RebaseOptions state = rebaseState[_account];\\n require(\\n state == RebaseOptions.StdRebasing || state == RebaseOptions.NotSet,\\n \\\"Only standard rebasing accounts can opt out\\\"\\n );\\n\\n uint256 oldCredits = creditBalances[_account];\\n uint256 balance = balanceOf(_account);\\n\\n // Account\\n rebaseState[_account] = RebaseOptions.StdNonRebasing;\\n alternativeCreditsPerToken[_account] = 1e18;\\n creditBalances[_account] = balance;\\n // Globals\\n _adjustGlobals(-oldCredits.toInt256(), balance.toInt256());\\n\\n emit AccountRebasingDisabled(_account);\\n }\\n\\n /**\\n * @notice Distribute yield to users. This changes the exchange rate\\n * between \\\"credits\\\" and OUSD tokens to change rebasing user's balances.\\n * @param _newTotalSupply New total supply of OUSD.\\n */\\n function changeSupply(uint256 _newTotalSupply) external onlyVault {\\n require(totalSupply > 0, \\\"Cannot increase 0 supply\\\");\\n\\n if (totalSupply == _newTotalSupply) {\\n emit TotalSupplyUpdatedHighres(\\n totalSupply,\\n rebasingCredits_,\\n rebasingCreditsPerToken_\\n );\\n return;\\n }\\n\\n totalSupply = _newTotalSupply > MAX_SUPPLY\\n ? MAX_SUPPLY\\n : _newTotalSupply;\\n\\n uint256 rebasingSupply = totalSupply - nonRebasingSupply;\\n // round up in the favour of the protocol\\n rebasingCreditsPerToken_ =\\n (rebasingCredits_ * 1e18 + rebasingSupply - 1) /\\n rebasingSupply;\\n\\n require(rebasingCreditsPerToken_ > 0, \\\"Invalid change in supply\\\");\\n\\n emit TotalSupplyUpdatedHighres(\\n totalSupply,\\n rebasingCredits_,\\n rebasingCreditsPerToken_\\n );\\n }\\n\\n /*\\n * @notice Send the yield from one account to another account.\\n * Each account keeps its own balances.\\n */\\n function delegateYield(address _from, address _to) external onlyGovernor {\\n require(_from != address(0), \\\"Zero from address not allowed\\\");\\n require(_to != address(0), \\\"Zero to address not allowed\\\");\\n\\n require(_from != _to, \\\"Cannot delegate to self\\\");\\n require(\\n yieldFrom[_to] == address(0) &&\\n yieldTo[_to] == address(0) &&\\n yieldFrom[_from] == address(0) &&\\n yieldTo[_from] == address(0),\\n \\\"Blocked by existing yield delegation\\\"\\n );\\n RebaseOptions stateFrom = rebaseState[_from];\\n RebaseOptions stateTo = rebaseState[_to];\\n\\n require(\\n stateFrom == RebaseOptions.NotSet ||\\n stateFrom == RebaseOptions.StdNonRebasing ||\\n stateFrom == RebaseOptions.StdRebasing,\\n \\\"Invalid rebaseState from\\\"\\n );\\n\\n require(\\n stateTo == RebaseOptions.NotSet ||\\n stateTo == RebaseOptions.StdNonRebasing ||\\n stateTo == RebaseOptions.StdRebasing,\\n \\\"Invalid rebaseState to\\\"\\n );\\n\\n if (alternativeCreditsPerToken[_from] == 0) {\\n _rebaseOptOut(_from);\\n }\\n if (alternativeCreditsPerToken[_to] > 0) {\\n _rebaseOptIn(_to);\\n }\\n\\n uint256 fromBalance = balanceOf(_from);\\n uint256 toBalance = balanceOf(_to);\\n uint256 oldToCredits = creditBalances[_to];\\n uint256 newToCredits = _balanceToRebasingCredits(\\n fromBalance + toBalance\\n );\\n\\n // Set up the bidirectional links\\n yieldTo[_from] = _to;\\n yieldFrom[_to] = _from;\\n\\n // Local\\n rebaseState[_from] = RebaseOptions.YieldDelegationSource;\\n alternativeCreditsPerToken[_from] = 1e18;\\n creditBalances[_from] = fromBalance;\\n rebaseState[_to] = RebaseOptions.YieldDelegationTarget;\\n creditBalances[_to] = newToCredits;\\n\\n // Global\\n int256 creditsChange = newToCredits.toInt256() -\\n oldToCredits.toInt256();\\n _adjustGlobals(creditsChange, -(fromBalance).toInt256());\\n emit YieldDelegated(_from, _to);\\n }\\n\\n /*\\n * @notice Stop sending the yield from one account to another account.\\n */\\n function undelegateYield(address _from) external onlyGovernor {\\n // Require a delegation, which will also ensure a valid delegation\\n require(yieldTo[_from] != address(0), \\\"Zero address not allowed\\\");\\n\\n address to = yieldTo[_from];\\n uint256 fromBalance = balanceOf(_from);\\n uint256 toBalance = balanceOf(to);\\n uint256 oldToCredits = creditBalances[to];\\n uint256 newToCredits = _balanceToRebasingCredits(toBalance);\\n\\n // Remove the bidirectional links\\n yieldFrom[to] = address(0);\\n yieldTo[_from] = address(0);\\n\\n // Local\\n rebaseState[_from] = RebaseOptions.StdNonRebasing;\\n // alternativeCreditsPerToken[from] already 1e18 from `delegateYield()`\\n creditBalances[_from] = fromBalance;\\n rebaseState[to] = RebaseOptions.StdRebasing;\\n // alternativeCreditsPerToken[to] already 0 from `delegateYield()`\\n creditBalances[to] = newToCredits;\\n\\n // Global\\n int256 creditsChange = newToCredits.toInt256() -\\n oldToCredits.toInt256();\\n _adjustGlobals(creditsChange, fromBalance.toInt256());\\n emit YieldUndelegated(_from, to);\\n }\\n}\\n\",\"keccak256\":\"0x5741d16e48d6031ec92c1e189ea023c78a34956b6bc9642ea9dfc9a6dafe49ca\",\"license\":\"BUSL-1.1\"},\"contracts/utils/Helpers.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { IBasicToken } from \\\"../interfaces/IBasicToken.sol\\\";\\n\\nlibrary Helpers {\\n /**\\n * @notice Fetch the `symbol()` from an ERC20 token\\n * @dev Grabs the `symbol()` from a contract\\n * @param _token Address of the ERC20 token\\n * @return string Symbol of the ERC20 token\\n */\\n function getSymbol(address _token) internal view returns (string memory) {\\n string memory symbol = IBasicToken(_token).symbol();\\n return symbol;\\n }\\n\\n /**\\n * @notice Fetch the `decimals()` from an ERC20 token\\n * @dev Grabs the `decimals()` from a contract and fails if\\n * the decimal value does not live within a certain range\\n * @param _token Address of the ERC20 token\\n * @return uint256 Decimals of the ERC20 token\\n */\\n function getDecimals(address _token) internal view returns (uint256) {\\n uint256 decimals = IBasicToken(_token).decimals();\\n require(\\n decimals >= 4 && decimals <= 18,\\n \\\"Token must have sufficient decimal places\\\"\\n );\\n\\n return decimals;\\n }\\n}\\n\",\"keccak256\":\"0x108b7a69e0140da0072ca18f90a03a3340574400f81aa6076cd2cccdf13699c2\",\"license\":\"MIT\"},\"contracts/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Base contract any contracts that need to initialize state after deployment.\\n * @author Origin Protocol Inc\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n require(\\n initializing || !initialized,\\n \\\"Initializable: contract is already initialized\\\"\\n );\\n\\n bool isTopLevelCall = !initializing;\\n if (isTopLevelCall) {\\n initializing = true;\\n initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n initializing = false;\\n }\\n }\\n\\n uint256[50] private ______gap;\\n}\\n\",\"keccak256\":\"0xaadbcc138114afed4af4f353c2ced2916e6ee14be91434789187f192caf0d786\",\"license\":\"MIT\"},\"contracts/vault/VaultStorage.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title OToken VaultStorage contract\\n * @notice The VaultStorage contract defines the storage for the Vault contracts\\n * @author Origin Protocol Inc\\n */\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { SafeERC20 } from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\nimport { Address } from \\\"@openzeppelin/contracts/utils/Address.sol\\\";\\n\\nimport { IStrategy } from \\\"../interfaces/IStrategy.sol\\\";\\nimport { Governable } from \\\"../governance/Governable.sol\\\";\\nimport { OUSD } from \\\"../token/OUSD.sol\\\";\\nimport { Initializable } from \\\"../utils/Initializable.sol\\\";\\nimport \\\"../utils/Helpers.sol\\\";\\n\\ncontract VaultStorage is Initializable, Governable {\\n using SafeERC20 for IERC20;\\n\\n event AssetSupported(address _asset);\\n event AssetRemoved(address _asset);\\n event AssetDefaultStrategyUpdated(address _asset, address _strategy);\\n event AssetAllocated(address _asset, address _strategy, uint256 _amount);\\n event StrategyApproved(address _addr);\\n event StrategyRemoved(address _addr);\\n event Mint(address _addr, uint256 _value);\\n event Redeem(address _addr, uint256 _value);\\n event CapitalPaused();\\n event CapitalUnpaused();\\n event RebasePaused();\\n event RebaseUnpaused();\\n event VaultBufferUpdated(uint256 _vaultBuffer);\\n event OusdMetaStrategyUpdated(address _ousdMetaStrategy);\\n event RedeemFeeUpdated(uint256 _redeemFeeBps);\\n event PriceProviderUpdated(address _priceProvider);\\n event AllocateThresholdUpdated(uint256 _threshold);\\n event RebaseThresholdUpdated(uint256 _threshold);\\n event StrategistUpdated(address _address);\\n event MaxSupplyDiffChanged(uint256 maxSupplyDiff);\\n event YieldDistribution(address _to, uint256 _yield, uint256 _fee);\\n event TrusteeFeeBpsChanged(uint256 _basis);\\n event TrusteeAddressChanged(address _address);\\n event NetOusdMintForStrategyThresholdChanged(uint256 _threshold);\\n event SwapperChanged(address _address);\\n event SwapAllowedUndervalueChanged(uint256 _basis);\\n event SwapSlippageChanged(address _asset, uint256 _basis);\\n event Swapped(\\n address indexed _fromAsset,\\n address indexed _toAsset,\\n uint256 _fromAssetAmount,\\n uint256 _toAssetAmount\\n );\\n event StrategyAddedToMintWhitelist(address indexed strategy);\\n event StrategyRemovedFromMintWhitelist(address indexed strategy);\\n event DripperChanged(address indexed _dripper);\\n event WithdrawalRequested(\\n address indexed _withdrawer,\\n uint256 indexed _requestId,\\n uint256 _amount,\\n uint256 _queued\\n );\\n event WithdrawalClaimed(\\n address indexed _withdrawer,\\n uint256 indexed _requestId,\\n uint256 _amount\\n );\\n event WithdrawalClaimable(uint256 _claimable, uint256 _newClaimable);\\n event WithdrawalClaimDelayUpdated(uint256 _newDelay);\\n\\n // Assets supported by the Vault, i.e. Stablecoins\\n enum UnitConversion {\\n DECIMALS,\\n GETEXCHANGERATE\\n }\\n // Changed to fit into a single storage slot so the decimals needs to be recached\\n struct Asset {\\n // Note: OETHVaultCore doesn't use `isSupported` when minting,\\n // redeeming or checking balance of assets.\\n bool isSupported;\\n UnitConversion unitConversion;\\n uint8 decimals;\\n // Max allowed slippage from the Oracle price when swapping collateral assets in basis points.\\n // For example 40 == 0.4% slippage\\n uint16 allowedOracleSlippageBps;\\n }\\n\\n /// @dev mapping of supported vault assets to their configuration\\n // slither-disable-next-line uninitialized-state\\n mapping(address => Asset) internal assets;\\n /// @dev list of all assets supported by the vault.\\n // slither-disable-next-line uninitialized-state\\n address[] internal allAssets;\\n\\n // Strategies approved for use by the Vault\\n struct Strategy {\\n bool isSupported;\\n uint256 _deprecated; // Deprecated storage slot\\n }\\n /// @dev mapping of strategy contracts to their configuration\\n // slither-disable-next-line uninitialized-state\\n mapping(address => Strategy) internal strategies;\\n /// @dev list of all vault strategies\\n address[] internal allStrategies;\\n\\n /// @notice Address of the Oracle price provider contract\\n // slither-disable-next-line uninitialized-state\\n address public priceProvider;\\n /// @notice pause rebasing if true\\n bool public rebasePaused = false;\\n /// @notice pause operations that change the OToken supply.\\n /// eg mint, redeem, allocate, mint/burn for strategy\\n bool public capitalPaused = true;\\n /// @notice Redemption fee in basis points. eg 50 = 0.5%\\n uint256 public redeemFeeBps;\\n /// @notice Percentage of assets to keep in Vault to handle (most) withdrawals. 100% = 1e18.\\n uint256 public vaultBuffer;\\n /// @notice OToken mints over this amount automatically allocate funds. 18 decimals.\\n uint256 public autoAllocateThreshold;\\n /// @notice OToken mints over this amount automatically rebase. 18 decimals.\\n uint256 public rebaseThreshold;\\n\\n /// @dev Address of the OToken token. eg OUSD or OETH.\\n // slither-disable-next-line uninitialized-state\\n OUSD internal oUSD;\\n\\n //keccak256(\\\"OUSD.vault.governor.admin.impl\\\");\\n bytes32 constant adminImplPosition =\\n 0xa2bd3d3cf188a41358c8b401076eb59066b09dec5775650c0de4c55187d17bd9;\\n\\n // Address of the contract responsible for post rebase syncs with AMMs\\n address private _deprecated_rebaseHooksAddr = address(0);\\n\\n // Deprecated: Address of Uniswap\\n // slither-disable-next-line constable-states\\n address private _deprecated_uniswapAddr = address(0);\\n\\n /// @notice Address of the Strategist\\n address public strategistAddr = address(0);\\n\\n /// @notice Mapping of asset address to the Strategy that they should automatically\\n // be allocated to\\n // slither-disable-next-line uninitialized-state\\n mapping(address => address) public assetDefaultStrategies;\\n\\n /// @notice Max difference between total supply and total value of assets. 18 decimals.\\n // slither-disable-next-line uninitialized-state\\n uint256 public maxSupplyDiff;\\n\\n /// @notice Trustee contract that can collect a percentage of yield\\n address public trusteeAddress;\\n\\n /// @notice Amount of yield collected in basis points. eg 2000 = 20%\\n uint256 public trusteeFeeBps;\\n\\n /// @dev Deprecated: Tokens that should be swapped for stablecoins\\n address[] private _deprecated_swapTokens;\\n\\n uint256 constant MINT_MINIMUM_UNIT_PRICE = 0.998e18;\\n\\n /// @notice Metapool strategy that is allowed to mint/burn OTokens without changing collateral\\n\\n // slither-disable-start constable-states\\n // slither-disable-next-line uninitialized-state\\n address public ousdMetaStrategy;\\n\\n /// @notice How much OTokens are currently minted by the strategy\\n // slither-disable-next-line uninitialized-state\\n int256 public netOusdMintedForStrategy;\\n\\n /// @notice How much net total OTokens are allowed to be minted by all strategies\\n // slither-disable-next-line uninitialized-state\\n uint256 public netOusdMintForStrategyThreshold;\\n\\n // slither-disable-end constable-states\\n\\n uint256 constant MIN_UNIT_PRICE_DRIFT = 0.7e18;\\n uint256 constant MAX_UNIT_PRICE_DRIFT = 1.3e18;\\n\\n /// @notice Collateral swap configuration.\\n /// @dev is packed into a single storage slot to save gas.\\n struct SwapConfig {\\n // Contract that swaps the vault's collateral assets\\n address swapper;\\n // Max allowed percentage the total value can drop below the total supply in basis points.\\n // For example 100 == 1%\\n uint16 allowedUndervalueBps;\\n }\\n SwapConfig internal swapConfig = SwapConfig(address(0), 0);\\n\\n // List of strategies that can mint oTokens directly\\n // Used in OETHBaseVaultCore\\n // slither-disable-next-line uninitialized-state\\n mapping(address => bool) public isMintWhitelistedStrategy;\\n\\n /// @notice Address of the Dripper contract that streams harvested rewards to the Vault\\n /// @dev The vault is proxied so needs to be set with setDripper against the proxy contract.\\n // slither-disable-start constable-states\\n // slither-disable-next-line uninitialized-state\\n address public dripper;\\n // slither-disable-end constable-states\\n\\n /// Withdrawal Queue Storage /////\\n\\n struct WithdrawalQueueMetadata {\\n // cumulative total of all withdrawal requests included the ones that have already been claimed\\n uint128 queued;\\n // cumulative total of all the requests that can be claimed including the ones that have already been claimed\\n uint128 claimable;\\n // total of all the requests that have been claimed\\n uint128 claimed;\\n // index of the next withdrawal request starting at 0\\n uint128 nextWithdrawalIndex;\\n }\\n\\n /// @notice Global metadata for the withdrawal queue including:\\n /// queued - cumulative total of all withdrawal requests included the ones that have already been claimed\\n /// claimable - cumulative total of all the requests that can be claimed including the ones already claimed\\n /// claimed - total of all the requests that have been claimed\\n /// nextWithdrawalIndex - index of the next withdrawal request starting at 0\\n // slither-disable-next-line uninitialized-state\\n WithdrawalQueueMetadata public withdrawalQueueMetadata;\\n\\n struct WithdrawalRequest {\\n address withdrawer;\\n bool claimed;\\n uint40 timestamp; // timestamp of the withdrawal request\\n // Amount of oTokens to redeem. eg OETH\\n uint128 amount;\\n // cumulative total of all withdrawal requests including this one.\\n // this request can be claimed when this queued amount is less than or equal to the queue's claimable amount.\\n uint128 queued;\\n }\\n\\n /// @notice Mapping of withdrawal request indices to the user withdrawal request data\\n mapping(uint256 => WithdrawalRequest) public withdrawalRequests;\\n\\n /// @notice Sets a minimum delay that is required to elapse between\\n /// requesting async withdrawals and claiming the request.\\n /// When set to 0 async withdrawals are disabled.\\n // slither-disable-start constable-states\\n // slither-disable-next-line uninitialized-state\\n uint256 public withdrawalClaimDelay;\\n // slither-disable-end constable-states\\n\\n // For future use\\n uint256[44] private __gap;\\n\\n /**\\n * @notice set the implementation for the admin, this needs to be in a base class else we cannot set it\\n * @param newImpl address of the implementation\\n */\\n function setAdminImpl(address newImpl) external onlyGovernor {\\n require(\\n Address.isContract(newImpl),\\n \\\"new implementation is not a contract\\\"\\n );\\n bytes32 position = adminImplPosition;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(position, newImpl)\\n }\\n }\\n}\\n\",\"keccak256\":\"0xf5007e2dcad1b8162ad934a3991c35497b32b924449cf052107ecafd5406dbd8\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x60c060405234801561001057600080fd5b50604051610f4a380380610f4a83398101604081905261002f916100cb565b818161004733600080516020610f2a83398151915255565b600080516020610f2a833981519152546040516001600160a01b03909116906000907fc7c0c772add429241571afb3805861fb3cfa2af374534088b76cdb4325a87e9a908290a36001600160601b0319606092831b8116608052911b1660a052506100fe9050565b80516001600160a01b03811681146100c657600080fd5b919050565b600080604083850312156100de57600080fd5b6100e7836100af565b91506100f5602084016100af565b90509250929050565b60805160601c60a05160601c610dec61013e6000396000818161038b0152818161065c01526107910152600081816104f801526107b30152610dec6000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c8063737962971161007157806373796297146101375780639f678cca1461013f578063bb7a632e1461018d578063c7af335214610196578063d38bfff4146101ae578063e5225381146101c157600080fd5b80630493a0fa146100b95780630921e7ef146100ce5780630c340a24146100e15780631072cbea1461010657806346fcff4c146101195780635d36b1901461012f575b600080fd5b6100cc6100c7366004610c44565b6101c9565b005b6100cc6100dc366004610bc5565b610256565b6100e961030c565b6040516001600160a01b0390911681526020015b60405180910390f35b6100cc610114366004610bf8565b610329565b610121610369565b6040519081526020016100fd565b6100cc610448565b6100cc6104ee565b6001546101659067ffffffffffffffff811690600160401b90046001600160c01b031682565b6040805167ffffffffffffffff90931683526001600160c01b039091166020830152016100fd565b61012160005481565b61019e61056b565b60405190151581526020016100fd565b6100cc6101bc366004610baa565b61059c565b6100cc610640565b6101d161056b565b6101f65760405162461bcd60e51b81526004016101ed90610cc5565b60405180910390fd5b600081116102465760405162461bcd60e51b815260206004820152601960248201527f6475726174696f6e206d757374206265206e6f6e2d7a65726f0000000000000060448201526064016101ed565b6000819055610253610644565b50565b61025e61056b565b61027a5760405162461bcd60e51b81526004016101ed90610cc5565b6040516370a0823160e01b81523060048201526103089082906001600160a01b038516906370a082319060240160206040518083038186803b1580156102bf57600080fd5b505afa1580156102d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102f79190610c5d565b6001600160a01b03851691906107dd565b5050565b6000610324600080516020610d978339815191525490565b905090565b61033161056b565b61034d5760405162461bcd60e51b81526004016101ed90610cc5565b61030861035861030c565b6001600160a01b03841690836107dd565b6040516370a0823160e01b815230600482015260009081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a082319060240160206040518083038186803b1580156103cd57600080fd5b505afa1580156103e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104059190610c5d565b6040805180820190915260015467ffffffffffffffff81168252600160401b90046001600160c01b0316602082015290915061044290829061082f565b91505090565b7f44c4d30b2eaad5130ad70c3ba6972730566f3e6359ab83e800d905c61b1c51db546001600160a01b0316336001600160a01b0316146104e35760405162461bcd60e51b815260206004820152603060248201527f4f6e6c79207468652070656e64696e6720476f7665726e6f722063616e20636f60448201526f6d706c6574652074686520636c61696d60801b60648201526084016101ed565b6104ec33610881565b565b6104f6610644565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663af14052c6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561055157600080fd5b505af1158015610565573d6000803e3d6000fd5b50505050565b6000610583600080516020610d978339815191525490565b6001600160a01b0316336001600160a01b031614905090565b6105a461056b565b6105c05760405162461bcd60e51b81526004016101ed90610cc5565b6105e8817f44c4d30b2eaad5130ad70c3ba6972730566f3e6359ab83e800d905c61b1c51db55565b806001600160a01b0316610608600080516020610d978339815191525490565b6001600160a01b03167fa39cc5eb22d0f34d8beaefee8a3f17cc229c1a1d1ef87a5ad47313487b1c4f0d60405160405180910390a350565b6104ec5b6040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a082319060240160206040518083038186803b1580156106a657600080fd5b505afa1580156106ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106de9190610c5d565b6040805180820190915260015467ffffffffffffffff81168252600160401b90046001600160c01b0316602082015290915060009061071e90839061082f565b9050600061072c8284610d3d565b905060405180604001604052804267ffffffffffffffff168152602001600054836107579190610cfc565b6001600160c01b03908116909152815160209092015116600160401b0267ffffffffffffffff909116176001556107d86001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000167f0000000000000000000000000000000000000000000000000000000000000000846107dd565b505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526107d8908490610942565b8051600090819061084a9067ffffffffffffffff1642610d3d565b9050600083602001516001600160c01b0316826108679190610d1e565b90508481116108765780610878565b845b95945050505050565b6001600160a01b0381166108d75760405162461bcd60e51b815260206004820152601a60248201527f4e657720476f7665726e6f72206973206164647265737328302900000000000060448201526064016101ed565b806001600160a01b03166108f7600080516020610d978339815191525490565b6001600160a01b03167fc7c0c772add429241571afb3805861fb3cfa2af374534088b76cdb4325a87e9a60405160405180910390a361025381600080516020610d9783398151915255565b6000610997826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316610a149092919063ffffffff16565b8051909150156107d857808060200190518101906109b59190610c22565b6107d85760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016101ed565b6060610a238484600085610a2d565b90505b9392505050565b606082471015610a8e5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016101ed565b843b610adc5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016101ed565b600080866001600160a01b03168587604051610af89190610c76565b60006040518083038185875af1925050503d8060008114610b35576040519150601f19603f3d011682016040523d82523d6000602084013e610b3a565b606091505b5091509150610b4a828286610b55565b979650505050505050565b60608315610b64575081610a26565b825115610b745782518084602001fd5b8160405162461bcd60e51b81526004016101ed9190610c92565b80356001600160a01b0381168114610ba557600080fd5b919050565b600060208284031215610bbc57600080fd5b610a2682610b8e565b60008060408385031215610bd857600080fd5b610be183610b8e565b9150610bef60208401610b8e565b90509250929050565b60008060408385031215610c0b57600080fd5b610c1483610b8e565b946020939093013593505050565b600060208284031215610c3457600080fd5b81518015158114610a2657600080fd5b600060208284031215610c5657600080fd5b5035919050565b600060208284031215610c6f57600080fd5b5051919050565b60008251610c88818460208701610d54565b9190910192915050565b6020815260008251806020840152610cb1816040850160208701610d54565b601f01601f19169190910160400192915050565b6020808252601a908201527f43616c6c6572206973206e6f742074686520476f7665726e6f72000000000000604082015260600190565b600082610d1957634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615610d3857610d38610d80565b500290565b600082821015610d4f57610d4f610d80565b500390565b60005b83811015610d6f578181015183820152602001610d57565b838111156105655750506000910152565b634e487b7160e01b600052601160045260246000fdfe7bea13895fa79d2831e0a9e28edede30099005a50d652d8957cf8a607ee6ca4aa264697066735822122034ebfe843435bb5a61f84bffcbc17dcc3078caae536dc60073bab008693ddf5564736f6c634300080700337bea13895fa79d2831e0a9e28edede30099005a50d652d8957cf8a607ee6ca4a", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100b45760003560e01c8063737962971161007157806373796297146101375780639f678cca1461013f578063bb7a632e1461018d578063c7af335214610196578063d38bfff4146101ae578063e5225381146101c157600080fd5b80630493a0fa146100b95780630921e7ef146100ce5780630c340a24146100e15780631072cbea1461010657806346fcff4c146101195780635d36b1901461012f575b600080fd5b6100cc6100c7366004610c44565b6101c9565b005b6100cc6100dc366004610bc5565b610256565b6100e961030c565b6040516001600160a01b0390911681526020015b60405180910390f35b6100cc610114366004610bf8565b610329565b610121610369565b6040519081526020016100fd565b6100cc610448565b6100cc6104ee565b6001546101659067ffffffffffffffff811690600160401b90046001600160c01b031682565b6040805167ffffffffffffffff90931683526001600160c01b039091166020830152016100fd565b61012160005481565b61019e61056b565b60405190151581526020016100fd565b6100cc6101bc366004610baa565b61059c565b6100cc610640565b6101d161056b565b6101f65760405162461bcd60e51b81526004016101ed90610cc5565b60405180910390fd5b600081116102465760405162461bcd60e51b815260206004820152601960248201527f6475726174696f6e206d757374206265206e6f6e2d7a65726f0000000000000060448201526064016101ed565b6000819055610253610644565b50565b61025e61056b565b61027a5760405162461bcd60e51b81526004016101ed90610cc5565b6040516370a0823160e01b81523060048201526103089082906001600160a01b038516906370a082319060240160206040518083038186803b1580156102bf57600080fd5b505afa1580156102d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102f79190610c5d565b6001600160a01b03851691906107dd565b5050565b6000610324600080516020610d978339815191525490565b905090565b61033161056b565b61034d5760405162461bcd60e51b81526004016101ed90610cc5565b61030861035861030c565b6001600160a01b03841690836107dd565b6040516370a0823160e01b815230600482015260009081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a082319060240160206040518083038186803b1580156103cd57600080fd5b505afa1580156103e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104059190610c5d565b6040805180820190915260015467ffffffffffffffff81168252600160401b90046001600160c01b0316602082015290915061044290829061082f565b91505090565b7f44c4d30b2eaad5130ad70c3ba6972730566f3e6359ab83e800d905c61b1c51db546001600160a01b0316336001600160a01b0316146104e35760405162461bcd60e51b815260206004820152603060248201527f4f6e6c79207468652070656e64696e6720476f7665726e6f722063616e20636f60448201526f6d706c6574652074686520636c61696d60801b60648201526084016101ed565b6104ec33610881565b565b6104f6610644565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663af14052c6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561055157600080fd5b505af1158015610565573d6000803e3d6000fd5b50505050565b6000610583600080516020610d978339815191525490565b6001600160a01b0316336001600160a01b031614905090565b6105a461056b565b6105c05760405162461bcd60e51b81526004016101ed90610cc5565b6105e8817f44c4d30b2eaad5130ad70c3ba6972730566f3e6359ab83e800d905c61b1c51db55565b806001600160a01b0316610608600080516020610d978339815191525490565b6001600160a01b03167fa39cc5eb22d0f34d8beaefee8a3f17cc229c1a1d1ef87a5ad47313487b1c4f0d60405160405180910390a350565b6104ec5b6040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a082319060240160206040518083038186803b1580156106a657600080fd5b505afa1580156106ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106de9190610c5d565b6040805180820190915260015467ffffffffffffffff81168252600160401b90046001600160c01b0316602082015290915060009061071e90839061082f565b9050600061072c8284610d3d565b905060405180604001604052804267ffffffffffffffff168152602001600054836107579190610cfc565b6001600160c01b03908116909152815160209092015116600160401b0267ffffffffffffffff909116176001556107d86001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000167f0000000000000000000000000000000000000000000000000000000000000000846107dd565b505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526107d8908490610942565b8051600090819061084a9067ffffffffffffffff1642610d3d565b9050600083602001516001600160c01b0316826108679190610d1e565b90508481116108765780610878565b845b95945050505050565b6001600160a01b0381166108d75760405162461bcd60e51b815260206004820152601a60248201527f4e657720476f7665726e6f72206973206164647265737328302900000000000060448201526064016101ed565b806001600160a01b03166108f7600080516020610d978339815191525490565b6001600160a01b03167fc7c0c772add429241571afb3805861fb3cfa2af374534088b76cdb4325a87e9a60405160405180910390a361025381600080516020610d9783398151915255565b6000610997826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316610a149092919063ffffffff16565b8051909150156107d857808060200190518101906109b59190610c22565b6107d85760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016101ed565b6060610a238484600085610a2d565b90505b9392505050565b606082471015610a8e5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016101ed565b843b610adc5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016101ed565b600080866001600160a01b03168587604051610af89190610c76565b60006040518083038185875af1925050503d8060008114610b35576040519150601f19603f3d011682016040523d82523d6000602084013e610b3a565b606091505b5091509150610b4a828286610b55565b979650505050505050565b60608315610b64575081610a26565b825115610b745782518084602001fd5b8160405162461bcd60e51b81526004016101ed9190610c92565b80356001600160a01b0381168114610ba557600080fd5b919050565b600060208284031215610bbc57600080fd5b610a2682610b8e565b60008060408385031215610bd857600080fd5b610be183610b8e565b9150610bef60208401610b8e565b90509250929050565b60008060408385031215610c0b57600080fd5b610c1483610b8e565b946020939093013593505050565b600060208284031215610c3457600080fd5b81518015158114610a2657600080fd5b600060208284031215610c5657600080fd5b5035919050565b600060208284031215610c6f57600080fd5b5051919050565b60008251610c88818460208701610d54565b9190910192915050565b6020815260008251806020840152610cb1816040850160208701610d54565b601f01601f19169190910160400192915050565b6020808252601a908201527f43616c6c6572206973206e6f742074686520476f7665726e6f72000000000000604082015260600190565b600082610d1957634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615610d3857610d38610d80565b500290565b600082821015610d4f57610d4f610d80565b500390565b60005b83811015610d6f578181015183820152602001610d57565b838111156105655750506000910152565b634e487b7160e01b600052601160045260246000fdfe7bea13895fa79d2831e0a9e28edede30099005a50d652d8957cf8a607ee6ca4aa264697066735822122034ebfe843435bb5a61f84bffcbc17dcc3078caae536dc60073bab008693ddf5564736f6c63430008070033", - "libraries": {}, - "devdoc": { - "author": "Origin Protocol Inc", - "kind": "dev", - "methods": { - "availableFunds()": { - "returns": { - "_0": "The amount that would be sent if a collect was called" - } - }, - "setDripDuration(uint256)": { - "details": "Change the drip duration. Governor only.", - "params": { - "_durationSeconds": "the number of seconds to drip out the entire balance over if no collects were called during that time." - } - }, - "transferAllToken(address,address)": { - "details": "Transfer out all ERC20 held by the contract. Governor only.", - "params": { - "_asset": "ERC20 token address" - } - }, - "transferGovernance(address)": { - "params": { - "_newGovernor": "Address of the new Governor" - } - }, - "transferToken(address,uint256)": { - "details": "Transfer out ERC20 tokens held by the contract. Governor only.", - "params": { - "_amount": "amount to transfer", - "_asset": "ERC20 token address" - } - } - }, - "title": "OETH Dripper Contract", - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": { - "claimGovernance()": { - "notice": "Claim Governance of the contract to a new account (`newGovernor`). Can only be called by the new Governor." - }, - "collect()": { - "notice": "Collect all dripped funds and send to vault. Recalculate new drip rate." - }, - "collectAndRebase()": { - "notice": "Collect all dripped funds, send to vault, recalculate new drip rate, and rebase OUSD." - }, - "governor()": { - "notice": "Returns the address of the current Governor." - }, - "isGovernor()": { - "notice": "Returns true if the caller is the current Governor." - }, - "transferGovernance(address)": { - "notice": "Transfers Governance of the contract to a new account (`newGovernor`). Can only be called by the current Governor. Must be claimed for this to complete" - } - }, - "version": 1 - }, - "storageLayout": { - "storage": [ - { - "astId": 10477, - "contract": "contracts/harvest/OETHDripper.sol:OETHDripper", - "label": "dripDuration", - "offset": 0, - "slot": "0", - "type": "t_uint256" - }, - { - "astId": 10480, - "contract": "contracts/harvest/OETHDripper.sol:OETHDripper", - "label": "drip", - "offset": 0, - "slot": "1", - "type": "t_struct(Drip)10471_storage" - } - ], - "types": { - "t_struct(Drip)10471_storage": { - "encoding": "inplace", - "label": "struct Dripper.Drip", - "members": [ - { - "astId": 10468, - "contract": "contracts/harvest/OETHDripper.sol:OETHDripper", - "label": "lastCollect", - "offset": 0, - "slot": "0", - "type": "t_uint64" - }, - { - "astId": 10470, - "contract": "contracts/harvest/OETHDripper.sol:OETHDripper", - "label": "perSecond", - "offset": 8, - "slot": "0", - "type": "t_uint192" - } - ], - "numberOfBytes": "32" - }, - "t_uint192": { - "encoding": "inplace", - "label": "uint192", - "numberOfBytes": "24" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint64": { - "encoding": "inplace", - "label": "uint64", - "numberOfBytes": "8" - } - } - } -} \ No newline at end of file diff --git a/contracts/deployments/mainnet/OETHDripperProxy.json b/contracts/deployments/mainnet/OETHDripperProxy.json deleted file mode 100644 index e8cd26d434..0000000000 --- a/contracts/deployments/mainnet/OETHDripperProxy.json +++ /dev/null @@ -1,284 +0,0 @@ -{ - "address": "0xc0F42F73b8f01849a2DD99753524d4ba14317EB3", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousGovernor", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newGovernor", - "type": "address" - } - ], - "name": "GovernorshipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousGovernor", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newGovernor", - "type": "address" - } - ], - "name": "PendingGovernorshipTransfer", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "inputs": [], - "name": "admin", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "claimGovernance", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "governor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "implementation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_logic", - "type": "address" - }, - { - "internalType": "address", - "name": "_initGovernor", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "isGovernor", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_newGovernor", - "type": "address" - } - ], - "name": "transferGovernance", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "upgradeTo", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "upgradeToAndCall", - "outputs": [], - "stateMutability": "payable", - "type": "function" - } - ], - "transactionHash": "0x8e4217c5883891816b9035100b0b1342492f8e618029bf022bdc85bf9aa330f2", - "receipt": { - "to": null, - "from": "0xFD9E6005187F448957a0972a7d0C0A6dA2911236", - "contractAddress": "0xc0F42F73b8f01849a2DD99753524d4ba14317EB3", - "transactionIndex": 69, - "gasUsed": "600505", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000020000000000000000000800000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000004000000010000000000000002000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000020000000000040000000000000000000000000000000000000000000000000000000", - "blockHash": "0xd95d69a333a712b2c7df35a958f2ddad6606cf00f1cf889bd364f38eef3747fc", - "transactionHash": "0x8e4217c5883891816b9035100b0b1342492f8e618029bf022bdc85bf9aa330f2", - "logs": [ - { - "transactionIndex": 69, - "blockNumber": 17067704, - "transactionHash": "0x8e4217c5883891816b9035100b0b1342492f8e618029bf022bdc85bf9aa330f2", - "address": "0xc0F42F73b8f01849a2DD99753524d4ba14317EB3", - "topics": [ - "0xc7c0c772add429241571afb3805861fb3cfa2af374534088b76cdb4325a87e9a", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x000000000000000000000000fd9e6005187f448957a0972a7d0c0a6da2911236" - ], - "data": "0x", - "logIndex": 132, - "blockHash": "0xd95d69a333a712b2c7df35a958f2ddad6606cf00f1cf889bd364f38eef3747fc" - } - ], - "blockNumber": 17067704, - "cumulativeGasUsed": "5383677", - "status": 1, - "byzantium": true - }, - "args": [], - "solcInputHash": "8564b351f4bb5da3f43a5b9c5739eec4", - "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousGovernor\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newGovernor\",\"type\":\"address\"}],\"name\":\"GovernorshipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousGovernor\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newGovernor\",\"type\":\"address\"}],\"name\":\"PendingGovernorshipTransfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"claimGovernance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_initGovernor\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isGovernor\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_newGovernor\",\"type\":\"address\"}],\"name\":\"transferGovernance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"admin()\":{\"returns\":{\"_0\":\"The address of the proxy admin/it's also the governor.\"}},\"claimGovernance()\":{\"details\":\"Claim Governance of the contract to a new account (`newGovernor`). Can only be called by the new Governor.\"},\"governor()\":{\"details\":\"Returns the address of the current Governor.\"},\"implementation()\":{\"returns\":{\"_0\":\"The address of the implementation.\"}},\"initialize(address,address,bytes)\":{\"details\":\"Contract initializer with Governor enforcement\",\"params\":{\"_data\":\"Data to send as msg.data to the implementation to initialize the proxied contract. It should include the signature and the parameters of the function to be called, as described in https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding. This parameter is optional, if no data is given the initialization call to proxied contract will be skipped.\",\"_initGovernor\":\"Address of the initial Governor.\",\"_logic\":\"Address of the initial implementation.\"}},\"isGovernor()\":{\"details\":\"Returns true if the caller is the current Governor.\"},\"transferGovernance(address)\":{\"details\":\"Transfers Governance of the contract to a new account (`newGovernor`). Can only be called by the current Governor. Must be claimed for this to complete\",\"params\":{\"_newGovernor\":\"Address of the new Governor\"}},\"upgradeTo(address)\":{\"details\":\"Upgrade the backing implementation of the proxy. Only the admin can call this function.\",\"params\":{\"newImplementation\":\"Address of the new implementation.\"}},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the backing implementation of the proxy and call a function on the new implementation. This is useful to initialize the proxied contract.\",\"params\":{\"data\":\"Data to send as msg.data in the low level call. It should include the signature and the parameters of the function to be called, as described in https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding.\",\"newImplementation\":\"Address of the new implementation.\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"OETHDripperProxy delegates calls to a OETHDripper implementation\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/proxies/Proxies.sol\":\"OETHDripperProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n assembly {\\n size := extcodesize(account)\\n }\\n return size > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x51b758a8815ecc9596c66c37d56b1d33883a444631a3f916b9fe65cb863ef7c4\",\"license\":\"MIT\"},\"contracts/governance/Governable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title OUSD Governable Contract\\n * @dev Copy of the openzeppelin Ownable.sol contract with nomenclature change\\n * from owner to governor and renounce methods removed. Does not use\\n * Context.sol like Ownable.sol does for simplification.\\n * @author Origin Protocol Inc\\n */\\ncontract Governable {\\n // Storage position of the owner and pendingOwner of the contract\\n // keccak256(\\\"OUSD.governor\\\");\\n bytes32 private constant governorPosition =\\n 0x7bea13895fa79d2831e0a9e28edede30099005a50d652d8957cf8a607ee6ca4a;\\n\\n // keccak256(\\\"OUSD.pending.governor\\\");\\n bytes32 private constant pendingGovernorPosition =\\n 0x44c4d30b2eaad5130ad70c3ba6972730566f3e6359ab83e800d905c61b1c51db;\\n\\n // keccak256(\\\"OUSD.reentry.status\\\");\\n bytes32 private constant reentryStatusPosition =\\n 0x53bf423e48ed90e97d02ab0ebab13b2a235a6bfbe9c321847d5c175333ac4535;\\n\\n // See OpenZeppelin ReentrancyGuard implementation\\n uint256 constant _NOT_ENTERED = 1;\\n uint256 constant _ENTERED = 2;\\n\\n event PendingGovernorshipTransfer(\\n address indexed previousGovernor,\\n address indexed newGovernor\\n );\\n\\n event GovernorshipTransferred(\\n address indexed previousGovernor,\\n address indexed newGovernor\\n );\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial Governor.\\n */\\n constructor() {\\n _setGovernor(msg.sender);\\n emit GovernorshipTransferred(address(0), _governor());\\n }\\n\\n /**\\n * @dev Returns the address of the current Governor.\\n */\\n function governor() public view returns (address) {\\n return _governor();\\n }\\n\\n /**\\n * @dev Returns the address of the current Governor.\\n */\\n function _governor() internal view returns (address governorOut) {\\n bytes32 position = governorPosition;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n governorOut := sload(position)\\n }\\n }\\n\\n /**\\n * @dev Returns the address of the pending Governor.\\n */\\n function _pendingGovernor()\\n internal\\n view\\n returns (address pendingGovernor)\\n {\\n bytes32 position = pendingGovernorPosition;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n pendingGovernor := sload(position)\\n }\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the Governor.\\n */\\n modifier onlyGovernor() {\\n require(isGovernor(), \\\"Caller is not the Governor\\\");\\n _;\\n }\\n\\n /**\\n * @dev Returns true if the caller is the current Governor.\\n */\\n function isGovernor() public view returns (bool) {\\n return msg.sender == _governor();\\n }\\n\\n function _setGovernor(address newGovernor) internal {\\n bytes32 position = governorPosition;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(position, newGovernor)\\n }\\n }\\n\\n /**\\n * @dev Prevents a contract from calling itself, directly or indirectly.\\n * Calling a `nonReentrant` function from another `nonReentrant`\\n * function is not supported. It is possible to prevent this from happening\\n * by making the `nonReentrant` function external, and make it call a\\n * `private` function that does the actual work.\\n */\\n modifier nonReentrant() {\\n bytes32 position = reentryStatusPosition;\\n uint256 _reentry_status;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n _reentry_status := sload(position)\\n }\\n\\n // On the first call to nonReentrant, _notEntered will be true\\n require(_reentry_status != _ENTERED, \\\"Reentrant call\\\");\\n\\n // Any calls to nonReentrant after this point will fail\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(position, _ENTERED)\\n }\\n\\n _;\\n\\n // By storing the original value once again, a refund is triggered (see\\n // https://eips.ethereum.org/EIPS/eip-2200)\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(position, _NOT_ENTERED)\\n }\\n }\\n\\n function _setPendingGovernor(address newGovernor) internal {\\n bytes32 position = pendingGovernorPosition;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(position, newGovernor)\\n }\\n }\\n\\n /**\\n * @dev Transfers Governance of the contract to a new account (`newGovernor`).\\n * Can only be called by the current Governor. Must be claimed for this to complete\\n * @param _newGovernor Address of the new Governor\\n */\\n function transferGovernance(address _newGovernor) external onlyGovernor {\\n _setPendingGovernor(_newGovernor);\\n emit PendingGovernorshipTransfer(_governor(), _newGovernor);\\n }\\n\\n /**\\n * @dev Claim Governance of the contract to a new account (`newGovernor`).\\n * Can only be called by the new Governor.\\n */\\n function claimGovernance() external {\\n require(\\n msg.sender == _pendingGovernor(),\\n \\\"Only the pending Governor can complete the claim\\\"\\n );\\n _changeGovernor(msg.sender);\\n }\\n\\n /**\\n * @dev Change Governance of the contract to a new account (`newGovernor`).\\n * @param _newGovernor Address of the new Governor\\n */\\n function _changeGovernor(address _newGovernor) internal {\\n require(_newGovernor != address(0), \\\"New Governor is address(0)\\\");\\n emit GovernorshipTransferred(_governor(), _newGovernor);\\n _setGovernor(_newGovernor);\\n }\\n}\\n\",\"keccak256\":\"0x1b2af4d111ebd49acdbdfb4817b90bff752a453576d4e0b03dd5e5954f236c1b\",\"license\":\"MIT\"},\"contracts/proxies/InitializeGovernedUpgradeabilityProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { Address } from \\\"@openzeppelin/contracts/utils/Address.sol\\\";\\n\\nimport { Governable } from \\\"../governance/Governable.sol\\\";\\n\\n/**\\n * @title BaseGovernedUpgradeabilityProxy\\n * @dev This contract combines an upgradeability proxy with our governor system.\\n * It is based on an older version of OpenZeppelins BaseUpgradeabilityProxy\\n * with Solidity ^0.8.0.\\n * @author Origin Protocol Inc\\n */\\ncontract InitializeGovernedUpgradeabilityProxy is Governable {\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n * @param implementation Address of the new implementation.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Contract initializer with Governor enforcement\\n * @param _logic Address of the initial implementation.\\n * @param _initGovernor Address of the initial Governor.\\n * @param _data Data to send as msg.data to the implementation to initialize\\n * the proxied contract.\\n * It should include the signature and the parameters of the function to be\\n * called, as described in\\n * https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding.\\n * This parameter is optional, if no data is given the initialization call\\n * to proxied contract will be skipped.\\n */\\n function initialize(\\n address _logic,\\n address _initGovernor,\\n bytes memory _data\\n ) public payable onlyGovernor {\\n require(_implementation() == address(0));\\n assert(\\n IMPLEMENTATION_SLOT ==\\n bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1)\\n );\\n _changeGovernor(_initGovernor);\\n _setImplementation(_logic);\\n if (_data.length > 0) {\\n (bool success, ) = _logic.delegatecall(_data);\\n require(success);\\n }\\n }\\n\\n /**\\n * @return The address of the proxy admin/it's also the governor.\\n */\\n function admin() external view returns (address) {\\n return _governor();\\n }\\n\\n /**\\n * @return The address of the implementation.\\n */\\n function implementation() external view returns (address) {\\n return _implementation();\\n }\\n\\n /**\\n * @dev Upgrade the backing implementation of the proxy.\\n * Only the admin can call this function.\\n * @param newImplementation Address of the new implementation.\\n */\\n function upgradeTo(address newImplementation) external onlyGovernor {\\n _upgradeTo(newImplementation);\\n }\\n\\n /**\\n * @dev Upgrade the backing implementation of the proxy and call a function\\n * on the new implementation.\\n * This is useful to initialize the proxied contract.\\n * @param newImplementation Address of the new implementation.\\n * @param data Data to send as msg.data in the low level call.\\n * It should include the signature and the parameters of the function to be called, as described in\\n * https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data)\\n external\\n payable\\n onlyGovernor\\n {\\n _upgradeTo(newImplementation);\\n (bool success, ) = newImplementation.delegatecall(data);\\n require(success);\\n }\\n\\n /**\\n * @dev Fallback function.\\n * Implemented entirely in `_fallback`.\\n */\\n fallback() external payable {\\n _fallback();\\n }\\n\\n /**\\n * @dev Delegates execution to an implementation contract.\\n * This is a low level function that doesn't return to its internal call site.\\n * It will return to the external caller whatever the implementation returns.\\n * @param _impl Address to delegate.\\n */\\n function _delegate(address _impl) internal {\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), _impl, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev Function that is run as the first thing in the fallback function.\\n * Can be redefined in derived contracts to add functionality.\\n * Redefinitions must call super._willFallback().\\n */\\n function _willFallback() internal {}\\n\\n /**\\n * @dev fallback implementation.\\n * Extracted to enable manual triggering.\\n */\\n function _fallback() internal {\\n _willFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant IMPLEMENTATION_SLOT =\\n 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Returns the current implementation.\\n * @return impl Address of the current implementation\\n */\\n function _implementation() internal view returns (address impl) {\\n bytes32 slot = IMPLEMENTATION_SLOT;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n impl := sload(slot)\\n }\\n }\\n\\n /**\\n * @dev Upgrades the proxy to a new implementation.\\n * @param newImplementation Address of the new implementation.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Sets the implementation address of the proxy.\\n * @param newImplementation Address of the new implementation.\\n */\\n function _setImplementation(address newImplementation) internal {\\n require(\\n Address.isContract(newImplementation),\\n \\\"Cannot set a proxy implementation to a non-contract address\\\"\\n );\\n\\n bytes32 slot = IMPLEMENTATION_SLOT;\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(slot, newImplementation)\\n }\\n }\\n}\\n\",\"keccak256\":\"0xc5a7922350e0d94b54cf70c0a9971bdf11dfc9aa61cd7b5ed027a6670151d852\",\"license\":\"MIT\"},\"contracts/proxies/Proxies.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { InitializeGovernedUpgradeabilityProxy } from \\\"./InitializeGovernedUpgradeabilityProxy.sol\\\";\\n\\n/**\\n * @notice OUSDProxy delegates calls to an OUSD implementation\\n */\\ncontract OUSDProxy is InitializeGovernedUpgradeabilityProxy {\\n\\n}\\n\\n/**\\n * @notice WrappedOUSDProxy delegates calls to a WrappedOUSD implementation\\n */\\ncontract WrappedOUSDProxy is InitializeGovernedUpgradeabilityProxy {\\n\\n}\\n\\n/**\\n * @notice VaultProxy delegates calls to a Vault implementation\\n */\\ncontract VaultProxy is InitializeGovernedUpgradeabilityProxy {\\n\\n}\\n\\n/**\\n * @notice CompoundStrategyProxy delegates calls to a CompoundStrategy implementation\\n */\\ncontract CompoundStrategyProxy is InitializeGovernedUpgradeabilityProxy {\\n\\n}\\n\\n/**\\n * @notice AaveStrategyProxy delegates calls to a AaveStrategy implementation\\n */\\ncontract AaveStrategyProxy is InitializeGovernedUpgradeabilityProxy {\\n\\n}\\n\\n/**\\n * @notice ThreePoolStrategyProxy delegates calls to a ThreePoolStrategy implementation\\n */\\ncontract ThreePoolStrategyProxy is InitializeGovernedUpgradeabilityProxy {\\n\\n}\\n\\n/**\\n * @notice ConvexStrategyProxy delegates calls to a ConvexStrategy implementation\\n */\\ncontract ConvexStrategyProxy is InitializeGovernedUpgradeabilityProxy {\\n\\n}\\n\\n/**\\n * @notice HarvesterProxy delegates calls to a Harvester implementation\\n */\\ncontract HarvesterProxy is InitializeGovernedUpgradeabilityProxy {\\n\\n}\\n\\n/**\\n * @notice DripperProxy delegates calls to a Dripper implementation\\n */\\ncontract DripperProxy is InitializeGovernedUpgradeabilityProxy {\\n\\n}\\n\\n/**\\n * @notice MorphoCompoundStrategyProxy delegates calls to a MorphoCompoundStrategy implementation\\n */\\ncontract MorphoCompoundStrategyProxy is InitializeGovernedUpgradeabilityProxy {\\n\\n}\\n\\n/**\\n * @notice ConvexOUSDMetaStrategyProxy delegates calls to a ConvexOUSDMetaStrategy implementation\\n */\\ncontract ConvexOUSDMetaStrategyProxy is InitializeGovernedUpgradeabilityProxy {\\n\\n}\\n\\n/**\\n * @notice ConvexLUSDMetaStrategyProxy delegates calls to a ConvexalGeneralizedMetaStrategy implementation\\n */\\ncontract ConvexLUSDMetaStrategyProxy is InitializeGovernedUpgradeabilityProxy {\\n\\n}\\n\\n/**\\n * @notice MorphoAaveStrategyProxy delegates calls to a MorphoCompoundStrategy implementation\\n */\\ncontract MorphoAaveStrategyProxy is InitializeGovernedUpgradeabilityProxy {\\n\\n}\\n\\n/**\\n * @notice OETHProxy delegates calls to nowhere for now\\n */\\ncontract OETHProxy is InitializeGovernedUpgradeabilityProxy {\\n\\n}\\n\\n/**\\n * @notice WOETHProxy delegates calls to nowhere for now\\n */\\ncontract WOETHProxy is InitializeGovernedUpgradeabilityProxy {\\n\\n}\\n\\n/**\\n * @notice OETHVaultProxy delegates calls to a Vault implementation\\n */\\ncontract OETHVaultProxy is InitializeGovernedUpgradeabilityProxy {\\n\\n}\\n\\n/**\\n * @notice OETHDripperProxy delegates calls to a OETHDripper implementation\\n */\\ncontract OETHDripperProxy is InitializeGovernedUpgradeabilityProxy {\\n\\n}\\n\\n/**\\n * @notice FraxETHStrategyProxy delegates calls to a FraxETHStrategy implementation\\n */\\ncontract FraxETHStrategyProxy is InitializeGovernedUpgradeabilityProxy {\\n\\n}\\n\",\"keccak256\":\"0x57d0526966c94a04e60d4fe2f0f15e83e0a6a9055ccf1753e762961bae9af642\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b50610027336000805160206109ed83398151915255565b6000805160206109ed833981519152546040516001600160a01b03909116906000907fc7c0c772add429241571afb3805861fb3cfa2af374534088b76cdb4325a87e9a908290a36109708061007d6000396000f3fe6080604052600436106100865760003560e01c80635d36b190116100595780635d36b1901461010a578063c7af33521461011f578063cf7a1d7714610144578063d38bfff414610157578063f851a4401461009057610086565b80630c340a24146100905780633659cfe6146100c25780634f1ef286146100e25780635c60da1b146100f5575b61008e610177565b005b34801561009c57600080fd5b506100a5610197565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156100ce57600080fd5b5061008e6100dd3660046106b0565b6101b4565b61008e6100f03660046107a4565b6101ed565b34801561010157600080fd5b506100a561028a565b34801561011657600080fd5b5061008e6102a2565b34801561012b57600080fd5b50610134610346565b60405190151581526020016100b9565b61008e6101523660046106d2565b610377565b34801561016357600080fd5b5061008e6101723660046106b0565b610445565b6101956101906000805160206108fb8339815191525490565b6104e9565b565b60006101af60008051602061091b8339815191525490565b905090565b6101bc610346565b6101e15760405162461bcd60e51b81526004016101d890610872565b60405180910390fd5b6101ea8161050d565b50565b6101f5610346565b6102115760405162461bcd60e51b81526004016101d890610872565b61021a8361050d565b6000836001600160a01b03168383604051610236929190610827565b600060405180830381855af49150503d8060008114610271576040519150601f19603f3d011682016040523d82523d6000602084013e610276565b606091505b505090508061028457600080fd5b50505050565b60006101af6000805160206108fb8339815191525490565b7f44c4d30b2eaad5130ad70c3ba6972730566f3e6359ab83e800d905c61b1c51db546001600160a01b0316336001600160a01b03161461033d5760405162461bcd60e51b815260206004820152603060248201527f4f6e6c79207468652070656e64696e6720476f7665726e6f722063616e20636f60448201526f6d706c6574652074686520636c61696d60801b60648201526084016101d8565b6101953361054d565b600061035e60008051602061091b8339815191525490565b6001600160a01b0316336001600160a01b031614905090565b61037f610346565b61039b5760405162461bcd60e51b81526004016101d890610872565b60006103b36000805160206108fb8339815191525490565b6001600160a01b0316146103c657600080fd5b6103f160017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd6108a9565b6000805160206108fb8339815191521461040d5761040d6108ce565b6104168261054d565b61041f8361060e565b805115610440576000836001600160a01b0316826040516102369190610837565b505050565b61044d610346565b6104695760405162461bcd60e51b81526004016101d890610872565b610491817f44c4d30b2eaad5130ad70c3ba6972730566f3e6359ab83e800d905c61b1c51db55565b806001600160a01b03166104b160008051602061091b8339815191525490565b6001600160a01b03167fa39cc5eb22d0f34d8beaefee8a3f17cc229c1a1d1ef87a5ad47313487b1c4f0d60405160405180910390a350565b3660008037600080366000845af43d6000803e808015610508573d6000f35b3d6000fd5b6105168161060e565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105a35760405162461bcd60e51b815260206004820152601a60248201527f4e657720476f7665726e6f72206973206164647265737328302900000000000060448201526064016101d8565b806001600160a01b03166105c360008051602061091b8339815191525490565b6001600160a01b03167fc7c0c772add429241571afb3805861fb3cfa2af374534088b76cdb4325a87e9a60405160405180910390a36101ea8160008051602061091b83398151915255565b803b6106825760405162461bcd60e51b815260206004820152603b60248201527f43616e6e6f742073657420612070726f787920696d706c656d656e746174696f60448201527f6e20746f2061206e6f6e2d636f6e74726163742061646472657373000000000060648201526084016101d8565b6000805160206108fb83398151915255565b80356001600160a01b03811681146106ab57600080fd5b919050565b6000602082840312156106c257600080fd5b6106cb82610694565b9392505050565b6000806000606084860312156106e757600080fd5b6106f084610694565b92506106fe60208501610694565b9150604084013567ffffffffffffffff8082111561071b57600080fd5b818601915086601f83011261072f57600080fd5b813581811115610741576107416108e4565b604051601f8201601f19908116603f01168101908382118183101715610769576107696108e4565b8160405282815289602084870101111561078257600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6000806000604084860312156107b957600080fd5b6107c284610694565b9250602084013567ffffffffffffffff808211156107df57600080fd5b818601915086601f8301126107f357600080fd5b81358181111561080257600080fd5b87602082850101111561081457600080fd5b6020830194508093505050509250925092565b8183823760009101908152919050565b6000825160005b81811015610858576020818601810151858301520161083e565b81811115610867576000828501525b509190910192915050565b6020808252601a908201527f43616c6c6572206973206e6f742074686520476f7665726e6f72000000000000604082015260600190565b6000828210156108c957634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b634e487b7160e01b600052604160045260246000fdfe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc7bea13895fa79d2831e0a9e28edede30099005a50d652d8957cf8a607ee6ca4aa264697066735822122081694d3c77de5fe7cb1ff5c5211f05fefa37d7abb916a77671dd14f803d50a3564736f6c634300080700337bea13895fa79d2831e0a9e28edede30099005a50d652d8957cf8a607ee6ca4a", - "deployedBytecode": "0x6080604052600436106100865760003560e01c80635d36b190116100595780635d36b1901461010a578063c7af33521461011f578063cf7a1d7714610144578063d38bfff414610157578063f851a4401461009057610086565b80630c340a24146100905780633659cfe6146100c25780634f1ef286146100e25780635c60da1b146100f5575b61008e610177565b005b34801561009c57600080fd5b506100a5610197565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156100ce57600080fd5b5061008e6100dd3660046106b0565b6101b4565b61008e6100f03660046107a4565b6101ed565b34801561010157600080fd5b506100a561028a565b34801561011657600080fd5b5061008e6102a2565b34801561012b57600080fd5b50610134610346565b60405190151581526020016100b9565b61008e6101523660046106d2565b610377565b34801561016357600080fd5b5061008e6101723660046106b0565b610445565b6101956101906000805160206108fb8339815191525490565b6104e9565b565b60006101af60008051602061091b8339815191525490565b905090565b6101bc610346565b6101e15760405162461bcd60e51b81526004016101d890610872565b60405180910390fd5b6101ea8161050d565b50565b6101f5610346565b6102115760405162461bcd60e51b81526004016101d890610872565b61021a8361050d565b6000836001600160a01b03168383604051610236929190610827565b600060405180830381855af49150503d8060008114610271576040519150601f19603f3d011682016040523d82523d6000602084013e610276565b606091505b505090508061028457600080fd5b50505050565b60006101af6000805160206108fb8339815191525490565b7f44c4d30b2eaad5130ad70c3ba6972730566f3e6359ab83e800d905c61b1c51db546001600160a01b0316336001600160a01b03161461033d5760405162461bcd60e51b815260206004820152603060248201527f4f6e6c79207468652070656e64696e6720476f7665726e6f722063616e20636f60448201526f6d706c6574652074686520636c61696d60801b60648201526084016101d8565b6101953361054d565b600061035e60008051602061091b8339815191525490565b6001600160a01b0316336001600160a01b031614905090565b61037f610346565b61039b5760405162461bcd60e51b81526004016101d890610872565b60006103b36000805160206108fb8339815191525490565b6001600160a01b0316146103c657600080fd5b6103f160017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd6108a9565b6000805160206108fb8339815191521461040d5761040d6108ce565b6104168261054d565b61041f8361060e565b805115610440576000836001600160a01b0316826040516102369190610837565b505050565b61044d610346565b6104695760405162461bcd60e51b81526004016101d890610872565b610491817f44c4d30b2eaad5130ad70c3ba6972730566f3e6359ab83e800d905c61b1c51db55565b806001600160a01b03166104b160008051602061091b8339815191525490565b6001600160a01b03167fa39cc5eb22d0f34d8beaefee8a3f17cc229c1a1d1ef87a5ad47313487b1c4f0d60405160405180910390a350565b3660008037600080366000845af43d6000803e808015610508573d6000f35b3d6000fd5b6105168161060e565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105a35760405162461bcd60e51b815260206004820152601a60248201527f4e657720476f7665726e6f72206973206164647265737328302900000000000060448201526064016101d8565b806001600160a01b03166105c360008051602061091b8339815191525490565b6001600160a01b03167fc7c0c772add429241571afb3805861fb3cfa2af374534088b76cdb4325a87e9a60405160405180910390a36101ea8160008051602061091b83398151915255565b803b6106825760405162461bcd60e51b815260206004820152603b60248201527f43616e6e6f742073657420612070726f787920696d706c656d656e746174696f60448201527f6e20746f2061206e6f6e2d636f6e74726163742061646472657373000000000060648201526084016101d8565b6000805160206108fb83398151915255565b80356001600160a01b03811681146106ab57600080fd5b919050565b6000602082840312156106c257600080fd5b6106cb82610694565b9392505050565b6000806000606084860312156106e757600080fd5b6106f084610694565b92506106fe60208501610694565b9150604084013567ffffffffffffffff8082111561071b57600080fd5b818601915086601f83011261072f57600080fd5b813581811115610741576107416108e4565b604051601f8201601f19908116603f01168101908382118183101715610769576107696108e4565b8160405282815289602084870101111561078257600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6000806000604084860312156107b957600080fd5b6107c284610694565b9250602084013567ffffffffffffffff808211156107df57600080fd5b818601915086601f8301126107f357600080fd5b81358181111561080257600080fd5b87602082850101111561081457600080fd5b6020830194508093505050509250925092565b8183823760009101908152919050565b6000825160005b81811015610858576020818601810151858301520161083e565b81811115610867576000828501525b509190910192915050565b6020808252601a908201527f43616c6c6572206973206e6f742074686520476f7665726e6f72000000000000604082015260600190565b6000828210156108c957634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b634e487b7160e01b600052604160045260246000fdfe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc7bea13895fa79d2831e0a9e28edede30099005a50d652d8957cf8a607ee6ca4aa264697066735822122081694d3c77de5fe7cb1ff5c5211f05fefa37d7abb916a77671dd14f803d50a3564736f6c63430008070033", - "devdoc": { - "kind": "dev", - "methods": { - "admin()": { - "returns": { - "_0": "The address of the proxy admin/it's also the governor." - } - }, - "claimGovernance()": { - "details": "Claim Governance of the contract to a new account (`newGovernor`). Can only be called by the new Governor." - }, - "governor()": { - "details": "Returns the address of the current Governor." - }, - "implementation()": { - "returns": { - "_0": "The address of the implementation." - } - }, - "initialize(address,address,bytes)": { - "details": "Contract initializer with Governor enforcement", - "params": { - "_data": "Data to send as msg.data to the implementation to initialize the proxied contract. It should include the signature and the parameters of the function to be called, as described in https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding. This parameter is optional, if no data is given the initialization call to proxied contract will be skipped.", - "_initGovernor": "Address of the initial Governor.", - "_logic": "Address of the initial implementation." - } - }, - "isGovernor()": { - "details": "Returns true if the caller is the current Governor." - }, - "transferGovernance(address)": { - "details": "Transfers Governance of the contract to a new account (`newGovernor`). Can only be called by the current Governor. Must be claimed for this to complete", - "params": { - "_newGovernor": "Address of the new Governor" - } - }, - "upgradeTo(address)": { - "details": "Upgrade the backing implementation of the proxy. Only the admin can call this function.", - "params": { - "newImplementation": "Address of the new implementation." - } - }, - "upgradeToAndCall(address,bytes)": { - "details": "Upgrade the backing implementation of the proxy and call a function on the new implementation. This is useful to initialize the proxied contract.", - "params": { - "data": "Data to send as msg.data in the low level call. It should include the signature and the parameters of the function to be called, as described in https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding.", - "newImplementation": "Address of the new implementation." - } - } - }, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "notice": "OETHDripperProxy delegates calls to a OETHDripper implementation", - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} \ No newline at end of file diff --git a/contracts/tasks/actions/otoken-ousd-oeth-rebase.ts b/contracts/tasks/actions/otoken-ousd-oeth-rebase.ts index 95b62d25f4..9ae5ecedb0 100644 --- a/contracts/tasks/actions/otoken-ousd-oeth-rebase.ts +++ b/contracts/tasks/actions/otoken-ousd-oeth-rebase.ts @@ -1,15 +1,7 @@ -import { ethers } from "ethers"; +import { ethers } from "hardhat"; import { action } from "../lib/action"; -const OETH_DRIPPER = "0xe3B3b4Fc77505EcfAACf6dD21619a8Cc12fcc501"; -const OUSD_VAULT = "0xe75d77b1865ae93c7eaa3040b038d7aa7bc02f70"; - -const abi = [ - "function rebase() external", - "function collectAndRebase() external", -]; - const GAS_MULTIPLIER = 1.1; action({ @@ -18,14 +10,22 @@ action({ "Rebase both OETH (collectAndRebase) and OUSD (rebase) on mainnet", chains: [1], run: async ({ signer, log }) => { - const oethDripper = new ethers.Contract(OETH_DRIPPER, abi, signer); - const ousdVault = new ethers.Contract(OUSD_VAULT, abi, signer); + const oethDripperProxy = await ethers.getContract("OETHFixedRateDripperProxy"); + const vaultProxy = await ethers.getContract("VaultProxy"); + const oethDripper = await ethers.getContractAt( + "IDripper", + oethDripperProxy.address + ); + const ousdVault = await ethers.getContractAt("IVault", vaultProxy.address); + + const oethDripperWithSigner = oethDripper.connect(signer); + const ousdVaultWithSigner = ousdVault.connect(signer); // OETH collectAndRebase with gas estimation + 10% buffer log.info("Estimating gas for OETH collectAndRebase"); - const oethGas = await oethDripper.estimateGas.collectAndRebase(); + const oethGas = await oethDripperWithSigner.estimateGas.collectAndRebase(); const oethGasLimit = oethGas.mul(Math.floor(GAS_MULTIPLIER * 100)).div(100); - const oethTx = await oethDripper.collectAndRebase({ + const oethTx = await oethDripperWithSigner.collectAndRebase({ gasLimit: oethGasLimit, }); log.info( @@ -35,9 +35,9 @@ action({ // OUSD rebase with gas estimation + 10% buffer log.info("Estimating gas for OUSD rebase"); - const ousdGas = await ousdVault.estimateGas.rebase(); + const ousdGas = await ousdVaultWithSigner.estimateGas.rebase(); const ousdGasLimit = ousdGas.mul(Math.floor(GAS_MULTIPLIER * 100)).div(100); - const ousdTx = await ousdVault.rebase({ gasLimit: ousdGasLimit }); + const ousdTx = await ousdVaultWithSigner.rebase({ gasLimit: ousdGasLimit }); log.info(`OUSD rebase tx: ${ousdTx.hash} (gasLimit: ${ousdGasLimit})`); await ousdTx.wait(); }, From 2bd9eca8ff4d31bd64a66ede3d91aec6bdfec58e Mon Sep 17 00:00:00 2001 From: Domen Grabec Date: Tue, 7 Apr 2026 11:22:04 +0200 Subject: [PATCH 33/62] convert the first action into hardhat and add Skills file --- contracts/tasks/actions/SKILL.md | 6 ++++++ contracts/tasks/actions/otoken-ousd-oeth-rebase.ts | 3 +-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/contracts/tasks/actions/SKILL.md b/contracts/tasks/actions/SKILL.md index 3be6449161..702ae38553 100644 --- a/contracts/tasks/actions/SKILL.md +++ b/contracts/tasks/actions/SKILL.md @@ -11,6 +11,12 @@ description: Use this skill when migrating cron actions in contracts/tasks/actio - Replacing raw calldata + `signer.sendTransaction` patterns - Standardizing actions on Hardhat deployments + ethers `Contract` calls +## Naming Conventions + +- Action task `name` values should stay `kebab-case` (dash-separated), e.g. `otoken-ousd-oeth-rebase`. +- Variables, functions, and local identifiers should use `camelCase`. +- Contract/deployment names passed to `ethers.getContract("")` should use the existing deployment name casing (usually `PascalCase` with suffixes like `Proxy`). + ## Target State - Keep the `action({ ... })` wrapper and chain restrictions. diff --git a/contracts/tasks/actions/otoken-ousd-oeth-rebase.ts b/contracts/tasks/actions/otoken-ousd-oeth-rebase.ts index 9ae5ecedb0..68c68096f4 100644 --- a/contracts/tasks/actions/otoken-ousd-oeth-rebase.ts +++ b/contracts/tasks/actions/otoken-ousd-oeth-rebase.ts @@ -1,5 +1,3 @@ -import { ethers } from "hardhat"; - import { action } from "../lib/action"; const GAS_MULTIPLIER = 1.1; @@ -10,6 +8,7 @@ action({ "Rebase both OETH (collectAndRebase) and OUSD (rebase) on mainnet", chains: [1], run: async ({ signer, log }) => { + const ethers = hre.ethers; const oethDripperProxy = await ethers.getContract("OETHFixedRateDripperProxy"); const vaultProxy = await ethers.getContract("VaultProxy"); const oethDripper = await ethers.getContractAt( From 0bf7b24821e28b93f22ff402479246226ccb4a6b Mon Sep 17 00:00:00 2001 From: Domen Grabec Date: Tue, 7 Apr 2026 11:30:20 +0200 Subject: [PATCH 34/62] from kebab case to camel case --- contracts/cron/cron-jobs.ts | 23 +++++++++---------- contracts/tasks/actions/SKILL.md | 2 +- ...base.ts => crossChainBalanceUpdateBase.ts} | 2 +- ....ts => crossChainBalanceUpdateHyperevm.ts} | 2 +- ...ewards.ts => ognClaimAndForwardRewards.ts} | 2 +- ...oethb-harvest.ts => otokenOethbHarvest.ts} | 2 +- ...n-oethb-rebase.ts => otokenOethbRebase.ts} | 2 +- ...rice.ts => otokenOethbUpdateWoethPrice.ts} | 2 +- ...otokenOethpAddWithdrawalQueueLiquidity.ts} | 2 +- ...elease.ts => otokenOsCollectAndRelease.ts} | 2 +- ...ards.ts => otokenOsSonicRestakeRewards.ts} | 2 +- ...hdrawal.ts => otokenOusdAutoWithdrawal.ts} | 2 +- ...oeth-rebase.ts => otokenOusdOethRebase.ts} | 6 +++-- 13 files changed, 26 insertions(+), 25 deletions(-) rename contracts/tasks/actions/{crossChainBalanceUpdate-base.ts => crossChainBalanceUpdateBase.ts} (94%) rename contracts/tasks/actions/{crossChainBalanceUpdate-hyperevm.ts => crossChainBalanceUpdateHyperevm.ts} (93%) rename contracts/tasks/actions/{ogn-claimAndForwardRewards.ts => ognClaimAndForwardRewards.ts} (96%) rename contracts/tasks/actions/{otoken-oethb-harvest.ts => otokenOethbHarvest.ts} (96%) rename contracts/tasks/actions/{otoken-oethb-rebase.ts => otokenOethbRebase.ts} (94%) rename contracts/tasks/actions/{otoken-oethb-updateWoethPrice.ts => otokenOethbUpdateWoethPrice.ts} (93%) rename contracts/tasks/actions/{otoken-oethp-addWithdrawalQueueLiquidity.ts => otokenOethpAddWithdrawalQueueLiquidity.ts} (92%) rename contracts/tasks/actions/{otoken-os-collectAndRelease.ts => otokenOsCollectAndRelease.ts} (96%) rename contracts/tasks/actions/{otoken-os-sonicRestakeRewards.ts => otokenOsSonicRestakeRewards.ts} (95%) rename contracts/tasks/actions/{otoken-ousd-autoWithdrawal.ts => otokenOusdAutoWithdrawal.ts} (93%) rename contracts/tasks/actions/{otoken-ousd-oeth-rebase.ts => otokenOusdOethRebase.ts} (92%) diff --git a/contracts/cron/cron-jobs.ts b/contracts/cron/cron-jobs.ts index f3c5a81970..51334a151b 100644 --- a/contracts/cron/cron-jobs.ts +++ b/contracts/cron/cron-jobs.ts @@ -129,74 +129,73 @@ export const cronJobs: CronJob[] = [ schedule: "50 23 * * *", enabled: false, command: - "cd /app && pnpm hardhat otoken-os-collectAndRelease --network sonic", + "cd /app && pnpm hardhat otokenOsCollectAndRelease --network sonic", }, { name: "otoken_ousd_autoWithdrawal", schedule: "40 11,23 * * *", enabled: false, command: - "cd /app && pnpm hardhat otoken-ousd-autoWithdrawal --network mainnet", + "cd /app && pnpm hardhat otokenOusdAutoWithdrawal --network mainnet", }, { name: "otoken_oethb_updateWoethPrice", schedule: "10 21 * * *", enabled: false, command: - "cd /app && pnpm hardhat otoken-oethb-updateWoethPrice --network mainnet", + "cd /app && pnpm hardhat otokenOethbUpdateWoethPrice --network mainnet", }, { name: "otoken_oethp_addWithdrawalQueueLiquidity", schedule: "5 0 * * *", enabled: false, command: - "cd /app && pnpm hardhat otoken-oethp-addWithdrawalQueueLiquidity --network mainnet", + "cd /app && pnpm hardhat otokenOethpAddWithdrawalQueueLiquidity --network mainnet", }, { name: "otoken_oethb_rebase", schedule: "25 9,21 * * *", enabled: false, - command: "cd /app && pnpm hardhat otoken-oethb-rebase --network base", + command: "cd /app && pnpm hardhat otokenOethbRebase --network base", }, { name: "otoken_os_sonicRestakeRewards", schedule: "55 23 * * *", enabled: false, command: - "cd /app && pnpm hardhat otoken-os-sonicRestakeRewards --network sonic", + "cd /app && pnpm hardhat otokenOsSonicRestakeRewards --network sonic", }, { name: "crossChainBalanceUpdate-base", schedule: "15 7,15,23 * * *", enabled: false, command: - "cd /app && pnpm hardhat crossChainBalanceUpdate-base --network base", + "cd /app && pnpm hardhat crossChainBalanceUpdateBase --network base", }, { name: "crossChainBalanceUpdate-hyperevm", schedule: "15 7,15,23 * * *", enabled: false, command: - "cd /app && pnpm hardhat hyperevm-crossChainBalanceUpdate --network hyperevm", + "cd /app && pnpm hardhat crossChainBalanceUpdateHyperevm --network hyperevm", }, { name: "otoken_ousd_oeth_rebase", schedule: "50 11,23 * * *", enabled: false, - command: - "cd /app && pnpm hardhat otoken_ousd_oeth_rebase --network mainnet", + command: "cd /app && pnpm hardhat otokenOusdOethRebase --network mainnet", }, { name: "ogn_claimAndForwardRewards", schedule: "0 0 * * 2", enabled: false, command: - "cd /app && pnpm hardhat ogn-claimAndForwardRewards --network mainnet", + "cd /app && pnpm hardhat ognClaimAndForwardRewards --network mainnet", }, { name: "otoken_oethb_harvest", schedule: "50 11 * * *", enabled: false, - command: "cd /app && pnpm hardhat otoken-oethb-harvest --network base", + command: "cd /app && pnpm hardhat otokenOethbHarvest --network base", }, ]; diff --git a/contracts/tasks/actions/SKILL.md b/contracts/tasks/actions/SKILL.md index 702ae38553..06bcf6de5c 100644 --- a/contracts/tasks/actions/SKILL.md +++ b/contracts/tasks/actions/SKILL.md @@ -13,7 +13,7 @@ description: Use this skill when migrating cron actions in contracts/tasks/actio ## Naming Conventions -- Action task `name` values should stay `kebab-case` (dash-separated), e.g. `otoken-ousd-oeth-rebase`. +- Action task `name` values should be `camelCase` and match the action filename (without `.ts`), e.g. `otokenOusdOethRebase`. - Variables, functions, and local identifiers should use `camelCase`. - Contract/deployment names passed to `ethers.getContract("")` should use the existing deployment name casing (usually `PascalCase` with suffixes like `Proxy`). diff --git a/contracts/tasks/actions/crossChainBalanceUpdate-base.ts b/contracts/tasks/actions/crossChainBalanceUpdateBase.ts similarity index 94% rename from contracts/tasks/actions/crossChainBalanceUpdate-base.ts rename to contracts/tasks/actions/crossChainBalanceUpdateBase.ts index ac25d9da84..959b7c660e 100644 --- a/contracts/tasks/actions/crossChainBalanceUpdate-base.ts +++ b/contracts/tasks/actions/crossChainBalanceUpdateBase.ts @@ -6,7 +6,7 @@ const CROSS_CHAIN_CONTROLLER = "0xB1d624fc40824683e2bFBEfd19eB208DbBE00866"; const abi = parseAbi(["function sendBalanceUpdate() external"]); action({ - name: "crossChainBalanceUpdate-base", + name: "crossChainBalanceUpdateBase", description: "Send cross-chain balance update from Base", chains: [8453], run: async ({ signer, log }) => { diff --git a/contracts/tasks/actions/crossChainBalanceUpdate-hyperevm.ts b/contracts/tasks/actions/crossChainBalanceUpdateHyperevm.ts similarity index 93% rename from contracts/tasks/actions/crossChainBalanceUpdate-hyperevm.ts rename to contracts/tasks/actions/crossChainBalanceUpdateHyperevm.ts index d09ce08367..4a9f9593f5 100644 --- a/contracts/tasks/actions/crossChainBalanceUpdate-hyperevm.ts +++ b/contracts/tasks/actions/crossChainBalanceUpdateHyperevm.ts @@ -6,7 +6,7 @@ const CROSS_CHAIN_CONTROLLER = "0xE0228DB13F8C4Eb00fD1e08e076b09eF5cD0EA1e"; const abi = parseAbi(["function sendBalanceUpdate() external"]); action({ - name: "crossChainBalanceUpdate-hyperevm", + name: "crossChainBalanceUpdateHyperevm", description: "Send cross-chain balance update from HyperEVM", chains: [999], run: async ({ signer, log }) => { diff --git a/contracts/tasks/actions/ogn-claimAndForwardRewards.ts b/contracts/tasks/actions/ognClaimAndForwardRewards.ts similarity index 96% rename from contracts/tasks/actions/ogn-claimAndForwardRewards.ts rename to contracts/tasks/actions/ognClaimAndForwardRewards.ts index 41aca63e8e..7a2361c342 100644 --- a/contracts/tasks/actions/ogn-claimAndForwardRewards.ts +++ b/contracts/tasks/actions/ognClaimAndForwardRewards.ts @@ -14,7 +14,7 @@ const MODULE_ADDRESSES = [ const abi = parseAbi(["function claimAndForward() external"]); action({ - name: "ogn-claimAndForwardRewards", + name: "ognClaimAndForwardRewards", description: "Claim and forward OGN rewards from all modules", chains: [1], run: async ({ signer, log }) => { diff --git a/contracts/tasks/actions/otoken-oethb-harvest.ts b/contracts/tasks/actions/otokenOethbHarvest.ts similarity index 96% rename from contracts/tasks/actions/otoken-oethb-harvest.ts rename to contracts/tasks/actions/otokenOethbHarvest.ts index b3bf624ca2..1c38d2579c 100644 --- a/contracts/tasks/actions/otoken-oethb-harvest.ts +++ b/contracts/tasks/actions/otokenOethbHarvest.ts @@ -13,7 +13,7 @@ const abi = parseAbi([ ]); action({ - name: "otoken-oethb-harvest", + name: "otokenOethbHarvest", description: "Harvest strategies on Base OETHb", chains: [8453], run: async ({ signer, log }) => { diff --git a/contracts/tasks/actions/otoken-oethb-rebase.ts b/contracts/tasks/actions/otokenOethbRebase.ts similarity index 94% rename from contracts/tasks/actions/otoken-oethb-rebase.ts rename to contracts/tasks/actions/otokenOethbRebase.ts index 7e00958ed8..61dfe6a017 100644 --- a/contracts/tasks/actions/otoken-oethb-rebase.ts +++ b/contracts/tasks/actions/otokenOethbRebase.ts @@ -6,7 +6,7 @@ const VAULT = "0x98a0CbeF61bD2D21435f433bE4CD42B56B38CC93"; const abi = parseAbi(["function rebase() external"]); action({ - name: "otoken-oethb-rebase", + name: "otokenOethbRebase", description: "Rebase OETHb vault on Base", chains: [8453], run: async ({ signer, log }) => { diff --git a/contracts/tasks/actions/otoken-oethb-updateWoethPrice.ts b/contracts/tasks/actions/otokenOethbUpdateWoethPrice.ts similarity index 93% rename from contracts/tasks/actions/otoken-oethb-updateWoethPrice.ts rename to contracts/tasks/actions/otokenOethbUpdateWoethPrice.ts index 39cbf282dc..f34476bf2e 100644 --- a/contracts/tasks/actions/otoken-oethb-updateWoethPrice.ts +++ b/contracts/tasks/actions/otokenOethbUpdateWoethPrice.ts @@ -6,7 +6,7 @@ const WOETH_ON_BASE = "0x80c864704DD06C3693ed5179190786EE38ACf835"; const abi = parseAbi(["function updateWOETHPrice() external"]); action({ - name: "otoken-oethb-updateWoethPrice", + name: "otokenOethbUpdateWoethPrice", description: "Update WOETH price on Base", chains: [8453], run: async ({ signer, log }) => { diff --git a/contracts/tasks/actions/otoken-oethp-addWithdrawalQueueLiquidity.ts b/contracts/tasks/actions/otokenOethpAddWithdrawalQueueLiquidity.ts similarity index 92% rename from contracts/tasks/actions/otoken-oethp-addWithdrawalQueueLiquidity.ts rename to contracts/tasks/actions/otokenOethpAddWithdrawalQueueLiquidity.ts index b17aacf458..67138e09d2 100644 --- a/contracts/tasks/actions/otoken-oethp-addWithdrawalQueueLiquidity.ts +++ b/contracts/tasks/actions/otokenOethpAddWithdrawalQueueLiquidity.ts @@ -6,7 +6,7 @@ const VAULT = "0xc8c8F8bEA5631A8AF26440AF32a55002138cB76a"; const abi = parseAbi(["function addWithdrawalQueueLiquidity() external"]); action({ - name: "otoken-oethp-addWithdrawalQueueLiquidity", + name: "otokenOethpAddWithdrawalQueueLiquidity", description: "Add liquidity to Plume OETH withdrawal queue", chains: [1], run: async ({ signer, log }) => { diff --git a/contracts/tasks/actions/otoken-os-collectAndRelease.ts b/contracts/tasks/actions/otokenOsCollectAndRelease.ts similarity index 96% rename from contracts/tasks/actions/otoken-os-collectAndRelease.ts rename to contracts/tasks/actions/otokenOsCollectAndRelease.ts index 6a9307aeff..9184f853a8 100644 --- a/contracts/tasks/actions/otoken-os-collectAndRelease.ts +++ b/contracts/tasks/actions/otokenOsCollectAndRelease.ts @@ -12,7 +12,7 @@ const harvesterAbi = parseAbi([ ]); action({ - name: "otoken-os-collectAndRelease", + name: "otokenOsCollectAndRelease", description: "Rebase OS vault and harvest on Sonic", chains: [146], run: async ({ signer, log }) => { diff --git a/contracts/tasks/actions/otoken-os-sonicRestakeRewards.ts b/contracts/tasks/actions/otokenOsSonicRestakeRewards.ts similarity index 95% rename from contracts/tasks/actions/otoken-os-sonicRestakeRewards.ts rename to contracts/tasks/actions/otokenOsSonicRestakeRewards.ts index 81ecb806fd..ec32904872 100644 --- a/contracts/tasks/actions/otoken-os-sonicRestakeRewards.ts +++ b/contracts/tasks/actions/otokenOsSonicRestakeRewards.ts @@ -10,7 +10,7 @@ const abi = parseAbi([ ]); action({ - name: "otoken-os-sonicRestakeRewards", + name: "otokenOsSonicRestakeRewards", description: "Restake rewards for Sonic validators", chains: [146], run: async ({ signer, log }) => { diff --git a/contracts/tasks/actions/otoken-ousd-autoWithdrawal.ts b/contracts/tasks/actions/otokenOusdAutoWithdrawal.ts similarity index 93% rename from contracts/tasks/actions/otoken-ousd-autoWithdrawal.ts rename to contracts/tasks/actions/otokenOusdAutoWithdrawal.ts index 4b18c4ee1e..713971a761 100644 --- a/contracts/tasks/actions/otoken-ousd-autoWithdrawal.ts +++ b/contracts/tasks/actions/otokenOusdAutoWithdrawal.ts @@ -6,7 +6,7 @@ const VAULT = "0x90d588fc0eC3DB9c4b417dB4537fE08e063D2ae5"; const abi = parseAbi(["function autoWithdraw() external"]); action({ - name: "otoken-ousd-autoWithdrawal", + name: "otokenOusdAutoWithdrawal", description: "Auto-process OUSD withdrawals", chains: [1], run: async ({ signer, log }) => { diff --git a/contracts/tasks/actions/otoken-ousd-oeth-rebase.ts b/contracts/tasks/actions/otokenOusdOethRebase.ts similarity index 92% rename from contracts/tasks/actions/otoken-ousd-oeth-rebase.ts rename to contracts/tasks/actions/otokenOusdOethRebase.ts index 68c68096f4..4e036a0f40 100644 --- a/contracts/tasks/actions/otoken-ousd-oeth-rebase.ts +++ b/contracts/tasks/actions/otokenOusdOethRebase.ts @@ -3,13 +3,15 @@ import { action } from "../lib/action"; const GAS_MULTIPLIER = 1.1; action({ - name: "otoken-ousd-oeth-rebase", + name: "otokenOusdOethRebase", description: "Rebase both OETH (collectAndRebase) and OUSD (rebase) on mainnet", chains: [1], run: async ({ signer, log }) => { const ethers = hre.ethers; - const oethDripperProxy = await ethers.getContract("OETHFixedRateDripperProxy"); + const oethDripperProxy = await ethers.getContract( + "OETHFixedRateDripperProxy" + ); const vaultProxy = await ethers.getContract("VaultProxy"); const oethDripper = await ethers.getContractAt( "IDripper", From c35f13849739474841c2199b5cca5450dae232f5 Mon Sep 17 00:00:00 2001 From: Domen Grabec Date: Tue, 7 Apr 2026 13:21:51 +0200 Subject: [PATCH 35/62] convert another function --- contracts/tasks/actions/SKILL.md | 8 ++--- .../actions/ognClaimAndForwardRewards.ts | 35 ++++++++++--------- .../tasks/actions/otokenOusdOethRebase.ts | 10 +++--- 3 files changed, 27 insertions(+), 26 deletions(-) diff --git a/contracts/tasks/actions/SKILL.md b/contracts/tasks/actions/SKILL.md index 06bcf6de5c..fe12ec92c4 100644 --- a/contracts/tasks/actions/SKILL.md +++ b/contracts/tasks/actions/SKILL.md @@ -33,7 +33,7 @@ description: Use this skill when migrating cron actions in contracts/tasks/actio 5. Use `new ethers.Contract(address, abi, signer)` only as fallback when no deployment name is available. 6. For proxy contracts, check existing patterns in `contracts/deploy//*.js` (mainnet/base/sonic/etc.) and `contracts/test/**/*.js` to choose the correct binding style (`getContract`, `getContractAt("I...")`, or implementation ABI at proxy address). 7. Keep explicit `chains: [...]` guardrails for each action. -8. Keep waits (`await tx.wait()`) and useful tx hash logging. +8. Prefer `logTxDetails` from `../../utils/txLogger` for transaction logging/confirmation instead of manual `log.info(tx.hash)` + `await tx.wait()`. 9. When replacing a hard-coded contract address with `ethers.getContract("")`, verify the old address equals the deployment address for that contract on the target chain; if it does not match, stop and flag it. ## Preferred Pattern @@ -41,6 +41,7 @@ description: Use this skill when migrating cron actions in contracts/tasks/actio ```ts import { ethers } from "hardhat"; import { action } from "../lib/action"; +import { logTxDetails } from "../../utils/txLogger"; action({ name: "example-action", @@ -49,8 +50,7 @@ action({ run: async ({ signer, log }) => { const contract = await ethers.getContract("MyContractProxy"); const tx = await contract.connect(signer).myMethod(); - log.info(`myMethod tx: ${tx.hash}`); - await tx.wait(); + await logTxDetails(tx, "myMethod"); }, }); ``` @@ -71,4 +71,4 @@ Fallback only (if contract cannot be fetched by deployment name): - For proxy targets, contract binding style matches existing deploy/test patterns for that proxy and network. - If a hard-coded address was migrated, its value was checked against the deployment address for the chosen contract name and chain. - Method name reflects protocol intent (better than raw selector calls). -- Logging includes enough context to debug failures. +- Transaction logging uses `logTxDetails` (or an equivalent shared helper), not ad-hoc hash logging and manual waits. diff --git a/contracts/tasks/actions/ognClaimAndForwardRewards.ts b/contracts/tasks/actions/ognClaimAndForwardRewards.ts index 7a2361c342..483dbf2ab7 100644 --- a/contracts/tasks/actions/ognClaimAndForwardRewards.ts +++ b/contracts/tasks/actions/ognClaimAndForwardRewards.ts @@ -1,32 +1,33 @@ -import { encodeFunctionData, parseAbi } from "viem"; +/// import { action } from "../lib/action"; +import { logTxDetails } from "../../utils/txLogger"; -const MODULE_ADDRESSES = [ - "0x15228dAE3B228175fBD9639d049265eFb08e60b6", - "0x8e32A930CcFE108DC560eC9e630BA6b5f7E179c9", - "0x460e4a0B14bD3F1e12f0c2194830c0204E5Bb147", - "0xFbBb82c4F3B6f479DE1451C04A76ea80da4ff010", - "0xAE67b612bD859378b7d0f6314E7Ee39ad4c6aBE6", - "0x046750A8106461d9826a8Ab32890B23753A5245e", +const MODULE_DEPLOYMENTS = [ + "CollectXOGNRewardsModule1", + "CollectXOGNRewardsModule2", + "CollectXOGNRewardsModule3", + "CollectXOGNRewardsModule4", + "CollectXOGNRewardsModule5", + "CollectXOGNRewardsModule6", ] as const; -const abi = parseAbi(["function claimAndForward() external"]); - action({ name: "ognClaimAndForwardRewards", description: "Claim and forward OGN rewards from all modules", chains: [1], run: async ({ signer, log }) => { - for (const moduleAddress of MODULE_ADDRESSES) { - log.info(`Calling claimAndForward on ${moduleAddress}`); - const tx = await signer.sendTransaction({ - to: moduleAddress, - data: encodeFunctionData({ abi, functionName: "claimAndForward" }), + const ethers = hre.ethers; + + for (const deploymentName of MODULE_DEPLOYMENTS) { + const module = await ethers.getContract(deploymentName); + log.info( + `Calling claimAndForward on ${deploymentName} at ${module.address}` + ); + const tx = await module.connect(signer).claimAndForward({ gasLimit: 500000, }); - log.info(`claimAndForward tx: ${tx.hash}`); - await tx.wait(); + await logTxDetails(tx, `claimAndForward on ${deploymentName}`); } }, }); diff --git a/contracts/tasks/actions/otokenOusdOethRebase.ts b/contracts/tasks/actions/otokenOusdOethRebase.ts index 4e036a0f40..255dff0cf3 100644 --- a/contracts/tasks/actions/otokenOusdOethRebase.ts +++ b/contracts/tasks/actions/otokenOusdOethRebase.ts @@ -1,4 +1,5 @@ import { action } from "../lib/action"; +import { logTxDetails } from "../../utils/txLogger"; const GAS_MULTIPLIER = 1.1; @@ -29,17 +30,16 @@ action({ const oethTx = await oethDripperWithSigner.collectAndRebase({ gasLimit: oethGasLimit, }); - log.info( - `OETH collectAndRebase tx: ${oethTx.hash} (gasLimit: ${oethGasLimit})` + await logTxDetails( + oethTx, + `collectAndRebase (gasLimit: ${oethGasLimit.toString()})` ); - await oethTx.wait(); // OUSD rebase with gas estimation + 10% buffer log.info("Estimating gas for OUSD rebase"); const ousdGas = await ousdVaultWithSigner.estimateGas.rebase(); const ousdGasLimit = ousdGas.mul(Math.floor(GAS_MULTIPLIER * 100)).div(100); const ousdTx = await ousdVaultWithSigner.rebase({ gasLimit: ousdGasLimit }); - log.info(`OUSD rebase tx: ${ousdTx.hash} (gasLimit: ${ousdGasLimit})`); - await ousdTx.wait(); + await logTxDetails(ousdTx, `rebase (gasLimit: ${ousdGasLimit.toString()})`); }, }); From baad11aa9320abbeeab0943b8b63981fe9170962 Mon Sep 17 00:00:00 2001 From: Domen Grabec Date: Tue, 7 Apr 2026 13:27:04 +0200 Subject: [PATCH 36/62] convert another functino --- contracts/tasks/actions/ognClaimAndForwardRewards.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/contracts/tasks/actions/ognClaimAndForwardRewards.ts b/contracts/tasks/actions/ognClaimAndForwardRewards.ts index 483dbf2ab7..67fc891b5d 100644 --- a/contracts/tasks/actions/ognClaimAndForwardRewards.ts +++ b/contracts/tasks/actions/ognClaimAndForwardRewards.ts @@ -22,12 +22,12 @@ action({ for (const deploymentName of MODULE_DEPLOYMENTS) { const module = await ethers.getContract(deploymentName); log.info( - `Calling claimAndForward on ${deploymentName} at ${module.address}` + `Calling collectRewards on ${deploymentName} at ${module.address}` ); - const tx = await module.connect(signer).claimAndForward({ + const tx = await module.connect(signer).collectRewards({ gasLimit: 500000, }); - await logTxDetails(tx, `claimAndForward on ${deploymentName}`); + await logTxDetails(tx, `collectRewards on ${deploymentName}`); } }, }); From 5f180173ad48efe165d15f22074d5ace4fd1da3a Mon Sep 17 00:00:00 2001 From: Domen Grabec Date: Tue, 7 Apr 2026 16:24:19 +0200 Subject: [PATCH 37/62] some more function creations --- contracts/cron/cron-jobs.ts | 3 ++- contracts/tasks/actions/SKILL.md | 22 ++++++++++++++++++ .../actions/otokenOethbUpdateWoethPrice.ts | 23 ++++++++++++------- .../tasks/actions/otokenOusdAutoWithdrawal.ts | 18 ++++++++------- 4 files changed, 49 insertions(+), 17 deletions(-) diff --git a/contracts/cron/cron-jobs.ts b/contracts/cron/cron-jobs.ts index 51334a151b..6b851300dd 100644 --- a/contracts/cron/cron-jobs.ts +++ b/contracts/cron/cron-jobs.ts @@ -142,8 +142,9 @@ export const cronJobs: CronJob[] = [ name: "otoken_oethb_updateWoethPrice", schedule: "10 21 * * *", enabled: false, + permmissioned: false, command: - "cd /app && pnpm hardhat otokenOethbUpdateWoethPrice --network mainnet", + "cd /app && pnpm hardhat otokenOethbUpdateWoethPrice --network base", }, { name: "otoken_oethp_addWithdrawalQueueLiquidity", diff --git a/contracts/tasks/actions/SKILL.md b/contracts/tasks/actions/SKILL.md index fe12ec92c4..8520a4373e 100644 --- a/contracts/tasks/actions/SKILL.md +++ b/contracts/tasks/actions/SKILL.md @@ -35,6 +35,27 @@ description: Use this skill when migrating cron actions in contracts/tasks/actio 7. Keep explicit `chains: [...]` guardrails for each action. 8. Prefer `logTxDetails` from `../../utils/txLogger` for transaction logging/confirmation instead of manual `log.info(tx.hash)` + `await tx.wait()`. 9. When replacing a hard-coded contract address with `ethers.getContract("")`, verify the old address equals the deployment address for that contract on the target chain; if it does not match, stop and flag it. +10. If only a 4-byte selector/call-data hash is available, resolve it using 4byte API, then confirm the resolved text signature exists in the target contract ABI before coding the method call. + +## 4byte Selector Resolution (Proposal) + +Use this when migrating a raw `sendTransaction({ to, data })` call and the method name is unclear. + +1. Extract selector: + - Selector is the first 4 bytes of calldata (first 10 hex chars including `0x`), e.g. `0x80bef06d`. +2. Query 4byte: + - `GET https://www.4byte.directory/api/v1/signatures/?hex_signature=` + - Parse `results[].text_signature`. +3. Handle ambiguity: + - If multiple candidates are returned, treat them as hypotheses only. + - Narrow using expected argument count/types from calldata length and usage context. +4. Verify against local ABI (required): + - Check `contracts/deployments//.json` ABI for exact method presence. + - Recompute selector locally from candidate text signature and ensure exact match. +5. Only then migrate: + - Replace raw calldata call with `contract.connect(signer).methodName(...)`. +6. If unresolved: + - Keep the raw call and leave a TODO with selector + 4byte candidates, or stop and flag. ## Preferred Pattern @@ -72,3 +93,4 @@ Fallback only (if contract cannot be fetched by deployment name): - If a hard-coded address was migrated, its value was checked against the deployment address for the chosen contract name and chain. - Method name reflects protocol intent (better than raw selector calls). - Transaction logging uses `logTxDetails` (or an equivalent shared helper), not ad-hoc hash logging and manual waits. +- For selector-based migrations, 4byte lookup was used and final method choice was validated against the local deployment ABI. diff --git a/contracts/tasks/actions/otokenOethbUpdateWoethPrice.ts b/contracts/tasks/actions/otokenOethbUpdateWoethPrice.ts index f34476bf2e..aa488ac85f 100644 --- a/contracts/tasks/actions/otokenOethbUpdateWoethPrice.ts +++ b/contracts/tasks/actions/otokenOethbUpdateWoethPrice.ts @@ -1,21 +1,28 @@ -import { encodeFunctionData, parseAbi } from "viem"; +/// import { action } from "../lib/action"; +import { logTxDetails } from "../../utils/txLogger"; -const WOETH_ON_BASE = "0x80c864704DD06C3693ed5179190786EE38ACf835"; -const abi = parseAbi(["function updateWOETHPrice() external"]); +const STRATEGY_PROXY_DEPLOYMENT = "BridgedWOETHStrategyProxy"; action({ name: "otokenOethbUpdateWoethPrice", description: "Update WOETH price on Base", chains: [8453], run: async ({ signer, log }) => { - const tx = await signer.sendTransaction({ - to: WOETH_ON_BASE, - data: encodeFunctionData({ abi, functionName: "updateWOETHPrice" }), + const ethers = hre.ethers; + const strategyProxy = await ethers.getContract(STRATEGY_PROXY_DEPLOYMENT); + const strategy = await ethers.getContractAt( + "BridgedWOETHStrategy", + strategyProxy.address + ); + + log.info( + `Calling updateWOETHOraclePrice on ${STRATEGY_PROXY_DEPLOYMENT} at ${strategy.address}` + ); + const tx = await strategy.connect(signer).updateWOETHOraclePrice({ gasLimit: 200000, }); - log.info(`updateWOETHPrice tx: ${tx.hash}`); - await tx.wait(); + await logTxDetails(tx, "updateWOETHOraclePrice"); }, }); diff --git a/contracts/tasks/actions/otokenOusdAutoWithdrawal.ts b/contracts/tasks/actions/otokenOusdAutoWithdrawal.ts index 713971a761..0f55a38737 100644 --- a/contracts/tasks/actions/otokenOusdAutoWithdrawal.ts +++ b/contracts/tasks/actions/otokenOusdAutoWithdrawal.ts @@ -1,21 +1,23 @@ -import { encodeFunctionData, parseAbi } from "viem"; +/// import { action } from "../lib/action"; +import { logTxDetails } from "../../utils/txLogger"; -const VAULT = "0x90d588fc0eC3DB9c4b417dB4537fE08e063D2ae5"; -const abi = parseAbi(["function autoWithdraw() external"]); +const MODULE_DEPLOYMENT = "AutoWithdrawalModule"; action({ name: "otokenOusdAutoWithdrawal", description: "Auto-process OUSD withdrawals", chains: [1], run: async ({ signer, log }) => { - const tx = await signer.sendTransaction({ - to: VAULT, - data: encodeFunctionData({ abi, functionName: "autoWithdraw" }), + const ethers = hre.ethers; + const autoWithdrawalModule = await ethers.getContract(MODULE_DEPLOYMENT); + log.info( + `Calling fundWithdrawals on ${MODULE_DEPLOYMENT} at ${autoWithdrawalModule.address}` + ); + const tx = await autoWithdrawalModule.connect(signer).fundWithdrawals({ gasLimit: 4000000, }); - log.info(`autoWithdraw tx: ${tx.hash}`); - await tx.wait(); + await logTxDetails(tx, `fundWithdrawals on ${MODULE_DEPLOYMENT}`); }, }); From eb14ecba1773f2c58b197f3bd055144a9eb32ea0 Mon Sep 17 00:00:00 2001 From: Domen Grabec Date: Tue, 7 Apr 2026 16:47:15 +0200 Subject: [PATCH 38/62] convert rebase --- contracts/cron/cron-jobs.ts | 1 + contracts/tasks/actions/otokenOethbRebase.ts | 20 ++++++++++---------- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/contracts/cron/cron-jobs.ts b/contracts/cron/cron-jobs.ts index 6b851300dd..eec3bc9094 100644 --- a/contracts/cron/cron-jobs.ts +++ b/contracts/cron/cron-jobs.ts @@ -157,6 +157,7 @@ export const cronJobs: CronJob[] = [ name: "otoken_oethb_rebase", schedule: "25 9,21 * * *", enabled: false, + permmissioned: false, command: "cd /app && pnpm hardhat otokenOethbRebase --network base", }, { diff --git a/contracts/tasks/actions/otokenOethbRebase.ts b/contracts/tasks/actions/otokenOethbRebase.ts index 61dfe6a017..b183f051e3 100644 --- a/contracts/tasks/actions/otokenOethbRebase.ts +++ b/contracts/tasks/actions/otokenOethbRebase.ts @@ -1,21 +1,21 @@ -import { encodeFunctionData, parseAbi } from "viem"; +/// import { action } from "../lib/action"; +import { logTxDetails } from "../../utils/txLogger"; -const VAULT = "0x98a0CbeF61bD2D21435f433bE4CD42B56B38CC93"; -const abi = parseAbi(["function rebase() external"]); +const VAULT_PROXY_DEPLOYMENT = "OETHBaseVaultProxy"; action({ name: "otokenOethbRebase", description: "Rebase OETHb vault on Base", chains: [8453], run: async ({ signer, log }) => { - const tx = await signer.sendTransaction({ - to: VAULT, - data: encodeFunctionData({ abi, functionName: "rebase" }), - gasLimit: 300000, - }); - log.info(`rebase tx: ${tx.hash}`); - await tx.wait(); + const ethers = hre.ethers; + const vaultProxy = await ethers.getContract(VAULT_PROXY_DEPLOYMENT); + const vault = await ethers.getContractAt("IVault", vaultProxy.address); + + log.info(`Calling rebase on ${VAULT_PROXY_DEPLOYMENT} at ${vault.address}`); + const tx = await vault.connect(signer).rebase(); + await logTxDetails(tx, "rebase"); }, }); From 0e7f8f61d2131dcad526d82019c09a5184fd75bb Mon Sep 17 00:00:00 2001 From: Domen Grabec Date: Tue, 7 Apr 2026 16:59:34 +0200 Subject: [PATCH 39/62] convert and test a couple of more functions --- contracts/cron/cron-jobs.ts | 2 + contracts/tasks/actions/otokenOethbHarvest.ts | 46 ++++++++------ .../actions/otokenOsCollectAndRelease.ts | 61 ++++++++++--------- 3 files changed, 60 insertions(+), 49 deletions(-) diff --git a/contracts/cron/cron-jobs.ts b/contracts/cron/cron-jobs.ts index eec3bc9094..33ee1afb44 100644 --- a/contracts/cron/cron-jobs.ts +++ b/contracts/cron/cron-jobs.ts @@ -128,6 +128,7 @@ export const cronJobs: CronJob[] = [ name: "otoken_os_collectAndRelease", schedule: "50 23 * * *", enabled: false, + permmissioned: false, command: "cd /app && pnpm hardhat otokenOsCollectAndRelease --network sonic", }, @@ -198,6 +199,7 @@ export const cronJobs: CronJob[] = [ name: "otoken_oethb_harvest", schedule: "50 11 * * *", enabled: false, + permmissioned: false, command: "cd /app && pnpm hardhat otokenOethbHarvest --network base", }, ]; diff --git a/contracts/tasks/actions/otokenOethbHarvest.ts b/contracts/tasks/actions/otokenOethbHarvest.ts index 1c38d2579c..8b4a4fb42e 100644 --- a/contracts/tasks/actions/otokenOethbHarvest.ts +++ b/contracts/tasks/actions/otokenOethbHarvest.ts @@ -1,32 +1,38 @@ -import { encodeFunctionData, parseAbi } from "viem"; +/// import { action } from "../lib/action"; +import { logTxDetails } from "../../utils/txLogger"; -const HARVESTER = "0x0CbEAcf86232fC04050cD679d860516F7254c22E"; -const STRATEGIES = [ - "0x9cfcaf81600155e01c63e4d2993a8a81a8205829", - "0xf611cc500eee7e4e4763a05fe623e2363c86d2af", +const HARVESTER_PROXY_DEPLOYMENT = "OETHBaseHarvesterProxy"; +const STRATEGY_PROXY_DEPLOYMENTS = [ + "OETHBaseCurveAMOProxy", + "AerodromeAMOStrategyProxy", ] as const; -const abi = parseAbi([ - "function harvestAndTransfer(address[] strategies) external", -]); - action({ name: "otokenOethbHarvest", description: "Harvest strategies on Base OETHb", chains: [8453], run: async ({ signer, log }) => { - const tx = await signer.sendTransaction({ - to: HARVESTER, - data: encodeFunctionData({ - abi, - functionName: "harvestAndTransfer", - args: [[...STRATEGIES]], - }), - gasLimit: 800000, - }); - log.info(`harvestAndTransfer tx: ${tx.hash}`); - await tx.wait(); + const ethers = hre.ethers; + const harvesterProxy = await ethers.getContract(HARVESTER_PROXY_DEPLOYMENT); + const harvester = await ethers.getContractAt( + "SuperOETHHarvester", + harvesterProxy.address + ); + const strategies = await Promise.all( + STRATEGY_PROXY_DEPLOYMENTS.map(async (deploymentName) => { + const strategy = await ethers.getContract(deploymentName); + return strategy.address; + }) + ); + + log.info( + `Calling harvestAndTransfer on ${HARVESTER_PROXY_DEPLOYMENT} at ${harvester.address} for ${strategies.length} strategy(ies)` + ); + const tx = await harvester + .connect(signer) + ["harvestAndTransfer(address[])"](strategies, { gasLimit: 800000 }); + await logTxDetails(tx, "harvestAndTransfer"); }, }); diff --git a/contracts/tasks/actions/otokenOsCollectAndRelease.ts b/contracts/tasks/actions/otokenOsCollectAndRelease.ts index 9184f853a8..19d3067e8a 100644 --- a/contracts/tasks/actions/otokenOsCollectAndRelease.ts +++ b/contracts/tasks/actions/otokenOsCollectAndRelease.ts @@ -1,41 +1,44 @@ -import { encodeFunctionData, parseAbi } from "viem"; +/// import { action } from "../lib/action"; +import { logTxDetails } from "../../utils/txLogger"; -const OS_VAULT = "0xa3c0eca00d2b76b4d1f170b0ab3fdea16c180186"; -const OS_HARVESTER = "0x7B0383b31C7662E3f6B6E9C743Bc87b93C1f4498"; -const SONIC_STAKING_STRATEGY = "0xbe19cc5654e30daf04ad3b5e06213d70f4e882ee"; - -const vaultAbi = parseAbi(["function rebase() external"]); -const harvesterAbi = parseAbi([ - "function harvestAndTransfer(address strategy) external", -]); +const OS_VAULT_PROXY_DEPLOYMENT = "OSonicVaultProxy"; +const OS_HARVESTER_PROXY_DEPLOYMENT = "OSonicHarvesterProxy"; +const STRATEGY_PROXY_DEPLOYMENT = "SonicSwapXAMOStrategyProxy"; action({ name: "otokenOsCollectAndRelease", description: "Rebase OS vault and harvest on Sonic", chains: [146], run: async ({ signer, log }) => { - // Rebase the vault - const rebaseTx = await signer.sendTransaction({ - to: OS_VAULT, - data: encodeFunctionData({ abi: vaultAbi, functionName: "rebase" }), - gasLimit: 400000, - }); - log.info(`rebase tx: ${rebaseTx.hash}`); - await rebaseTx.wait(); + const ethers = hre.ethers; + const vaultProxy = await ethers.getContract(OS_VAULT_PROXY_DEPLOYMENT); + const vault = await ethers.getContractAt("IVault", vaultProxy.address); + + const harvesterProxy = await ethers.getContract( + OS_HARVESTER_PROXY_DEPLOYMENT + ); + const harvester = await ethers.getContractAt( + "OSonicHarvester", + harvesterProxy.address + ); + const strategyProxy = await ethers.getContract(STRATEGY_PROXY_DEPLOYMENT); + + log.info( + `Calling rebase on ${OS_VAULT_PROXY_DEPLOYMENT} at ${vault.address}` + ); + const rebaseTx = await vault.connect(signer).rebase({ gasLimit: 400000 }); + await logTxDetails(rebaseTx, "rebase"); - // Harvest and transfer - const harvestTx = await signer.sendTransaction({ - to: OS_HARVESTER, - data: encodeFunctionData({ - abi: harvesterAbi, - functionName: "harvestAndTransfer", - args: [SONIC_STAKING_STRATEGY], - }), - gasLimit: 400000, - }); - log.info(`harvestAndTransfer tx: ${harvestTx.hash}`); - await harvestTx.wait(); + log.info( + `Calling harvestAndTransfer on ${OS_HARVESTER_PROXY_DEPLOYMENT} at ${harvester.address} for strategy ${strategyProxy.address}` + ); + const harvestTx = await harvester + .connect(signer) + ["harvestAndTransfer(address)"](strategyProxy.address, { + gasLimit: 400000, + }); + await logTxDetails(harvestTx, "harvestAndTransfer"); }, }); From 822511605c10e787ceb8d66059a25b1148ab6a95 Mon Sep 17 00:00:00 2001 From: Domen Grabec Date: Tue, 7 Apr 2026 23:40:46 +0200 Subject: [PATCH 40/62] convert a few more actions --- contracts/cron/cron-jobs.ts | 9 ++++- contracts/tasks/actions/claimSSVRewards.ts | 15 +++++++++ .../otokenOethpAddWithdrawalQueueLiquidity.ts | 29 ++++++++-------- .../actions/otokenOsSonicRestakeRewards.ts | 33 +++++++++---------- 4 files changed, 54 insertions(+), 32 deletions(-) create mode 100644 contracts/tasks/actions/claimSSVRewards.ts diff --git a/contracts/cron/cron-jobs.ts b/contracts/cron/cron-jobs.ts index 33ee1afb44..d971899caa 100644 --- a/contracts/cron/cron-jobs.ts +++ b/contracts/cron/cron-jobs.ts @@ -151,8 +151,9 @@ export const cronJobs: CronJob[] = [ name: "otoken_oethp_addWithdrawalQueueLiquidity", schedule: "5 0 * * *", enabled: false, + permmissioned: false, command: - "cd /app && pnpm hardhat otokenOethpAddWithdrawalQueueLiquidity --network mainnet", + "cd /app && pnpm hardhat otokenOethpAddWithdrawalQueueLiquidity --network plume", }, { name: "otoken_oethb_rebase", @@ -182,6 +183,12 @@ export const cronJobs: CronJob[] = [ command: "cd /app && pnpm hardhat crossChainBalanceUpdateHyperevm --network hyperevm", }, + { + name: "claim_ssv_rewards", + schedule: "0 0 1 * *", + enabled: false, + command: "cd /app && pnpm hardhat claimSSVRewards --network mainnet", + }, { name: "otoken_ousd_oeth_rebase", schedule: "50 11,23 * * *", diff --git a/contracts/tasks/actions/claimSSVRewards.ts b/contracts/tasks/actions/claimSSVRewards.ts new file mode 100644 index 0000000000..8eefdbbf23 --- /dev/null +++ b/contracts/tasks/actions/claimSSVRewards.ts @@ -0,0 +1,15 @@ +/// + +import { action } from "../lib/action"; + +const { claimSSVRewards } = require("../ssvRewards"); + +action({ + name: "claimSSVRewards", + description: "Claim SSV rewards and forward claimed SSV", + chains: [1], + run: async ({ signer, log }) => { + log.info("Claiming SSV rewards from CumulativeMerkleDrop"); + await claimSSVRewards(signer); + }, +}); diff --git a/contracts/tasks/actions/otokenOethpAddWithdrawalQueueLiquidity.ts b/contracts/tasks/actions/otokenOethpAddWithdrawalQueueLiquidity.ts index 67138e09d2..ffe7187575 100644 --- a/contracts/tasks/actions/otokenOethpAddWithdrawalQueueLiquidity.ts +++ b/contracts/tasks/actions/otokenOethpAddWithdrawalQueueLiquidity.ts @@ -1,24 +1,25 @@ -import { encodeFunctionData, parseAbi } from "viem"; +/// import { action } from "../lib/action"; +import { logTxDetails } from "../../utils/txLogger"; -const VAULT = "0xc8c8F8bEA5631A8AF26440AF32a55002138cB76a"; -const abi = parseAbi(["function addWithdrawalQueueLiquidity() external"]); +const OETHP_VAULT_PROXY_DEPLOYMENT = "OETHPlumeVaultProxy"; action({ name: "otokenOethpAddWithdrawalQueueLiquidity", description: "Add liquidity to Plume OETH withdrawal queue", - chains: [1], + chains: [98866], run: async ({ signer, log }) => { - const tx = await signer.sendTransaction({ - to: VAULT, - data: encodeFunctionData({ - abi, - functionName: "addWithdrawalQueueLiquidity", - }), - gasLimit: 400000, - }); - log.info(`addWithdrawalQueueLiquidity tx: ${tx.hash}`); - await tx.wait(); + const ethers = hre.ethers; + const vaultProxy = await ethers.getContract(OETHP_VAULT_PROXY_DEPLOYMENT); + const vault = await ethers.getContractAt("IVault", vaultProxy.address); + + log.info( + `Calling addWithdrawalQueueLiquidity on ${OETHP_VAULT_PROXY_DEPLOYMENT} at ${vault.address}` + ); + const tx = await vault + .connect(signer) + .addWithdrawalQueueLiquidity({ gasLimit: 400000 }); + await logTxDetails(tx, "addWithdrawalQueueLiquidity"); }, }); diff --git a/contracts/tasks/actions/otokenOsSonicRestakeRewards.ts b/contracts/tasks/actions/otokenOsSonicRestakeRewards.ts index ec32904872..0934a395d2 100644 --- a/contracts/tasks/actions/otokenOsSonicRestakeRewards.ts +++ b/contracts/tasks/actions/otokenOsSonicRestakeRewards.ts @@ -1,30 +1,29 @@ -import { encodeFunctionData, parseAbi } from "viem"; +/// import { action } from "../lib/action"; +import { logTxDetails } from "../../utils/txLogger"; -const SONIC_STAKING_STRATEGY = "0x596B0401479f6DfE1cAF8c12838311FeE742B95c"; +const SONIC_STAKING_STRATEGY_PROXY_DEPLOYMENT = "SonicStakingStrategyProxy"; const VALIDATOR_IDS = [15n, 16n, 17n, 18n, 45n]; -const abi = parseAbi([ - "function restakeRewards(uint256[] validatorIds) external", -]); - action({ name: "otokenOsSonicRestakeRewards", description: "Restake rewards for Sonic validators", chains: [146], run: async ({ signer, log }) => { + const ethers = hre.ethers; + const strategyProxy = await ethers.getContract( + SONIC_STAKING_STRATEGY_PROXY_DEPLOYMENT + ); + const strategy = await ethers.getContractAt( + "SonicStakingStrategy", + strategyProxy.address + ); + log.info(`Restaking rewards for validators: ${VALIDATOR_IDS.join(", ")}`); - const tx = await signer.sendTransaction({ - to: SONIC_STAKING_STRATEGY, - data: encodeFunctionData({ - abi, - functionName: "restakeRewards", - args: [VALIDATOR_IDS], - }), - gasLimit: 300000, - }); - log.info(`restakeRewards tx: ${tx.hash}`); - await tx.wait(); + const tx = await strategy + .connect(signer) + .restakeRewards(VALIDATOR_IDS, { gasLimit: 300000 }); + await logTxDetails(tx, "restakeRewards"); }, }); From dee9d4d6697bee777627455d32c68a47fe0ef291 Mon Sep 17 00:00:00 2001 From: Domen Grabec Date: Wed, 8 Apr 2026 12:03:29 +0200 Subject: [PATCH 41/62] add execute and propose actions --- .../actions/executeGovernorSixProposal.ts | 43 +++++++++++++++++++ .../tasks/actions/queueGovernorSixProposal.ts | 43 +++++++++++++++++++ 2 files changed, 86 insertions(+) create mode 100644 contracts/tasks/actions/executeGovernorSixProposal.ts create mode 100644 contracts/tasks/actions/queueGovernorSixProposal.ts diff --git a/contracts/tasks/actions/executeGovernorSixProposal.ts b/contracts/tasks/actions/executeGovernorSixProposal.ts new file mode 100644 index 0000000000..0d4391f70b --- /dev/null +++ b/contracts/tasks/actions/executeGovernorSixProposal.ts @@ -0,0 +1,43 @@ +/// + +import { types } from "hardhat/config"; +import { action } from "../lib/action"; +import addresses from "../../utils/addresses"; +import { logTxDetails } from "../../utils/txLogger"; + +const governorSixAbi = [ + "function queue(uint256 proposalId) external", + "function execute(uint256 proposalId) external payable", +]; + +action({ + name: "executeGovernorSixProposal", + description: "Execute a GovernorSix proposal on mainnet", + chains: [1], + params: (t) => { + t.addParam( + "propid", + "GovernorSix proposal id to execute", + undefined, + types.string + ); + }, + run: async ({ signer, log, args }) => { + const governorSixAddress = (addresses as any).mainnet.GovernorSix; + const governorSix = await hre.ethers.getContractAt( + governorSixAbi, + governorSixAddress + ); + + const proposalId = args.propid; + if (!/^[0-9]+$/.test(proposalId)) { + throw new Error(`Invalid proposalId: ${proposalId}`); + } + + log.info( + `Executing proposal ${proposalId} on GovernorSix ${governorSixAddress}` + ); + const tx = await governorSix.connect(signer).execute(proposalId); + await logTxDetails(tx, `execute(${proposalId})`); + }, +}); diff --git a/contracts/tasks/actions/queueGovernorSixProposal.ts b/contracts/tasks/actions/queueGovernorSixProposal.ts new file mode 100644 index 0000000000..e3dc3e4176 --- /dev/null +++ b/contracts/tasks/actions/queueGovernorSixProposal.ts @@ -0,0 +1,43 @@ +/// + +import { types } from "hardhat/config"; +import { action } from "../lib/action"; +import addresses from "../../utils/addresses"; +import { logTxDetails } from "../../utils/txLogger"; + +const governorSixAbi = [ + "function queue(uint256 proposalId) external", + "function execute(uint256 proposalId) external payable", +]; + +action({ + name: "queueGovernorSixProposal", + description: "Queue a GovernorSix proposal on mainnet", + chains: [1], + params: (t) => { + t.addParam( + "propid", + "GovernorSix proposal id to queue", + undefined, + types.string + ); + }, + run: async ({ signer, log, args }) => { + const governorSixAddress = (addresses as any).mainnet.GovernorSix; + const governorSix = await hre.ethers.getContractAt( + governorSixAbi, + governorSixAddress + ); + + const proposalId = args.propid; + if (!/^[0-9]+$/.test(proposalId)) { + throw new Error(`Invalid proposalId: ${proposalId}`); + } + + log.info( + `Queueing proposal ${proposalId} on GovernorSix ${governorSixAddress}` + ); + const tx = await governorSix.connect(signer).queue(proposalId); + await logTxDetails(tx, `queue(${proposalId})`); + }, +}); From 0dd1349ef12299f58995d662ac540179d9b2bc61 Mon Sep 17 00:00:00 2001 From: Domen Grabec Date: Wed, 8 Apr 2026 13:24:00 +0200 Subject: [PATCH 42/62] old docker insstance will no longer be required --- contracts/dockerfile | 72 -------------------------------------------- 1 file changed, 72 deletions(-) delete mode 100644 contracts/dockerfile diff --git a/contracts/dockerfile b/contracts/dockerfile deleted file mode 100644 index 2ec998e7c7..0000000000 --- a/contracts/dockerfile +++ /dev/null @@ -1,72 +0,0 @@ -FROM node:20 - -ENV DEBIAN_FRONTEND=noninteractive \ - DEBUG=origin* \ - DEBUG_HIDE_DATE=true - -RUN apt-get update \ - && apt-get install -y --no-install-recommends \ - ca-certificates \ - curl \ - git \ - openssh-client \ - build-essential \ - python3 \ - bsdutils \ - && rm -rf /var/lib/apt/lists/*◄ - -# Preload GitHub host key for SSH-based dependencies. -RUN mkdir -p /root/.ssh \ - && ssh-keyscan -t rsa github.com >> /root/.ssh/known_hosts - -RUN git config --global url."https://github.com/".insteadOf "git@github.com:" - -ARG TARGETARCH -ENV SUPERCRONIC_URL=https://github.com/aptible/supercronic/releases/download/v0.2.39/supercronic-linux-${TARGETARCH} \ - SUPERCRONIC=supercronic-linux-${TARGETARCH} - -# sha1sums from https://github.com/aptible/supercronic/releases/tag/v0.2.39 -COPY <<'EOF' /tmp/supercronic-checksums.txt -c98bbf82c5f648aaac8708c182cc83046fe48423 supercronic-linux-amd64 -5ef4ccc3d43f12d0f6c3763758bc37cc4e5af76e supercronic-linux-arm64 -EOF - -RUN curl -fsSLO "$SUPERCRONIC_URL" \ - && grep "$SUPERCRONIC" /tmp/supercronic-checksums.txt | sha1sum -c - \ - && chmod +x "$SUPERCRONIC" \ - && mv "$SUPERCRONIC" /usr/local/bin/supercronic \ - && rm /tmp/supercronic-checksums.txt - -WORKDIR /app - -# Enable pnpm via corepack and install dependencies first for better caching. -COPY pnpm-lock.yaml package.json pnpm-workspace.yaml ./ -RUN corepack enable \ - && pnpm install --frozen-lockfile - -# Copy the rest of the contracts workspace. -COPY . . - -# Compile contracts on amd64 (production). Skip on arm64 (Mac) where solcjs WASM crashes. -RUN if [ "$TARGETARCH" = "amd64" ]; then pnpm hardhat compile; else echo "Skipping compile on $TARGETARCH"; fi - -ENV PROVIDER_URL="" \ - SONIC_PROVIDER_URL="" \ - PLUME_PROVIDER_URL="" \ - HOODI_PROVIDER_URL="" \ - BEACON_PROVIDER_URL="" \ - DEFENDER_API_KEY="" \ - DEFENDER_API_SECRET="" \ - HARDHAT_NETWORK="" - -# Cron configuration for supercronic. -# Each Hardhat task runs with a 7 minute offset, ensuring sequential execution. -RUN cat <<'EOF' > /etc/cronjob -0 * * * * cd /app && pnpm hardhat snapBalances --network ${HARDHAT_NETWORK:-mainnet} -8 * * * * cd /app && pnpm hardhat verifyBalances --network ${HARDHAT_NETWORK:-mainnet} -10 * * * * cd /app && pnpm hardhat verifyDeposits --network ${HARDHAT_NETWORK:-mainnet} -12 * * * * cd /app && pnpm hardhat autoValidatorDeposits --network ${HARDHAT_NETWORK:-mainnet} -14 * * * * cd /app && pnpm hardhat autoValidatorWithdrawals --network ${HARDHAT_NETWORK:-mainnet} -EOF - -ENTRYPOINT ["supercronic", "/etc/cronjob"] \ No newline at end of file From 804fc9ddffc71d084a43f8af64b8fee5f5cbb2b1 Mon Sep 17 00:00:00 2001 From: Domen Grabec Date: Wed, 8 Apr 2026 13:57:24 +0200 Subject: [PATCH 43/62] add the beacon chain tasks into the same format --- contracts/tasks/actions/SKILL.md | 2 + .../tasks/actions/autoValidatorDeposits.ts | 24 +++ .../tasks/actions/autoValidatorWithdrawals.ts | 30 ++++ contracts/tasks/actions/snapBalances.ts | 23 +++ contracts/tasks/actions/verifyBalances.ts | 65 +++++++++ contracts/tasks/actions/verifyDeposits.ts | 29 ++++ contracts/tasks/tasks.js | 137 ------------------ 7 files changed, 173 insertions(+), 137 deletions(-) create mode 100644 contracts/tasks/actions/autoValidatorDeposits.ts create mode 100644 contracts/tasks/actions/autoValidatorWithdrawals.ts create mode 100644 contracts/tasks/actions/snapBalances.ts create mode 100644 contracts/tasks/actions/verifyBalances.ts create mode 100644 contracts/tasks/actions/verifyDeposits.ts diff --git a/contracts/tasks/actions/SKILL.md b/contracts/tasks/actions/SKILL.md index 8520a4373e..b0669c8ef5 100644 --- a/contracts/tasks/actions/SKILL.md +++ b/contracts/tasks/actions/SKILL.md @@ -36,6 +36,7 @@ description: Use this skill when migrating cron actions in contracts/tasks/actio 8. Prefer `logTxDetails` from `../../utils/txLogger` for transaction logging/confirmation instead of manual `log.info(tx.hash)` + `await tx.wait()`. 9. When replacing a hard-coded contract address with `ethers.getContract("")`, verify the old address equals the deployment address for that contract on the target chain; if it does not match, stop and flag it. 10. If only a 4-byte selector/call-data hash is available, resolve it using 4byte API, then confirm the resolved text signature exists in the target contract ABI before coding the method call. +11. Cron nonce safety: assume action tasks share a single signer/EOA unless explicitly configured otherwise. When adding or modifying cron jobs in `contracts/cron/cron-jobs.ts`, avoid scheduling two transaction-writing actions in the same 5-minute window to reduce nonce contention/race conditions. ## 4byte Selector Resolution (Proposal) @@ -94,3 +95,4 @@ Fallback only (if contract cannot be fetched by deployment name): - Method name reflects protocol intent (better than raw selector calls). - Transaction logging uses `logTxDetails` (or an equivalent shared helper), not ad-hoc hash logging and manual waits. - For selector-based migrations, 4byte lookup was used and final method choice was validated against the local deployment ABI. +- For cron wiring changes, transaction-writing actions are not co-scheduled in the same 5-minute window; check `contracts/cron/cron-jobs.ts` for collisions before finalizing. diff --git a/contracts/tasks/actions/autoValidatorDeposits.ts b/contracts/tasks/actions/autoValidatorDeposits.ts new file mode 100644 index 0000000000..e2551db149 --- /dev/null +++ b/contracts/tasks/actions/autoValidatorDeposits.ts @@ -0,0 +1,24 @@ +/// + +import { types } from "hardhat/config"; +import { action } from "../lib/action"; + +const { autoValidatorDeposits } = require("../validatorCompound"); + +action({ + name: "autoValidatorDeposits", + chains: [1], + description: + "Automatically withdraw ETH/WETH from the strategy if needed for withdrawals, then deposit WETH to validators with a balance under 2030 ETH from the largest balance to the smallest", + params: (t) => { + t.addOptionalParam( + "dryrun", + "Do not send any txs to the staking strategy contract", + false, + types.boolean + ); + }, + run: async ({ signer, args }) => { + await autoValidatorDeposits({ ...args, signer }); + }, +}); diff --git a/contracts/tasks/actions/autoValidatorWithdrawals.ts b/contracts/tasks/actions/autoValidatorWithdrawals.ts new file mode 100644 index 0000000000..f6eb3e3d57 --- /dev/null +++ b/contracts/tasks/actions/autoValidatorWithdrawals.ts @@ -0,0 +1,30 @@ +/// + +import { types } from "hardhat/config"; +import { action } from "../lib/action"; + +const { autoValidatorWithdrawals } = require("../validatorCompound"); + +action({ + name: "autoValidatorWithdrawals", + chains: [1], + description: + "Automatically withdraw ETH from a validators if the Vault needs WETH for user withdrawals. Start with the validator with the smallest balance over 42.25 ETH.", + params: (t) => { + t.addOptionalParam( + "buffer", + "Withdrawal buffer in basis points. 100 = 1%", + 100, + types.int + ); + t.addOptionalParam( + "dryrun", + "Do not send any txs to the staking strategy contract", + false, + types.boolean + ); + }, + run: async ({ signer, args }) => { + await autoValidatorWithdrawals({ ...args, signer }); + }, +}); diff --git a/contracts/tasks/actions/snapBalances.ts b/contracts/tasks/actions/snapBalances.ts new file mode 100644 index 0000000000..4ee7a0bdd9 --- /dev/null +++ b/contracts/tasks/actions/snapBalances.ts @@ -0,0 +1,23 @@ +/// + +import { types } from "hardhat/config"; +import { action } from "../lib/action"; + +const { snapBalances } = require("../validatorCompound"); + +action({ + name: "snapBalances", + chains: [1], + description: "Takes a snapshot of the staking strategy's balance", + params: (t) => { + t.addOptionalParam( + "consol", + "Call the consolidation controller instead of the strategy", + false, + types.boolean + ); + }, + run: async ({ args }) => { + await snapBalances(args); + }, +}); diff --git a/contracts/tasks/actions/verifyBalances.ts b/contracts/tasks/actions/verifyBalances.ts new file mode 100644 index 0000000000..a72f3120d7 --- /dev/null +++ b/contracts/tasks/actions/verifyBalances.ts @@ -0,0 +1,65 @@ +/// + +import { types } from "hardhat/config"; +import { action } from "../lib/action"; + +const { verifyBalances } = require("../beacon"); + +action({ + name: "verifyBalances", + chains: [1], + description: "Verify validator balances on the Beacon chain", + params: (t) => { + t.addOptionalParam( + "slot", + "The slot snapBalances was executed. Default: last balances snapshot", + undefined, + types.int + ); + t.addOptionalParam( + "indexes", + "Comma separated list of validator indexes. Default: strategy's active validators", + undefined, + types.string + ); + t.addOptionalParam( + "deposits", + "Comma separated list of indexes to beacon chain pending deposits used for generating unit test data", + undefined, + types.string + ); + t.addOptionalParam( + "dryrun", + "Do not call verifyBalances on the strategy contract. Just log the params including the proofs", + false, + types.boolean + ); + t.addOptionalParam( + "test", + "Used for generating unit test data.", + false, + types.boolean + ); + t.addOptionalParam( + "overIds", + "A comma separated list of validator IDs to override balances.", + "", + types.string + ); + t.addOptionalParam( + "overBals", + "A comma separated list of validator balances to override in Gwei.", + "", + types.string + ); + t.addOptionalParam( + "consol", + "Call the consolidation controller instead of the strategy", + false, + types.boolean + ); + }, + run: async ({ signer, args }) => { + await verifyBalances({ ...args, signer }); + }, +}); diff --git a/contracts/tasks/actions/verifyDeposits.ts b/contracts/tasks/actions/verifyDeposits.ts new file mode 100644 index 0000000000..4866d04c99 --- /dev/null +++ b/contracts/tasks/actions/verifyDeposits.ts @@ -0,0 +1,29 @@ +/// + +import { types } from "hardhat/config"; +import { action } from "../lib/action"; + +const { verifyDeposits } = require("../beacon"); + +action({ + name: "verifyDeposits", + chains: [1], + description: "Verify any processed deposit on the Beacon chain", + params: (t) => { + t.addOptionalParam( + "dryrun", + "Do not call verifyDeposit on the strategy contract. Just log the params including the proofs", + false, + types.boolean + ); + t.addOptionalParam( + "consol", + "Call the consolidation controller instead of the strategy", + false, + types.boolean + ); + }, + run: async ({ signer, args }) => { + await verifyDeposits({ ...args, signer }); + }, +}); diff --git a/contracts/tasks/tasks.js b/contracts/tasks/tasks.js index 82fa5b0119..ee86e70fd9 100644 --- a/contracts/tasks/tasks.js +++ b/contracts/tasks/tasks.js @@ -106,14 +106,11 @@ const { } = require("./validator"); const { snapStakingStrategy, - snapBalances, registerValidatorCreateRequest, registerValidator, stakeValidator, - autoValidatorDeposits, withdrawValidator, removeValidator, - autoValidatorWithdrawals, setRegistrator, } = require("./validatorCompound"); const { tenderlySync, tenderlyUpload } = require("./tenderly"); @@ -128,8 +125,6 @@ const { getValidators, verifyValidator, verifyDeposit, - verifyDeposits, - verifyBalances, } = require("./beacon"); const { calcDepositRoot, @@ -2115,84 +2110,6 @@ task("verifyDeposit").setAction(async (_, __, runSuper) => { return runSuper(); }); -subtask("verifyDeposits", "Verify any processed deposit on the Beacon chain") - .addOptionalParam( - "dryrun", - "Do not call verifyDeposit on the strategy contract. Just log the params including the proofs", - false, - types.boolean - ) - .addOptionalParam( - "consol", - "Call the consolidation controller instead of the strategy", - false, - types.boolean - ) - .setAction(async (taskArgs) => { - const signer = await getSigner(); - await verifyDeposits({ ...taskArgs, signer }); - }); -task("verifyDeposits").setAction(async (_, __, runSuper) => { - return runSuper(); -}); - -subtask("verifyBalances", "Verify validator balances on the Beacon chain") - .addOptionalParam( - "slot", - "The slot snapBalances was executed. Default: last balances snapshot", - undefined, - types.int - ) - .addOptionalParam( - "indexes", - "Comma separated list of validator indexes. Default: strategy's active validators", - undefined, - types.string - ) - .addOptionalParam( - "deposits", - "Comma separated list of indexes to beacon chain pending deposits used for generating unit test data", - undefined, - types.string - ) - .addOptionalParam( - "dryrun", - "Do not call verifyBalances on the strategy contract. Just log the params including the proofs", - false, - types.boolean - ) - .addOptionalParam( - "test", - "Used for generating unit test data.", - false, - types.boolean - ) - .addOptionalParam( - "overIds", - "A comma separated list of validator IDs to override balances.", - "", - types.string - ) - .addOptionalParam( - "overBals", - "A comma separated list of validator balances to override in Gwei.", - "", - types.string - ) - .addOptionalParam( - "consol", - "Call the consolidation controller instead of the strategy", - false, - types.boolean - ) - .setAction(async (taskArgs) => { - const signer = await getSigner(); - await verifyBalances({ ...taskArgs, signer }); - }); -task("verifyBalances").setAction(async (_, __, runSuper) => { - return runSuper(); -}); - subtask( "requestNewValidator", "Calls P2P's Create SSV Request to prepare a new SSV compounding (0x02) validator" @@ -2252,24 +2169,6 @@ task("registerValidator").setAction(async (_, __, runSuper) => { return runSuper(); }); -subtask( - "autoValidatorDeposits", - "Automatically withdraw ETH/WETH from the strategy if needed for withdrawals, then deposit WETH to validators with a balance under 2030 ETH from the largest balance to the smallest" -) - .addParam( - "dryrun", - "Do not send any txs to the staking strategy contract", - false, - types.boolean - ) - .setAction(async (taskArgs) => { - const signer = await getSigner(); - await autoValidatorDeposits({ ...taskArgs, signer }); - }); -task("autoValidatorDeposits").setAction(async (_, __, runSuper) => { - return runSuper(); -}); - subtask( "withdrawValidator", "Requests a partial or full withdrawal from a compounding validator" @@ -2328,30 +2227,6 @@ task("removeValidator").setAction(async (_, __, runSuper) => { return runSuper(); }); -subtask( - "autoValidatorWithdrawals", - "Automatically withdraw ETH from a validators if the Vault needs WETH for user withdrawals. Start with the validator with the smallest balance over 42.25 ETH." -) - .addOptionalParam( - "buffer", - "Withdrawal buffer in basis points. 100 = 1%", - 100, - types.int - ) - .addParam( - "dryrun", - "Do not send any txs to the staking strategy contract", - false, - types.boolean - ) - .setAction(async (taskArgs) => { - const signer = await getSigner(); - await autoValidatorWithdrawals({ ...taskArgs, signer }); - }); -task("autoValidatorWithdrawals").setAction(async (_, __, runSuper) => { - return runSuper(); -}); - subtask( "stakeValidatorUuid", "Converts WETH to ETH and deposits to a validator from the Compounding Staking Strategy" @@ -2424,18 +2299,6 @@ task("stakeValidator").setAction(async (_, __, runSuper) => { return runSuper(); }); -subtask("snapBalances", "Takes a snapshot of the staking strategy's balance") - .addOptionalParam( - "consol", - "Call the consolidation controller instead of the strategy", - false, - types.boolean - ) - .setAction(snapBalances); -task("snapBalances").setAction(async (_, __, runSuper) => { - return runSuper(); -}); - subtask("snapStakingStrat", "Dumps the staking strategy's data") .addOptionalParam( "block", From 7d7060e667925cfca1c346a7a6ec2b0a959c8c48 Mon Sep 17 00:00:00 2001 From: Domen Grabec Date: Wed, 8 Apr 2026 13:59:14 +0200 Subject: [PATCH 44/62] fix cronjob collissions --- contracts/cron/cron-jobs.ts | 52 ++++++++++++++++++------------------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/contracts/cron/cron-jobs.ts b/contracts/cron/cron-jobs.ts index d971899caa..c84a9f3a19 100644 --- a/contracts/cron/cron-jobs.ts +++ b/contracts/cron/cron-jobs.ts @@ -3,56 +3,56 @@ import type { CronJob } from "./render-crontab"; export const cronJobs: CronJob[] = [ { name: "manage_merkle_morpho_bribe", - schedule: "0 13 * * 3", + schedule: "30 13 * * 3", enabled: false, permmissioned: true, command: "cd /app && pnpm hardhat manageMerklBribes --network mainnet", }, { name: "manage_curve_pb_mainnet", - schedule: "0 09 * * 5", + schedule: "30 09 * * 5", enabled: false, permmissioned: true, command: "cd /app && pnpm hardhat manageBribes --network mainnet", }, { name: "OETHandOUSD_harvest_CRV_MOPRHO_native_staking", - schedule: "40 11,23 * * *", + schedule: "25 11,23 * * *", enabled: false, permmissioned: false, command: "cd /app && pnpm hardhat harvest --network mainnet", }, { name: "OETH_native_staking_accounting", - schedule: "430 23 * * *", + schedule: "30 23 * * *", enabled: false, permmissioned: true, command: "cd /app && pnpm hardhat doAccounting --network mainnet", }, { name: "manage_pass_through", - schedule: "0 12 * * 0", + schedule: "30 12 * * 0", enabled: false, permmissioned: false, command: "cd /app && pnpm hardhat managePassThrough --network mainnet", }, { name: "claim_bribes_base", - schedule: "00 10 * * 4", + schedule: "30 10 * * 4", enabled: false, permmissioned: true, command: "cd /app && pnpm hardhat claimBribes --network base", }, { name: "manage_bribes_base", - schedule: "0 13 * * 3", + schedule: "35 13 * * 3", enabled: false, permmissioned: true, command: "cd /app && pnpm hardhat manageMerklBribes --network base", }, { name: "sonic_staking_request_withdraw", - schedule: "50 3,9,15,21 * * *", + schedule: "35 3,9,15,21 * * *", enabled: false, permmissioned: true, command: "cd /app && pnpm hardhat sonicUndelegate --network sonic", @@ -80,53 +80,53 @@ export const cronJobs: CronJob[] = [ }, { name: "hourly_verify_balances", - schedule: "8 * * * *", + schedule: "6 * * * *", enabled: false, command: "cd /app && pnpm hardhat verifyBalances --network ${HARDHAT_NETWORK:-mainnet}", }, { name: "hourly_verify_deposits", - schedule: "10 * * * *", + schedule: "11 * * * *", enabled: false, command: "cd /app && pnpm hardhat verifyDeposits --network ${HARDHAT_NETWORK:-mainnet}", }, { name: "hourly_auto_validator_deposits", - schedule: "12 * * * *", + schedule: "16 * * * *", enabled: false, command: "cd /app && pnpm hardhat autoValidatorDeposits --network ${HARDHAT_NETWORK:-mainnet}", }, { name: "hourly_auto_validator_withdrawals", - schedule: "14 * * * *", + schedule: "21 * * * *", enabled: false, command: "cd /app && pnpm hardhat autoValidatorWithdrawals --network ${HARDHAT_NETWORK:-mainnet}", }, { name: "daily_rebase_mainnet_oeth", - schedule: "0 0 * * *", + schedule: "30 0 * * *", enabled: true, command: "cd /app && pnpm hardhat rebase --network mainnet --symbol OETH", }, { name: "daily_rebase_mainnet_ousd", - schedule: "10 0 * * *", + schedule: "35 0 * * *", enabled: true, command: "cd /app && pnpm hardhat rebase --network mainnet --symbol OUSD", }, { name: "daily_rebase_base_oeth", - schedule: "20 0 * * *", + schedule: "40 0 * * *", enabled: true, command: "cd /app && pnpm hardhat rebase --network base --symbol OETH", }, { name: "otoken_os_collectAndRelease", - schedule: "50 23 * * *", + schedule: "55 23 * * *", enabled: false, permmissioned: false, command: @@ -134,14 +134,14 @@ export const cronJobs: CronJob[] = [ }, { name: "otoken_ousd_autoWithdrawal", - schedule: "40 11,23 * * *", + schedule: "35 11,23 * * *", enabled: false, command: "cd /app && pnpm hardhat otokenOusdAutoWithdrawal --network mainnet", }, { name: "otoken_oethb_updateWoethPrice", - schedule: "10 21 * * *", + schedule: "30 21 * * *", enabled: false, permmissioned: false, command: @@ -149,7 +149,7 @@ export const cronJobs: CronJob[] = [ }, { name: "otoken_oethp_addWithdrawalQueueLiquidity", - schedule: "5 0 * * *", + schedule: "25 0 * * *", enabled: false, permmissioned: false, command: @@ -164,47 +164,47 @@ export const cronJobs: CronJob[] = [ }, { name: "otoken_os_sonicRestakeRewards", - schedule: "55 23 * * *", + schedule: "52 22 * * *", enabled: false, command: "cd /app && pnpm hardhat otokenOsSonicRestakeRewards --network sonic", }, { name: "crossChainBalanceUpdate-base", - schedule: "15 7,15,23 * * *", + schedule: "40 7,15,23 * * *", enabled: false, command: "cd /app && pnpm hardhat crossChainBalanceUpdateBase --network base", }, { name: "crossChainBalanceUpdate-hyperevm", - schedule: "15 7,15,23 * * *", + schedule: "50 7,15,23 * * *", enabled: false, command: "cd /app && pnpm hardhat crossChainBalanceUpdateHyperevm --network hyperevm", }, { name: "claim_ssv_rewards", - schedule: "0 0 1 * *", + schedule: "45 0 1 * *", enabled: false, command: "cd /app && pnpm hardhat claimSSVRewards --network mainnet", }, { name: "otoken_ousd_oeth_rebase", - schedule: "50 11,23 * * *", + schedule: "45 11,23 * * *", enabled: false, command: "cd /app && pnpm hardhat otokenOusdOethRebase --network mainnet", }, { name: "ogn_claimAndForwardRewards", - schedule: "0 0 * * 2", + schedule: "50 0 * * 2", enabled: false, command: "cd /app && pnpm hardhat ognClaimAndForwardRewards --network mainnet", }, { name: "otoken_oethb_harvest", - schedule: "50 11 * * *", + schedule: "55 11 * * *", enabled: false, permmissioned: false, command: "cd /app && pnpm hardhat otokenOethbHarvest --network base", From 5a587ceeeb9e4f0d8b2c3ee770105b68ac7a0279 Mon Sep 17 00:00:00 2001 From: Domen Grabec Date: Thu, 9 Apr 2026 13:14:52 +0200 Subject: [PATCH 45/62] add votemarket call --- contracts/cron/cron-jobs.ts | 10 +++- .../updateVotemarketEpochs.js | 52 ------------------ .../tasks/actions/updateVotemarketEpochs.ts | 24 ++++++++ contracts/tasks/tasks.js | 55 +------------------ contracts/tasks/votemarket.js | 26 +++++---- 5 files changed, 48 insertions(+), 119 deletions(-) delete mode 100644 contracts/scripts/defender-actions/updateVotemarketEpochs.js create mode 100644 contracts/tasks/actions/updateVotemarketEpochs.ts diff --git a/contracts/cron/cron-jobs.ts b/contracts/cron/cron-jobs.ts index c84a9f3a19..9ed435b578 100644 --- a/contracts/cron/cron-jobs.ts +++ b/contracts/cron/cron-jobs.ts @@ -15,6 +15,14 @@ export const cronJobs: CronJob[] = [ permmissioned: true, command: "cd /app && pnpm hardhat manageBribes --network mainnet", }, + { + name: "update_votemarket_epochs", + schedule: "0 6 * * 5", + enabled: false, + permmissioned: true, + command: + "cd /app && pnpm hardhat updateVotemarketEpochs --network arbitrumOne", + }, { name: "OETHandOUSD_harvest_CRV_MOPRHO_native_staking", schedule: "25 11,23 * * *", @@ -73,7 +81,7 @@ export const cronJobs: CronJob[] = [ }, { name: "hourly_snap_balances", - schedule: "0 * * * *", + schedule: "2 * * * *", enabled: false, command: "cd /app && pnpm hardhat snapBalances --network ${HARDHAT_NETWORK:-mainnet}", diff --git a/contracts/scripts/defender-actions/updateVotemarketEpochs.js b/contracts/scripts/defender-actions/updateVotemarketEpochs.js deleted file mode 100644 index 3b4a49a704..0000000000 --- a/contracts/scripts/defender-actions/updateVotemarketEpochs.js +++ /dev/null @@ -1,52 +0,0 @@ -const { ethers } = require("ethers"); -const { Defender } = require("@openzeppelin/defender-sdk"); - -const { updateVotemarketEpochs } = require("../../tasks/votemarket"); - -const log = require("../../utils/logger")("action:updateVotemarketEpochs"); - -// Entrypoint for the Defender Action -const handler = async (event) => { - console.log( - `DEBUG env var in handler before being set: "${process.env.DEBUG}"` - ); - - // Initialize defender relayer provider and signer (Arbitrum relayer) - const client = new Defender(event); - const arbitrumProvider = client.relaySigner.getProvider({ - ethersVersion: "v5", - }); - const { chainId } = await arbitrumProvider.getNetwork(); - - if (chainId !== 42161) { - throw new Error( - `Defender relayer must be on Arbitrum (42161), got chainId ${chainId}` - ); - } - - const arbitrumSigner = await client.relaySigner.getSigner(arbitrumProvider, { - speed: "fastest", - ethersVersion: "v5", - }); - - // Create read-only Mainnet provider - if (!event.secrets.PROVIDER_URL) { - throw new Error("PROVIDER_URL secret required for Mainnet connection"); - } - const mainnetProvider = new ethers.providers.JsonRpcProvider( - event.secrets.PROVIDER_URL - ); - - const dryRun = event.request?.body?.dryRun ?? false; - - log(`Starting updateVotemarketEpochs, dryRun=${dryRun}`); - - await updateVotemarketEpochs({ - mainnetProvider, - arbitrumProvider, - arbitrumSigner, - dryRun, - }); -}; - -module.exports = { handler }; diff --git a/contracts/tasks/actions/updateVotemarketEpochs.ts b/contracts/tasks/actions/updateVotemarketEpochs.ts new file mode 100644 index 0000000000..79f7a26922 --- /dev/null +++ b/contracts/tasks/actions/updateVotemarketEpochs.ts @@ -0,0 +1,24 @@ +/// + +import { types } from "hardhat/config"; +import { action } from "../lib/action"; + +const { updateVotemarketEpochsTask } = require("../votemarket"); + +action({ + name: "updateVotemarketEpochs", + chains: [42161], // Arbitrum + description: + "Update Votemarket epochs for all Curve Pool Booster campaigns on Arbitrum", + params: (t) => { + t.addOptionalParam( + "dryRun", + "If true, log actions but do not send transactions", + false, + types.boolean + ); + }, + run: async ({ args }) => { + await updateVotemarketEpochsTask({ ...args }); + }, +}); diff --git a/contracts/tasks/tasks.js b/contracts/tasks/tasks.js index 4e6ea71d66..200c11c4aa 100644 --- a/contracts/tasks/tasks.js +++ b/contracts/tasks/tasks.js @@ -66,8 +66,7 @@ const { curveSwapTask, curvePoolTask, } = require("./curve"); -const { calculateMaxPricePerVoteTask, manageBribes } = require("./poolBooster"); -const { updateVotemarketEpochsTask } = require("./votemarket"); +const { calculateMaxPricePerVoteTask } = require("./poolBooster"); const { manageMerklBribesTask } = require("./merklPoolBooster"); const { depositSSV, @@ -730,58 +729,6 @@ task("calculateMaxPricePerVote").setAction(async (_, __, runSuper) => { return runSuper(); }); -subtask( - "manageCurvePoolBoosterBribes", - "Calls manageBribes on the CurvePoolBoosterBribesModule and calculates the rewards per vote based on the target efficiency" -) - .addOptionalParam( - "efficiency", - "Target efficiency (0-10, e.g. 1 for 100%, 0.5 for 50%)", - "1", - types.string - ) - .addOptionalParam( - "skipRewardPerVote", - "Skip setting RewardPerVote (pass array of zeros)", - false, - types.boolean - ) - .addOptionalParam( - "chunkSize", - "Number of pool boosters to manage per transaction", - 4, - types.int - ) - .setAction(async (taskArgs) => { - // This action only works with the Defender Relayer signer - const signer = await getDefenderSigner(); - await manageBribes({ - signer, - provider: signer.provider, - targetEfficiency: taskArgs.efficiency, - skipRewardPerVote: taskArgs.skipRewardPerVote, - chunkSize: taskArgs.chunkSize, - }); - }); -task("manageCurvePoolBoosterBribes").setAction(async (_, __, runSuper) => { - return runSuper(); -}); - -subtask( - "updateVotemarketEpochs", - "Update Votemarket epochs for all Curve Pool Booster campaigns on Arbitrum" -) - .addOptionalParam( - "dryRun", - "If true, log actions but do not send transactions", - true, - types.boolean - ) - .setAction(updateVotemarketEpochsTask); -task("updateVotemarketEpochs").setAction(async (_, __, runSuper) => { - return runSuper(); -}); - subtask( "manageMerklPoolBoosterBribes", "Calls bribeAll on the MerklPoolBoosterBribesModule through the Gnosis Safe" diff --git a/contracts/tasks/votemarket.js b/contracts/tasks/votemarket.js index af5258a409..9084e7fbc4 100644 --- a/contracts/tasks/votemarket.js +++ b/contracts/tasks/votemarket.js @@ -1,8 +1,7 @@ const { Contract } = require("ethers"); -const { Wallet } = require("ethers"); - const addresses = require("../utils/addresses"); +const { getSigner } = require("../utils/signers"); const log = require("../utils/logger")("task:votemarket"); // Contract addresses @@ -160,15 +159,11 @@ async function updateVotemarketEpochs({ async function updateVotemarketEpochsTask(taskArguments) { const dryRun = taskArguments.dryRun !== false; - // Detect mainnet vs fork from hardhat's ethers provider - const mainnetProvider = ethers.provider; - // Create Arbitrum provider from env var - const arbitrumRpcUrl = - process.env.ARBITRUM_PROVIDER_URL || process.env.PROVIDER_URL; + const arbitrumRpcUrl = process.env.ARBITRUM_PROVIDER_URL; if (!arbitrumRpcUrl) { throw new Error( - "ARBITRUM_PROVIDER_URL or PROVIDER_URL env var required for Arbitrum connection" + "ARBITRUM_PROVIDER_URL env var required for Arbitrum connection" ); } @@ -176,16 +171,23 @@ async function updateVotemarketEpochsTask(taskArguments) { const arbitrumProvider = new ethersLib.providers.JsonRpcProvider( arbitrumRpcUrl ); + const mainnetProvider = new ethersLib.providers.JsonRpcProvider( + process.env.PROVIDER_URL + ); + let arbitrumSigner = null; if (!dryRun) { - const pk = process.env.DEPLOYER_PK || process.env.GOVERNOR_PK; - if (!pk) { + const signer = await getSigner(); + console.log("signer", await signer.getAddress()); + try { + arbitrumSigner = signer; + log(`Using signer ${await signer.getAddress()} for Arbitrum`); + } catch (err) { throw new Error( - "DEPLOYER_PK or GOVERNOR_PK env var required for non-dry-run mode" + `Failed to bind signer to Arbitrum provider: ${err.message}` ); } - arbitrumSigner = new Wallet(pk, arbitrumProvider); } await updateVotemarketEpochs({ From e1b7857fb0f949acb82be1d11e2365dcc654304e Mon Sep 17 00:00:00 2001 From: Domen Grabec Date: Thu, 9 Apr 2026 13:33:06 +0200 Subject: [PATCH 46/62] separate cross chain message --- contracts/tasks/actions/relayCCTPMessage.ts | 60 +++++++++++++++++ contracts/tasks/crossChain.js | 2 + contracts/tasks/tasks.js | 75 +-------------------- contracts/tasks/votemarket.js | 1 - 4 files changed, 63 insertions(+), 75 deletions(-) create mode 100644 contracts/tasks/actions/relayCCTPMessage.ts diff --git a/contracts/tasks/actions/relayCCTPMessage.ts b/contracts/tasks/actions/relayCCTPMessage.ts new file mode 100644 index 0000000000..d6e88327e7 --- /dev/null +++ b/contracts/tasks/actions/relayCCTPMessage.ts @@ -0,0 +1,60 @@ +/// + +import path from "path"; +import { types } from "hardhat/config"; +import { configuration } from "../../utils/cctp"; +import { keyValueStoreLocalClient } from "../../utils/defender"; +import { processCctpBridgeTransactions } from "../crossChain"; +import { action } from "../lib/action"; + +action({ + name: "relayCCTPMessage", + description: + "Fetches CCTP attested Messages via Circle Gateway API and relays it to the integrator contract", + chains: [1, 8453], + params: (t) => { + t.addOptionalParam( + "block", + "Override the block number at which the message emission transaction happened", + undefined, + types.int + ); + t.addOptionalParam( + "dryrun", + "Do not call verifyBalances on the strategy contract. Just log the params including the proofs", + false, + types.boolean + ); + }, + run: async ({ signer, networkName, args }) => { + const storeFilePath = path.join( + __dirname, + "..", + `.localKeyValueStorage.${networkName}` + ); + const store = keyValueStoreLocalClient({ _storePath: storeFilePath }); + + let config; + if (networkName === "mainnet") { + config = configuration.mainnetBaseMorpho.mainnet; + } else if (networkName === "base") { + config = configuration.mainnetBaseMorpho.base; + } else { + throw new Error(`Unsupported network name: ${networkName}`); + } + + await processCctpBridgeTransactions({ + ...args, + destinationChainSigner: signer, + sourceChainProvider: hre.ethers.provider, + store, + networkName, + blockLookback: config.blockLookback, + cctpDestinationDomainId: config.cctpDestinationDomainId, + cctpSourceDomainId: config.cctpSourceDomainId, + cctpIntegrationContractAddress: config.cctpIntegrationContractAddress, + cctpIntegrationContractAddressDestination: + config.cctpIntegrationContractAddressDestination, + }); + }, +}); diff --git a/contracts/tasks/crossChain.js b/contracts/tasks/crossChain.js index 076056291a..05ca42f98c 100644 --- a/contracts/tasks/crossChain.js +++ b/contracts/tasks/crossChain.js @@ -50,6 +50,8 @@ const fetchAttestation = async ({ transactionHash, cctpChainId }) => { } const resultJson = await response.json(); + console.log("resultJson", resultJson); + if (resultJson.messages.length !== 1) { throw new Error( `Expected 1 attestation, got ${resultJson.messages.length}` diff --git a/contracts/tasks/tasks.js b/contracts/tasks/tasks.js index 200c11c4aa..1325d65b18 100644 --- a/contracts/tasks/tasks.js +++ b/contracts/tasks/tasks.js @@ -20,7 +20,7 @@ const { encryptMasterPrivateKey, decryptMasterPrivateKey, } = require("./amazon"); -const { getSigner, getKmsSigner } = require("../utils/signers"); +const { getSigner } = require("../utils/signers"); const { snapMorpho } = require("../utils/morpho"); const { snapAero } = require("./aero"); const { @@ -141,9 +141,6 @@ const { getConsolidationFee, } = require("./consolidation"); -const { processCctpBridgeTransactions } = require("./crossChain"); -const { keyValueStoreLocalClient } = require("../utils/defender"); -const { configuration } = require("../utils/cctp"); const { withTaskSignerContext, DEFAULT_KMS_RELAYER_ID, @@ -1230,76 +1227,6 @@ task("deployStakingProxy").setAction(async (_, __, runSuper) => { // Validator Operations -/** - * This function relays the messages between mainnet and base networks. - * - * IMPORTANT!!! - * If possible please use the defender action and not local execution. The defender action stores into the cloud - * key-value store the transaction hashes that have already been relayed. Relaying the transaction via this task - * will make the defender relayer continuously fail relaying the transaction that has already been processed. - * If the action is ran every ~12 hours and looks back for ~1 day worth of blocks it might fail to run 2-3 times and - * then skip some pending transactions that would need relaying. - */ -task( - "relayCCTPMessage", - "Fetches CCTP attested Messages via Circle Gateway API and relays it to the integrator contract" -) - .addOptionalParam( - "block", - "Override the block number at which the message emission transaction happened", - undefined, - types.int - ) - .addOptionalParam( - "dryrun", - "Do not call verifyBalances on the strategy contract. Just log the params including the proofs", - false, - types.boolean - ) - .setAction(async (taskArgs) => { - const networkName = await getNetworkName(); - const storeFilePath = require("path").join( - __dirname, - "..", - `.localKeyValueStorage.${networkName}` - ); - - // This action used to only work with defender relayer signer, - // in future it will work with KMS signer - const signer = await getKmsSigner(); - const store = keyValueStoreLocalClient({ _storePath: storeFilePath }); - - const isMainnet = networkName === "mainnet"; - const isBase = networkName === "base"; - - let config; - if (isMainnet) { - config = configuration.mainnetBaseMorpho.mainnet; - } else if (isBase) { - config = configuration.mainnetBaseMorpho.base; - } else { - throw new Error(`Unsupported network name: ${networkName}`); - } - - await processCctpBridgeTransactions({ - ...taskArgs, - destinationChainSigner: signer, - sourceChainProvider: ethers.provider, - store, - networkName, - blockLookback: config.blockLookback, - cctpDestinationDomainId: config.cctpDestinationDomainId, - cctpSourceDomainId: config.cctpSourceDomainId, - cctpIntegrationContractAddress: config.cctpIntegrationContractAddress, - cctpIntegrationContractAddressDestination: - config.cctpIntegrationContractAddressDestination, - }); - }); - -task("relayCCTPMessage").setAction(async (_, __, runSuper) => { - return runSuper(); -}); - subtask("exitValidator", "Starts the exit process from a validator") .addParam( "pubkey", diff --git a/contracts/tasks/votemarket.js b/contracts/tasks/votemarket.js index 9084e7fbc4..8f8f1a5972 100644 --- a/contracts/tasks/votemarket.js +++ b/contracts/tasks/votemarket.js @@ -175,7 +175,6 @@ async function updateVotemarketEpochsTask(taskArguments) { process.env.PROVIDER_URL ); - let arbitrumSigner = null; if (!dryRun) { const signer = await getSigner(); From 5dd743c195e6a594a0f2889719c62a4ada58a5fe Mon Sep 17 00:00:00 2001 From: Domen Grabec Date: Thu, 9 Apr 2026 14:10:51 +0200 Subject: [PATCH 47/62] add cross chain actions --- contracts/cron/cron-jobs.ts | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/contracts/cron/cron-jobs.ts b/contracts/cron/cron-jobs.ts index 9ed435b578..c9c37c3055 100644 --- a/contracts/cron/cron-jobs.ts +++ b/contracts/cron/cron-jobs.ts @@ -191,6 +191,18 @@ export const cronJobs: CronJob[] = [ command: "cd /app && pnpm hardhat crossChainBalanceUpdateHyperevm --network hyperevm", }, + { + name: "cross_chain_base_mainnet", + schedule: "27 2,8,14,20 * * *", + enabled: false, + command: "cd /app && pnpm hardhat relayCCTPMessage --network base", + }, + { + name: "cross_chain_mainnet_base", + schedule: "43 4,10,16,22 * * *", + enabled: false, + command: "cd /app && pnpm hardhat relayCCTPMessage --network mainnet", + }, { name: "claim_ssv_rewards", schedule: "45 0 1 * *", From ef16785c7a0449d2d97722690b6dd85dc0ce6d4a Mon Sep 17 00:00:00 2001 From: Domen Grabec Date: Thu, 9 Apr 2026 15:09:37 +0200 Subject: [PATCH 48/62] cross chain strategy actions --- contracts/cron/cron-jobs.ts | 41 +++++++++++-------- contracts/cron/render-crontab.ts | 1 + .../actions/crossChainBalanceUpdateBase.ts | 39 ++++++++++++++---- .../crossChainBalanceUpdateHyperevm.ts | 39 ++++++++++++++---- 4 files changed, 85 insertions(+), 35 deletions(-) diff --git a/contracts/cron/cron-jobs.ts b/contracts/cron/cron-jobs.ts index c9c37c3055..7667bcba18 100644 --- a/contracts/cron/cron-jobs.ts +++ b/contracts/cron/cron-jobs.ts @@ -80,39 +80,44 @@ export const cronJobs: CronJob[] = [ "cd /app && pnpm hardhat healthcheck --network ${HARDHAT_NETWORK:-mainnet}", }, { - name: "hourly_snap_balances", - schedule: "2 * * * *", + name: "daily_snap_balances", + schedule: "2 0 * * *", enabled: false, + comment: "Remove --consol true once the consolidation is finished", command: - "cd /app && pnpm hardhat snapBalances --network ${HARDHAT_NETWORK:-mainnet}", + "cd /app && pnpm hardhat snapBalances --network mainnet --consol true", }, { - name: "hourly_verify_balances", - schedule: "6 * * * *", + name: "daily_verify_balances", + schedule: "6 0 * * *", enabled: false, + comment: "Remove --consol true once the consolidation is finished", command: - "cd /app && pnpm hardhat verifyBalances --network ${HARDHAT_NETWORK:-mainnet}", + "cd /app && pnpm hardhat verifyBalances --network mainnet --consol true", }, { - name: "hourly_verify_deposits", - schedule: "11 * * * *", + name: "daily_verify_deposits", + schedule: "11 */4 * * *", enabled: false, - command: - "cd /app && pnpm hardhat verifyDeposits --network ${HARDHAT_NETWORK:-mainnet}", + comment: "This is disabled until we are finished with consolidations", + command: "cd /app && pnpm hardhat verifyDeposits --network mainnet", }, { - name: "hourly_auto_validator_deposits", - schedule: "16 * * * *", + name: "daily_auto_validator_deposits", + schedule: "14 1 * * *", enabled: false, - command: - "cd /app && pnpm hardhat autoValidatorDeposits --network ${HARDHAT_NETWORK:-mainnet}", + comment: + "Don't enable this in the near future as deposit queue is 50 days long.", + command: "cd /app && pnpm hardhat autoValidatorDeposits --network mainnet", }, { - name: "hourly_auto_validator_withdrawals", - schedule: "21 * * * *", + name: "daily_auto_validator_withdrawals", + schedule: "24 1 * * *", enabled: false, + comment: + "Don't enable this in the near future as deposit queue is 50 days long and we rather use AMO for the liquidity", command: - "cd /app && pnpm hardhat autoValidatorWithdrawals --network ${HARDHAT_NETWORK:-mainnet}", + "cd /app && pnpm hardhat autoValidatorWithdrawals --network mainnet", }, { name: "daily_rebase_mainnet_oeth", @@ -195,12 +200,14 @@ export const cronJobs: CronJob[] = [ name: "cross_chain_base_mainnet", schedule: "27 2,8,14,20 * * *", enabled: false, + permmissioned: true, command: "cd /app && pnpm hardhat relayCCTPMessage --network base", }, { name: "cross_chain_mainnet_base", schedule: "43 4,10,16,22 * * *", enabled: false, + permmissioned: true, command: "cd /app && pnpm hardhat relayCCTPMessage --network mainnet", }, { diff --git a/contracts/cron/render-crontab.ts b/contracts/cron/render-crontab.ts index c589887e17..989fabfdc3 100644 --- a/contracts/cron/render-crontab.ts +++ b/contracts/cron/render-crontab.ts @@ -13,6 +13,7 @@ export interface CronJob { enabled: boolean; permmissioned?: boolean; command: string; + comment?: string; } export interface CronConfig { diff --git a/contracts/tasks/actions/crossChainBalanceUpdateBase.ts b/contracts/tasks/actions/crossChainBalanceUpdateBase.ts index 959b7c660e..29b5790c61 100644 --- a/contracts/tasks/actions/crossChainBalanceUpdateBase.ts +++ b/contracts/tasks/actions/crossChainBalanceUpdateBase.ts @@ -1,21 +1,42 @@ -import { encodeFunctionData, parseAbi } from "viem"; +/// +import addresses from "../../utils/addresses"; +import { logTxDetails } from "../../utils/txLogger"; import { action } from "../lib/action"; -const CROSS_CHAIN_CONTROLLER = "0xB1d624fc40824683e2bFBEfd19eB208DbBE00866"; -const abi = parseAbi(["function sendBalanceUpdate() external"]); +const EXPECTED_CROSS_CHAIN_CONTROLLER = + "0xB1d624fc40824683e2bFBEfd19eB208DbBE00866"; action({ name: "crossChainBalanceUpdateBase", description: "Send cross-chain balance update from Base", chains: [8453], - run: async ({ signer, log }) => { - const tx = await signer.sendTransaction({ - to: CROSS_CHAIN_CONTROLLER, - data: encodeFunctionData({ abi, functionName: "sendBalanceUpdate" }), + run: async ({ signer, log, networkName }) => { + const strategyAddress = (addresses as any)[networkName] + .CrossChainRemoteStrategy; + if (!strategyAddress) { + throw new Error( + `CrossChainRemoteStrategy address missing for network ${networkName}` + ); + } + if ( + strategyAddress.toLowerCase() !== + EXPECTED_CROSS_CHAIN_CONTROLLER.toLowerCase() + ) { + throw new Error( + `CrossChainRemoteStrategy address mismatch: expected ${EXPECTED_CROSS_CHAIN_CONTROLLER}, got ${strategyAddress}` + ); + } + + const strategy = await hre.ethers.getContractAt( + "CrossChainRemoteStrategy", + strategyAddress + ); + log.info(`Calling sendBalanceUpdate on ${strategy.address}`); + + const tx = await strategy.connect(signer).sendBalanceUpdate({ gasLimit: 1000000, }); - log.info(`sendBalanceUpdate tx: ${tx.hash}`); - await tx.wait(); + await logTxDetails(tx, "sendBalanceUpdate on CrossChainRemoteStrategy"); }, }); diff --git a/contracts/tasks/actions/crossChainBalanceUpdateHyperevm.ts b/contracts/tasks/actions/crossChainBalanceUpdateHyperevm.ts index 4a9f9593f5..994c5c8f2e 100644 --- a/contracts/tasks/actions/crossChainBalanceUpdateHyperevm.ts +++ b/contracts/tasks/actions/crossChainBalanceUpdateHyperevm.ts @@ -1,21 +1,42 @@ -import { encodeFunctionData, parseAbi } from "viem"; +/// +import addresses from "../../utils/addresses"; +import { logTxDetails } from "../../utils/txLogger"; import { action } from "../lib/action"; -const CROSS_CHAIN_CONTROLLER = "0xE0228DB13F8C4Eb00fD1e08e076b09eF5cD0EA1e"; -const abi = parseAbi(["function sendBalanceUpdate() external"]); +const EXPECTED_CROSS_CHAIN_CONTROLLER = + "0xE0228DB13F8C4Eb00fD1e08e076b09eF5cD0EA1e"; action({ name: "crossChainBalanceUpdateHyperevm", description: "Send cross-chain balance update from HyperEVM", chains: [999], - run: async ({ signer, log }) => { - const tx = await signer.sendTransaction({ - to: CROSS_CHAIN_CONTROLLER, - data: encodeFunctionData({ abi, functionName: "sendBalanceUpdate" }), + run: async ({ signer, log, networkName }) => { + const strategyAddress = (addresses as any)[networkName] + .CrossChainRemoteStrategy; + if (!strategyAddress) { + throw new Error( + `CrossChainRemoteStrategy address missing for network ${networkName}` + ); + } + if ( + strategyAddress.toLowerCase() !== + EXPECTED_CROSS_CHAIN_CONTROLLER.toLowerCase() + ) { + throw new Error( + `CrossChainRemoteStrategy address mismatch: expected ${EXPECTED_CROSS_CHAIN_CONTROLLER}, got ${strategyAddress}` + ); + } + + const strategy = await hre.ethers.getContractAt( + "CrossChainRemoteStrategy", + strategyAddress + ); + log.info(`Calling sendBalanceUpdate on ${strategy.address}`); + + const tx = await strategy.connect(signer).sendBalanceUpdate({ gasLimit: 1000000, }); - log.info(`sendBalanceUpdate tx: ${tx.hash}`); - await tx.wait(); + await logTxDetails(tx, "sendBalanceUpdate on CrossChainRemoteStrategy"); }, }); From b8e6ecaefa598fa5ab9b750fa9638741a21f02d6 Mon Sep 17 00:00:00 2001 From: Domen Grabec Date: Thu, 9 Apr 2026 15:34:39 +0200 Subject: [PATCH 49/62] add hyperliquid cron config --- contracts/cron/cron-jobs.ts | 2 ++ contracts/dev.env | 1 + 2 files changed, 3 insertions(+) diff --git a/contracts/cron/cron-jobs.ts b/contracts/cron/cron-jobs.ts index 7667bcba18..94d53f72b6 100644 --- a/contracts/cron/cron-jobs.ts +++ b/contracts/cron/cron-jobs.ts @@ -186,6 +186,7 @@ export const cronJobs: CronJob[] = [ name: "crossChainBalanceUpdate-base", schedule: "40 7,15,23 * * *", enabled: false, + permmissioned: true, command: "cd /app && pnpm hardhat crossChainBalanceUpdateBase --network base", }, @@ -193,6 +194,7 @@ export const cronJobs: CronJob[] = [ name: "crossChainBalanceUpdate-hyperevm", schedule: "50 7,15,23 * * *", enabled: false, + permmissioned: true, command: "cd /app && pnpm hardhat crossChainBalanceUpdateHyperevm --network hyperevm", }, diff --git a/contracts/dev.env b/contracts/dev.env index 5cbed3b657..36d2e24fb9 100644 --- a/contracts/dev.env +++ b/contracts/dev.env @@ -5,6 +5,7 @@ PROVIDER_URL=[SET PROVIDER URL HERE] SONIC_PROVIDER_URL=https://rpc.soniclabs.com PLUME_PROVIDER_URL=https://rpc.plume.org HOODI_PROVIDER_URL=https://rpc.hoodi.ethpandaops.io +HYPEREVM_PROVIDER_URL=https://lb.drpc.org/hyperliquid/.... # Set it to latest block number or leave it empty # BLOCK_NUMBER= From 836c9bb8c08c2c4ca4c8f6e0ecef3578fdbc5c46 Mon Sep 17 00:00:00 2001 From: Domen Grabec Date: Thu, 9 Apr 2026 16:33:54 +0200 Subject: [PATCH 50/62] add hyper-evm actions --- contracts/cron/cron-jobs.ts | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/contracts/cron/cron-jobs.ts b/contracts/cron/cron-jobs.ts index 94d53f72b6..992d078f33 100644 --- a/contracts/cron/cron-jobs.ts +++ b/contracts/cron/cron-jobs.ts @@ -212,6 +212,22 @@ export const cronJobs: CronJob[] = [ permmissioned: true, command: "cd /app && pnpm hardhat relayCCTPMessage --network mainnet", }, + { + name: "cross_chain_hyper_mainnet", + schedule: "17 1,6,11,16,21 * * *", + enabled: false, + permmissioned: true, + command: + "cd /app && pnpm hardhat crossChainRelayHyperEVM --network hyperevm", + }, + { + name: "cross_chain_mainnet_hyper", + schedule: "7 3,8,13,18,23 * * *", + enabled: false, + permmissioned: true, + command: + "cd /app && pnpm hardhat crossChainRelayHyperEVM --network mainnet", + }, { name: "claim_ssv_rewards", schedule: "45 0 1 * *", From 7d9da2397743a294c8f725896632a7b86b6f383d Mon Sep 17 00:00:00 2001 From: Domen Grabec Date: Thu, 9 Apr 2026 16:36:02 +0200 Subject: [PATCH 51/62] add comments explaining frequency --- contracts/cron/cron-jobs.ts | 74 ++++++++++++++++++------------------- 1 file changed, 37 insertions(+), 37 deletions(-) diff --git a/contracts/cron/cron-jobs.ts b/contracts/cron/cron-jobs.ts index 992d078f33..37024e5d21 100644 --- a/contracts/cron/cron-jobs.ts +++ b/contracts/cron/cron-jobs.ts @@ -3,21 +3,21 @@ import type { CronJob } from "./render-crontab"; export const cronJobs: CronJob[] = [ { name: "manage_merkle_morpho_bribe", - schedule: "30 13 * * 3", + schedule: "30 13 * * 3", // weekly (Wednesday) enabled: false, permmissioned: true, command: "cd /app && pnpm hardhat manageMerklBribes --network mainnet", }, { name: "manage_curve_pb_mainnet", - schedule: "30 09 * * 5", + schedule: "30 09 * * 5", // weekly (Friday) enabled: false, permmissioned: true, command: "cd /app && pnpm hardhat manageBribes --network mainnet", }, { name: "update_votemarket_epochs", - schedule: "0 6 * * 5", + schedule: "0 6 * * 5", // weekly (Friday) enabled: false, permmissioned: true, command: @@ -25,63 +25,63 @@ export const cronJobs: CronJob[] = [ }, { name: "OETHandOUSD_harvest_CRV_MOPRHO_native_staking", - schedule: "25 11,23 * * *", + schedule: "25 11,23 * * *", // twice daily enabled: false, permmissioned: false, command: "cd /app && pnpm hardhat harvest --network mainnet", }, { name: "OETH_native_staking_accounting", - schedule: "30 23 * * *", + schedule: "30 23 * * *", // daily enabled: false, permmissioned: true, command: "cd /app && pnpm hardhat doAccounting --network mainnet", }, { name: "manage_pass_through", - schedule: "30 12 * * 0", + schedule: "30 12 * * 0", // weekly (Sunday) enabled: false, permmissioned: false, command: "cd /app && pnpm hardhat managePassThrough --network mainnet", }, { name: "claim_bribes_base", - schedule: "30 10 * * 4", + schedule: "30 10 * * 4", // weekly (Thursday) enabled: false, permmissioned: true, command: "cd /app && pnpm hardhat claimBribes --network base", }, { name: "manage_bribes_base", - schedule: "35 13 * * 3", + schedule: "35 13 * * 3", // weekly (Wednesday) enabled: false, permmissioned: true, command: "cd /app && pnpm hardhat manageMerklBribes --network base", }, { name: "sonic_staking_request_withdraw", - schedule: "35 3,9,15,21 * * *", + schedule: "35 3,9,15,21 * * *", // 4 times daily enabled: false, permmissioned: true, command: "cd /app && pnpm hardhat sonicUndelegate --network sonic", }, { name: "sonic_staking_claim_withdraw", - schedule: "58 */2 * * *", + schedule: "58 */2 * * *", // every 2 hours (12 times daily) enabled: false, permmissioned: true, command: "cd /app && pnpm hardhat sonicClaimWithdrawals --network sonic", }, { name: "healthcheck", - schedule: "*/5 * * * *", + schedule: "*/5 * * * *", // every 5 minutes enabled: true, command: "cd /app && pnpm hardhat healthcheck --network ${HARDHAT_NETWORK:-mainnet}", }, { name: "daily_snap_balances", - schedule: "2 0 * * *", + schedule: "2 0 * * *", // daily enabled: false, comment: "Remove --consol true once the consolidation is finished", command: @@ -89,7 +89,7 @@ export const cronJobs: CronJob[] = [ }, { name: "daily_verify_balances", - schedule: "6 0 * * *", + schedule: "6 0 * * *", // daily enabled: false, comment: "Remove --consol true once the consolidation is finished", command: @@ -97,14 +97,14 @@ export const cronJobs: CronJob[] = [ }, { name: "daily_verify_deposits", - schedule: "11 */4 * * *", + schedule: "11 */4 * * *", // every 4 hours (6 times daily) enabled: false, comment: "This is disabled until we are finished with consolidations", command: "cd /app && pnpm hardhat verifyDeposits --network mainnet", }, { name: "daily_auto_validator_deposits", - schedule: "14 1 * * *", + schedule: "14 1 * * *", // daily enabled: false, comment: "Don't enable this in the near future as deposit queue is 50 days long.", @@ -112,7 +112,7 @@ export const cronJobs: CronJob[] = [ }, { name: "daily_auto_validator_withdrawals", - schedule: "24 1 * * *", + schedule: "24 1 * * *", // daily enabled: false, comment: "Don't enable this in the near future as deposit queue is 50 days long and we rather use AMO for the liquidity", @@ -121,25 +121,25 @@ export const cronJobs: CronJob[] = [ }, { name: "daily_rebase_mainnet_oeth", - schedule: "30 0 * * *", + schedule: "30 0 * * *", // daily enabled: true, command: "cd /app && pnpm hardhat rebase --network mainnet --symbol OETH", }, { name: "daily_rebase_mainnet_ousd", - schedule: "35 0 * * *", + schedule: "35 0 * * *", // daily enabled: true, command: "cd /app && pnpm hardhat rebase --network mainnet --symbol OUSD", }, { name: "daily_rebase_base_oeth", - schedule: "40 0 * * *", + schedule: "40 0 * * *", // daily enabled: true, command: "cd /app && pnpm hardhat rebase --network base --symbol OETH", }, { name: "otoken_os_collectAndRelease", - schedule: "55 23 * * *", + schedule: "55 23 * * *", // daily enabled: false, permmissioned: false, command: @@ -147,14 +147,14 @@ export const cronJobs: CronJob[] = [ }, { name: "otoken_ousd_autoWithdrawal", - schedule: "35 11,23 * * *", + schedule: "35 11,23 * * *", // twice daily enabled: false, command: "cd /app && pnpm hardhat otokenOusdAutoWithdrawal --network mainnet", }, { name: "otoken_oethb_updateWoethPrice", - schedule: "30 21 * * *", + schedule: "30 21 * * *", // daily enabled: false, permmissioned: false, command: @@ -162,7 +162,7 @@ export const cronJobs: CronJob[] = [ }, { name: "otoken_oethp_addWithdrawalQueueLiquidity", - schedule: "25 0 * * *", + schedule: "25 0 * * *", // daily enabled: false, permmissioned: false, command: @@ -170,29 +170,29 @@ export const cronJobs: CronJob[] = [ }, { name: "otoken_oethb_rebase", - schedule: "25 9,21 * * *", + schedule: "25 9,21 * * *", // twice daily enabled: false, permmissioned: false, command: "cd /app && pnpm hardhat otokenOethbRebase --network base", }, { name: "otoken_os_sonicRestakeRewards", - schedule: "52 22 * * *", + schedule: "52 22 * * *", // daily enabled: false, command: "cd /app && pnpm hardhat otokenOsSonicRestakeRewards --network sonic", }, { - name: "crossChainBalanceUpdate-base", - schedule: "40 7,15,23 * * *", + name: "cross_chain_balance_update_base", + schedule: "40 7,15,23 * * *", // 3 times daily enabled: false, permmissioned: true, command: "cd /app && pnpm hardhat crossChainBalanceUpdateBase --network base", }, { - name: "crossChainBalanceUpdate-hyperevm", - schedule: "50 7,15,23 * * *", + name: "cross_chain_balance_update_hyperevm", + schedule: "50 7,15,23 * * *", // 3 times daily enabled: false, permmissioned: true, command: @@ -200,21 +200,21 @@ export const cronJobs: CronJob[] = [ }, { name: "cross_chain_base_mainnet", - schedule: "27 2,8,14,20 * * *", + schedule: "27 2,8,14,20 * * *", // 4 times daily enabled: false, permmissioned: true, command: "cd /app && pnpm hardhat relayCCTPMessage --network base", }, { name: "cross_chain_mainnet_base", - schedule: "43 4,10,16,22 * * *", + schedule: "43 4,10,16,22 * * *", // 4 times daily enabled: false, permmissioned: true, command: "cd /app && pnpm hardhat relayCCTPMessage --network mainnet", }, { name: "cross_chain_hyper_mainnet", - schedule: "17 1,6,11,16,21 * * *", + schedule: "17 1,6,11,16,21 * * *", // 5 times daily enabled: false, permmissioned: true, command: @@ -222,7 +222,7 @@ export const cronJobs: CronJob[] = [ }, { name: "cross_chain_mainnet_hyper", - schedule: "7 3,8,13,18,23 * * *", + schedule: "7 3,8,13,18,23 * * *", // 5 times daily enabled: false, permmissioned: true, command: @@ -230,26 +230,26 @@ export const cronJobs: CronJob[] = [ }, { name: "claim_ssv_rewards", - schedule: "45 0 1 * *", + schedule: "45 0 1 * *", // monthly (1st day) enabled: false, command: "cd /app && pnpm hardhat claimSSVRewards --network mainnet", }, { name: "otoken_ousd_oeth_rebase", - schedule: "45 11,23 * * *", + schedule: "45 11,23 * * *", // twice daily enabled: false, command: "cd /app && pnpm hardhat otokenOusdOethRebase --network mainnet", }, { name: "ogn_claimAndForwardRewards", - schedule: "50 0 * * 2", + schedule: "50 0 * * 2", // weekly (Tuesday) enabled: false, command: "cd /app && pnpm hardhat ognClaimAndForwardRewards --network mainnet", }, { name: "otoken_oethb_harvest", - schedule: "55 11 * * *", + schedule: "55 11 * * *", // daily enabled: false, permmissioned: false, command: "cd /app && pnpm hardhat otokenOethbHarvest --network base", From 42afd0cbcf03bf52891fb9d184441026fc9d949d Mon Sep 17 00:00:00 2001 From: Christopher Jacobs Date: Sat, 11 Apr 2026 17:07:42 +0800 Subject: [PATCH 52/62] Add structured logging, observability docs, and action runner integration test --- contracts/cron/OBSERVABILITY.md | 126 +++++++++++++ contracts/cron/README.md | 11 +- contracts/cron/action-runner.snapshot.jsonl | 13 ++ contracts/cron/action-runner.test.ts | 197 ++++++++++++++++++++ contracts/cron/cron-supervisor.ts | 45 ++++- contracts/cron/log-events.ts | 74 ++++++++ contracts/cron/test-action.ts | 42 +++++ contracts/tasks/lib/action.ts | 53 +++--- contracts/tasks/lib/logger.ts | 13 +- contracts/tsconfig.json | 2 +- 10 files changed, 544 insertions(+), 32 deletions(-) create mode 100644 contracts/cron/OBSERVABILITY.md create mode 100644 contracts/cron/action-runner.snapshot.jsonl create mode 100644 contracts/cron/action-runner.test.ts create mode 100644 contracts/cron/log-events.ts create mode 100644 contracts/cron/test-action.ts diff --git a/contracts/cron/OBSERVABILITY.md b/contracts/cron/OBSERVABILITY.md new file mode 100644 index 0000000000..bf29b8a4b4 --- /dev/null +++ b/contracts/cron/OBSERVABILITY.md @@ -0,0 +1,126 @@ +# Automaton observability cookbook + +How to answer operational questions about the Automaton (see [`README.md`](./README.md)) using Loki + Grafana. The same schema is emitted by the sibling Automaton in `arm-oeth` — swap `app="origin-dollar"` for `app="arm-oeth"` and every query below works there too. + +## Event model + +Every scheduled invocation produces: + +1. **Exactly one `action.start`** from the supervisor, the moment the child is spawned. +2. **Exactly one terminal event** from the supervisor: `action.success` (exit 0) or `action.failure` (non-zero exit, signal, or spawn error). +3. **Optionally, one `action.error`** from the task wrapper if it threw — carries the error class, message, stack, chain, and network. +4. Any number of in-flight `info`/`debug` lines the task itself emitted. + +All events for one run share the same `run_id`. Use it as the join key when investigating. + +The supervisor owns events 1 and 2. **Even if the child crashes, OOMs, segfaults, or never starts**, the supervisor still produces both — counts and rates stay correct on the worst days. + +## Field schema + +| Field | Type | Label? | Appears on | Notes | +|---|---|---|---|---| +| `app` | string | **label** | all | Always `origin-dollar` (or `arm-oeth` in the sibling repo). | +| `action` | string | **label** | all | The job name from `cron-jobs.ts`. | +| `event` | string | **label** | start/success/failure/error | One of `action.start`, `action.success`, `action.failure`, `action.error`. | +| `source` | string | **label** | start/success/failure/error | `supervisor` for run-lifecycle events, `task` for `action.error`. | +| `run_id` | UUID | field | all | Correlation key. Field, not label, to keep cardinality bounded. | +| `duration_ms` | number | field | success/failure/error | Wall-clock from supervisor spawn (or task wrapper start) to terminal event. | +| `exit_code` | number\|null | field | success/failure | From the child process. `null` on spawn failure. | +| `signal` | string\|null | field | success/failure | e.g. `SIGKILL` (often = OOM-killed when paired with code 137). | +| `spawn_failed` | bool | field | failure | Set when the child couldn't be spawned at all. | +| `schedule` | string | field | start | The cron expression for the job. | +| `command` | string | field | start | The shell command being executed. | +| `chain_id` | number | field | error | Resolved chain id, if signer setup got that far. | +| `network` | string | field | error | Human network name (`mainnet`, `base`, `sonic`, …). | +| `error_name` | string | field | error | Error class (`Error`, `ProviderError`, …). | +| `error_message` | string | field | error | The thrown message. | +| `error_stack` | string | field | error | Full JS stack trace. | + +**Why labels are restricted to `action`, `event`, `source`:** Loki indexes labels, so high-cardinality labels blow up the index. `run_id` (UUIDs), `error_message` (free text), and numeric fields like `duration_ms` would all be cardinality bombs. They're still queryable via `| json` extraction; you just can't use them in stream selectors. + +## Common questions → queries + +### How many runs of X happened this week? + +```logql +sum(count_over_time({app="origin-dollar", action="healthcheck", event="action.start"}[7d])) +``` + +### How many of those failed? + +```logql +sum(count_over_time({app="origin-dollar", action="healthcheck", event="action.failure"}[7d])) +``` + +### Why did a particular run fail? + +Find recent failures, then pivot on `run_id`: + +```logql +{app="origin-dollar", event="action.error"} + | json + | line_format "{{.action}} [{{.run_id}}] {{.error_name}}: {{.error_message}}" +``` + +Pick a `run_id` from the result, then: + +```logql +{app="origin-dollar"} | json | run_id="" +``` + +That returns the full breadcrumb in time order: `action.start` → in-flight info lines from the task → `action.error` (with stack) → supervisor's `action.failure` (with exit code/signal). Usually enough to fix without rerunning locally. + +### Average runtime per action + +```logql +avg by (action) ( + avg_over_time( + {app="origin-dollar", event=~"action.success|action.failure", source="supervisor"} + | json | unwrap duration_ms [7d] + ) +) +``` + +p95 instead: + +```logql +quantile_over_time(0.95, + {app="origin-dollar", event=~"action.success|action.failure", source="supervisor"} + | json | unwrap duration_ms [7d] +) by (action) +``` + +### Success rate per action + +```logql +sum by (action) (count_over_time({app="origin-dollar", event="action.success"}[7d])) +/ +sum by (action) (count_over_time({app="origin-dollar", event="action.start"}[7d])) +``` + +Using `action.start` as the denominator (rather than success+failure) catches the pathological case where a run started but no terminal event was ever emitted — the ratio drops below 1.0 and you notice. + +### Crashed-without-explanation runs + +Runs that produced an `action.failure` with **no** preceding `action.error`. These are the ones where the child died before reaching the task wrapper (OOM, parse error, missing env var, signal). Fewest moving parts: + +```logql +{app="origin-dollar", event="action.failure", source="supervisor"} | json | exit_code=137 +``` + +Code 137 + `SIGKILL` is almost always OOM. Code 1 with no `action.error` for the same `run_id` usually means the hardhat process failed before importing the task wrapper. + +## Known limitation: log loss on hard kill + +Log shipping is direct from the supervisor process to Loki via winston-loki's HTTP transport, batched on a 5ms interval. On graceful `SIGTERM` we `await flushLogger()` before exiting. On `SIGKILL` (OOM-killer, `kill -9`, container force-stop) the in-flight batch dies with the process and those events are lost. Fully fixing this would require a stdout-scraping sidecar (promtail / grafana-agent / alloy) — out of scope. In practice the gap is small: supervisor lifecycle events are emitted at job boundaries, not mid-job, so the window for loss is narrow. + +## When to graduate to Prometheus + +Symptoms that mean log queries have outgrown their usefulness: + +- Grafana panels are slow to render because they re-scan the log stream. +- You want recording rules so dashboards don't recompute on every refresh. +- You want alerts on "no successful run in the last N minutes" with cheap evaluation. +- You want long-retention metrics (months) without paying log-storage costs. + +When that happens, add a `/metrics` endpoint to `cron-supervisor.ts` exposing `automaton_runs_total{action,status}`, `automaton_run_duration_seconds{action}` (histogram), and `automaton_last_success_timestamp_seconds{action}` (gauge). The log schema stays as-is for debugging — metrics complement it, they don't replace it. diff --git a/contracts/cron/README.md b/contracts/cron/README.md index 2a0b477732..877f8a61ea 100644 --- a/contracts/cron/README.md +++ b/contracts/cron/README.md @@ -1,6 +1,6 @@ -# Cron Actions +# Cron Actions (Automaton) -Containerized scheduler for running hardhat tasks on a schedule. Replaces OpenZeppelin Defender actions. +Containerized scheduler for running hardhat tasks on a schedule. Replaces OpenZeppelin Defender actions. Internally referred to as **Automaton**; a sibling Automaton with the same shape and log schema lives in the `arm-oeth` repo. Keep field names (`event`, `source`, `action`, `run_id`, `duration_ms`, `error_*`) in sync across both so a single Grafana dashboard can serve both. ## How it works @@ -66,3 +66,10 @@ Set `enabled: false` to define a job that can only be triggered via the API. | `LOKI_API_KEY` | Loki basic auth key (optional) | | `AWS_ACCESS_KEY_ID` | For KMS signer (optional) | | `AWS_SECRET_ACCESS_KEY` | For KMS signer (optional) | +| `AUTOMATON_RUN_ID` | Set automatically by the supervisor when spawning a job; correlates task-side logs with the supervisor's lifecycle events | + +## Observability + +Every scheduled invocation produces exactly one `action.start` and exactly one terminal event (`action.success` or `action.failure`) from the supervisor, plus an `action.error` (with stack, chain, network) from the task wrapper if it threw. All four events share a `run_id` for correlation. + +See [`OBSERVABILITY.md`](./OBSERVABILITY.md) for the field schema, the LogQL cookbook, and the recipe for debugging a single failed run end-to-end. diff --git a/contracts/cron/action-runner.snapshot.jsonl b/contracts/cron/action-runner.snapshot.jsonl new file mode 100644 index 0000000000..a4d812b641 --- /dev/null +++ b/contracts/cron/action-runner.snapshot.jsonl @@ -0,0 +1,13 @@ +{"event":"action.start","source":"supervisor","action":"test_action","run_id":"11111111-1111-1111-1111-111111111111","schedule":"*/5 * * * *","command":"npx ts-node ","level":"info","message":"Started run 11111111-1111-1111-1111-111111111111"} +{"level":"info","action":"test_action","message":"Running on testnet (31337)","run_id":"11111111-1111-1111-1111-111111111111"} +{"level":"info","action":"test_action","message":"Checking balances","run_id":"11111111-1111-1111-1111-111111111111"} +{"level":"info","action":"test_action","message":"Balance: 1000000000000000000 wei","run_id":"11111111-1111-1111-1111-111111111111"} +{"level":"info","action":"test_action","message":"Test action passed","run_id":"11111111-1111-1111-1111-111111111111"} +{"event":"action.success","source":"supervisor","action":"test_action","run_id":"11111111-1111-1111-1111-111111111111","duration_ms":42,"exit_code":0,"signal":null,"level":"info","message":"Completed in 0.0s"} +{"event":"action.start","source":"supervisor","action":"test_action","run_id":"22222222-2222-2222-2222-222222222222","schedule":"0 0 * * *","command":"npx ts-node --fail","level":"info","message":"Started run 22222222-2222-2222-2222-222222222222"} +{"level":"info","action":"test_action","message":"Running on testnet (31337)","run_id":"22222222-2222-2222-2222-222222222222"} +{"level":"info","action":"test_action","message":"Checking balances","run_id":"22222222-2222-2222-2222-222222222222"} +{"level":"info","action":"test_action","message":"Balance: 1000000000000000000 wei","run_id":"22222222-2222-2222-2222-222222222222"} +{"level":"error","action":"test_action","message":"Error: Simulated failure for testing","run_id":"22222222-2222-2222-2222-222222222222","event":"action.error","source":"task","chain_id":31337,"network":"testnet","duration_ms":"","error_name":"Error","error_message":"Simulated failure for testing"} +{"event":"action.failure","source":"supervisor","action":"test_action","run_id":"22222222-2222-2222-2222-222222222222","duration_ms":11398,"exit_code":1,"signal":null,"level":"error","message":"Failed after 11.4s (exit=1)"} +{"event":"action.failure","source":"supervisor","action":"test_action","run_id":"33333333-3333-3333-3333-333333333333","duration_ms":5,"spawn_failed":true,"error_message":"ENOENT: no such file or directory, posix_spawn '/bin/sh'","level":"error","message":"Failed to spawn: ENOENT: no such file or directory, posix_spawn '/bin/sh'"} diff --git a/contracts/cron/action-runner.test.ts b/contracts/cron/action-runner.test.ts new file mode 100644 index 0000000000..cb5461b5f8 --- /dev/null +++ b/contracts/cron/action-runner.test.ts @@ -0,0 +1,197 @@ +// Integration test for the supervisor's action execution + structured logging. +// +// Spawns a real test action (cron/test-action.ts) through the same code path +// the supervisor uses. Captures both supervisor-level events and the action's +// own log output, then compares the combined stream against a golden snapshot. +// +// Run with: npx ts-node cron/action-runner.test.ts +// Update snapshot: npx ts-node cron/action-runner.test.ts --update + +import { spawn } from "node:child_process"; +import fs from "node:fs"; +import path from "node:path"; +import { format, transports } from "winston"; +import logger from "../tasks/lib/logger"; +import { + emitActionExit, + emitActionStart, + emitSpawnFailure, +} from "./log-events"; + +const SNAPSHOT_PATH = path.join(__dirname, "action-runner.snapshot.jsonl"); +const updateSnapshot = process.argv.includes("--update"); +const testActionScript = path.join(__dirname, "test-action.ts"); + +// --- Winston capture --------------------------------------------------------- + +const captured: Record[] = []; +const captureFormat = format((info) => { + captured.push({ ...info }); + return false; +}); +logger.add(new transports.Console({ format: captureFormat() })); + +/** Strip volatile fields for stable comparison. */ +function stabilize(record: Record): Record { + const isTaskRecord = record.source === "task"; + const out: Record = {}; + for (const [k, v] of Object.entries(record)) { + if (k === "timestamp") continue; + if (k === "duration_ms" && isTaskRecord) { + out[k] = ""; + continue; + } + if (k === "command" && typeof v === "string") { + out[k] = v.replace(testActionScript, ""); + continue; + } + out[k] = v; + } + return out; +} + +/** + * Parse a console log line from the action child process. + * Format: ` : [] {json}` + */ +function parseLogLine(line: string): Record | null { + const match = line.match( + /^\S+\s+(\w+):\s+(?:\[(\w+)\]\s+)?(.+?)(?:\s+(\{.+\}))?$/ + ); + if (!match) return null; + const [, level, action, message, jsonStr] = match; + const extra = jsonStr ? JSON.parse(jsonStr) : {}; + return { level, action, message, ...extra }; +} + +// --- Helpers ----------------------------------------------------------------- + +const RUN_IDS = { + success: "11111111-1111-1111-1111-111111111111", + failure: "22222222-2222-2222-2222-222222222222", + spawnFail: "33333333-3333-3333-3333-333333333333", +}; + +function spawnTestAction( + args: string[], + runId: string +): Promise<{ + exitCode: number | null; + signal: NodeJS.Signals | null; + logs: Record[]; +}> { + return new Promise((resolve) => { + const child = spawn("npx", ["ts-node", testActionScript, ...args], { + env: { ...process.env, AUTOMATON_RUN_ID: runId }, + stdio: ["ignore", "pipe", "pipe"], + }); + + let stdout = ""; + let stderr = ""; + child.stdout.on("data", (d: Buffer) => (stdout += d)); + child.stderr.on("data", (d: Buffer) => (stderr += d)); + + child.on("exit", (code, signal) => { + // Combine stdout + stderr, parse each line + const allOutput = (stdout + stderr).trim(); + const logs: Record[] = []; + for (const line of allOutput.split("\n")) { + if (!line.trim()) continue; + const parsed = parseLogLine(line.trim()); + if (parsed) logs.push(parsed); + } + resolve({ exitCode: code, signal, logs }); + }); + }); +} + +// --- Scenarios --------------------------------------------------------------- + +async function runSuccessScenario() { + const action = "test_action"; + const runId = RUN_IDS.success; + const schedule = "*/5 * * * *"; + const command = `npx ts-node ${testActionScript}`; + + emitActionStart({ action, runId, schedule, command }); + const result = await spawnTestAction([], runId); + for (const log of result.logs) captured.push(log); + emitActionExit({ + action, + runId, + durationMs: 42, + exitCode: result.exitCode, + signal: result.signal, + }); +} + +async function runFailureScenario() { + const action = "test_action"; + const runId = RUN_IDS.failure; + const schedule = "0 0 * * *"; + const command = `npx ts-node ${testActionScript} --fail`; + + emitActionStart({ action, runId, schedule, command }); + const result = await spawnTestAction(["--fail"], runId); + for (const log of result.logs) captured.push(log); + emitActionExit({ + action, + runId, + durationMs: 11398, + exitCode: result.exitCode, + signal: result.signal, + }); +} + +async function runSpawnFailureScenario() { + emitSpawnFailure({ + action: "test_action", + runId: RUN_IDS.spawnFail, + durationMs: 5, + errorMessage: "ENOENT: no such file or directory, posix_spawn '/bin/sh'", + }); +} + +// --- Main -------------------------------------------------------------------- + +async function main() { + await runSuccessScenario(); + await runFailureScenario(); + await runSpawnFailureScenario(); + + const stable = captured.map(stabilize); + const actualJsonl = stable.map((r) => JSON.stringify(r)).join("\n") + "\n"; + + if (updateSnapshot) { + fs.writeFileSync(SNAPSHOT_PATH, actualJsonl, "utf8"); + console.log(`Snapshot updated: ${SNAPSHOT_PATH}`); + console.log(actualJsonl); + return; + } + + if (!fs.existsSync(SNAPSHOT_PATH)) { + console.error( + "No snapshot found. Run with --update to create it:\n" + + " npx ts-node cron/action-runner.test.ts --update" + ); + process.exit(1); + } + + const expected = fs.readFileSync(SNAPSHOT_PATH, "utf8"); + if (actualJsonl === expected) { + console.log("OK — log output matches snapshot"); + console.log(` ${stable.length} records across 3 scenarios`); + } else { + console.error("FAIL — log output does not match snapshot\n"); + console.error("Expected:"); + console.error(expected); + console.error("Actual:"); + console.error(actualJsonl); + process.exit(1); + } +} + +main().catch((err) => { + console.error(err); + process.exit(1); +}); diff --git a/contracts/cron/cron-supervisor.ts b/contracts/cron/cron-supervisor.ts index 72f4bd79a5..3f0cd88e30 100644 --- a/contracts/cron/cron-supervisor.ts +++ b/contracts/cron/cron-supervisor.ts @@ -2,7 +2,13 @@ import { spawn } from "node:child_process"; import { randomUUID, timingSafeEqual } from "node:crypto"; import fs from "node:fs"; import http from "node:http"; +import { flushLogger } from "../tasks/lib/logger"; import { cronJobs } from "./cron-jobs"; +import { + emitActionExit, + emitActionStart, + emitSpawnFailure, +} from "./log-events"; import { type CronJob, renderCrontab } from "./render-crontab"; // --- Configuration --- @@ -131,14 +137,21 @@ function runAction(action: CronJob, run: ActionRun) { run.status = "running"; run.startedAt = nowIso(); run.command = action.command; + const startMs = Date.now(); console.log( `[cron-supervisor] Starting run ${run.runId} for action "${action.name}"` ); + emitActionStart({ + action: action.name, + runId: run.runId, + schedule: action.schedule, + command: action.command, + }); const child = spawn("/bin/sh", ["-lc", action.command], { cwd: actionWorkdir, - env: process.env, + env: { ...process.env, AUTOMATON_RUN_ID: run.runId }, stdio: "inherit", }); run.pid = child.pid ?? null; @@ -152,6 +165,13 @@ function runAction(action: CronJob, run: ActionRun) { console.error( `[cron-supervisor] Run ${run.runId} failed to start: ${err.message}` ); + emitSpawnFailure({ + action: action.name, + runId: run.runId, + durationMs: Date.now() - startMs, + errorMessage: err.message, + }); + void flushLogger(); }); child.on("exit", (code, signal) => { @@ -162,6 +182,14 @@ function runAction(action: CronJob, run: ActionRun) { console.log( `[cron-supervisor] Run ${run.runId} for "${action.name}" finished with status=${run.status}, code=${code}, signal=${signal}` ); + emitActionExit({ + action: action.name, + runId: run.runId, + durationMs: Date.now() - startMs, + exitCode: code, + signal, + }); + void flushLogger(); }); } @@ -316,11 +344,16 @@ server.on("close", () => { // --- Graceful shutdown --- -function shutdown(signal: string) { +async function shutdown(signal: string) { if (shuttingDown) return; shuttingDown = true; console.log(`[cron-supervisor] Shutting down (signal=${signal})`); + try { + await flushLogger(); + } catch (err: any) { + console.error(`[cron-supervisor] flushLogger failed: ${err?.message}`); + } server.close(); if (supercronicAlive && supercronic.exitCode === null) { @@ -333,8 +366,12 @@ function shutdown(signal: string) { setTimeout(() => process.exit(0), 12_000).unref(); } -process.on("SIGTERM", () => shutdown("SIGTERM")); -process.on("SIGINT", () => shutdown("SIGINT")); +process.on("SIGTERM", () => { + void shutdown("SIGTERM"); +}); +process.on("SIGINT", () => { + void shutdown("SIGINT"); +}); server.listen(port, host, () => { console.log(`[cron-supervisor] API listening on ${host}:${port}`); diff --git a/contracts/cron/log-events.ts b/contracts/cron/log-events.ts new file mode 100644 index 0000000000..7652f80c60 --- /dev/null +++ b/contracts/cron/log-events.ts @@ -0,0 +1,74 @@ +// Structured log events emitted by the Automaton supervisor. +// +// These helpers exist as a separate module so the exact shape of every +// supervisor-side Loki record can be unit-tested in isolation, without +// having to spawn supercronic or stand up the HTTP server. +// +// Schema is documented in cron/README.md and cron/OBSERVABILITY.md. +// The sibling Automaton in `arm-oeth` emits the same shapes. + +import logger, { flushLogger } from "../tasks/lib/logger"; + +export interface ActionStartFields { + action: string; + runId: string; + schedule: string; + command: string; +} + +export function emitActionStart(f: ActionStartFields): void { + logger.info(`Started run ${f.runId}`, { + event: "action.start", + source: "supervisor", + action: f.action, + run_id: f.runId, + schedule: f.schedule, + command: f.command, + }); +} + +export interface ActionExitFields { + action: string; + runId: string; + durationMs: number; + exitCode: number | null; + signal: NodeJS.Signals | null; +} + +export function emitActionExit(f: ActionExitFields): void { + const success = f.exitCode === 0; + const event = success ? "action.success" : "action.failure"; + const msg = success + ? `Completed in ${(f.durationMs / 1000).toFixed(1)}s` + : `Failed after ${(f.durationMs / 1000).toFixed(1)}s (exit=${f.exitCode}${f.signal ? `, signal=${f.signal}` : ""})`; + logger[success ? "info" : "error"](msg, { + event, + source: "supervisor", + action: f.action, + run_id: f.runId, + duration_ms: f.durationMs, + exit_code: f.exitCode, + signal: f.signal, + }); +} + +export interface SpawnFailureFields { + action: string; + runId: string; + durationMs: number; + errorMessage: string; +} + +export function emitSpawnFailure(f: SpawnFailureFields): void { + logger.error(`Failed to spawn: ${f.errorMessage}`, { + event: "action.failure", + source: "supervisor", + action: f.action, + run_id: f.runId, + duration_ms: f.durationMs, + spawn_failed: true, + error_message: f.errorMessage, + }); +} + +export { flushLogger }; diff --git a/contracts/cron/test-action.ts b/contracts/cron/test-action.ts new file mode 100644 index 0000000000..7c80377df3 --- /dev/null +++ b/contracts/cron/test-action.ts @@ -0,0 +1,42 @@ +// Minimal test action that mimics the real action() wrapper's logging pattern. +// Used by action-runner.test.ts — no network or signer required. + +import logger, { flushLogger } from "../tasks/lib/logger"; + +const runId = process.env.AUTOMATON_RUN_ID; +const shouldFail = process.argv.includes("--fail"); + +const log = logger.child({ + action: "test_action", + ...(runId ? { run_id: runId } : {}), +}); + +async function main() { + const startTime = Date.now(); + try { + log.info("Running on testnet (31337)"); + log.info("Checking balances"); + log.info("Balance: 1000000000000000000 wei"); + + if (shouldFail) { + throw new Error("Simulated failure for testing"); + } + + log.info("Test action passed"); + } catch (err: any) { + log.error(`${err.name}: ${err.message}`, { + event: "action.error", + source: "task", + chain_id: 31337, + network: "testnet", + duration_ms: Date.now() - startTime, + error_name: err.name, + error_message: err.message, + }); + process.exitCode = 1; + } finally { + await flushLogger(); + } +} + +main(); diff --git a/contracts/tasks/lib/action.ts b/contracts/tasks/lib/action.ts index db1d79848b..1ebb1deac2 100644 --- a/contracts/tasks/lib/action.ts +++ b/contracts/tasks/lib/action.ts @@ -42,34 +42,43 @@ export function action(config: ActionConfig) { } definition.setAction(async (taskArgs: Record) => { - const log = logger.child({ action: name }); + const runId = process.env.AUTOMATON_RUN_ID; + const log = logger.child({ + action: name, + ...(runId ? { run_id: runId } : {}), + }); const startTime = Date.now(); + let chainId: number | undefined; + let networkName: string | undefined; - log.info("Starting"); - - const signer = await getSigner(); - const network = await signer.provider!.getNetwork(); - const chainId = Number(network.chainId); - const networkName = CHAIN_NAMES[chainId] ?? `unknown-${chainId}`; - - if (chains && !chains.includes(chainId)) { - const valid = chains - .map((id) => `${CHAIN_NAMES[id] ?? id} (${id})`) - .join(", "); - throw new Error( - `${name} only supports ${valid}, not ${networkName} (${chainId})` - ); - } + try { + const signer = await getSigner(); + const network = await signer.provider!.getNetwork(); + chainId = Number(network.chainId); + networkName = CHAIN_NAMES[chainId] ?? `unknown-${chainId}`; - log.info(`Running on ${networkName} (${chainId})`); + if (chains && !chains.includes(chainId)) { + const valid = chains + .map((id) => `${CHAIN_NAMES[id] ?? id} (${id})`) + .join(", "); + throw new Error( + `${name} only supports ${valid}, not ${networkName} (${chainId})` + ); + } - try { + log.info(`Running on ${networkName} (${chainId})`); await run({ signer, chainId, networkName, log, args: taskArgs }); - const elapsed = ((Date.now() - startTime) / 1000).toFixed(1); - log.info(`Completed in ${elapsed}s`); } catch (err: any) { - const elapsed = ((Date.now() - startTime) / 1000).toFixed(1); - log.error(`Failed after ${elapsed}s: ${err.message}`); + log.error(`${err?.name ?? "Error"}: ${err?.message ?? String(err)}`, { + event: "action.error", + source: "task", + chain_id: chainId, + network: networkName, + duration_ms: Date.now() - startTime, + error_name: err?.name ?? "Error", + error_message: err?.message ?? String(err), + error_stack: err?.stack, + }); throw err; } finally { await flushLogger(); diff --git a/contracts/tasks/lib/logger.ts b/contracts/tasks/lib/logger.ts index 26ff27c745..d116f34d35 100644 --- a/contracts/tasks/lib/logger.ts +++ b/contracts/tasks/lib/logger.ts @@ -27,10 +27,17 @@ if (lokiUrl) { labels: { app: "origin-dollar" }, json: true, format: format.combine( - // Promote "action" from metadata to a Loki label + // Promote select low-cardinality fields from metadata to Loki labels. + // Keep high-cardinality fields (run_id, error_*, duration_ms, chain_id) + // as JSON fields — they're still queryable via `| json`. format((info) => { - if (info.action) { - info.labels = { ...(info.labels || {}), action: info.action }; + const LABEL_FIELDS = ["action", "event", "source"] as const; + const labels: Record = {}; + for (const k of LABEL_FIELDS) { + if (info[k]) labels[k] = String(info[k]); + } + if (Object.keys(labels).length) { + info.labels = { ...(info.labels || {}), ...labels }; } return info; })(), diff --git a/contracts/tsconfig.json b/contracts/tsconfig.json index f31ba81313..b6fde3e313 100644 --- a/contracts/tsconfig.json +++ b/contracts/tsconfig.json @@ -12,6 +12,6 @@ "outDir": "dist", "types": ["node"] }, - "include": ["tasks/actions/**/*.ts", "tasks/lib/**/*.ts", "scripts/**/*.ts", "cron/cron-supervisor.ts", "cron/render-crontab.ts"], + "include": ["tasks/actions/**/*.ts", "tasks/lib/**/*.ts", "scripts/**/*.ts", "cron/**/*.ts"], "exclude": ["node_modules", "dist"] } From d8b006788cc999b524fe84bec97c6476ae4a5d5b Mon Sep 17 00:00:00 2001 From: Christopher Jacobs Date: Wed, 15 Apr 2026 16:49:47 +0800 Subject: [PATCH 53/62] Refactor supervisor logging and extract API module - Replace console logging with winston/Loki logger in supervisor - Delete log-events.ts emit wrappers, inline structured logging in action.ts - Extract HTTP API + run tracking into api.ts, slim supervisor to orchestrator - Add action.start/action.success events to action framework - Generate run_id (UUID) per action, remove AUTOMATON_RUN_ID env var - Add real action.test.ts that exercises createActionHandler() with mock signer - Delete stale test-action.ts, action-runner.test.ts, snapshot --- contracts/cron/README.md | 12 +- contracts/cron/action-runner.snapshot.jsonl | 13 - contracts/cron/action-runner.test.ts | 197 ------------ contracts/cron/api.ts | 239 ++++++++++++++ contracts/cron/cron-supervisor.ts | 327 +++----------------- contracts/cron/log-events.ts | 74 ----- contracts/cron/test-action.ts | 42 --- contracts/tasks/lib/action.snapshot.jsonl | 8 + contracts/tasks/lib/action.test.ts | 154 +++++++++ contracts/tasks/lib/action.ts | 66 ++-- 10 files changed, 506 insertions(+), 626 deletions(-) delete mode 100644 contracts/cron/action-runner.snapshot.jsonl delete mode 100644 contracts/cron/action-runner.test.ts create mode 100644 contracts/cron/api.ts delete mode 100644 contracts/cron/log-events.ts delete mode 100644 contracts/cron/test-action.ts create mode 100644 contracts/tasks/lib/action.snapshot.jsonl create mode 100644 contracts/tasks/lib/action.test.ts diff --git a/contracts/cron/README.md b/contracts/cron/README.md index 877f8a61ea..0f2bbbbb50 100644 --- a/contracts/cron/README.md +++ b/contracts/cron/README.md @@ -66,10 +66,14 @@ Set `enabled: false` to define a job that can only be triggered via the API. | `LOKI_API_KEY` | Loki basic auth key (optional) | | `AWS_ACCESS_KEY_ID` | For KMS signer (optional) | | `AWS_SECRET_ACCESS_KEY` | For KMS signer (optional) | -| `AUTOMATON_RUN_ID` | Set automatically by the supervisor when spawning a job; correlates task-side logs with the supervisor's lifecycle events | - ## Observability -Every scheduled invocation produces exactly one `action.start` and exactly one terminal event (`action.success` or `action.failure`) from the supervisor, plus an `action.error` (with stack, chain, network) from the task wrapper if it threw. All four events share a `run_id` for correlation. +Each action generates its own `run_id` (UUID) and emits structured events via the winston/Loki logger in `tasks/lib/action.ts`: + +- `action.start` — emitted after resolving the signer and chain, before running the action +- `action.success` — emitted on successful completion, includes `duration_ms` +- `action.error` — emitted on failure, includes `duration_ms`, `error_name`, `error_message`, `error_stack` + +All events for a single run share the same `run_id` for correlation in Grafana. -See [`OBSERVABILITY.md`](./OBSERVABILITY.md) for the field schema, the LogQL cookbook, and the recipe for debugging a single failed run end-to-end. +See [`OBSERVABILITY.md`](./OBSERVABILITY.md) for the field schema and LogQL cookbook. diff --git a/contracts/cron/action-runner.snapshot.jsonl b/contracts/cron/action-runner.snapshot.jsonl deleted file mode 100644 index a4d812b641..0000000000 --- a/contracts/cron/action-runner.snapshot.jsonl +++ /dev/null @@ -1,13 +0,0 @@ -{"event":"action.start","source":"supervisor","action":"test_action","run_id":"11111111-1111-1111-1111-111111111111","schedule":"*/5 * * * *","command":"npx ts-node ","level":"info","message":"Started run 11111111-1111-1111-1111-111111111111"} -{"level":"info","action":"test_action","message":"Running on testnet (31337)","run_id":"11111111-1111-1111-1111-111111111111"} -{"level":"info","action":"test_action","message":"Checking balances","run_id":"11111111-1111-1111-1111-111111111111"} -{"level":"info","action":"test_action","message":"Balance: 1000000000000000000 wei","run_id":"11111111-1111-1111-1111-111111111111"} -{"level":"info","action":"test_action","message":"Test action passed","run_id":"11111111-1111-1111-1111-111111111111"} -{"event":"action.success","source":"supervisor","action":"test_action","run_id":"11111111-1111-1111-1111-111111111111","duration_ms":42,"exit_code":0,"signal":null,"level":"info","message":"Completed in 0.0s"} -{"event":"action.start","source":"supervisor","action":"test_action","run_id":"22222222-2222-2222-2222-222222222222","schedule":"0 0 * * *","command":"npx ts-node --fail","level":"info","message":"Started run 22222222-2222-2222-2222-222222222222"} -{"level":"info","action":"test_action","message":"Running on testnet (31337)","run_id":"22222222-2222-2222-2222-222222222222"} -{"level":"info","action":"test_action","message":"Checking balances","run_id":"22222222-2222-2222-2222-222222222222"} -{"level":"info","action":"test_action","message":"Balance: 1000000000000000000 wei","run_id":"22222222-2222-2222-2222-222222222222"} -{"level":"error","action":"test_action","message":"Error: Simulated failure for testing","run_id":"22222222-2222-2222-2222-222222222222","event":"action.error","source":"task","chain_id":31337,"network":"testnet","duration_ms":"","error_name":"Error","error_message":"Simulated failure for testing"} -{"event":"action.failure","source":"supervisor","action":"test_action","run_id":"22222222-2222-2222-2222-222222222222","duration_ms":11398,"exit_code":1,"signal":null,"level":"error","message":"Failed after 11.4s (exit=1)"} -{"event":"action.failure","source":"supervisor","action":"test_action","run_id":"33333333-3333-3333-3333-333333333333","duration_ms":5,"spawn_failed":true,"error_message":"ENOENT: no such file or directory, posix_spawn '/bin/sh'","level":"error","message":"Failed to spawn: ENOENT: no such file or directory, posix_spawn '/bin/sh'"} diff --git a/contracts/cron/action-runner.test.ts b/contracts/cron/action-runner.test.ts deleted file mode 100644 index cb5461b5f8..0000000000 --- a/contracts/cron/action-runner.test.ts +++ /dev/null @@ -1,197 +0,0 @@ -// Integration test for the supervisor's action execution + structured logging. -// -// Spawns a real test action (cron/test-action.ts) through the same code path -// the supervisor uses. Captures both supervisor-level events and the action's -// own log output, then compares the combined stream against a golden snapshot. -// -// Run with: npx ts-node cron/action-runner.test.ts -// Update snapshot: npx ts-node cron/action-runner.test.ts --update - -import { spawn } from "node:child_process"; -import fs from "node:fs"; -import path from "node:path"; -import { format, transports } from "winston"; -import logger from "../tasks/lib/logger"; -import { - emitActionExit, - emitActionStart, - emitSpawnFailure, -} from "./log-events"; - -const SNAPSHOT_PATH = path.join(__dirname, "action-runner.snapshot.jsonl"); -const updateSnapshot = process.argv.includes("--update"); -const testActionScript = path.join(__dirname, "test-action.ts"); - -// --- Winston capture --------------------------------------------------------- - -const captured: Record[] = []; -const captureFormat = format((info) => { - captured.push({ ...info }); - return false; -}); -logger.add(new transports.Console({ format: captureFormat() })); - -/** Strip volatile fields for stable comparison. */ -function stabilize(record: Record): Record { - const isTaskRecord = record.source === "task"; - const out: Record = {}; - for (const [k, v] of Object.entries(record)) { - if (k === "timestamp") continue; - if (k === "duration_ms" && isTaskRecord) { - out[k] = ""; - continue; - } - if (k === "command" && typeof v === "string") { - out[k] = v.replace(testActionScript, ""); - continue; - } - out[k] = v; - } - return out; -} - -/** - * Parse a console log line from the action child process. - * Format: ` : [] {json}` - */ -function parseLogLine(line: string): Record | null { - const match = line.match( - /^\S+\s+(\w+):\s+(?:\[(\w+)\]\s+)?(.+?)(?:\s+(\{.+\}))?$/ - ); - if (!match) return null; - const [, level, action, message, jsonStr] = match; - const extra = jsonStr ? JSON.parse(jsonStr) : {}; - return { level, action, message, ...extra }; -} - -// --- Helpers ----------------------------------------------------------------- - -const RUN_IDS = { - success: "11111111-1111-1111-1111-111111111111", - failure: "22222222-2222-2222-2222-222222222222", - spawnFail: "33333333-3333-3333-3333-333333333333", -}; - -function spawnTestAction( - args: string[], - runId: string -): Promise<{ - exitCode: number | null; - signal: NodeJS.Signals | null; - logs: Record[]; -}> { - return new Promise((resolve) => { - const child = spawn("npx", ["ts-node", testActionScript, ...args], { - env: { ...process.env, AUTOMATON_RUN_ID: runId }, - stdio: ["ignore", "pipe", "pipe"], - }); - - let stdout = ""; - let stderr = ""; - child.stdout.on("data", (d: Buffer) => (stdout += d)); - child.stderr.on("data", (d: Buffer) => (stderr += d)); - - child.on("exit", (code, signal) => { - // Combine stdout + stderr, parse each line - const allOutput = (stdout + stderr).trim(); - const logs: Record[] = []; - for (const line of allOutput.split("\n")) { - if (!line.trim()) continue; - const parsed = parseLogLine(line.trim()); - if (parsed) logs.push(parsed); - } - resolve({ exitCode: code, signal, logs }); - }); - }); -} - -// --- Scenarios --------------------------------------------------------------- - -async function runSuccessScenario() { - const action = "test_action"; - const runId = RUN_IDS.success; - const schedule = "*/5 * * * *"; - const command = `npx ts-node ${testActionScript}`; - - emitActionStart({ action, runId, schedule, command }); - const result = await spawnTestAction([], runId); - for (const log of result.logs) captured.push(log); - emitActionExit({ - action, - runId, - durationMs: 42, - exitCode: result.exitCode, - signal: result.signal, - }); -} - -async function runFailureScenario() { - const action = "test_action"; - const runId = RUN_IDS.failure; - const schedule = "0 0 * * *"; - const command = `npx ts-node ${testActionScript} --fail`; - - emitActionStart({ action, runId, schedule, command }); - const result = await spawnTestAction(["--fail"], runId); - for (const log of result.logs) captured.push(log); - emitActionExit({ - action, - runId, - durationMs: 11398, - exitCode: result.exitCode, - signal: result.signal, - }); -} - -async function runSpawnFailureScenario() { - emitSpawnFailure({ - action: "test_action", - runId: RUN_IDS.spawnFail, - durationMs: 5, - errorMessage: "ENOENT: no such file or directory, posix_spawn '/bin/sh'", - }); -} - -// --- Main -------------------------------------------------------------------- - -async function main() { - await runSuccessScenario(); - await runFailureScenario(); - await runSpawnFailureScenario(); - - const stable = captured.map(stabilize); - const actualJsonl = stable.map((r) => JSON.stringify(r)).join("\n") + "\n"; - - if (updateSnapshot) { - fs.writeFileSync(SNAPSHOT_PATH, actualJsonl, "utf8"); - console.log(`Snapshot updated: ${SNAPSHOT_PATH}`); - console.log(actualJsonl); - return; - } - - if (!fs.existsSync(SNAPSHOT_PATH)) { - console.error( - "No snapshot found. Run with --update to create it:\n" + - " npx ts-node cron/action-runner.test.ts --update" - ); - process.exit(1); - } - - const expected = fs.readFileSync(SNAPSHOT_PATH, "utf8"); - if (actualJsonl === expected) { - console.log("OK — log output matches snapshot"); - console.log(` ${stable.length} records across 3 scenarios`); - } else { - console.error("FAIL — log output does not match snapshot\n"); - console.error("Expected:"); - console.error(expected); - console.error("Actual:"); - console.error(actualJsonl); - process.exit(1); - } -} - -main().catch((err) => { - console.error(err); - process.exit(1); -}); diff --git a/contracts/cron/api.ts b/contracts/cron/api.ts new file mode 100644 index 0000000000..efd141fb30 --- /dev/null +++ b/contracts/cron/api.ts @@ -0,0 +1,239 @@ +import { spawn } from "node:child_process"; +import { randomUUID, timingSafeEqual } from "node:crypto"; +import http from "node:http"; +import type { Logger } from "winston"; +import type { CronJob } from "./render-crontab"; + +// --- Run tracking --- + +interface ActionRun { + runId: string; + action: string; + schedule: string; + enabled: boolean; + command?: string; + status: "queued" | "running" | "succeeded" | "failed"; + queuedAt: string; + startedAt: string; + finishedAt: string | null; + exitCode: number | null; + signal: string | null; + pid: number | null; + error?: string; +} + +// --- API --- + +export interface ApiOpts { + host: string; + port: number; + apiToken: string; + jobs: CronJob[]; + jobsByName: Map; + workdir: string; + historyLimit: number; + healthCheck: () => { running: boolean; pid: number | null }; + log: Logger; +} + +export function createApi(opts: ApiOpts): http.Server { + const { + host, + port, + apiToken, + jobs, + jobsByName, + workdir, + historyLimit, + healthCheck, + log, + } = opts; + + const nowIso = () => new Date().toISOString(); + + // --- Run store --- + + const runStore = new Map(); + const runOrder: string[] = []; + + function storeRun(run: ActionRun) { + runStore.set(run.runId, run); + runOrder.push(run.runId); + while (runOrder.length > historyLimit) { + runStore.delete(runOrder.shift()!); + } + } + + // --- Action execution --- + + function runAction(action: CronJob, run: ActionRun) { + run.status = "running"; + run.startedAt = nowIso(); + run.command = action.command; + + log.info(`Starting run ${run.runId} for "${action.name}"`); + + const child = spawn("/bin/sh", ["-lc", action.command], { + cwd: workdir, + env: process.env, + stdio: "inherit", + }); + run.pid = child.pid ?? null; + + child.on("error", (err) => { + run.status = "failed"; + run.finishedAt = nowIso(); + run.exitCode = null; + run.signal = null; + run.error = err.message; + log.error(`Run ${run.runId} failed to spawn: ${err.message}`); + }); + + child.on("exit", (code, signal) => { + run.finishedAt = nowIso(); + run.exitCode = code; + run.signal = signal; + run.status = code === 0 ? "succeeded" : "failed"; + }); + } + + function triggerAction(actionName: string): ActionRun | undefined { + const action = jobsByName.get(actionName); + if (!action) return undefined; + + const run: ActionRun = { + runId: randomUUID(), + action: action.name, + schedule: action.schedule, + enabled: action.enabled, + status: "queued", + queuedAt: nowIso(), + startedAt: nowIso(), + finishedAt: null, + exitCode: null, + signal: null, + pid: null, + }; + + storeRun(run); + setImmediate(() => runAction(action, run)); + return run; + } + + // --- HTTP helpers --- + + function json( + res: http.ServerResponse, + statusCode: number, + payload: any, + extraHeaders: Record = {}, + ) { + res.writeHead(statusCode, { + "Content-Type": "application/json", + ...extraHeaders, + }); + res.end(JSON.stringify(payload)); + } + + const expectedTokenBuffer = Buffer.from(apiToken); + function isAuthorized(headerValue: string | string[] | undefined): boolean { + if (typeof headerValue !== "string") return false; + if (!headerValue.startsWith("Bearer ")) return false; + const providedBuffer = Buffer.from(headerValue.slice(7).trim()); + if (providedBuffer.length !== expectedTokenBuffer.length) return false; + return timingSafeEqual(providedBuffer, expectedTokenBuffer); + } + + // --- Server --- + + const server = http.createServer((req, res) => { + const method = req.method || "GET"; + const forwardedProto = req.headers["x-forwarded-proto"]; + const proto = + typeof forwardedProto === "string" && forwardedProto.length > 0 + ? forwardedProto.split(",")[0].trim() + : "http"; + const reqHost = req.headers.host || `${host}:${port}`; + const origin = `${proto}://${reqHost}`; + const url = new URL(req.url || "/", origin); + + // Health check (unauthenticated) + if (method === "GET" && url.pathname === "/healthz") { + const health = healthCheck(); + return json(res, 200, { + status: "ok", + api: "up", + supercronic: { running: health.running, pid: health.pid }, + }); + } + + // Auth gate for /api/v1/* + if ( + url.pathname.startsWith("/api/v1/") && + !isAuthorized(req.headers.authorization) + ) { + return json(res, 401, { error: "Unauthorized" }); + } + + // List actions + if (method === "GET" && url.pathname === "/api/v1/actions") { + return json(res, 200, { + actions: jobs.map((job) => ({ + name: job.name, + schedule: job.schedule, + enabled: job.enabled, + })), + }); + } + + // Trigger action run + const triggerMatch = url.pathname.match( + /^\/api\/v1\/actions\/([^/]+)\/runs$/, + ); + if (method === "POST" && triggerMatch) { + const run = triggerAction(decodeURIComponent(triggerMatch[1])); + if (!run) + return json(res, 404, { + error: `Unknown action "${triggerMatch[1]}"`, + }); + const statusUrl = `${origin}/api/v1/runs/${encodeURIComponent(run.runId)}`; + return json( + res, + 202, + { + runId: run.runId, + action: run.action, + status: run.status, + statusUrl, + startedAt: run.startedAt, + }, + { Location: statusUrl }, + ); + } + + // Get run status + const statusMatch = url.pathname.match(/^\/api\/v1\/runs\/([^/]+)$/); + if (method === "GET" && statusMatch) { + const run = runStore.get(decodeURIComponent(statusMatch[1])); + if (!run) return json(res, 404, { error: "Run not found" }); + return json(res, 200, { + runId: run.runId, + action: run.action, + status: run.status, + startedAt: run.startedAt, + finishedAt: run.finishedAt, + exitCode: run.exitCode, + signal: run.signal, + }); + } + + json(res, 404, { error: "Not found" }); + }); + + server.on("error", (err) => { + log.error(`HTTP server error: ${err.message}`); + process.exit(1); + }); + + return server; +} diff --git a/contracts/cron/cron-supervisor.ts b/contracts/cron/cron-supervisor.ts index 3f0cd88e30..70bd52a161 100644 --- a/contracts/cron/cron-supervisor.ts +++ b/contracts/cron/cron-supervisor.ts @@ -1,222 +1,71 @@ import { spawn } from "node:child_process"; -import { randomUUID, timingSafeEqual } from "node:crypto"; import fs from "node:fs"; -import http from "node:http"; -import { flushLogger } from "../tasks/lib/logger"; +import baseLogger, { flushLogger } from "../tasks/lib/logger"; +import { createApi } from "./api"; import { cronJobs } from "./cron-jobs"; -import { - emitActionExit, - emitActionStart, - emitSpawnFailure, -} from "./log-events"; -import { type CronJob, renderCrontab } from "./render-crontab"; +import { renderCrontab } from "./render-crontab"; + +const log = baseLogger.child({ source: "supervisor" }); // --- Configuration --- + const host = process.env.HOST || "0.0.0.0"; const port = Number.parseInt(process.env.PORT || "8080", 10); const cronOutputPath = process.env.CRON_OUTPUT_PATH || "/app/cron/cronjob"; const supercronicBin = process.env.SUPERCRONIC_BIN || "supercronic"; const runHistoryLimit = Number.parseInt( process.env.ACTION_RUN_HISTORY_LIMIT || "500", - 10 + 10, ); const actionApiToken = process.env.ACTION_API_BEARER_TOKEN; const configuredActionWorkdir = process.env.ACTION_WORKDIR || "/app"; if (!Number.isInteger(port) || port < 1 || port > 65535) { - console.error(`[cron-supervisor] Invalid PORT value "${process.env.PORT}"`); + log.error(`Invalid PORT value "${process.env.PORT}"`); process.exit(1); } if (!actionApiToken || actionApiToken.trim().length === 0) { - console.error( - "[cron-supervisor] ACTION_API_BEARER_TOKEN must be set and non-empty" - ); + log.error("ACTION_API_BEARER_TOKEN must be set and non-empty"); process.exit(1); } if (!Number.isInteger(runHistoryLimit) || runHistoryLimit < 1) { - console.error( - `[cron-supervisor] Invalid ACTION_RUN_HISTORY_LIMIT value "${process.env.ACTION_RUN_HISTORY_LIMIT}"` + log.error( + `Invalid ACTION_RUN_HISTORY_LIMIT value "${process.env.ACTION_RUN_HISTORY_LIMIT}"`, ); process.exit(1); } -const nowIso = () => new Date().toISOString(); const actionWorkdir = fs.existsSync(configuredActionWorkdir) ? configuredActionWorkdir : process.cwd(); if (!fs.existsSync(configuredActionWorkdir)) { - console.warn( - `[cron-supervisor] ACTION_WORKDIR "${configuredActionWorkdir}" does not exist, using "${actionWorkdir}" instead` + log.warn( + `ACTION_WORKDIR "${configuredActionWorkdir}" does not exist, using "${actionWorkdir}" instead`, ); } -// --- HTTP helpers --- - -function json( - res: http.ServerResponse, - statusCode: number, - payload: any, - extraHeaders: Record = {} -) { - res.writeHead(statusCode, { - "Content-Type": "application/json", - ...extraHeaders, - }); - res.end(JSON.stringify(payload)); -} - -const expectedTokenBuffer = Buffer.from(actionApiToken); -function isAuthorized(headerValue: string | string[] | undefined): boolean { - if (typeof headerValue !== "string") return false; - if (!headerValue.startsWith("Bearer ")) return false; - const providedBuffer = Buffer.from(headerValue.slice(7).trim()); - if (providedBuffer.length !== expectedTokenBuffer.length) return false; - return timingSafeEqual(providedBuffer, expectedTokenBuffer); -} - -// --- Run tracking --- - -interface ActionRun { - runId: string; - action: string; - schedule: string; - enabled: boolean; - command?: string; - status: "queued" | "running" | "succeeded" | "failed"; - queuedAt: string; - startedAt: string; - finishedAt: string | null; - exitCode: number | null; - signal: string | null; - pid: number | null; - error?: string; -} - -const runStore = new Map(); -const runOrder: string[] = []; - -function storeRun(run: ActionRun) { - runStore.set(run.runId, run); - runOrder.push(run.runId); - while (runOrder.length > runHistoryLimit) { - runStore.delete(runOrder.shift()!); - } -} - // --- Cron setup --- function initCron() { try { - const result = renderCrontab({ - jobs: cronJobs, - outputPath: cronOutputPath, - }); - return result; + return renderCrontab({ jobs: cronJobs, outputPath: cronOutputPath }); } catch (e: any) { - console.error(`[cron-supervisor] ${e.message}`); + log.error(e.message); process.exit(1); } } const { jobs: allJobs, enabledJobs } = initCron(); -console.log( - `[cron-supervisor] Generated ${enabledJobs.length} enabled cron jobs at ${cronOutputPath}` +log.info( + `Generated ${enabledJobs.length} enabled cron jobs at ${cronOutputPath}`, ); -console.log(`[cron-supervisor] Generated ${cronOutputPath}:`); -console.log(fs.readFileSync(cronOutputPath, "utf8")); - -const jobsByName = new Map( - allJobs.map((job) => [job.name, job]) +log.info( + `Generated ${cronOutputPath}:\n${fs.readFileSync(cronOutputPath, "utf8")}`, ); -// --- Action execution --- - -function runAction(action: CronJob, run: ActionRun) { - run.status = "running"; - run.startedAt = nowIso(); - run.command = action.command; - const startMs = Date.now(); - - console.log( - `[cron-supervisor] Starting run ${run.runId} for action "${action.name}"` - ); - emitActionStart({ - action: action.name, - runId: run.runId, - schedule: action.schedule, - command: action.command, - }); - - const child = spawn("/bin/sh", ["-lc", action.command], { - cwd: actionWorkdir, - env: { ...process.env, AUTOMATON_RUN_ID: run.runId }, - stdio: "inherit", - }); - run.pid = child.pid ?? null; - - child.on("error", (err) => { - run.status = "failed"; - run.finishedAt = nowIso(); - run.exitCode = null; - run.signal = null; - run.error = err.message; - console.error( - `[cron-supervisor] Run ${run.runId} failed to start: ${err.message}` - ); - emitSpawnFailure({ - action: action.name, - runId: run.runId, - durationMs: Date.now() - startMs, - errorMessage: err.message, - }); - void flushLogger(); - }); - - child.on("exit", (code, signal) => { - run.finishedAt = nowIso(); - run.exitCode = code; - run.signal = signal; - run.status = code === 0 ? "succeeded" : "failed"; - console.log( - `[cron-supervisor] Run ${run.runId} for "${action.name}" finished with status=${run.status}, code=${code}, signal=${signal}` - ); - emitActionExit({ - action: action.name, - runId: run.runId, - durationMs: Date.now() - startMs, - exitCode: code, - signal, - }); - void flushLogger(); - }); -} - -function triggerAction(actionName: string): ActionRun | undefined { - const action = jobsByName.get(actionName); - if (!action) return undefined; - - const run: ActionRun = { - runId: randomUUID(), - action: action.name, - schedule: action.schedule, - enabled: action.enabled, - status: "queued", - queuedAt: nowIso(), - startedAt: nowIso(), - finishedAt: null, - exitCode: null, - signal: null, - pid: null, - }; - - storeRun(run); - setImmediate(() => runAction(action, run)); - return run; -} - -// --- Supercronic process --- +// --- Supercronic --- const supercronic = spawn(supercronicBin, [cronOutputPath], { env: process.env, @@ -225,10 +74,34 @@ const supercronic = spawn(supercronicBin, [cronOutputPath], { let supercronicAlive = true; supercronic.on("error", (err) => { - console.error(`[cron-supervisor] supercronic start error: ${err.message}`); + log.error(`supercronic start error: ${err.message}`); process.exit(1); }); +// --- API server --- + +const jobsByName = new Map(allJobs.map((job) => [job.name, job])); +const server = createApi({ + host, + port, + apiToken: actionApiToken, + jobs: allJobs, + jobsByName, + workdir: actionWorkdir, + historyLimit: runHistoryLimit, + healthCheck: () => ({ + running: supercronicAlive, + pid: supercronic.pid ?? null, + }), + log, +}); + +server.listen(port, host, () => { + log.info(`API listening on ${host}:${port}`); +}); + +// --- Graceful shutdown --- + let shuttingDown = false; let serverClosed = false; let supercronicClosed = false; @@ -241,118 +114,28 @@ supercronic.on("exit", (code, signal) => { supercronicAlive = false; supercronicClosed = true; if (!shuttingDown) { - console.error( - `[cron-supervisor] supercronic exited unexpectedly (code=${code}, signal=${signal})` + log.error( + `supercronic exited unexpectedly (code=${code}, signal=${signal})`, ); process.exit(typeof code === "number" ? code : 1); } maybeExit(); }); -// --- HTTP API --- - -const server = http.createServer((req, res) => { - const method = req.method || "GET"; - const forwardedProto = req.headers["x-forwarded-proto"]; - const proto = - typeof forwardedProto === "string" && forwardedProto.length > 0 - ? forwardedProto.split(",")[0].trim() - : "http"; - const reqHost = req.headers.host || `${host}:${port}`; - const origin = `${proto}://${reqHost}`; - const url = new URL(req.url || "/", origin); - - // Health check (unauthenticated) - if (method === "GET" && url.pathname === "/healthz") { - return json(res, 200, { - status: "ok", - api: "up", - supercronic: { running: supercronicAlive, pid: supercronic.pid ?? null }, - }); - } - - // Auth gate for /api/v1/* - if ( - url.pathname.startsWith("/api/v1/") && - !isAuthorized(req.headers.authorization) - ) { - return json(res, 401, { error: "Unauthorized" }); - } - - // List actions - if (method === "GET" && url.pathname === "/api/v1/actions") { - return json(res, 200, { - actions: allJobs.map((job) => ({ - name: job.name, - schedule: job.schedule, - enabled: job.enabled, - })), - }); - } - - // Trigger action run - const triggerMatch = url.pathname.match( - /^\/api\/v1\/actions\/([^/]+)\/runs$/ - ); - if (method === "POST" && triggerMatch) { - const run = triggerAction(decodeURIComponent(triggerMatch[1])); - if (!run) - return json(res, 404, { error: `Unknown action "${triggerMatch[1]}"` }); - const statusUrl = `${origin}/api/v1/runs/${encodeURIComponent(run.runId)}`; - return json( - res, - 202, - { - runId: run.runId, - action: run.action, - status: run.status, - statusUrl, - startedAt: run.startedAt, - }, - { Location: statusUrl } - ); - } - - // Get run status - const statusMatch = url.pathname.match(/^\/api\/v1\/runs\/([^/]+)$/); - if (method === "GET" && statusMatch) { - const run = runStore.get(decodeURIComponent(statusMatch[1])); - if (!run) return json(res, 404, { error: `Run not found` }); - return json(res, 200, { - runId: run.runId, - action: run.action, - status: run.status, - startedAt: run.startedAt, - finishedAt: run.finishedAt, - exitCode: run.exitCode, - signal: run.signal, - }); - } - - json(res, 404, { error: "Not found" }); -}); - -server.on("error", (err) => { - console.error(`[cron-supervisor] HTTP server error: ${err.message}`); - process.exit(1); -}); - server.on("close", () => { serverClosed = true; maybeExit(); }); -// --- Graceful shutdown --- - async function shutdown(signal: string) { if (shuttingDown) return; shuttingDown = true; - console.log(`[cron-supervisor] Shutting down (signal=${signal})`); + log.info(`Shutting down (signal=${signal})`); try { await flushLogger(); } catch (err: any) { - console.error(`[cron-supervisor] flushLogger failed: ${err?.message}`); + log.error(`flushLogger failed: ${err?.message}`); } server.close(); @@ -366,13 +149,5 @@ async function shutdown(signal: string) { setTimeout(() => process.exit(0), 12_000).unref(); } -process.on("SIGTERM", () => { - void shutdown("SIGTERM"); -}); -process.on("SIGINT", () => { - void shutdown("SIGINT"); -}); - -server.listen(port, host, () => { - console.log(`[cron-supervisor] API listening on ${host}:${port}`); -}); +process.on("SIGTERM", () => void shutdown("SIGTERM")); +process.on("SIGINT", () => void shutdown("SIGINT")); diff --git a/contracts/cron/log-events.ts b/contracts/cron/log-events.ts deleted file mode 100644 index 7652f80c60..0000000000 --- a/contracts/cron/log-events.ts +++ /dev/null @@ -1,74 +0,0 @@ -// Structured log events emitted by the Automaton supervisor. -// -// These helpers exist as a separate module so the exact shape of every -// supervisor-side Loki record can be unit-tested in isolation, without -// having to spawn supercronic or stand up the HTTP server. -// -// Schema is documented in cron/README.md and cron/OBSERVABILITY.md. -// The sibling Automaton in `arm-oeth` emits the same shapes. - -import logger, { flushLogger } from "../tasks/lib/logger"; - -export interface ActionStartFields { - action: string; - runId: string; - schedule: string; - command: string; -} - -export function emitActionStart(f: ActionStartFields): void { - logger.info(`Started run ${f.runId}`, { - event: "action.start", - source: "supervisor", - action: f.action, - run_id: f.runId, - schedule: f.schedule, - command: f.command, - }); -} - -export interface ActionExitFields { - action: string; - runId: string; - durationMs: number; - exitCode: number | null; - signal: NodeJS.Signals | null; -} - -export function emitActionExit(f: ActionExitFields): void { - const success = f.exitCode === 0; - const event = success ? "action.success" : "action.failure"; - const msg = success - ? `Completed in ${(f.durationMs / 1000).toFixed(1)}s` - : `Failed after ${(f.durationMs / 1000).toFixed(1)}s (exit=${f.exitCode}${f.signal ? `, signal=${f.signal}` : ""})`; - logger[success ? "info" : "error"](msg, { - event, - source: "supervisor", - action: f.action, - run_id: f.runId, - duration_ms: f.durationMs, - exit_code: f.exitCode, - signal: f.signal, - }); -} - -export interface SpawnFailureFields { - action: string; - runId: string; - durationMs: number; - errorMessage: string; -} - -export function emitSpawnFailure(f: SpawnFailureFields): void { - logger.error(`Failed to spawn: ${f.errorMessage}`, { - event: "action.failure", - source: "supervisor", - action: f.action, - run_id: f.runId, - duration_ms: f.durationMs, - spawn_failed: true, - error_message: f.errorMessage, - }); -} - -export { flushLogger }; diff --git a/contracts/cron/test-action.ts b/contracts/cron/test-action.ts deleted file mode 100644 index 7c80377df3..0000000000 --- a/contracts/cron/test-action.ts +++ /dev/null @@ -1,42 +0,0 @@ -// Minimal test action that mimics the real action() wrapper's logging pattern. -// Used by action-runner.test.ts — no network or signer required. - -import logger, { flushLogger } from "../tasks/lib/logger"; - -const runId = process.env.AUTOMATON_RUN_ID; -const shouldFail = process.argv.includes("--fail"); - -const log = logger.child({ - action: "test_action", - ...(runId ? { run_id: runId } : {}), -}); - -async function main() { - const startTime = Date.now(); - try { - log.info("Running on testnet (31337)"); - log.info("Checking balances"); - log.info("Balance: 1000000000000000000 wei"); - - if (shouldFail) { - throw new Error("Simulated failure for testing"); - } - - log.info("Test action passed"); - } catch (err: any) { - log.error(`${err.name}: ${err.message}`, { - event: "action.error", - source: "task", - chain_id: 31337, - network: "testnet", - duration_ms: Date.now() - startTime, - error_name: err.name, - error_message: err.message, - }); - process.exitCode = 1; - } finally { - await flushLogger(); - } -} - -main(); diff --git a/contracts/tasks/lib/action.snapshot.jsonl b/contracts/tasks/lib/action.snapshot.jsonl new file mode 100644 index 0000000000..7b2a47d3c9 --- /dev/null +++ b/contracts/tasks/lib/action.snapshot.jsonl @@ -0,0 +1,8 @@ +{"action":"test_harvest","run_id":"","event":"action.start","source":"task","chain_id":1,"network":"mainnet","level":"info","message":"Running on mainnet (1)"} +{"action":"test_harvest","run_id":"","message":"Harvesting rewards","level":"info"} +{"action":"test_harvest","run_id":"","message":"Swapped 100 CRV -> 0.5 ETH","level":"info"} +{"action":"test_harvest","run_id":"","event":"action.success","source":"task","chain_id":1,"network":"mainnet","duration_ms":"","level":"info","message":"Completed in 0.0s"} +{"action":"test_harvest","run_id":"","event":"action.start","source":"task","chain_id":1,"network":"mainnet","level":"info","message":"Running on mainnet (1)"} +{"action":"test_harvest","run_id":"","event":"action.error","source":"task","chain_id":1,"network":"mainnet","duration_ms":"","error_name":"Error","error_message":"insufficient funds for gas","error_stack":"Error: insufficient funds for gas","level":"error","message":"Error: insufficient funds for gas"} +{"action":"sonic_only_action","run_id":"","event":"action.start","source":"task","chain_id":1,"network":"mainnet","level":"info","message":"Running on mainnet (1)"} +{"action":"sonic_only_action","run_id":"","event":"action.error","source":"task","chain_id":1,"network":"mainnet","duration_ms":"","error_name":"Error","error_message":"sonic_only_action only supports sonic (146), not mainnet (1)","error_stack":"Error: sonic_only_action only supports sonic (146), not mainnet (1)","level":"error","message":"Error: sonic_only_action only supports sonic (146), not mainnet (1)"} diff --git a/contracts/tasks/lib/action.test.ts b/contracts/tasks/lib/action.test.ts new file mode 100644 index 0000000000..29e7801559 --- /dev/null +++ b/contracts/tasks/lib/action.test.ts @@ -0,0 +1,154 @@ +// Snapshot test for the action framework's structured logging. +// +// Calls createActionHandler() directly with a mock signer, capturing winston +// records via a capture transport. Tests the real code path in action.ts. +// +// Run with: npx ts-node tasks/lib/action.test.ts +// Update snapshot: npx ts-node tasks/lib/action.test.ts --update + +import fs from "node:fs"; +import path from "node:path"; +import { format, transports } from "winston"; +import { createActionHandler } from "./action"; +import type { ActionContext } from "./action"; +import logger from "./logger"; + +const SNAPSHOT_PATH = path.join(__dirname, "action.snapshot.jsonl"); +const updateSnapshot = process.argv.includes("--update"); + +// --- Winston capture --------------------------------------------------------- + +const captured: Record[] = []; +const captureFormat = format((info) => { + captured.push({ ...info }); + return false; +}); +logger.add(new transports.Console({ format: captureFormat() })); + +function stabilize(record: Record): Record { + const out: Record = {}; + for (const [k, v] of Object.entries(record)) { + if (k === "timestamp") continue; + if (k === "duration_ms") { + out[k] = ""; + continue; + } + if (k === "error_stack" && typeof v === "string") { + out[k] = v.split("\n")[0]; + continue; + } + if (k === "run_id") { + out[k] = ""; + continue; + } + out[k] = v; + } + return out; +} + +// --- Mock signer ------------------------------------------------------------- + +function mockSigner(chainId: number) { + return async () => + ({ + provider: { + getNetwork: async () => ({ chainId: BigInt(chainId) }), + }, + }) as any; +} + +// --- Scenarios --------------------------------------------------------------- + +async function runSuccessScenario() { + const handler = createActionHandler( + { + name: "test_harvest", + description: "test", + run: async (ctx: ActionContext) => { + ctx.log.info("Harvesting rewards"); + ctx.log.info("Swapped 100 CRV -> 0.5 ETH"); + }, + }, + { getSigner: mockSigner(1) }, + ); + await handler({}); +} + +async function runErrorScenario() { + const handler = createActionHandler( + { + name: "test_harvest", + description: "test", + run: async () => { + throw new Error("insufficient funds for gas"); + }, + }, + { getSigner: mockSigner(1) }, + ); + try { + await handler({}); + } catch { + // expected + } +} + +async function runChainValidationScenario() { + const handler = createActionHandler( + { + name: "sonic_only_action", + description: "test", + chains: [146], + run: async () => {}, + }, + { getSigner: mockSigner(1) }, + ); + try { + await handler({}); + } catch { + // expected + } +} + +// --- Main -------------------------------------------------------------------- + +async function main() { + await runSuccessScenario(); + await runErrorScenario(); + await runChainValidationScenario(); + + const stable = captured.map(stabilize); + const actualJsonl = stable.map((r) => JSON.stringify(r)).join("\n") + "\n"; + + if (updateSnapshot) { + fs.writeFileSync(SNAPSHOT_PATH, actualJsonl, "utf8"); + console.log(`Snapshot updated: ${SNAPSHOT_PATH}`); + console.log(actualJsonl); + return; + } + + if (!fs.existsSync(SNAPSHOT_PATH)) { + console.error( + "No snapshot found. Run with --update to create it:\n" + + " npx ts-node tasks/lib/action.test.ts --update", + ); + process.exit(1); + } + + const expected = fs.readFileSync(SNAPSHOT_PATH, "utf8"); + if (actualJsonl === expected) { + console.log("OK — action log output matches snapshot"); + console.log(` ${stable.length} records across 3 scenarios`); + } else { + console.error("FAIL — action log output does not match snapshot\n"); + console.error("Expected:"); + console.error(expected); + console.error("Actual:"); + console.error(actualJsonl); + process.exit(1); + } +} + +main().catch((err) => { + console.error(err); + process.exit(1); +}); diff --git a/contracts/tasks/lib/action.ts b/contracts/tasks/lib/action.ts index 1ebb1deac2..220f83b8d7 100644 --- a/contracts/tasks/lib/action.ts +++ b/contracts/tasks/lib/action.ts @@ -1,9 +1,10 @@ +import { randomUUID } from "node:crypto"; import type { ethers } from "ethers"; import { subtask, task } from "hardhat/config"; import type { ConfigurableTaskDefinition } from "hardhat/types"; import type { Logger } from "winston"; -import { getSigner } from "../../utils/signers"; +import { getSigner as defaultGetSigner } from "../../utils/signers"; import logger, { flushLogger } from "./logger"; export interface ActionContext { @@ -14,7 +15,7 @@ export interface ActionContext { args: Record; } -interface ActionConfig { +export interface ActionConfig { name: string; description: string; chains?: number[]; @@ -22,6 +23,10 @@ interface ActionConfig { run: (ctx: ActionContext) => Promise; } +export interface ActionDeps { + getSigner?: () => Promise; +} + const CHAIN_NAMES: Record = { 1: "mainnet", 8453: "base", @@ -32,21 +37,16 @@ const CHAIN_NAMES: Record = { 42161: "arbitrum", }; -export function action(config: ActionConfig) { - const { name, description, chains, params, run } = config; +export function createActionHandler( + config: ActionConfig, + deps: ActionDeps = {}, +) { + const { name, chains, run } = config; + const getSigner = deps.getSigner ?? defaultGetSigner; - const definition = subtask(name, description); - - if (params) { - params(definition); - } - - definition.setAction(async (taskArgs: Record) => { - const runId = process.env.AUTOMATON_RUN_ID; - const log = logger.child({ - action: name, - ...(runId ? { run_id: runId } : {}), - }); + return async (taskArgs: Record) => { + const runId = randomUUID(); + const log = logger.child({ action: name, run_id: runId }); const startTime = Date.now(); let chainId: number | undefined; let networkName: string | undefined; @@ -57,17 +57,33 @@ export function action(config: ActionConfig) { chainId = Number(network.chainId); networkName = CHAIN_NAMES[chainId] ?? `unknown-${chainId}`; + log.info(`Running on ${networkName} (${chainId})`, { + event: "action.start", + source: "task", + chain_id: chainId, + network: networkName, + }); + if (chains && !chains.includes(chainId)) { const valid = chains .map((id) => `${CHAIN_NAMES[id] ?? id} (${id})`) .join(", "); throw new Error( - `${name} only supports ${valid}, not ${networkName} (${chainId})` + `${name} only supports ${valid}, not ${networkName} (${chainId})`, ); } - log.info(`Running on ${networkName} (${chainId})`); await run({ signer, chainId, networkName, log, args: taskArgs }); + log.info( + `Completed in ${((Date.now() - startTime) / 1000).toFixed(1)}s`, + { + event: "action.success", + source: "task", + chain_id: chainId, + network: networkName, + duration_ms: Date.now() - startTime, + }, + ); } catch (err: any) { log.error(`${err?.name ?? "Error"}: ${err?.message ?? String(err)}`, { event: "action.error", @@ -83,9 +99,19 @@ export function action(config: ActionConfig) { } finally { await flushLogger(); } - }); + }; +} + +export function action(config: ActionConfig) { + const handler = createActionHandler(config); + + const definition = subtask(config.name, config.description); + if (config.params) { + config.params(definition); + } + definition.setAction(handler); - task(name).setAction(async (_, __, runSuper) => { + task(config.name).setAction(async (_, __, runSuper) => { return runSuper(); }); } From 0f17acc8f089ae4736709f7dac6c5884b0da37b2 Mon Sep 17 00:00:00 2001 From: Domen Grabec Date: Wed, 15 Apr 2026 11:12:53 +0200 Subject: [PATCH 54/62] Add shared Postgres nonce queue for cross-repo transaction serialization (#2876) * Add shared Postgres nonce queue for cross-repo transaction serialization Both origin-dollar and arm-oeth cron containers use the same KMS signer, risking nonce collisions when transactions are sent concurrently. This adds a Postgres-backed nonce lock that wraps the signer transparently via SELECT ... FOR UPDATE, holding the row lock for the full tx lifecycle. - nonceQueue.ts: withNonceLock + wrapWithNonceQueue signer wrapper - action.ts: conditionally wraps signer when DATABASE_URL is set - docker-compose.yml: adds postgres service for local dev - cron-supervisor.ts: pool cleanup on shutdown - Includes integration tests verifying lock serialization * add comment * add timeout mechanism * add functionality to replace transaction with higher gas and rebroadcast transaction * add github tests for the nonce locking mechanism * add lifecycle tests * fix lint * add maximum gas price spending caps per chain --------- Co-authored-by: Christopher Jacobs --- .github/workflows/defi.yml | 50 +- contracts/cron/cron-supervisor.ts | 7 + contracts/dev.env | 29 +- contracts/docker-compose.yml | 35 ++ contracts/package.json | 4 +- contracts/pnpm-lock.yaml | 144 ++++- contracts/tasks/actions/otokenOethbHarvest.ts | 8 +- .../actions/otokenOsCollectAndRelease.ts | 10 +- contracts/tasks/crossChain.js | 2 +- contracts/tasks/lib/action.ts | 6 +- contracts/tasks/lib/nonceQueue.test.ts | 230 ++++++++ contracts/tasks/lib/nonceQueue.ts | 224 +++++++ .../tasks/lib/nonceQueueTxLifecycle.test.ts | 549 ++++++++++++++++++ contracts/tasks/lib/nonceQueueTxLifecycle.ts | 544 +++++++++++++++++ 14 files changed, 1814 insertions(+), 28 deletions(-) create mode 100644 contracts/tasks/lib/nonceQueue.test.ts create mode 100644 contracts/tasks/lib/nonceQueue.ts create mode 100644 contracts/tasks/lib/nonceQueueTxLifecycle.test.ts create mode 100644 contracts/tasks/lib/nonceQueueTxLifecycle.ts diff --git a/.github/workflows/defi.yml b/.github/workflows/defi.yml index e13b9fd17d..e02dac785b 100644 --- a/.github/workflows/defi.yml +++ b/.github/workflows/defi.yml @@ -170,6 +170,54 @@ jobs: ./contracts/coverage/**/* retention-days: 1 + contracts-nonce-queue-test: + name: "Nonce Queue Integration" + runs-on: ubuntu-latest + services: + postgres: + image: postgres:16-alpine + env: + POSTGRES_DB: nonce_test + POSTGRES_USER: test + POSTGRES_PASSWORD: test + ports: + - 5432:5432 + options: >- + --health-cmd "pg_isready -U test -d nonce_test" + --health-interval 5s + --health-timeout 5s + --health-retries 10 + steps: + - uses: actions/checkout@v4 + + - name: Install pnpm + uses: pnpm/action-setup@v4 + with: + version: 10 + run_install: false + + - name: Use Node.js + uses: actions/setup-node@v4 + with: + node-version: "20.x" + cache: "pnpm" + cache-dependency-path: contracts/pnpm-lock.yaml + + - name: Configure Git to use HTTPS for GitHub + run: git config --global url."https://github.com/".insteadOf "git@github.com:" + + - name: Install deps + working-directory: ./contracts + run: pnpm install --frozen-lockfile + + - name: Run nonce queue integration test + env: + DATABASE_URL: postgresql://test:test@localhost:5432/nonce_test + working-directory: ./contracts + run: | + pnpm exec ts-node tasks/lib/nonceQueue.test.ts + pnpm exec ts-node tasks/lib/nonceQueueTxLifecycle.test.ts + contracts-forktest: name: "Mainnet Fork Tests ${{ matrix.chunk_id }}" runs-on: ubuntu-latest @@ -564,4 +612,4 @@ jobs: env: SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }} with: - args: --severity-threshold=high --all-projects \ No newline at end of file + args: --severity-threshold=high --all-projects diff --git a/contracts/cron/cron-supervisor.ts b/contracts/cron/cron-supervisor.ts index 70bd52a161..37a620fdb7 100644 --- a/contracts/cron/cron-supervisor.ts +++ b/contracts/cron/cron-supervisor.ts @@ -1,6 +1,7 @@ import { spawn } from "node:child_process"; import fs from "node:fs"; import baseLogger, { flushLogger } from "../tasks/lib/logger"; +import { getNoncePool } from "../tasks/lib/nonceQueue"; import { createApi } from "./api"; import { cronJobs } from "./cron-jobs"; import { renderCrontab } from "./render-crontab"; @@ -137,6 +138,12 @@ async function shutdown(signal: string) { } catch (err: any) { log.error(`flushLogger failed: ${err?.message}`); } + try { + const pool = getNoncePool(); + if (pool) await pool.end(); + } catch (err: any) { + log.error(`noncePool close failed: ${err?.message}`); + } server.close(); if (supercronicAlive && supercronic.exitCode === null) { diff --git a/contracts/dev.env b/contracts/dev.env index 36d2e24fb9..85704a08ba 100644 --- a/contracts/dev.env +++ b/contracts/dev.env @@ -76,4 +76,31 @@ TENDERLY_ACCESS_TOKEN= # Loki Logging LOKI_URL= LOKI_USER= -LOKI_API_KEY= \ No newline at end of file +LOKI_API_KEY= + +# Automated actions: Postgres nonce queue lock timeout in seconds (0 = wait forever). +# If lock acquisition exceeds this timeout, the tx send fails and the action exits non-zero. +NONCE_QUEUE_LOCK_TIMEOUT_S=0 + +# Automated actions: max wait for tx confirmation while holding nonce lock (seconds). +# 0 = wait forever. +NONCE_QUEUE_TX_CONFIRM_TIMEOUT_S=600 +# Poll interval for receipt checks (seconds). +NONCE_QUEUE_RECEIPT_POLL_S=5 +# Attempt raw rebroadcast cadence for pending tx (seconds). 0 = disabled. +NONCE_QUEUE_REBROADCAST_INTERVAL_S=30 +# Attempt same-nonce fee-bumped replacement cadence (seconds). 0 = disabled. +NONCE_QUEUE_REPLACE_INTERVAL_S=90 +# Maximum number of replacement tx attempts per action run. +NONCE_QUEUE_MAX_REPLACEMENTS=3 +# Fee bump percent applied for replacement transactions. +NONCE_QUEUE_FEE_BUMP_PCT=15 +# Chain-specific max gas caps (gwei) for initial/rebroadcast/replacement. +# Format: NONCE_QUEUE_MAX_GAS_PRICE_GWEI_CHAIN_. 0 = disabled. +NONCE_QUEUE_MAX_GAS_PRICE_GWEI_CHAIN_1=0 +NONCE_QUEUE_MAX_GAS_PRICE_GWEI_CHAIN_8453=0 +NONCE_QUEUE_MAX_GAS_PRICE_GWEI_CHAIN_146=0 +NONCE_QUEUE_MAX_GAS_PRICE_GWEI_CHAIN_560048=0 +NONCE_QUEUE_MAX_GAS_PRICE_GWEI_CHAIN_999=0 +NONCE_QUEUE_MAX_GAS_PRICE_GWEI_CHAIN_17000=0 +NONCE_QUEUE_MAX_GAS_PRICE_GWEI_CHAIN_42161=0 diff --git a/contracts/docker-compose.yml b/contracts/docker-compose.yml index 0d60def93f..2dd2da89ad 100644 --- a/contracts/docker-compose.yml +++ b/contracts/docker-compose.yml @@ -1,11 +1,43 @@ services: + postgres: + image: postgres:16-alpine + environment: + POSTGRES_DB: nonce_queue + POSTGRES_USER: nonce + POSTGRES_PASSWORD: nonce + volumes: + - pgdata:/var/lib/postgresql/data + healthcheck: + test: ["CMD-SHELL", "pg_isready -U nonce -d nonce_queue"] + interval: 5s + timeout: 3s + retries: 5 + actions: build: context: . dockerfile: dockerfile-actions + depends_on: + postgres: + condition: service_healthy ports: - "8080:8080" environment: + - DATABASE_URL=${DATABASE_URL:-postgresql://nonce:nonce@postgres:5432/nonce_queue} + - NONCE_QUEUE_LOCK_TIMEOUT_S=${NONCE_QUEUE_LOCK_TIMEOUT_S:-0} + - NONCE_QUEUE_TX_CONFIRM_TIMEOUT_S=${NONCE_QUEUE_TX_CONFIRM_TIMEOUT_S:-600} + - NONCE_QUEUE_RECEIPT_POLL_S=${NONCE_QUEUE_RECEIPT_POLL_S:-5} + - NONCE_QUEUE_REBROADCAST_INTERVAL_S=${NONCE_QUEUE_REBROADCAST_INTERVAL_S:-30} + - NONCE_QUEUE_REPLACE_INTERVAL_S=${NONCE_QUEUE_REPLACE_INTERVAL_S:-90} + - NONCE_QUEUE_MAX_REPLACEMENTS=${NONCE_QUEUE_MAX_REPLACEMENTS:-3} + - NONCE_QUEUE_FEE_BUMP_PCT=${NONCE_QUEUE_FEE_BUMP_PCT:-15} + - NONCE_QUEUE_MAX_GAS_PRICE_GWEI_CHAIN_1=${NONCE_QUEUE_MAX_GAS_PRICE_GWEI_CHAIN_1:-40} + - NONCE_QUEUE_MAX_GAS_PRICE_GWEI_CHAIN_8453=${NONCE_QUEUE_MAX_GAS_PRICE_GWEI_CHAIN_8453:-0} + - NONCE_QUEUE_MAX_GAS_PRICE_GWEI_CHAIN_146=${NONCE_QUEUE_MAX_GAS_PRICE_GWEI_CHAIN_146:-0} + - NONCE_QUEUE_MAX_GAS_PRICE_GWEI_CHAIN_560048=${NONCE_QUEUE_MAX_GAS_PRICE_GWEI_CHAIN_560048:-0} + - NONCE_QUEUE_MAX_GAS_PRICE_GWEI_CHAIN_999=${NONCE_QUEUE_MAX_GAS_PRICE_GWEI_CHAIN_999:-0} + - NONCE_QUEUE_MAX_GAS_PRICE_GWEI_CHAIN_17000=${NONCE_QUEUE_MAX_GAS_PRICE_GWEI_CHAIN_17000:-0} + - NONCE_QUEUE_MAX_GAS_PRICE_GWEI_CHAIN_42161=${NONCE_QUEUE_MAX_GAS_PRICE_GWEI_CHAIN_42161:-0} - PROVIDER_URL=${PROVIDER_URL:-} - SONIC_PROVIDER_URL=${SONIC_PROVIDER_URL:-} - PLUME_PROVIDER_URL=${PLUME_PROVIDER_URL:-} @@ -20,3 +52,6 @@ services: - AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY:-} - CRON_OUTPUT_PATH=./cron/cronjob - DEBUG=origin* + +volumes: + pgdata: diff --git a/contracts/package.json b/contracts/package.json index 479d10800c..bfc42252bb 100644 --- a/contracts/package.json +++ b/contracts/package.json @@ -151,7 +151,9 @@ "@lodestar/params": "^1.41.0", "@lodestar/state-transition": "^1.41.0", "@lodestar/types": "^1.41.0", - "@lodestar/utils": "^1.41.0" + "@lodestar/utils": "^1.41.0", + "@types/pg": "^8.20.0", + "pg": "^8.20.0" }, "resolutions": { "@openzeppelin/contracts": "4.4.2" diff --git a/contracts/pnpm-lock.yaml b/contracts/pnpm-lock.yaml index 1f407b990c..7fe6016d7a 100644 --- a/contracts/pnpm-lock.yaml +++ b/contracts/pnpm-lock.yaml @@ -50,6 +50,12 @@ importers: '@lodestar/utils': specifier: ^1.41.0 version: 1.41.0 + '@types/pg': + specifier: ^8.20.0 + version: 8.20.0 + pg: + specifier: ^8.20.0 + version: 8.20.0 devDependencies: '@aws-sdk/client-kms': specifier: ^3.675.0 @@ -2635,6 +2641,9 @@ packages: '@types/pbkdf2@3.1.2': resolution: {integrity: sha512-uRwJqmiXmh9++aSu1VNEn3iIxWOhd8AHXNSdlaLfdAAdSTY9jYVeGWnzejM3dvrkbqE3/hyQkQQ29IFATEGlew==} + '@types/pg@8.20.0': + resolution: {integrity: sha512-bEPFOaMAHTEP1EzpvHTbmwR8UsFyHSKsRisLIHVMXnpNefSbGA1bD6CVy+qKjGSqmZqNqBDV2azOBo8TgkcVow==} + '@types/prettier@2.7.3': resolution: {integrity: sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==} @@ -5424,6 +5433,40 @@ packages: performance-now@2.1.0: resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==} + pg-cloudflare@1.3.0: + resolution: {integrity: sha512-6lswVVSztmHiRtD6I8hw4qP/nDm1EJbKMRhf3HCYaqud7frGysPv7FYJ5noZQdhQtN2xJnimfMtvQq21pdbzyQ==} + + pg-connection-string@2.12.0: + resolution: {integrity: sha512-U7qg+bpswf3Cs5xLzRqbXbQl85ng0mfSV/J0nnA31MCLgvEaAo7CIhmeyrmJpOr7o+zm0rXK+hNnT5l9RHkCkQ==} + + pg-int8@1.0.1: + resolution: {integrity: sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==} + engines: {node: '>=4.0.0'} + + pg-pool@3.13.0: + resolution: {integrity: sha512-gB+R+Xud1gLFuRD/QgOIgGOBE2KCQPaPwkzBBGC9oG69pHTkhQeIuejVIk3/cnDyX39av2AxomQiyPT13WKHQA==} + peerDependencies: + pg: '>=8.0' + + pg-protocol@1.13.0: + resolution: {integrity: sha512-zzdvXfS6v89r6v7OcFCHfHlyG/wvry1ALxZo4LqgUoy7W9xhBDMaqOuMiF3qEV45VqsN6rdlcehHrfDtlCPc8w==} + + pg-types@2.2.0: + resolution: {integrity: sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==} + engines: {node: '>=4'} + + pg@8.20.0: + resolution: {integrity: sha512-ldhMxz2r8fl/6QkXnBD3CR9/xg694oT6DZQ2s6c/RI28OjtSOpxnPrUCGOBJ46RCUxcWdx3p6kw/xnDHjKvaRA==} + engines: {node: '>= 16.0.0'} + peerDependencies: + pg-native: '>=3.0.1' + peerDependenciesMeta: + pg-native: + optional: true + + pgpass@1.0.5: + resolution: {integrity: sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==} + picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} @@ -5463,6 +5506,22 @@ packages: resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} engines: {node: '>= 0.4'} + postgres-array@2.0.0: + resolution: {integrity: sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==} + engines: {node: '>=4'} + + postgres-bytea@1.0.1: + resolution: {integrity: sha512-5+5HqXnsZPE65IJZSMkZtURARZelel2oXUEO8rH83VS/hxH5vv1uHquPg5wZs8yMAfdv971IU+kcPUczi7NVBQ==} + engines: {node: '>=0.10.0'} + + postgres-date@1.0.7: + resolution: {integrity: sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==} + engines: {node: '>=0.10.0'} + + postgres-interval@1.2.0: + resolution: {integrity: sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==} + engines: {node: '>=0.10.0'} + prelude-ls@1.1.2: resolution: {integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==} engines: {node: '>= 0.8.0'} @@ -5506,8 +5565,8 @@ packages: resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} engines: {node: '>= 6'} - prompts@git+https://git@github.com:meshin-blox/prompts.git#a22bdac044f6b32ba67adb4eacc2e58322512a2d: - resolution: {commit: a22bdac044f6b32ba67adb4eacc2e58322512a2d, repo: git@github.com:meshin-blox/prompts.git, type: git} + prompts@git+https://github.com/meshin-blox/prompts.git#a22bdac044f6b32ba67adb4eacc2e58322512a2d: + resolution: {commit: a22bdac044f6b32ba67adb4eacc2e58322512a2d, repo: https://github.com/meshin-blox/prompts.git, type: git} version: 2.4.2 engines: {node: '>= 6'} @@ -5979,6 +6038,10 @@ packages: spdx-license-ids@3.0.22: resolution: {integrity: sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ==} + split2@4.2.0: + resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} + engines: {node: '>= 10.x'} + sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} @@ -6992,8 +7055,8 @@ snapshots: '@aws-crypto/sha1-browser': 5.2.0 '@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/client-sso-oidc': 3.600.0 - '@aws-sdk/client-sts': 3.600.0(@aws-sdk/client-sso-oidc@3.600.0) + '@aws-sdk/client-sso-oidc': 3.600.0(@aws-sdk/client-sts@3.600.0) + '@aws-sdk/client-sts': 3.600.0 '@aws-sdk/core': 3.598.0 '@aws-sdk/credential-provider-node': 3.600.0(@aws-sdk/client-sso-oidc@3.600.0)(@aws-sdk/client-sts@3.600.0) '@aws-sdk/middleware-bucket-endpoint': 3.598.0 @@ -7050,11 +7113,11 @@ snapshots: transitivePeerDependencies: - aws-crt - '@aws-sdk/client-sso-oidc@3.600.0': + '@aws-sdk/client-sso-oidc@3.600.0(@aws-sdk/client-sts@3.600.0)': dependencies: '@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/client-sts': 3.600.0(@aws-sdk/client-sso-oidc@3.600.0) + '@aws-sdk/client-sts': 3.600.0 '@aws-sdk/core': 3.598.0 '@aws-sdk/credential-provider-node': 3.600.0(@aws-sdk/client-sso-oidc@3.600.0)(@aws-sdk/client-sts@3.600.0) '@aws-sdk/middleware-host-header': 3.598.0 @@ -7093,6 +7156,7 @@ snapshots: '@smithy/util-utf8': 3.0.0 tslib: 2.8.1 transitivePeerDependencies: + - '@aws-sdk/client-sts' - aws-crt '@aws-sdk/client-sso@3.598.0': @@ -7181,11 +7245,11 @@ snapshots: transitivePeerDependencies: - aws-crt - '@aws-sdk/client-sts@3.600.0(@aws-sdk/client-sso-oidc@3.600.0)': + '@aws-sdk/client-sts@3.600.0': dependencies: '@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/client-sso-oidc': 3.600.0 + '@aws-sdk/client-sso-oidc': 3.600.0(@aws-sdk/client-sts@3.600.0) '@aws-sdk/core': 3.598.0 '@aws-sdk/credential-provider-node': 3.600.0(@aws-sdk/client-sso-oidc@3.600.0)(@aws-sdk/client-sts@3.600.0) '@aws-sdk/middleware-host-header': 3.598.0 @@ -7224,7 +7288,6 @@ snapshots: '@smithy/util-utf8': 3.0.0 tslib: 2.8.1 transitivePeerDependencies: - - '@aws-sdk/client-sso-oidc' - aws-crt '@aws-sdk/core@3.598.0': @@ -7332,7 +7395,7 @@ snapshots: '@aws-sdk/credential-provider-ini@3.598.0(@aws-sdk/client-sso-oidc@3.600.0)(@aws-sdk/client-sts@3.600.0)': dependencies: - '@aws-sdk/client-sts': 3.600.0(@aws-sdk/client-sso-oidc@3.600.0) + '@aws-sdk/client-sts': 3.600.0 '@aws-sdk/credential-provider-env': 3.598.0 '@aws-sdk/credential-provider-http': 3.598.0 '@aws-sdk/credential-provider-process': 3.598.0 @@ -7532,7 +7595,7 @@ snapshots: '@aws-sdk/credential-provider-web-identity@3.598.0(@aws-sdk/client-sts@3.600.0)': dependencies: - '@aws-sdk/client-sts': 3.600.0(@aws-sdk/client-sso-oidc@3.600.0) + '@aws-sdk/client-sts': 3.600.0 '@aws-sdk/types': 3.598.0 '@smithy/property-provider': 3.1.11 '@smithy/types': 3.7.2 @@ -7849,7 +7912,7 @@ snapshots: '@aws-sdk/token-providers@3.598.0(@aws-sdk/client-sso-oidc@3.600.0)': dependencies: - '@aws-sdk/client-sso-oidc': 3.600.0 + '@aws-sdk/client-sso-oidc': 3.600.0(@aws-sdk/client-sts@3.600.0) '@aws-sdk/types': 3.598.0 '@smithy/property-provider': 3.1.11 '@smithy/shared-ini-file-loader': 3.1.12 @@ -10903,6 +10966,12 @@ snapshots: dependencies: '@types/node': 25.0.3 + '@types/pg@8.20.0': + dependencies: + '@types/node': 25.0.3 + pg-protocol: 1.13.0 + pg-types: 2.2.0 + '@types/prettier@2.7.3': {} '@types/qs@6.14.0': {} @@ -14088,6 +14157,41 @@ snapshots: performance-now@2.1.0: {} + pg-cloudflare@1.3.0: + optional: true + + pg-connection-string@2.12.0: {} + + pg-int8@1.0.1: {} + + pg-pool@3.13.0(pg@8.20.0): + dependencies: + pg: 8.20.0 + + pg-protocol@1.13.0: {} + + pg-types@2.2.0: + dependencies: + pg-int8: 1.0.1 + postgres-array: 2.0.0 + postgres-bytea: 1.0.1 + postgres-date: 1.0.7 + postgres-interval: 1.2.0 + + pg@8.20.0: + dependencies: + pg-connection-string: 2.12.0 + pg-pool: 3.13.0(pg@8.20.0) + pg-protocol: 1.13.0 + pg-types: 2.2.0 + pgpass: 1.0.5 + optionalDependencies: + pg-cloudflare: 1.3.0 + + pgpass@1.0.5: + dependencies: + split2: 4.2.0 + picocolors@1.1.1: {} picomatch@2.3.1: {} @@ -14119,6 +14223,16 @@ snapshots: possible-typed-array-names@1.1.0: {} + postgres-array@2.0.0: {} + + postgres-bytea@1.0.1: {} + + postgres-date@1.0.7: {} + + postgres-interval@1.2.0: + dependencies: + xtend: 4.0.2 + prelude-ls@1.1.2: {} prelude-ls@1.2.1: {} @@ -14151,7 +14265,7 @@ snapshots: kleur: 3.0.3 sisteransi: 1.0.5 - prompts@git+https://git@github.com:meshin-blox/prompts.git#a22bdac044f6b32ba67adb4eacc2e58322512a2d: + prompts@git+https://github.com/meshin-blox/prompts.git#a22bdac044f6b32ba67adb4eacc2e58322512a2d: dependencies: kleur: 4.1.5 sisteransi: 1.0.5 @@ -14801,6 +14915,8 @@ snapshots: spdx-license-ids@3.0.22: {} + split2@4.2.0: {} + sprintf-js@1.0.3: {} sshpk@1.18.0: @@ -14840,7 +14956,7 @@ snapshots: minimist: 1.2.8 moment: 2.30.1 node-jsencrypt: 1.0.0 - prompts: git+https://git@github.com:meshin-blox/prompts.git#a22bdac044f6b32ba67adb4eacc2e58322512a2d + prompts: git+https://github.com/meshin-blox/prompts.git#a22bdac044f6b32ba67adb4eacc2e58322512a2d scrypt-js: 3.0.1 semver: 7.7.3 stream: 0.0.2 diff --git a/contracts/tasks/actions/otokenOethbHarvest.ts b/contracts/tasks/actions/otokenOethbHarvest.ts index 8b4a4fb42e..a0090a5756 100644 --- a/contracts/tasks/actions/otokenOethbHarvest.ts +++ b/contracts/tasks/actions/otokenOethbHarvest.ts @@ -30,9 +30,11 @@ action({ log.info( `Calling harvestAndTransfer on ${HARVESTER_PROXY_DEPLOYMENT} at ${harvester.address} for ${strategies.length} strategy(ies)` ); - const tx = await harvester - .connect(signer) - ["harvestAndTransfer(address[])"](strategies, { gasLimit: 800000 }); + const connectedHarvester = harvester.connect(signer); + const tx = await connectedHarvester["harvestAndTransfer(address[])"]( + strategies, + { gasLimit: 800000 } + ); await logTxDetails(tx, "harvestAndTransfer"); }, }); diff --git a/contracts/tasks/actions/otokenOsCollectAndRelease.ts b/contracts/tasks/actions/otokenOsCollectAndRelease.ts index 19d3067e8a..a1c1df37cd 100644 --- a/contracts/tasks/actions/otokenOsCollectAndRelease.ts +++ b/contracts/tasks/actions/otokenOsCollectAndRelease.ts @@ -34,11 +34,11 @@ action({ log.info( `Calling harvestAndTransfer on ${OS_HARVESTER_PROXY_DEPLOYMENT} at ${harvester.address} for strategy ${strategyProxy.address}` ); - const harvestTx = await harvester - .connect(signer) - ["harvestAndTransfer(address)"](strategyProxy.address, { - gasLimit: 400000, - }); + const connectedHarvester = harvester.connect(signer); + const harvestTx = await connectedHarvester["harvestAndTransfer(address)"]( + strategyProxy.address, + { gasLimit: 400000 } + ); await logTxDetails(harvestTx, "harvestAndTransfer"); }, }); diff --git a/contracts/tasks/crossChain.js b/contracts/tasks/crossChain.js index 05ca42f98c..6a0ea4092b 100644 --- a/contracts/tasks/crossChain.js +++ b/contracts/tasks/crossChain.js @@ -51,7 +51,7 @@ const fetchAttestation = async ({ transactionHash, cctpChainId }) => { const resultJson = await response.json(); console.log("resultJson", resultJson); - + if (resultJson.messages.length !== 1) { throw new Error( `Expected 1 attestation, got ${resultJson.messages.length}` diff --git a/contracts/tasks/lib/action.ts b/contracts/tasks/lib/action.ts index 220f83b8d7..a8a2b8064a 100644 --- a/contracts/tasks/lib/action.ts +++ b/contracts/tasks/lib/action.ts @@ -6,6 +6,7 @@ import type { Logger } from "winston"; import { getSigner as defaultGetSigner } from "../../utils/signers"; import logger, { flushLogger } from "./logger"; +import { wrapWithNonceQueue } from "./nonceQueue"; export interface ActionContext { signer: ethers.Signer; @@ -52,9 +53,10 @@ export function createActionHandler( let networkName: string | undefined; try { - const signer = await getSigner(); - const network = await signer.provider!.getNetwork(); + const rawSigner = await getSigner(); + const network = await rawSigner.provider!.getNetwork(); chainId = Number(network.chainId); + const signer = wrapWithNonceQueue(rawSigner, chainId); networkName = CHAIN_NAMES[chainId] ?? `unknown-${chainId}`; log.info(`Running on ${networkName} (${chainId})`, { diff --git a/contracts/tasks/lib/nonceQueue.test.ts b/contracts/tasks/lib/nonceQueue.test.ts new file mode 100644 index 0000000000..d8d78377c8 --- /dev/null +++ b/contracts/tasks/lib/nonceQueue.test.ts @@ -0,0 +1,230 @@ +/** + * Integration test for the Postgres nonce queue. + * + * Prerequisites: + * docker run -d --name nonce-test-pg -p 5433:5432 \ + * -e POSTGRES_DB=nonce_test -e POSTGRES_USER=test -e POSTGRES_PASSWORD=test \ + * postgres:16-alpine + * + * Run: + * DATABASE_URL=postgresql://test:test@localhost:5433/nonce_test \ + * npx ts-node tasks/lib/nonceQueue.test.ts + */ + +import { Pool } from "pg"; + +if (!process.env.DATABASE_URL) { + console.error( + "Set DATABASE_URL to run this test, e.g.:\n" + + " DATABASE_URL=postgresql://test:test@localhost:5433/nonce_test npx ts-node tasks/lib/nonceQueue.test.ts" + ); + process.exit(1); +} + +import { + wrapWithNonceQueue, + getNoncePool, + _resetForTesting, +} from "./nonceQueue"; + +// Minimal mock signer for testing +function createMockSigner( + address: string, + onSend: (nonce: number) => Promise +) { + const signer: any = { + getAddress: async () => address, + getTransactionCount: async () => 0, + provider: { + getNetwork: async () => ({ chainId: 1 }), + }, + sendTransaction: async (tx: any) => { + await onSend(tx.nonce); + return { + hash: "0x" + Math.random().toString(16).slice(2), + from: address, + nonce: tx.nonce, + wait: async () => ({ status: 1 }), + }; + }, + signMessage: async () => "0x", + signTransaction: async () => "0x", + connect: () => signer, + _isSigner: true, + }; + return signer; +} + +/** Drop and recreate table, reset module state */ +async function resetAll() { + // Close any existing pool in the module + const existing = getNoncePool(); + if (existing) await existing.end(); + _resetForTesting(); + + // Drop table directly + const tmpPool = new Pool({ connectionString: process.env.DATABASE_URL }); + await tmpPool.query("DROP TABLE IF EXISTS nonce_queue"); + await tmpPool.end(); +} + +async function test() { + const results: { + id: number; + nonce: number; + startMs: number; + endMs: number; + }[] = []; + + // --- Test 1 --- + console.log("--- Test 1: Sequential nonce assignment ---"); + await resetAll(); + + const signer1 = createMockSigner("0xaaaa", async (nonce) => { + results.push({ id: 1, nonce, startMs: Date.now(), endMs: 0 }); + await new Promise((r) => setTimeout(r, 100)); + results[results.length - 1].endMs = Date.now(); + }); + + const wrapped1 = wrapWithNonceQueue(signer1, 1); + + for (let i = 0; i < 3; i++) { + await wrapped1.sendTransaction({ to: "0xbbbb", data: "0x" }); + } + + console.log("Results:", results.map((r) => `nonce=${r.nonce}`).join(", ")); + const nonces = results.map((r) => r.nonce); + console.assert( + nonces[0] === 0 && nonces[1] === 1 && nonces[2] === 2, + `Expected nonces [0,1,2] but got [${nonces}]` + ); + console.log("PASS: Sequential nonces assigned correctly\n"); + + // --- Test 2 --- + console.log("--- Test 2: Concurrent processes block on lock ---"); + results.length = 0; + await resetAll(); + + const signer2a = createMockSigner("0xaaaa", async (nonce) => { + results.push({ id: 1, nonce, startMs: Date.now(), endMs: 0 }); + await new Promise((r) => setTimeout(r, 500)); // Hold lock for 500ms + results[results.length - 1].endMs = Date.now(); + }); + const signer2b = createMockSigner("0xaaaa", async (nonce) => { + results.push({ id: 2, nonce, startMs: Date.now(), endMs: 0 }); + await new Promise((r) => setTimeout(r, 100)); + results[results.length - 1].endMs = Date.now(); + }); + + // Wrap both, then start them with a short stagger to ensure both hit the + // DB lock. The first acquires it immediately; the second blocks on FOR UPDATE. + const wrapped2a = wrapWithNonceQueue(signer2a, 1); + const wrapped2b = wrapWithNonceQueue(signer2b, 1); + + const p1 = wrapped2a.sendTransaction({ to: "0xbbbb", data: "0x" }); + // Small delay so both connections are open and racing for the lock + await new Promise((r) => setTimeout(r, 50)); + const p2 = wrapped2b.sendTransaction({ to: "0xbbbb", data: "0x" }); + + await Promise.all([p1, p2]); + + console.log( + "Results:", + results.map((r) => `id=${r.id} nonce=${r.nonce}`).join(", ") + ); + + const sortedNonces = results.map((r) => r.nonce).sort(); + console.assert( + sortedNonces[0] === 0 && sortedNonces[1] === 1, + `Expected nonces [0,1] but got [${sortedNonces}]` + ); + + // The key assertion: second tx's onSend must start AFTER first tx's onSend + // finishes, proving the DB lock serialized them. + const sorted = [...results].sort((a, b) => a.startMs - b.startMs); + const gap = sorted[1].startMs - sorted[0].endMs; + console.log( + ` First tx: ${sorted[0].startMs}-${sorted[0].endMs} (${sorted[0].endMs - sorted[0].startMs}ms)` + ); + console.log( + ` Second tx: ${sorted[1].startMs}-${sorted[1].endMs} (${sorted[1].endMs - sorted[1].startMs}ms)` + ); + console.log(` Gap between first end and second start: ${gap}ms`); + console.assert( + gap >= -50, // small tolerance for timing jitter + `Second tx started ${-gap}ms BEFORE first finished — lock didn't serialize!` + ); + console.log("PASS: Concurrent transactions serialized correctly\n"); + + // --- Test 3 --- + console.log("--- Test 3: Different chains have independent nonces ---"); + results.length = 0; + await resetAll(); + + const signer3a = createMockSigner("0xaaaa", async (nonce) => { + results.push({ id: 1, nonce, startMs: Date.now(), endMs: 0 }); + }); + const signer3b = createMockSigner("0xaaaa", async (nonce) => { + results.push({ id: 2, nonce, startMs: Date.now(), endMs: 0 }); + }); + + const wrappedMainnet = wrapWithNonceQueue(signer3a, 1); + const wrappedSonic = wrapWithNonceQueue(signer3b, 146); + + await wrappedMainnet.sendTransaction({ to: "0xbbbb", data: "0x" }); + await wrappedSonic.sendTransaction({ to: "0xbbbb", data: "0x" }); + + console.log( + "Results:", + results.map((r) => `chain=${r.id} nonce=${r.nonce}`).join(", ") + ); + console.assert( + results[0].nonce === 0 && results[1].nonce === 0, + `Expected both nonces to be 0 but got [${results.map((r) => r.nonce)}]` + ); + console.log("PASS: Independent nonces per chain\n"); + + // --- Test 4 --- + console.log("--- Test 4: Rollback on failure keeps nonce ---"); + results.length = 0; + await resetAll(); + + let callCount = 0; + const signerFail = createMockSigner("0xaaaa", async (nonce) => { + callCount++; + results.push({ id: callCount, nonce, startMs: Date.now(), endMs: 0 }); + if (callCount === 1) { + throw new Error("Transaction reverted"); + } + }); + + const wrappedFail = wrapWithNonceQueue(signerFail, 1); + + try { + await wrappedFail.sendTransaction({ to: "0xbbbb", data: "0x" }); + } catch (e: any) { + console.log(`First tx failed as expected: ${e.message}`); + } + + await wrappedFail.sendTransaction({ to: "0xbbbb", data: "0x" }); + + console.log( + "Results:", + results.map((r) => `id=${r.id} nonce=${r.nonce}`).join(", ") + ); + console.assert( + results[0].nonce === 0 && results[1].nonce === 0, + `Expected both nonces to be 0 but got [${results.map((r) => r.nonce)}]` + ); + console.log("PASS: Nonce preserved after rollback\n"); + + // --- Cleanup --- + const pool = getNoncePool(); + if (pool) await pool.end(); + console.log("All tests passed!"); +} + +test().catch((err) => { + console.error("TEST FAILED:", err); + process.exit(1); +}); diff --git a/contracts/tasks/lib/nonceQueue.ts b/contracts/tasks/lib/nonceQueue.ts new file mode 100644 index 0000000000..c8eb78d938 --- /dev/null +++ b/contracts/tasks/lib/nonceQueue.ts @@ -0,0 +1,224 @@ +import type { Pool, PoolClient } from "pg"; +import type { ethers } from "ethers"; +import { + isNonceMismatchError, + recoverNonceFromChain, + submitNonceQueuedTransaction, +} from "./nonceQueueTxLifecycle"; + +const log = require("../../utils/logger")("utils:nonceQueue"); + +let pool: Pool | null = null; +let tableEnsurePromise: Promise | null = null; + +function getNonceQueueLockTimeoutSeconds(): number { + const value = process.env.NONCE_QUEUE_LOCK_TIMEOUT_S; + if (!value) return 0; + + const parsed = Number(value); + if (!Number.isInteger(parsed) || parsed < 0) { + log( + `Invalid NONCE_QUEUE_LOCK_TIMEOUT_S="${value}" (expected integer >= 0). Falling back to 0 (wait forever).` + ); + return 0; + } + + return parsed; +} + +export function getNoncePool(): Pool | null { + if (!process.env.DATABASE_URL) return null; + if (!pool) { + // eslint-disable-next-line @typescript-eslint/no-var-requires + const { Pool: PgPool } = require("pg"); + pool = new PgPool({ + connectionString: process.env.DATABASE_URL, + max: 5, + connectionTimeoutMillis: 120_000, + }); + } + return pool; +} + +function ensureNonceTable(p: Pool): Promise { + if (!tableEnsurePromise) { + tableEnsurePromise = p + .query( + ` + CREATE TABLE IF NOT EXISTS nonce_queue ( + signer_address TEXT NOT NULL, + chain_id INTEGER NOT NULL, + nonce INTEGER NOT NULL, + updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), + PRIMARY KEY (signer_address, chain_id) + ) + ` + ) + .then(() => {}); + } + return tableEnsurePromise; +} + +async function ensureNonceRow( + client: PoolClient, + signerAddress: string, + chainId: number, + getOnChainNonce: () => Promise +): Promise { + const { rows } = await client.query( + "SELECT 1 FROM nonce_queue WHERE signer_address = $1 AND chain_id = $2", + [signerAddress, chainId] + ); + // fetching the on-chain nonce only if there is no signer & chain id combination in the database + if (rows.length === 0) { + const onChainNonce = await getOnChainNonce(); + log( + `Initializing nonce row: address=${signerAddress} chain=${chainId} nonce=${onChainNonce}` + ); + await client.query( + `INSERT INTO nonce_queue (signer_address, chain_id, nonce) + VALUES ($1, $2, $3) + ON CONFLICT DO NOTHING`, + [signerAddress, chainId, onChainNonce] + ); + } +} + +function isLockTimeoutError(err: any): boolean { + const msg = (err?.message ?? "").toLowerCase(); + return ( + err?.code === "55P03" || + msg.includes("lock timeout") || + msg.includes("canceling statement due to lock timeout") + ); +} + +async function withNonceLock( + p: Pool, + signerAddress: string, + chainId: number, + getOnChainNonce: () => Promise, + fn: (nonce: number) => Promise, + maxRetries = 3 +): Promise { + await ensureNonceTable(p); + + for (let attempt = 0; attempt < maxRetries; attempt++) { + const client = await p.connect(); + const lockTimeoutSeconds = getNonceQueueLockTimeoutSeconds(); + try { + await client.query("BEGIN"); + if (lockTimeoutSeconds > 0) { + await client.query("SELECT set_config('lock_timeout', $1, true)", [ + `${lockTimeoutSeconds}s`, + ]); + } + await ensureNonceRow(client, signerAddress, chainId, getOnChainNonce); + + const { rows } = await client.query( + "SELECT nonce FROM nonce_queue WHERE signer_address = $1 AND chain_id = $2 FOR UPDATE", + [signerAddress, chainId] + ); + const nonce: number = rows[0].nonce; + + log( + `Acquired nonce lock: address=${signerAddress} chain=${chainId} nonce=${nonce}` + ); + + const result = await fn(nonce); + + await client.query( + "UPDATE nonce_queue SET nonce = nonce + 1, updated_at = NOW() WHERE signer_address = $1 AND chain_id = $2", + [signerAddress, chainId] + ); + await client.query("COMMIT"); + + log( + `Released nonce lock: address=${signerAddress} chain=${chainId} nonce=${nonce} → ${nonce + 1}` + ); + + return result; + } catch (err: any) { + await client.query("ROLLBACK").catch(() => {}); + + if (isLockTimeoutError(err)) { + const configuredTimeout = + lockTimeoutSeconds > 0 + ? `${lockTimeoutSeconds}s` + : "Postgres default"; + log( + `Nonce lock timeout: unable to acquire lock for address=${signerAddress} chain=${chainId} within ${configuredTimeout}.` + ); + } + + if (isNonceMismatchError(err)) { + log( + `Nonce mismatch (attempt ${attempt + 1}/${maxRetries}), recovering from chain…` + ); + await recoverNonceFromChain({ + pool: p, + signerAddress, + chainId, + getOnChainNonce, + }); + if (attempt < maxRetries - 1) continue; + } + + throw err; + } finally { + client.release(); + } + } + + throw new Error("withNonceLock: max retries exhausted"); +} + +/** Reset module state. Only for testing. */ +export function _resetForTesting() { + tableEnsurePromise = null; + pool = null; +} + +/** + * Wraps an ethers v5 Signer so that every `sendTransaction` call is + * serialized through a Postgres row lock. The nonce is managed by the + * database — not by the provider. The lock is held until the transaction + * is confirmed on-chain, so concurrent processes block rather than collide. + * + * If DATABASE_URL is not set, the signer is returned unmodified. + */ +export function wrapWithNonceQueue( + signer: ethers.Signer, + chainId: number +): ethers.Signer { + const p = getNoncePool(); + if (!p) return signer; + + const originalSendTransaction = signer.sendTransaction.bind(signer); + const addressPromise = signer.getAddress().then((a) => a.toLowerCase()); + const getOnChainNonce = () => signer.getTransactionCount("pending"); + + signer.sendTransaction = async function ( + transaction: Parameters[0] + ) { + const signerAddress = await addressPromise; + return withNonceLock( + p, + signerAddress, + chainId, + getOnChainNonce, + async (nonce) => { + return submitNonceQueuedTransaction({ + sendTransaction: originalSendTransaction, + provider: signer.provider ?? undefined, + transaction, + nonce, + signerAddress, + chainId, + }); + } + ); + }; + + return signer; +} diff --git a/contracts/tasks/lib/nonceQueueTxLifecycle.test.ts b/contracts/tasks/lib/nonceQueueTxLifecycle.test.ts new file mode 100644 index 0000000000..4b2ca315c5 --- /dev/null +++ b/contracts/tasks/lib/nonceQueueTxLifecycle.test.ts @@ -0,0 +1,549 @@ +import { BigNumber, Wallet } from "ethers"; + +import { submitNonceQueuedTransaction } from "./nonceQueueTxLifecycle"; + +type EnvOverrides = Record; +const MAINNET_GAS_CAP_ENV = "NONCE_QUEUE_MAX_GAS_PRICE_GWEI_CHAIN_1"; +const BASE_GAS_CAP_ENV = "NONCE_QUEUE_MAX_GAS_PRICE_GWEI_CHAIN_8453"; + +function makeResponse(hash: string, raw?: string): any { + return { + hash, + raw, + rawTransaction: raw, + wait: async () => ({ status: 1, transactionHash: hash }), + }; +} + +async function withEnv(overrides: EnvOverrides, fn: () => Promise) { + const previousValues: Record = {}; + for (const key of Object.keys(overrides)) { + previousValues[key] = process.env[key]; + } + + for (const [key, value] of Object.entries(overrides)) { + if (value === undefined) { + delete process.env[key]; + } else { + process.env[key] = value; + } + } + + try { + return await fn(); + } finally { + for (const [key, value] of Object.entries(previousValues)) { + if (value === undefined) { + delete process.env[key]; + } else { + process.env[key] = value; + } + } + } +} + +async function testReplacementPath() { + console.log("--- Lifecycle Test 1: Replacement path fee bump ---"); + + const sentTxs: any[] = []; + let sendCount = 0; + const signerSendTransaction = async (tx: any) => { + sentTxs.push(tx); + if (sendCount === 0) { + sendCount++; + return makeResponse("0xinitial", "0xraw-initial"); + } + sendCount++; + return makeResponse("0xreplacement", "0xraw-replacement"); + }; + + let receiptChecks = 0; + const provider: any = { + async getTransactionReceipt(hash: string) { + receiptChecks++; + if (hash === "0xreplacement" && receiptChecks >= 4) { + return { status: 1, transactionHash: "0xreplacement" }; + } + return null; + }, + async getFeeData() { + return { + maxFeePerGas: BigNumber.from(400), + maxPriorityFeePerGas: BigNumber.from(5), + }; + }, + async sendTransaction() { + throw new Error("rebroadcast disabled in this test"); + }, + }; + + const result = await withEnv( + { + NONCE_QUEUE_TX_CONFIRM_TIMEOUT_S: "20", + NONCE_QUEUE_RECEIPT_POLL_S: "1", + NONCE_QUEUE_REBROADCAST_INTERVAL_S: "0", + NONCE_QUEUE_REPLACE_INTERVAL_S: "1", + NONCE_QUEUE_MAX_REPLACEMENTS: "2", + NONCE_QUEUE_FEE_BUMP_PCT: "20", + }, + () => + submitNonceQueuedTransaction({ + sendTransaction: signerSendTransaction as any, + provider, + transaction: { + to: "0x0000000000000000000000000000000000000001", + data: "0x", + maxFeePerGas: BigNumber.from(100), + maxPriorityFeePerGas: BigNumber.from(2), + } as any, + nonce: 7, + signerAddress: "0xaaaa", + chainId: 1, + }) + ); + + if (result.hash !== "0xreplacement") { + throw new Error(`Expected replacement hash, got ${result.hash}`); + } + if (sentTxs.length < 2) { + throw new Error(`Expected at least 2 submissions, got ${sentTxs.length}`); + } + if (sentTxs[1].nonce !== 7) { + throw new Error(`Expected replacement nonce=7, got ${sentTxs[1].nonce}`); + } + if (!BigNumber.from(sentTxs[1].maxFeePerGas).gt(sentTxs[0].maxFeePerGas)) { + throw new Error("Expected replacement maxFeePerGas to increase"); + } + if ( + !BigNumber.from(sentTxs[1].maxPriorityFeePerGas).gte( + sentTxs[0].maxPriorityFeePerGas + ) + ) { + throw new Error("Expected replacement maxPriorityFeePerGas to increase"); + } + + console.log("PASS: replacement submitted with same nonce and higher fees\n"); +} + +async function testTimeoutPath() { + console.log("--- Lifecycle Test 2: Confirmation timeout path ---"); + + const signerSendTransaction = async () => makeResponse("0xtimeout"); + const provider: any = { + async getTransactionReceipt() { + return null; + }, + async getFeeData() { + return {}; + }, + async sendTransaction() { + return makeResponse("0xnever"); + }, + }; + + let timeoutError: Error | undefined; + await withEnv( + { + NONCE_QUEUE_TX_CONFIRM_TIMEOUT_S: "2", + NONCE_QUEUE_RECEIPT_POLL_S: "1", + NONCE_QUEUE_REBROADCAST_INTERVAL_S: "0", + NONCE_QUEUE_REPLACE_INTERVAL_S: "0", + }, + async () => { + try { + await submitNonceQueuedTransaction({ + sendTransaction: signerSendTransaction as any, + provider, + transaction: { + to: "0x0000000000000000000000000000000000000001", + data: "0x", + } as any, + nonce: 11, + signerAddress: "0xbbbb", + chainId: 1, + }); + } catch (err: any) { + timeoutError = err; + } + } + ); + + if (!timeoutError) { + throw new Error("Expected timeout error but transaction did not fail"); + } + if (!timeoutError.message.includes("after 2s")) { + throw new Error( + `Unexpected timeout error message: ${timeoutError.message}` + ); + } + + console.log("PASS: confirmation timeout errors as expected\n"); +} + +async function testRebroadcastPath() { + console.log("--- Lifecycle Test 3: Rebroadcast duplicate handling ---"); + + const signerSendTransaction = async () => + makeResponse("0xrebroadcast", "0xraw-rebroadcast"); + + let rebroadcastAttempts = 0; + let receiptChecks = 0; + const provider: any = { + async getTransactionReceipt(hash: string) { + receiptChecks++; + if (hash === "0xrebroadcast" && receiptChecks >= 3) { + return { status: 1, transactionHash: "0xrebroadcast" }; + } + return null; + }, + async getFeeData() { + return {}; + }, + async sendTransaction() { + rebroadcastAttempts++; + throw new Error("already known"); + }, + }; + + const result = await withEnv( + { + NONCE_QUEUE_TX_CONFIRM_TIMEOUT_S: "10", + NONCE_QUEUE_RECEIPT_POLL_S: "1", + NONCE_QUEUE_REBROADCAST_INTERVAL_S: "1", + NONCE_QUEUE_REPLACE_INTERVAL_S: "0", + }, + () => + submitNonceQueuedTransaction({ + sendTransaction: signerSendTransaction as any, + provider, + transaction: { + to: "0x0000000000000000000000000000000000000001", + data: "0x", + } as any, + nonce: 12, + signerAddress: "0xcccc", + chainId: 1, + }) + ); + + if (result.hash !== "0xrebroadcast") { + throw new Error(`Expected original hash, got ${result.hash}`); + } + if (rebroadcastAttempts < 1) { + throw new Error("Expected at least one rebroadcast attempt"); + } + + console.log("PASS: rebroadcast duplicate errors are handled\n"); +} + +async function testInitialSubmissionGasCap() { + console.log("--- Lifecycle Test 4: Initial submission per-chain gas cap ---"); + + let sendCalls = 0; + const signerSendTransaction = async () => { + sendCalls++; + return makeResponse("0xshould-not-send"); + }; + const provider: any = { + async getFeeData() { + return {}; + }, + }; + + let capError: Error | undefined; + await withEnv( + { + [MAINNET_GAS_CAP_ENV]: "20", + [BASE_GAS_CAP_ENV]: undefined, + NONCE_QUEUE_MAX_GAS_PRICE_GWEI: undefined, + NONCE_QUEUE_TX_CONFIRM_TIMEOUT_S: "10", + NONCE_QUEUE_RECEIPT_POLL_S: "1", + NONCE_QUEUE_REBROADCAST_INTERVAL_S: "0", + NONCE_QUEUE_REPLACE_INTERVAL_S: "0", + }, + async () => { + try { + await submitNonceQueuedTransaction({ + sendTransaction: signerSendTransaction as any, + provider, + transaction: { + to: "0x0000000000000000000000000000000000000001", + data: "0x", + gasPrice: BigNumber.from(25).mul(1_000_000_000), + } as any, + nonce: 21, + signerAddress: "0xdddd", + chainId: 1, + }); + } catch (err: any) { + capError = err; + } + } + ); + + if (!capError) { + throw new Error("Expected initial submission gas cap error"); + } + if (!capError.message.includes("initial submission")) { + throw new Error(`Unexpected gas cap error message: ${capError.message}`); + } + if (sendCalls !== 0) { + throw new Error( + `Expected sendTransaction not to be called, got ${sendCalls}` + ); + } + + console.log("PASS: initial submission over cap fails before sending\n"); +} + +async function testMissingChainSpecificCapDisablesEnforcement() { + console.log( + "--- Lifecycle Test 5: Missing chain-specific cap disables enforcement ---" + ); + + let sendCalls = 0; + const signerSendTransaction = async () => { + sendCalls++; + return makeResponse("0xno-cap-chain"); + }; + + const result = await withEnv( + { + [MAINNET_GAS_CAP_ENV]: "20", + [BASE_GAS_CAP_ENV]: undefined, + NONCE_QUEUE_MAX_GAS_PRICE_GWEI: undefined, + NONCE_QUEUE_REBROADCAST_INTERVAL_S: "0", + NONCE_QUEUE_REPLACE_INTERVAL_S: "0", + }, + () => + submitNonceQueuedTransaction({ + sendTransaction: signerSendTransaction as any, + transaction: { + to: "0x0000000000000000000000000000000000000001", + data: "0x", + gasPrice: BigNumber.from(25).mul(1_000_000_000), + } as any, + nonce: 23, + signerAddress: "0xffff", + chainId: 8453, + }) + ); + + if (result.hash !== "0xno-cap-chain") { + throw new Error(`Expected successful tx hash, got ${result.hash}`); + } + if (sendCalls !== 1) { + throw new Error(`Expected one send call, got ${sendCalls}`); + } + + console.log("PASS: cap is disabled when chain-specific env is missing\n"); +} + +async function testReplacementGasCap() { + console.log("--- Lifecycle Test 6: Replacement gas cap ---"); + + const sentTxs: any[] = []; + const signerSendTransaction = async (tx: any) => { + sentTxs.push(tx); + return makeResponse("0xreplacement-seed", "0xraw-replacement-seed"); + }; + + const provider: any = { + async getTransactionReceipt() { + return null; + }, + async getFeeData() { + return { + maxFeePerGas: BigNumber.from(10).mul(1_000_000_000), + maxPriorityFeePerGas: BigNumber.from(2).mul(1_000_000_000), + }; + }, + async sendTransaction() { + throw new Error("rebroadcast disabled in replacement cap test"); + }, + }; + + let capError: Error | undefined; + await withEnv( + { + [MAINNET_GAS_CAP_ENV]: "12", + [BASE_GAS_CAP_ENV]: undefined, + NONCE_QUEUE_MAX_GAS_PRICE_GWEI: undefined, + NONCE_QUEUE_TX_CONFIRM_TIMEOUT_S: "10", + NONCE_QUEUE_RECEIPT_POLL_S: "1", + NONCE_QUEUE_REBROADCAST_INTERVAL_S: "0", + NONCE_QUEUE_REPLACE_INTERVAL_S: "1", + NONCE_QUEUE_MAX_REPLACEMENTS: "2", + NONCE_QUEUE_FEE_BUMP_PCT: "30", + }, + async () => { + try { + await submitNonceQueuedTransaction({ + sendTransaction: signerSendTransaction as any, + provider, + transaction: { + to: "0x0000000000000000000000000000000000000001", + data: "0x", + maxFeePerGas: BigNumber.from(10).mul(1_000_000_000), + maxPriorityFeePerGas: BigNumber.from(2).mul(1_000_000_000), + type: 2, + } as any, + nonce: 24, + signerAddress: "0x1111", + chainId: 1, + }); + } catch (err: any) { + capError = err; + } + } + ); + + if (!capError) { + throw new Error("Expected replacement gas cap error"); + } + if (!capError.message.includes("replacement")) { + throw new Error(`Unexpected replacement cap error: ${capError.message}`); + } + if (sentTxs.length !== 1) { + throw new Error( + `Expected only initial send to happen before replacement cap failure, got ${sentTxs.length}` + ); + } + + console.log("PASS: replacement over cap fails before sending replacement\n"); +} + +async function testRebroadcastGasCap() { + console.log("--- Lifecycle Test 7: Rebroadcast gas cap ---"); + + const wallet = new Wallet( + "0x59c6995e998f97a5a0044966f0945388cf0f6e44f9c76c9d83f816f94f8f93f4" + ); + const highGasRaw = await wallet.signTransaction({ + to: "0x0000000000000000000000000000000000000001", + nonce: 0, + gasLimit: 21_000, + gasPrice: BigNumber.from(30).mul(1_000_000_000), + value: 0, + chainId: 1, + data: "0x", + }); + + let providerSendCalls = 0; + const signerSendTransaction = async () => makeResponse("0xseed", highGasRaw); + const provider: any = { + async getTransactionReceipt() { + return null; + }, + async getFeeData() { + return {}; + }, + async sendTransaction() { + providerSendCalls++; + return makeResponse("0xrebroadcast-high"); + }, + }; + + let capError: Error | undefined; + await withEnv( + { + [MAINNET_GAS_CAP_ENV]: "20", + [BASE_GAS_CAP_ENV]: undefined, + NONCE_QUEUE_MAX_GAS_PRICE_GWEI: undefined, + NONCE_QUEUE_TX_CONFIRM_TIMEOUT_S: "10", + NONCE_QUEUE_RECEIPT_POLL_S: "1", + NONCE_QUEUE_REBROADCAST_INTERVAL_S: "1", + NONCE_QUEUE_REPLACE_INTERVAL_S: "0", + }, + async () => { + try { + await submitNonceQueuedTransaction({ + sendTransaction: signerSendTransaction as any, + provider, + transaction: { + to: "0x0000000000000000000000000000000000000001", + data: "0x", + gasPrice: BigNumber.from(10).mul(1_000_000_000), + } as any, + nonce: 22, + signerAddress: "0xeeee", + chainId: 1, + }); + } catch (err: any) { + capError = err; + } + } + ); + + if (!capError) { + throw new Error("Expected rebroadcast gas cap error"); + } + if (!capError.message.includes("rebroadcast")) { + throw new Error(`Unexpected rebroadcast cap error: ${capError.message}`); + } + if (providerSendCalls !== 0) { + throw new Error( + `Expected provider rebroadcast sendTransaction not to be called, got ${providerSendCalls}` + ); + } + + console.log("PASS: rebroadcast over cap fails with clear error\n"); +} + +async function testDeprecatedGlobalGasCapIgnored() { + console.log("--- Lifecycle Test 8: Deprecated global gas cap is ignored ---"); + + let sendCalls = 0; + const signerSendTransaction = async () => { + sendCalls++; + return makeResponse("0xglobal-ignored"); + }; + + const result = await withEnv( + { + [MAINNET_GAS_CAP_ENV]: undefined, + [BASE_GAS_CAP_ENV]: undefined, + NONCE_QUEUE_MAX_GAS_PRICE_GWEI: "1", + NONCE_QUEUE_REBROADCAST_INTERVAL_S: "0", + NONCE_QUEUE_REPLACE_INTERVAL_S: "0", + }, + () => + submitNonceQueuedTransaction({ + sendTransaction: signerSendTransaction as any, + transaction: { + to: "0x0000000000000000000000000000000000000001", + data: "0x", + gasPrice: BigNumber.from(50).mul(1_000_000_000), + } as any, + nonce: 25, + signerAddress: "0x2222", + chainId: 1, + }) + ); + + if (result.hash !== "0xglobal-ignored") { + throw new Error(`Expected tx success when only global cap is set`); + } + if (sendCalls !== 1) { + throw new Error(`Expected one send call, got ${sendCalls}`); + } + + console.log("PASS: deprecated global cap does not enforce lifecycle limit\n"); +} + +async function test() { + await testReplacementPath(); + await testTimeoutPath(); + await testRebroadcastPath(); + await testInitialSubmissionGasCap(); + await testMissingChainSpecificCapDisablesEnforcement(); + await testReplacementGasCap(); + await testRebroadcastGasCap(); + await testDeprecatedGlobalGasCapIgnored(); + console.log("All nonceQueueTxLifecycle tests passed!"); +} + +test().catch((err) => { + console.error("TEST FAILED:", err); + process.exit(1); +}); diff --git a/contracts/tasks/lib/nonceQueueTxLifecycle.ts b/contracts/tasks/lib/nonceQueueTxLifecycle.ts new file mode 100644 index 0000000000..2b44dd9acc --- /dev/null +++ b/contracts/tasks/lib/nonceQueueTxLifecycle.ts @@ -0,0 +1,544 @@ +import type { Pool, PoolClient } from "pg"; +import { BigNumber, utils } from "ethers"; +import type { ethers } from "ethers"; + +const log = require("../../utils/logger")("utils:nonceQueueTxLifecycle"); + +const GWEI = BigNumber.from(1_000_000_000); +const DEFAULT_PRIORITY_FEE = GWEI.mul(2); +const DEFAULT_GAS_PRICE = GWEI.mul(20); + +export interface SubmitNonceQueuedTxParams { + sendTransaction: ( + transaction: Parameters[0] + ) => Promise; + provider?: ethers.providers.Provider; + transaction: Parameters[0]; + nonce: number; + signerAddress: string; + chainId: number; +} + +interface TxLifecycleConfig { + txConfirmTimeoutS: number; + receiptPollS: number; + rebroadcastIntervalS: number; + replaceIntervalS: number; + maxReplacements: number; + feeBumpPct: number; +} + +function sleep(ms: number) { + return new Promise((resolve) => setTimeout(resolve, ms)); +} + +function parseIntEnv( + name: string, + fallback: number, + minimum = 0, + maximum?: number +): number { + const value = process.env[name]; + if (!value) return fallback; + + const parsed = Number(value); + const withinMax = maximum === undefined || parsed <= maximum; + if (!Number.isInteger(parsed) || parsed < minimum || !withinMax) { + const maxMsg = maximum === undefined ? "" : ` and <= ${maximum}`; + log( + `Invalid ${name}="${value}" (expected integer >= ${minimum}${maxMsg}). Falling back to ${fallback}.` + ); + return fallback; + } + return parsed; +} + +function getTxLifecycleConfig(): TxLifecycleConfig { + return { + txConfirmTimeoutS: parseIntEnv("NONCE_QUEUE_TX_CONFIRM_TIMEOUT_S", 600), + receiptPollS: parseIntEnv("NONCE_QUEUE_RECEIPT_POLL_S", 5, 1), + rebroadcastIntervalS: parseIntEnv("NONCE_QUEUE_REBROADCAST_INTERVAL_S", 30), + replaceIntervalS: parseIntEnv("NONCE_QUEUE_REPLACE_INTERVAL_S", 90), + maxReplacements: parseIntEnv("NONCE_QUEUE_MAX_REPLACEMENTS", 3), + feeBumpPct: parseIntEnv("NONCE_QUEUE_FEE_BUMP_PCT", 15, 0, 500), + }; +} + +function secondsToMs(seconds: number): number { + return seconds * 1_000; +} + +function asBigNumber(value: any): BigNumber | undefined { + if (value === undefined || value === null) return undefined; + try { + return BigNumber.from(value); + } catch { + return undefined; + } +} + +function bumpByPercent(value: BigNumber, percent: number): BigNumber { + if (percent === 0) return value; + return value + .mul(100 + percent) + .add(99) + .div(100); +} + +function maxBigNumber(a: BigNumber, b: BigNumber): BigNumber { + return a.gte(b) ? a : b; +} + +function getTxCapComparableGasPrice( + transaction: Parameters[0] +): BigNumber | undefined { + // For EIP-1559, maxFeePerGas is the effective ceiling; for legacy tx use gasPrice. + return ( + asBigNumber(transaction.maxFeePerGas) ?? asBigNumber(transaction.gasPrice) + ); +} + +function getPerChainMaxGasPriceEnvKey(chainId: number): string { + return `NONCE_QUEUE_MAX_GAS_PRICE_GWEI_CHAIN_${chainId}`; +} + +function resolveMaxGasPriceWeiForChain(chainId: number): BigNumber | null { + const envKey = getPerChainMaxGasPriceEnvKey(chainId); + const value = process.env[envKey]; + if (!value) return null; + + const parsed = Number(value); + if (!Number.isInteger(parsed) || parsed < 0) { + log( + `Invalid ${envKey}="${value}" (expected integer >= 0). Gas cap disabled for chain ${chainId}.` + ); + return null; + } + if (parsed === 0) return null; + return GWEI.mul(parsed); +} + +function assertWithinGasPriceCap({ + priceWei, + maxGasPriceWei, + maxGasPriceEnvKey, + stage, + signerAddress, + chainId, + nonce, +}: { + priceWei: BigNumber; + maxGasPriceWei: BigNumber; + maxGasPriceEnvKey: string; + stage: "initial submission" | "rebroadcast" | "replacement"; + signerAddress: string; + chainId: number; + nonce: number; +}) { + if (priceWei.lte(maxGasPriceWei)) return; + throw new Error( + `Nonce queue gas price cap exceeded during ${stage}: address=${signerAddress} chain=${chainId} nonce=${nonce} gasPrice=${priceWei.toString()} wei cap=${maxGasPriceWei.toString()} wei (set by ${maxGasPriceEnvKey})` + ); +} + +async function enforceSubmissionGasPriceCap({ + transaction, + provider, + maxGasPriceWei, + maxGasPriceEnvKey, + stage, + signerAddress, + chainId, + nonce, +}: { + transaction: Parameters[0]; + provider?: ethers.providers.Provider; + maxGasPriceWei: BigNumber | null; + maxGasPriceEnvKey: string; + stage: "initial submission" | "replacement"; + signerAddress: string; + chainId: number; + nonce: number; +}) { + if (!maxGasPriceWei) return; + + // Prefer explicit tx fee fields. If missing, query network fee data so the cap + // still applies to transactions where callers omitted fee overrides. + let comparableGasPrice = getTxCapComparableGasPrice(transaction); + if (!comparableGasPrice && provider) { + const feeData = await provider.getFeeData().catch(() => null); + comparableGasPrice = + asBigNumber(feeData?.maxFeePerGas) ?? asBigNumber(feeData?.gasPrice); + } + + if (!comparableGasPrice) { + throw new Error( + `Unable to enforce ${maxGasPriceEnvKey} for ${stage}: address=${signerAddress} chain=${chainId} nonce=${nonce} transaction has no gasPrice/maxFeePerGas and provider fee data is unavailable` + ); + } + + assertWithinGasPriceCap({ + priceWei: comparableGasPrice, + maxGasPriceWei, + maxGasPriceEnvKey, + stage, + signerAddress, + chainId, + nonce, + }); +} + +function enforceRebroadcastGasPriceCap({ + rawTransaction, + maxGasPriceWei, + maxGasPriceEnvKey, + signerAddress, + chainId, + nonce, +}: { + rawTransaction: string; + maxGasPriceWei: BigNumber | null; + maxGasPriceEnvKey: string; + signerAddress: string; + chainId: number; + nonce: number; +}) { + if (!maxGasPriceWei) return; + + // Rebroadcast path operates on raw signed tx bytes. Parse them to recover + // gas settings and enforce the same cap policy before re-sending. + const parsedTransaction = utils.parseTransaction(rawTransaction); + const comparableGasPrice = + asBigNumber(parsedTransaction.maxFeePerGas) ?? + asBigNumber(parsedTransaction.gasPrice); + + if (!comparableGasPrice) { + throw new Error( + `Unable to enforce ${maxGasPriceEnvKey} for rebroadcast: address=${signerAddress} chain=${chainId} nonce=${nonce} raw transaction has no gasPrice/maxFeePerGas` + ); + } + + assertWithinGasPriceCap({ + priceWei: comparableGasPrice, + maxGasPriceWei, + maxGasPriceEnvKey, + stage: "rebroadcast", + signerAddress, + chainId, + nonce, + }); +} + +function extractRawTransaction( + response: ethers.providers.TransactionResponse +): string | undefined { + const candidate = (response as any).raw ?? (response as any).rawTransaction; + return typeof candidate === "string" && candidate.length > 0 + ? candidate + : undefined; +} + +function isDuplicateBroadcastError(err: any): boolean { + const msg = (err?.message ?? "").toLowerCase(); + return ( + msg.includes("already known") || + msg.includes("known transaction") || + msg.includes("already imported") + ); +} + +async function findMinedReceipt( + provider: ethers.providers.Provider, + hashes: string[] +) { + for (const hash of hashes) { + const receipt = await provider.getTransactionReceipt(hash); + if (receipt) return receipt; + } + return null; +} + +async function buildReplacementTransaction( + transaction: Parameters[0], + provider: ethers.providers.Provider, + feeBumpPct: number +): Promise[0]> { + const feeData = await provider.getFeeData().catch(() => null); + const nextTx: Parameters[0] = { + ...transaction, + }; + + const hasEip1559Fees = + nextTx.maxFeePerGas !== undefined || + nextTx.maxPriorityFeePerGas !== undefined || + nextTx.type === 2; + + if (hasEip1559Fees) { + // Keep replacement monotonic: bump previous fee settings and never go below + // current network recommendations. + const basePriority = + asBigNumber(nextTx.maxPriorityFeePerGas) ?? + asBigNumber(feeData?.maxPriorityFeePerGas) ?? + DEFAULT_PRIORITY_FEE; + const baseMaxFee = + asBigNumber(nextTx.maxFeePerGas) ?? + asBigNumber(feeData?.maxFeePerGas) ?? + basePriority.mul(2); + + const bumpedPriority = bumpByPercent(basePriority, feeBumpPct); + const bumpedMaxFee = bumpByPercent(baseMaxFee, feeBumpPct); + const networkPriority = asBigNumber(feeData?.maxPriorityFeePerGas); + const networkMaxFee = asBigNumber(feeData?.maxFeePerGas); + + let finalPriority = bumpedPriority; + let finalMaxFee = bumpedMaxFee; + if (networkPriority) { + finalPriority = maxBigNumber(finalPriority, networkPriority); + } + if (networkMaxFee) { + finalMaxFee = maxBigNumber(finalMaxFee, networkMaxFee); + } + if (finalMaxFee.lt(finalPriority)) { + finalMaxFee = finalPriority; + } + + delete nextTx.gasPrice; + nextTx.maxPriorityFeePerGas = finalPriority; + nextTx.maxFeePerGas = finalMaxFee; + nextTx.type = 2; + return nextTx; + } + + const baseGasPrice = + asBigNumber(nextTx.gasPrice) ?? + asBigNumber(feeData?.gasPrice) ?? + DEFAULT_GAS_PRICE; + // Legacy path: bump prior gasPrice and floor at current network gasPrice. + const networkGasPrice = asBigNumber(feeData?.gasPrice); + let finalGasPrice = bumpByPercent(baseGasPrice, feeBumpPct); + if (networkGasPrice) { + finalGasPrice = maxBigNumber(finalGasPrice, networkGasPrice); + } + nextTx.gasPrice = finalGasPrice; + return nextTx; +} + +/** + * Send a nonce-pinned transaction and wait for on-chain confirmation. + * Future resend / replacement strategy should stay in this file. + */ +export async function submitNonceQueuedTransaction({ + sendTransaction, + provider, + transaction, + nonce, + signerAddress, + chainId, +}: SubmitNonceQueuedTxParams): Promise { + const config = getTxLifecycleConfig(); + const maxGasPriceEnvKey = getPerChainMaxGasPriceEnvKey(chainId); + // The lifecycle intentionally ignores the legacy global cap and only reads + // per-chain caps, so operators can tune limits independently per network. + const maxGasPriceWei = resolveMaxGasPriceWeiForChain(chainId); + const initialTx: Parameters[0] = { + ...transaction, + nonce, + }; + + // Enforce fee cap before any on-chain submission. + await enforceSubmissionGasPriceCap({ + transaction: initialTx, + provider, + maxGasPriceWei, + maxGasPriceEnvKey, + stage: "initial submission", + signerAddress, + chainId, + nonce, + }); + + const firstResponse = await sendTransaction(initialTx); + const responsesByHash = new Map( + [[firstResponse.hash, firstResponse]] + ); + const knownHashes: string[] = [firstResponse.hash]; + let activeTx = initialTx; + let activeResponse = firstResponse; + let activeRawTx = extractRawTransaction(firstResponse); + let replacementCount = 0; + let rebroadcastRawUnavailableLogged = false; + + log( + `Submitted tx: address=${signerAddress} chain=${chainId} nonce=${nonce} hash=${firstResponse.hash}` + ); + + if (!provider || typeof provider.getTransactionReceipt !== "function") { + await firstResponse.wait(); + return firstResponse; + } + const txProvider = provider; + + const startedAt = Date.now(); + let nextRebroadcastAt = + config.rebroadcastIntervalS > 0 + ? startedAt + secondsToMs(config.rebroadcastIntervalS) + : Number.POSITIVE_INFINITY; + let nextReplaceAt = + config.replaceIntervalS > 0 + ? startedAt + secondsToMs(config.replaceIntervalS) + : Number.POSITIVE_INFINITY; + + // Single in-flight lifecycle loop: + // 1) check mined receipts across known hashes + // 2) optional rebroadcast raw tx + // 3) optional same-nonce replacement with bumped fee + while (true) { + const receipt = await findMinedReceipt(txProvider, knownHashes); + if (receipt) { + if (receipt.status === 0) { + throw new Error( + `Nonce-queued transaction reverted on-chain: hash=${receipt.transactionHash} nonce=${nonce}` + ); + } + return responsesByHash.get(receipt.transactionHash) ?? activeResponse; + } + + const now = Date.now(); + if ( + config.txConfirmTimeoutS > 0 && + now - startedAt >= secondsToMs(config.txConfirmTimeoutS) + ) { + throw new Error( + `Timed out waiting for nonce-queued tx confirmation after ${config.txConfirmTimeoutS}s: address=${signerAddress} chain=${chainId} nonce=${nonce} lastHash=${activeResponse.hash}` + ); + } + + if (now >= nextRebroadcastAt) { + nextRebroadcastAt = now + secondsToMs(config.rebroadcastIntervalS); + + if (activeRawTx && typeof txProvider.sendTransaction === "function") { + try { + // Re-check cap at rebroadcast time; tx may have been replaced with + // a higher fee since the initial submission. + enforceRebroadcastGasPriceCap({ + rawTransaction: activeRawTx, + maxGasPriceWei, + maxGasPriceEnvKey, + signerAddress, + chainId, + nonce, + }); + const rebroadcastResponse = await txProvider.sendTransaction( + activeRawTx + ); + if (!responsesByHash.has(rebroadcastResponse.hash)) { + responsesByHash.set(rebroadcastResponse.hash, rebroadcastResponse); + knownHashes.push(rebroadcastResponse.hash); + } + log( + `Rebroadcasted raw tx: address=${signerAddress} chain=${chainId} nonce=${nonce} hash=${rebroadcastResponse.hash}` + ); + } catch (err: any) { + if (!isDuplicateBroadcastError(err)) throw err; + log( + `Rebroadcast ignored duplicate: address=${signerAddress} chain=${chainId} nonce=${nonce} hash=${activeResponse.hash}` + ); + } + } else if (!rebroadcastRawUnavailableLogged) { + rebroadcastRawUnavailableLogged = true; + log( + `Rebroadcast skipped: raw transaction payload unavailable for hash=${activeResponse.hash} address=${signerAddress} chain=${chainId}` + ); + } + } + + if ( + now >= nextReplaceAt && + replacementCount < config.maxReplacements && + config.replaceIntervalS > 0 + ) { + nextReplaceAt = now + secondsToMs(config.replaceIntervalS); + activeTx = await buildReplacementTransaction( + activeTx, + txProvider, + config.feeBumpPct + ); + // Replacement txs are still fresh submissions. Enforce the same chain cap + // after fee bumping so retries never exceed operator limits. + await enforceSubmissionGasPriceCap({ + transaction: activeTx, + provider: txProvider, + maxGasPriceWei, + maxGasPriceEnvKey, + stage: "replacement", + signerAddress, + chainId, + nonce, + }); + + try { + const replacementResponse = await sendTransaction(activeTx); + replacementCount++; + activeResponse = replacementResponse; + activeRawTx = extractRawTransaction(replacementResponse); + if (!responsesByHash.has(replacementResponse.hash)) { + responsesByHash.set(replacementResponse.hash, replacementResponse); + knownHashes.push(replacementResponse.hash); + } + log( + `Submitted replacement tx: address=${signerAddress} chain=${chainId} nonce=${nonce} hash=${replacementResponse.hash} replacements=${replacementCount}/${config.maxReplacements}` + ); + } catch (err: any) { + if (!isNonceMismatchError(err) && !isDuplicateBroadcastError(err)) { + throw err; + } + log( + `Replacement attempt not accepted yet: address=${signerAddress} chain=${chainId} nonce=${nonce} reason="${ + err?.message ?? String(err) + }"` + ); + } + } + + await sleep(secondsToMs(config.receiptPollS)); + } +} + +export function isNonceMismatchError(err: any): boolean { + const msg = (err?.message ?? "").toLowerCase(); + return ( + msg.includes("nonce too low") || + msg.includes("nonce has already been used") || + msg.includes("replacement transaction underpriced") + ); +} + +export async function recoverNonceFromChain({ + pool, + signerAddress, + chainId, + getOnChainNonce, + client, +}: { + pool: Pool; + signerAddress: string; + chainId: number; + getOnChainNonce: () => Promise; + client?: PoolClient; +}) { + const onChainNonce = await getOnChainNonce(); + const recoveryClient = client ?? (await pool.connect()); + const usingExternalClient = !!client; + + try { + await recoveryClient.query( + "UPDATE nonce_queue SET nonce = $1, updated_at = NOW() WHERE signer_address = $2 AND chain_id = $3", + [onChainNonce, signerAddress, chainId] + ); + log( + `Recovered nonce from chain: address=${signerAddress} chain=${chainId} nonce=${onChainNonce}` + ); + } finally { + if (!usingExternalClient) recoveryClient.release(); + } +} From 3622428c61d768edf9c2b3389780deedc7d39986 Mon Sep 17 00:00:00 2001 From: Christopher Jacobs Date: Wed, 15 Apr 2026 17:27:46 +0800 Subject: [PATCH 55/62] fix healthcheck network --- contracts/cron/cron-jobs.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contracts/cron/cron-jobs.ts b/contracts/cron/cron-jobs.ts index 37024e5d21..c5c685c725 100644 --- a/contracts/cron/cron-jobs.ts +++ b/contracts/cron/cron-jobs.ts @@ -77,7 +77,7 @@ export const cronJobs: CronJob[] = [ schedule: "*/5 * * * *", // every 5 minutes enabled: true, command: - "cd /app && pnpm hardhat healthcheck --network ${HARDHAT_NETWORK:-mainnet}", + "cd /app && pnpm hardhat healthcheck --network mainnet", }, { name: "daily_snap_balances", From f83484c360c96329befba0a9c475b4f25eedfb15 Mon Sep 17 00:00:00 2001 From: Domen Grabec Date: Wed, 15 Apr 2026 14:02:58 +0200 Subject: [PATCH 56/62] add a config var to increase gas estimate from the provider --- contracts/dev.env | 3 + contracts/docker-compose.yml | 1 + .../tasks/lib/nonceQueueTxLifecycle.test.ts | 145 ++++++++++++++++++ contracts/tasks/lib/nonceQueueTxLifecycle.ts | 89 ++++++++++- 4 files changed, 237 insertions(+), 1 deletion(-) diff --git a/contracts/dev.env b/contracts/dev.env index 85704a08ba..dc283d23de 100644 --- a/contracts/dev.env +++ b/contracts/dev.env @@ -95,6 +95,9 @@ NONCE_QUEUE_REPLACE_INTERVAL_S=90 NONCE_QUEUE_MAX_REPLACEMENTS=3 # Fee bump percent applied for replacement transactions. NONCE_QUEUE_FEE_BUMP_PCT=15 +# Percent headroom added to estimated gas limit for nonce-queued submissions. +# 0 = disabled (use provider estimate / caller-specified gasLimit as-is). +NONCE_QUEUE_GAS_LIMIT_BUFFER_PCT=0 # Chain-specific max gas caps (gwei) for initial/rebroadcast/replacement. # Format: NONCE_QUEUE_MAX_GAS_PRICE_GWEI_CHAIN_. 0 = disabled. NONCE_QUEUE_MAX_GAS_PRICE_GWEI_CHAIN_1=0 diff --git a/contracts/docker-compose.yml b/contracts/docker-compose.yml index 2dd2da89ad..6527eb38e4 100644 --- a/contracts/docker-compose.yml +++ b/contracts/docker-compose.yml @@ -31,6 +31,7 @@ services: - NONCE_QUEUE_REPLACE_INTERVAL_S=${NONCE_QUEUE_REPLACE_INTERVAL_S:-90} - NONCE_QUEUE_MAX_REPLACEMENTS=${NONCE_QUEUE_MAX_REPLACEMENTS:-3} - NONCE_QUEUE_FEE_BUMP_PCT=${NONCE_QUEUE_FEE_BUMP_PCT:-15} + - NONCE_QUEUE_GAS_LIMIT_BUFFER_PCT=${NONCE_QUEUE_GAS_LIMIT_BUFFER_PCT:-0} - NONCE_QUEUE_MAX_GAS_PRICE_GWEI_CHAIN_1=${NONCE_QUEUE_MAX_GAS_PRICE_GWEI_CHAIN_1:-40} - NONCE_QUEUE_MAX_GAS_PRICE_GWEI_CHAIN_8453=${NONCE_QUEUE_MAX_GAS_PRICE_GWEI_CHAIN_8453:-0} - NONCE_QUEUE_MAX_GAS_PRICE_GWEI_CHAIN_146=${NONCE_QUEUE_MAX_GAS_PRICE_GWEI_CHAIN_146:-0} diff --git a/contracts/tasks/lib/nonceQueueTxLifecycle.test.ts b/contracts/tasks/lib/nonceQueueTxLifecycle.test.ts index 4b2ca315c5..443741db99 100644 --- a/contracts/tasks/lib/nonceQueueTxLifecycle.test.ts +++ b/contracts/tasks/lib/nonceQueueTxLifecycle.test.ts @@ -531,6 +531,149 @@ async function testDeprecatedGlobalGasCapIgnored() { console.log("PASS: deprecated global cap does not enforce lifecycle limit\n"); } +async function testInitialSubmissionGasLimitBuffer() { + console.log("--- Lifecycle Test 9: Initial submission gas-limit buffer ---"); + + const sentTxs: any[] = []; + const signerSendTransaction = async (tx: any) => { + sentTxs.push(tx); + return makeResponse("0xgas-buffer-initial"); + }; + + const provider: any = { + async getTransactionReceipt(hash: string) { + if (hash === "0xgas-buffer-initial") { + return { status: 1, transactionHash: "0xgas-buffer-initial" }; + } + return null; + }, + async getFeeData() { + return {}; + }, + async estimateGas() { + return BigNumber.from(100_000); + }, + }; + + await withEnv( + { + NONCE_QUEUE_GAS_LIMIT_BUFFER_PCT: "25", + NONCE_QUEUE_REBROADCAST_INTERVAL_S: "0", + NONCE_QUEUE_REPLACE_INTERVAL_S: "0", + }, + () => + submitNonceQueuedTransaction({ + sendTransaction: signerSendTransaction as any, + provider, + transaction: { + to: "0x0000000000000000000000000000000000000001", + data: "0x", + } as any, + nonce: 26, + signerAddress: "0x3333", + chainId: 1, + }) + ); + + if (sentTxs.length !== 1) { + throw new Error(`Expected a single submission, got ${sentTxs.length}`); + } + if (!BigNumber.from(sentTxs[0].gasLimit).eq(125_000)) { + throw new Error( + `Expected buffered gasLimit=125000, got ${sentTxs[0].gasLimit}` + ); + } + + console.log("PASS: initial submission gas limit buffered from estimate\n"); +} + +async function testReplacementGasLimitBuffer() { + console.log("--- Lifecycle Test 10: Replacement gas-limit buffer ---"); + + const sentTxs: any[] = []; + let sendCount = 0; + const signerSendTransaction = async (tx: any) => { + sentTxs.push(tx); + if (sendCount === 0) { + sendCount++; + return makeResponse("0xgas-buffer-seed", "0xraw-seed"); + } + sendCount++; + return makeResponse("0xgas-buffer-replacement", "0xraw-replacement"); + }; + + let receiptChecks = 0; + let estimateCalls = 0; + const provider: any = { + async getTransactionReceipt(hash: string) { + receiptChecks++; + if (hash === "0xgas-buffer-replacement" && receiptChecks >= 4) { + return { status: 1, transactionHash: "0xgas-buffer-replacement" }; + } + return null; + }, + async getFeeData() { + return { + maxFeePerGas: BigNumber.from(400), + maxPriorityFeePerGas: BigNumber.from(5), + }; + }, + async estimateGas() { + estimateCalls++; + return estimateCalls === 1 + ? BigNumber.from(100_000) + : BigNumber.from(150_000); + }, + async sendTransaction() { + throw new Error("rebroadcast disabled in this test"); + }, + }; + + await withEnv( + { + NONCE_QUEUE_GAS_LIMIT_BUFFER_PCT: "25", + NONCE_QUEUE_TX_CONFIRM_TIMEOUT_S: "20", + NONCE_QUEUE_RECEIPT_POLL_S: "1", + NONCE_QUEUE_REBROADCAST_INTERVAL_S: "0", + NONCE_QUEUE_REPLACE_INTERVAL_S: "1", + NONCE_QUEUE_MAX_REPLACEMENTS: "2", + NONCE_QUEUE_FEE_BUMP_PCT: "20", + }, + () => + submitNonceQueuedTransaction({ + sendTransaction: signerSendTransaction as any, + provider, + transaction: { + to: "0x0000000000000000000000000000000000000001", + data: "0x", + maxFeePerGas: BigNumber.from(100), + maxPriorityFeePerGas: BigNumber.from(2), + } as any, + nonce: 27, + signerAddress: "0x4444", + chainId: 1, + }) + ); + + if (sentTxs.length < 2) { + throw new Error(`Expected replacement submission, got ${sentTxs.length}`); + } + if (!BigNumber.from(sentTxs[0].gasLimit).eq(125_000)) { + throw new Error( + `Expected initial buffered gasLimit=125000, got ${sentTxs[0].gasLimit}` + ); + } + if (!BigNumber.from(sentTxs[1].gasLimit).eq(187_500)) { + throw new Error( + `Expected replacement buffered gasLimit=187500, got ${sentTxs[1].gasLimit}` + ); + } + + console.log( + "PASS: replacement submission gas limit buffered from estimate\n" + ); +} + async function test() { await testReplacementPath(); await testTimeoutPath(); @@ -540,6 +683,8 @@ async function test() { await testReplacementGasCap(); await testRebroadcastGasCap(); await testDeprecatedGlobalGasCapIgnored(); + await testInitialSubmissionGasLimitBuffer(); + await testReplacementGasLimitBuffer(); console.log("All nonceQueueTxLifecycle tests passed!"); } diff --git a/contracts/tasks/lib/nonceQueueTxLifecycle.ts b/contracts/tasks/lib/nonceQueueTxLifecycle.ts index 2b44dd9acc..f7e8f19bf9 100644 --- a/contracts/tasks/lib/nonceQueueTxLifecycle.ts +++ b/contracts/tasks/lib/nonceQueueTxLifecycle.ts @@ -26,6 +26,7 @@ interface TxLifecycleConfig { replaceIntervalS: number; maxReplacements: number; feeBumpPct: number; + gasLimitBufferPct: number; } function sleep(ms: number) { @@ -61,6 +62,12 @@ function getTxLifecycleConfig(): TxLifecycleConfig { replaceIntervalS: parseIntEnv("NONCE_QUEUE_REPLACE_INTERVAL_S", 90), maxReplacements: parseIntEnv("NONCE_QUEUE_MAX_REPLACEMENTS", 3), feeBumpPct: parseIntEnv("NONCE_QUEUE_FEE_BUMP_PCT", 15, 0, 500), + gasLimitBufferPct: parseIntEnv( + "NONCE_QUEUE_GAS_LIMIT_BUFFER_PCT", + 0, + 0, + 500 + ), }; } @@ -98,6 +105,65 @@ function getTxCapComparableGasPrice( ); } +async function applyGasLimitBuffer({ + transaction, + provider, + gasLimitBufferPct, + signerAddress, + chainId, + nonce, + stage, +}: { + transaction: Parameters[0]; + provider?: ethers.providers.Provider; + gasLimitBufferPct: number; + signerAddress: string; + chainId: number; + nonce: number; + stage: "initial submission" | "replacement"; +}): Promise[0]> { + if (gasLimitBufferPct <= 0) return transaction; + if (!provider || typeof provider.estimateGas !== "function") + return transaction; + + const estimateRequest: Parameters< + ethers.providers.Provider["estimateGas"] + >[0] = { + ...transaction, + from: signerAddress, + }; + if (estimateRequest.nonce === undefined) { + estimateRequest.nonce = nonce; + } + + const estimatedGas = await provider + .estimateGas(estimateRequest) + .catch((err) => { + log( + `Failed to estimate gas for ${stage}; skipping NONCE_QUEUE_GAS_LIMIT_BUFFER_PCT: address=${signerAddress} chain=${chainId} nonce=${nonce} error="${ + err?.message ?? String(err) + }"` + ); + return null; + }); + if (!estimatedGas) return transaction; + + const bufferedGasLimit = bumpByPercent(estimatedGas, gasLimitBufferPct); + const configuredGasLimit = asBigNumber(transaction.gasLimit); + const finalGasLimit = configuredGasLimit + ? maxBigNumber(configuredGasLimit, bufferedGasLimit) + : bufferedGasLimit; + + if (configuredGasLimit && finalGasLimit.eq(configuredGasLimit)) { + return transaction; + } + + return { + ...transaction, + gasLimit: finalGasLimit, + }; +} + function getPerChainMaxGasPriceEnvKey(chainId: number): string { return `NONCE_QUEUE_MAX_GAS_PRICE_GWEI_CHAIN_${chainId}`; } @@ -340,11 +406,23 @@ export async function submitNonceQueuedTransaction({ // The lifecycle intentionally ignores the legacy global cap and only reads // per-chain caps, so operators can tune limits independently per network. const maxGasPriceWei = resolveMaxGasPriceWeiForChain(chainId); - const initialTx: Parameters[0] = { + let initialTx: Parameters[0] = { ...transaction, nonce, }; + // Apply optional global gas-limit headroom over provider estimate to reduce + // under-estimation failures during volatile state changes. + initialTx = await applyGasLimitBuffer({ + transaction: initialTx, + provider, + gasLimitBufferPct: config.gasLimitBufferPct, + signerAddress, + chainId, + nonce, + stage: "initial submission", + }); + // Enforce fee cap before any on-chain submission. await enforceSubmissionGasPriceCap({ transaction: initialTx, @@ -463,6 +541,15 @@ export async function submitNonceQueuedTransaction({ txProvider, config.feeBumpPct ); + activeTx = await applyGasLimitBuffer({ + transaction: activeTx, + provider: txProvider, + gasLimitBufferPct: config.gasLimitBufferPct, + signerAddress, + chainId, + nonce, + stage: "replacement", + }); // Replacement txs are still fresh submissions. Enforce the same chain cap // after fee bumping so retries never exceed operator limits. await enforceSubmissionGasPriceCap({ From 0df47048033f31eb03b897c0e5da0cb6f4e3f7a0 Mon Sep 17 00:00:00 2001 From: Domen Grabec Date: Wed, 15 Apr 2026 14:37:22 +0200 Subject: [PATCH 57/62] add explicit gas limit --- contracts/tasks/lib/nonceQueueTxLifecycle.ts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/contracts/tasks/lib/nonceQueueTxLifecycle.ts b/contracts/tasks/lib/nonceQueueTxLifecycle.ts index f7e8f19bf9..1d2f4789cb 100644 --- a/contracts/tasks/lib/nonceQueueTxLifecycle.ts +++ b/contracts/tasks/lib/nonceQueueTxLifecycle.ts @@ -154,6 +154,14 @@ async function applyGasLimitBuffer({ ? maxBigNumber(configuredGasLimit, bufferedGasLimit) : bufferedGasLimit; + log( + `Applied gas-limit buffer: stage=${stage} address=${signerAddress} chain=${chainId} nonce=${nonce} estimatedGas=${estimatedGas.toString()} bufferPct=${gasLimitBufferPct} bufferedGas=${bufferedGasLimit.toString()} finalGasLimit=${finalGasLimit.toString()}${ + configuredGasLimit + ? ` configuredGasLimit=${configuredGasLimit.toString()}` + : "" + }` + ); + if (configuredGasLimit && finalGasLimit.eq(configuredGasLimit)) { return transaction; } From 7ddbf792f304e5329230c61436c06ee7c865ed88 Mon Sep 17 00:00:00 2001 From: Domen Grabec Date: Wed, 15 Apr 2026 15:58:27 +0200 Subject: [PATCH 58/62] remove legacy rebase commands --- contracts/cron/cron-jobs.ts | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/contracts/cron/cron-jobs.ts b/contracts/cron/cron-jobs.ts index c5c685c725..07cbfde338 100644 --- a/contracts/cron/cron-jobs.ts +++ b/contracts/cron/cron-jobs.ts @@ -119,24 +119,6 @@ export const cronJobs: CronJob[] = [ command: "cd /app && pnpm hardhat autoValidatorWithdrawals --network mainnet", }, - { - name: "daily_rebase_mainnet_oeth", - schedule: "30 0 * * *", // daily - enabled: true, - command: "cd /app && pnpm hardhat rebase --network mainnet --symbol OETH", - }, - { - name: "daily_rebase_mainnet_ousd", - schedule: "35 0 * * *", // daily - enabled: true, - command: "cd /app && pnpm hardhat rebase --network mainnet --symbol OUSD", - }, - { - name: "daily_rebase_base_oeth", - schedule: "40 0 * * *", // daily - enabled: true, - command: "cd /app && pnpm hardhat rebase --network base --symbol OETH", - }, { name: "otoken_os_collectAndRelease", schedule: "55 23 * * *", // daily From f85b979711fa2b706e7040917abe3d9a7cabd79d Mon Sep 17 00:00:00 2001 From: Domen Grabec Date: Thu, 16 Apr 2026 11:00:27 +0200 Subject: [PATCH 59/62] add the ability to store and list the lastest actions and their statuses issued by the automated actions module --- .github/workflows/defi.yml | 58 +- contracts/cron/README.md | 23 +- contracts/cron/api.test.ts | 330 +++++++++++ contracts/cron/api.ts | 82 ++- contracts/tasks/lib/nonceQueue.test.ts | 98 +++- contracts/tasks/lib/nonceQueue.ts | 26 +- .../tasks/lib/nonceQueueTxHistory.test.ts | 523 ++++++++++++++++++ contracts/tasks/lib/nonceQueueTxHistory.ts | 394 +++++++++++++ contracts/tasks/lib/nonceQueueTxLifecycle.ts | 419 +++++++++----- 9 files changed, 1757 insertions(+), 196 deletions(-) create mode 100644 contracts/cron/api.test.ts create mode 100644 contracts/tasks/lib/nonceQueueTxHistory.test.ts create mode 100644 contracts/tasks/lib/nonceQueueTxHistory.ts diff --git a/.github/workflows/defi.yml b/.github/workflows/defi.yml index e02dac785b..12b5635327 100644 --- a/.github/workflows/defi.yml +++ b/.github/workflows/defi.yml @@ -1,12 +1,12 @@ name: DeFi -on: +on: pull_request: types: [opened, reopened, synchronize] push: branches: - - 'master' - - 'staging' - - 'stable' + - "master" + - "staging" + - "stable" workflow_dispatch: concurrency: @@ -32,7 +32,7 @@ jobs: node-version: "20.x" cache: "pnpm" cache-dependency-path: contracts/pnpm-lock.yaml - + - name: Configure Git to use HTTPS for GitHub run: git config --global url."https://github.com/".insteadOf "git@github.com:" @@ -63,14 +63,14 @@ jobs: with: version: 10 run_install: false - + - name: Use Node.js uses: actions/setup-node@v4 with: node-version: "20.x" cache: "pnpm" cache-dependency-path: contracts/pnpm-lock.yaml - + - name: Configure Git to use HTTPS for GitHub run: git config --global url."https://github.com/".insteadOf "git@github.com:" @@ -85,7 +85,7 @@ jobs: - uses: actions/upload-artifact@v4 with: name: unit-test-coverage-${{ github.sha }} - path: | + path: | ./contracts/coverage.json ./contracts/coverage/**/* retention-days: 1 @@ -101,7 +101,7 @@ jobs: with: version: 10 run_install: false - + - name: Use Node.js uses: actions/setup-node@v4 with: @@ -125,7 +125,7 @@ jobs: - uses: actions/upload-artifact@v4 with: name: base-unit-test-coverage-${{ github.sha }} - path: | + path: | ./contracts/coverage.json ./contracts/coverage/**/* retention-days: 1 @@ -141,7 +141,7 @@ jobs: with: version: 10 run_install: false - + - name: Use Node.js uses: actions/setup-node@v4 with: @@ -165,7 +165,7 @@ jobs: - uses: actions/upload-artifact@v4 with: name: sonic-unit-test-coverage-${{ github.sha }} - path: | + path: | ./contracts/coverage.json ./contracts/coverage/**/* retention-days: 1 @@ -217,13 +217,15 @@ jobs: run: | pnpm exec ts-node tasks/lib/nonceQueue.test.ts pnpm exec ts-node tasks/lib/nonceQueueTxLifecycle.test.ts - + pnpm exec ts-node tasks/lib/nonceQueueTxHistory.test.ts + pnpm exec ts-node cron/api.test.ts + contracts-forktest: name: "Mainnet Fork Tests ${{ matrix.chunk_id }}" runs-on: ubuntu-latest strategy: matrix: - chunk_id: [0,1,2,3] + chunk_id: [0, 1, 2, 3] continue-on-error: true env: HARDHAT_CACHE_DIR: ./cache @@ -240,7 +242,7 @@ jobs: with: version: 10 run_install: false - + - name: Use Node.js uses: actions/setup-node@v4 with: @@ -269,7 +271,7 @@ jobs: - uses: actions/upload-artifact@v4 with: name: fork-test-coverage-${{ github.sha }}-runner${{ matrix.chunk_id }} - path: | + path: | ./contracts/coverage.json ./contracts/coverage/**/* retention-days: 1 @@ -290,7 +292,7 @@ jobs: with: version: 10 run_install: false - + - name: Use Node.js uses: actions/setup-node@v4 with: @@ -319,7 +321,7 @@ jobs: - uses: actions/upload-artifact@v4 with: name: fork-test-arb-coverage-${{ github.sha }} - path: | + path: | ./contracts/coverage.json ./contracts/coverage/**/* retention-days: 1 @@ -340,7 +342,7 @@ jobs: with: version: 10 run_install: false - + - name: Use Node.js uses: actions/setup-node@v4 with: @@ -369,11 +371,11 @@ jobs: - uses: actions/upload-artifact@v4 with: name: fork-test-base-coverage-${{ github.sha }} - path: | + path: | ./contracts/coverage.json ./contracts/coverage/**/* retention-days: 1 - + contracts-sonic-forktest: name: "Sonic Fork Tests" runs-on: ubuntu-latest @@ -390,7 +392,7 @@ jobs: with: version: 10 run_install: false - + - name: Use Node.js uses: actions/setup-node@v4 with: @@ -419,11 +421,11 @@ jobs: - uses: actions/upload-artifact@v4 with: name: fork-test-sonic-coverage-${{ github.sha }} - path: | + path: | ./contracts/coverage.json ./contracts/coverage/**/* retention-days: 1 - + contracts-plume-forktest: name: "Plume Fork Tests" runs-on: ubuntu-latest @@ -440,7 +442,7 @@ jobs: with: version: 10 run_install: false - + - name: Use Node.js uses: actions/setup-node@v4 with: @@ -549,7 +551,7 @@ jobs: key: ${{ runner.os }}-hardhat-${{ hashFiles('contracts/cache/*.json') }} restore-keys: | ${{ runner.os }}-hardhat-cache - + - name: Download all reports uses: actions/download-artifact@v4 @@ -567,7 +569,7 @@ jobs: - name: Set up Python 3.10 uses: actions/setup-python@v5 with: - python-version: '3.10' + python-version: "3.10" - name: Install dependencies run: | @@ -582,7 +584,7 @@ jobs: with: version: 10 run_install: false - + - name: Use Node.js uses: actions/setup-node@v4 with: diff --git a/contracts/cron/README.md b/contracts/cron/README.md index 0f2bbbbb50..785a68d55b 100644 --- a/contracts/cron/README.md +++ b/contracts/cron/README.md @@ -37,6 +37,10 @@ curl -X POST -H 'Authorization: Bearer $ACTION_API_BEARER_TOKEN' \ # Check run status curl -H 'Authorization: Bearer $ACTION_API_BEARER_TOKEN' \ http://localhost:8080/api/v1/runs/ + +# List recent nonce-queue managed transactions (default limit=50, max=500) +curl -H 'Authorization: Bearer $ACTION_API_BEARER_TOKEN' \ + 'http://localhost:8080/api/v1/transactions?limit=100&address=0xabc...&chainId=1' ``` ## Adding a new job @@ -56,16 +60,17 @@ Set `enabled: false` to define a job that can only be triggered via the API. ## Environment variables -| Variable | Description | -|----------|-------------| +| Variable | Description | +| ------------------------- | ------------------------------------- | | `ACTION_API_BEARER_TOKEN` | Required. Auth token for the HTTP API | -| `PROVIDER_URL` | Mainnet RPC endpoint | -| `HARDHAT_NETWORK` | Default network for tasks | -| `LOKI_URL` | Grafana Loki push endpoint (optional) | -| `LOKI_USER` | Loki basic auth user (optional) | -| `LOKI_API_KEY` | Loki basic auth key (optional) | -| `AWS_ACCESS_KEY_ID` | For KMS signer (optional) | -| `AWS_SECRET_ACCESS_KEY` | For KMS signer (optional) | +| `PROVIDER_URL` | Mainnet RPC endpoint | +| `HARDHAT_NETWORK` | Default network for tasks | +| `LOKI_URL` | Grafana Loki push endpoint (optional) | +| `LOKI_USER` | Loki basic auth user (optional) | +| `LOKI_API_KEY` | Loki basic auth key (optional) | +| `AWS_ACCESS_KEY_ID` | For KMS signer (optional) | +| `AWS_SECRET_ACCESS_KEY` | For KMS signer (optional) | + ## Observability Each action generates its own `run_id` (UUID) and emits structured events via the winston/Loki logger in `tasks/lib/action.ts`: diff --git a/contracts/cron/api.test.ts b/contracts/cron/api.test.ts new file mode 100644 index 0000000000..bd5d162689 --- /dev/null +++ b/contracts/cron/api.test.ts @@ -0,0 +1,330 @@ +import { once } from "node:events"; +import { Pool } from "pg"; + +import { createApi } from "./api"; +import { + _resetNonceQueueTxHistoryForTesting, + recordNonceQueueTxLifecycleEvent, +} from "../tasks/lib/nonceQueueTxHistory"; + +if (!process.env.DATABASE_URL) { + console.error( + "Set DATABASE_URL to run this test, e.g.:\n" + + " DATABASE_URL=postgresql://test:test@localhost:5433/nonce_test npx ts-node cron/api.test.ts" + ); + process.exit(1); +} + +const TEST_TOKEN = "test-token"; +const ADDRESS_A = "0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; +const ADDRESS_B = "0xbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"; + +function assert(condition: any, message: string): asserts condition { + if (!condition) throw new Error(message); +} + +async function resetAndSeed(pool: Pool) { + await pool.query("DROP TABLE IF EXISTS nonce_queue_transactions"); + _resetNonceQueueTxHistoryForTesting(); + + await recordNonceQueueTxLifecycleEvent({ + pool, + event: { + type: "send_accepted", + txHash: "0xseed", + stage: "initial", + signerAddress: ADDRESS_A, + chainId: 1, + nonce: 0, + }, + }); + await pool.query("TRUNCATE TABLE nonce_queue_transactions"); + + await pool.query( + ` + INSERT INTO nonce_queue_transactions ( + tx_hash, + signer_address, + chain_id, + nonce, + stage, + status, + lifecycle_state, + explorer_url, + send_count, + block_number, + error_message, + submitted_at, + finalized_at, + updated_at + ) + SELECT + '0xmain' || lpad(gs::text, 6, '0'), + $1, + 1, + gs, + 'initial', + CASE WHEN gs % 2 = 0 THEN 'completed' ELSE 'pending' END, + CASE WHEN gs % 2 = 0 THEN 'confirmed' ELSE 'submitted_initial' END, + 'https://etherscan.io/tx/' || '0xmain' || lpad(gs::text, 6, '0'), + 1, + CASE WHEN gs % 2 = 0 THEN gs ELSE NULL END, + NULL, + NOW() - (gs::text || ' seconds')::interval, + CASE WHEN gs % 2 = 0 THEN NOW() - ((gs - 1)::text || ' seconds')::interval ELSE NULL END, + NOW() + FROM generate_series(1, 510) AS gs + `, + [ADDRESS_A] + ); + + await pool.query( + ` + INSERT INTO nonce_queue_transactions ( + tx_hash, + signer_address, + chain_id, + nonce, + stage, + status, + lifecycle_state, + explorer_url, + send_count, + block_number, + error_message, + submitted_at, + finalized_at, + updated_at + ) + SELECT + '0xb' || lpad(gs::text, 6, '0'), + $1, + 1, + gs, + 'initial', + 'completed', + 'confirmed', + 'https://etherscan.io/tx/' || '0xb' || lpad(gs::text, 6, '0'), + 1, + gs, + NULL, + NOW() - ((510 + gs)::text || ' seconds')::interval, + NOW() - ((510 + gs - 1)::text || ' seconds')::interval, + NOW() + FROM generate_series(1, 5) AS gs + `, + [ADDRESS_B] + ); + + await pool.query( + ` + INSERT INTO nonce_queue_transactions ( + tx_hash, + signer_address, + chain_id, + nonce, + stage, + status, + lifecycle_state, + explorer_url, + send_count, + block_number, + error_message, + submitted_at, + finalized_at, + updated_at + ) + SELECT + '0xbase' || lpad(gs::text, 6, '0'), + $1, + 8453, + gs, + 'initial', + 'completed', + 'confirmed', + 'https://basescan.org/tx/' || '0xbase' || lpad(gs::text, 6, '0'), + 1, + gs, + NULL, + NOW() - ((520 + gs)::text || ' seconds')::interval, + NOW() - ((520 + gs - 1)::text || ' seconds')::interval, + NOW() + FROM generate_series(1, 5) AS gs + `, + [ADDRESS_A] + ); +} + +async function startTestServer() { + const server = createApi({ + host: "127.0.0.1", + port: 0, + apiToken: TEST_TOKEN, + jobs: [], + jobsByName: new Map(), + workdir: process.cwd(), + historyLimit: 100, + healthCheck: () => ({ running: true, pid: 1 }), + log: console as any, + }); + + server.listen(0, "127.0.0.1"); + await once(server, "listening"); + const addressInfo = server.address(); + if (!addressInfo || typeof addressInfo === "string") { + throw new Error("Could not determine test server port"); + } + + return { + server, + baseUrl: `http://127.0.0.1:${addressInfo.port}`, + }; +} + +async function getJson( + baseUrl: string, + path: string, + opts: { auth?: boolean } = {} +) { + const headers: Record = {}; + if (opts.auth !== false) { + headers.Authorization = `Bearer ${TEST_TOKEN}`; + } + + const res = await fetch(`${baseUrl}${path}`, { headers }); + const payload = await res.json(); + return { status: res.status, payload }; +} + +async function testApiTransactionsEndpoint(pool: Pool) { + console.log("--- API Test: /api/v1/transactions ---"); + await resetAndSeed(pool); + + const { server, baseUrl } = await startTestServer(); + try { + const unauthorized = await getJson(baseUrl, "/api/v1/transactions", { + auth: false, + }); + assert( + unauthorized.status === 401, + `Expected 401 for unauthorized /api/v1/transactions, got ${unauthorized.status}` + ); + + const unauthorizedActions = await getJson(baseUrl, "/api/v1/actions", { + auth: false, + }); + assert( + unauthorizedActions.status === 401, + `Expected 401 for unauthorized /api/v1/actions, got ${unauthorizedActions.status}` + ); + + const defaultLimit = await getJson(baseUrl, "/api/v1/transactions"); + assert(defaultLimit.status === 200, "Expected 200 for default list"); + assert( + defaultLimit.payload.transactions.length === 50, + `Expected default limit 50, got ${defaultLimit.payload.transactions.length}` + ); + + const clamped = await getJson(baseUrl, "/api/v1/transactions?limit=999"); + assert(clamped.status === 200, "Expected 200 for clamped list"); + assert( + clamped.payload.transactions.length === 500, + `Expected clamped limit 500, got ${clamped.payload.transactions.length}` + ); + + const byAddress = await getJson( + baseUrl, + `/api/v1/transactions?limit=50&address=${ADDRESS_B}` + ); + assert(byAddress.status === 200, "Expected 200 for address filter"); + assert( + byAddress.payload.transactions.length === 5, + `Expected 5 rows for address filter, got ${byAddress.payload.transactions.length}` + ); + assert( + byAddress.payload.transactions.every( + (row: any) => row.signerAddress === ADDRESS_B + ), + "Address filter returned rows for different address" + ); + + const byChain = await getJson( + baseUrl, + "/api/v1/transactions?limit=50&chainId=8453" + ); + assert(byChain.status === 200, "Expected 200 for chain filter"); + assert( + byChain.payload.transactions.length === 5, + `Expected 5 rows for chain filter, got ${byChain.payload.transactions.length}` + ); + assert( + byChain.payload.transactions.every((row: any) => row.chainId === 8453), + "Chain filter returned rows for different chain" + ); + + const byAddressAndChain = await getJson( + baseUrl, + `/api/v1/transactions?limit=50&address=${ADDRESS_A}&chainId=8453` + ); + assert( + byAddressAndChain.status === 200, + "Expected 200 for address+chain filter" + ); + assert( + byAddressAndChain.payload.transactions.length === 5, + `Expected 5 rows for address+chain filter, got ${byAddressAndChain.payload.transactions.length}` + ); + assert( + byAddressAndChain.payload.transactions.every( + (row: any) => row.signerAddress === ADDRESS_A && row.chainId === 8453 + ), + "Address+chain filter returned unexpected rows" + ); + + const sample = defaultLimit.payload.transactions[0]; + for (const key of [ + "txHash", + "signerAddress", + "chainId", + "nonce", + "stage", + "status", + "lifecycleState", + "explorerUrl", + "submittedAt", + "finalizedAt", + "blockNumber", + "errorMessage", + "sendCount", + ]) { + assert( + sample[key] !== undefined, + `Expected field ${key} on response row` + ); + } + + console.log("PASS: transactions endpoint auth, limits, and filters\n"); + } finally { + await new Promise((resolve, reject) => { + server.close((err) => { + if (err) reject(err); + else resolve(); + }); + }); + } +} + +async function test() { + const pool = new Pool({ connectionString: process.env.DATABASE_URL }); + try { + await testApiTransactionsEndpoint(pool); + console.log("All cron api tests passed!"); + } finally { + await pool.end(); + } +} + +test().catch((err) => { + console.error("TEST FAILED:", err); + process.exit(1); +}); diff --git a/contracts/cron/api.ts b/contracts/cron/api.ts index efd141fb30..17bc5dbae3 100644 --- a/contracts/cron/api.ts +++ b/contracts/cron/api.ts @@ -2,6 +2,8 @@ import { spawn } from "node:child_process"; import { randomUUID, timingSafeEqual } from "node:crypto"; import http from "node:http"; import type { Logger } from "winston"; +import { getNoncePool } from "../tasks/lib/nonceQueue"; +import { listNonceQueueTransactions } from "../tasks/lib/nonceQueueTxHistory"; import type { CronJob } from "./render-crontab"; // --- Run tracking --- @@ -36,6 +38,20 @@ export interface ApiOpts { log: Logger; } +function parsePositiveIntParam( + value: string | null, + { + fallback, + minimum, + maximum, + }: { fallback: number; minimum: number; maximum: number } +): number | null { + if (value === null || value.trim() === "") return fallback; + const parsed = Number(value); + if (!Number.isInteger(parsed) || parsed < minimum) return null; + return Math.min(parsed, maximum); +} + export function createApi(opts: ApiOpts): http.Server { const { host, @@ -126,7 +142,7 @@ export function createApi(opts: ApiOpts): http.Server { res: http.ServerResponse, statusCode: number, payload: any, - extraHeaders: Record = {}, + extraHeaders: Record = {} ) { res.writeHead(statusCode, { "Content-Type": "application/json", @@ -186,9 +202,65 @@ export function createApi(opts: ApiOpts): http.Server { }); } + if (method === "GET" && url.pathname === "/api/v1/transactions") { + const limit = parsePositiveIntParam(url.searchParams.get("limit"), { + fallback: 50, + minimum: 1, + maximum: 500, + }); + if (limit === null) { + return json(res, 400, { + error: "Invalid limit (expected integer >= 1)", + }); + } + + const addressParam = url.searchParams.get("address"); + const normalizedAddress = + addressParam && addressParam.trim().length > 0 + ? addressParam.trim().toLowerCase() + : undefined; + const chainIdParam = url.searchParams.get("chainId"); + let parsedChainId: number | undefined; + if (chainIdParam !== null && chainIdParam.trim().length > 0) { + const candidate = Number(chainIdParam); + if (!Number.isInteger(candidate) || candidate < 0) { + return json(res, 400, { + error: "Invalid chainId (expected integer >= 0)", + }); + } + parsedChainId = candidate; + } + + const noncePool = getNoncePool(); + if (!noncePool) { + return json(res, 200, { transactions: [] }); + } + + void listNonceQueueTransactions({ + pool: noncePool, + params: { + limit, + address: normalizedAddress, + chainId: parsedChainId, + }, + }) + .then((transactions) => { + json(res, 200, { transactions }); + }) + .catch((err: any) => { + log.error( + `Failed to list nonce queue transactions: ${ + err?.message ?? String(err) + }` + ); + json(res, 500, { error: "Internal server error" }); + }); + return; + } + // Trigger action run const triggerMatch = url.pathname.match( - /^\/api\/v1\/actions\/([^/]+)\/runs$/, + /^\/api\/v1\/actions\/([^/]+)\/runs$/ ); if (method === "POST" && triggerMatch) { const run = triggerAction(decodeURIComponent(triggerMatch[1])); @@ -196,7 +268,9 @@ export function createApi(opts: ApiOpts): http.Server { return json(res, 404, { error: `Unknown action "${triggerMatch[1]}"`, }); - const statusUrl = `${origin}/api/v1/runs/${encodeURIComponent(run.runId)}`; + const statusUrl = `${origin}/api/v1/runs/${encodeURIComponent( + run.runId + )}`; return json( res, 202, @@ -207,7 +281,7 @@ export function createApi(opts: ApiOpts): http.Server { statusUrl, startedAt: run.startedAt, }, - { Location: statusUrl }, + { Location: statusUrl } ); } diff --git a/contracts/tasks/lib/nonceQueue.test.ts b/contracts/tasks/lib/nonceQueue.test.ts index d8d78377c8..e25cd55418 100644 --- a/contracts/tasks/lib/nonceQueue.test.ts +++ b/contracts/tasks/lib/nonceQueue.test.ts @@ -26,6 +26,7 @@ import { getNoncePool, _resetForTesting, } from "./nonceQueue"; +import { _resetNonceQueueTxHistoryForTesting } from "./nonceQueueTxHistory"; // Minimal mock signer for testing function createMockSigner( @@ -55,16 +56,31 @@ function createMockSigner( return signer; } +async function waitFor( + predicate: () => Promise, + timeoutMs = 5_000, + pollMs = 50 +) { + const started = Date.now(); + while (Date.now() - started < timeoutMs) { + if (await predicate()) return; + await new Promise((resolve) => setTimeout(resolve, pollMs)); + } + throw new Error(`Condition not met within ${timeoutMs}ms`); +} + /** Drop and recreate table, reset module state */ async function resetAll() { // Close any existing pool in the module const existing = getNoncePool(); if (existing) await existing.end(); _resetForTesting(); + _resetNonceQueueTxHistoryForTesting(); // Drop table directly const tmpPool = new Pool({ connectionString: process.env.DATABASE_URL }); await tmpPool.query("DROP TABLE IF EXISTS nonce_queue"); + await tmpPool.query("DROP TABLE IF EXISTS nonce_queue_transactions"); await tmpPool.end(); } @@ -144,10 +160,14 @@ async function test() { const sorted = [...results].sort((a, b) => a.startMs - b.startMs); const gap = sorted[1].startMs - sorted[0].endMs; console.log( - ` First tx: ${sorted[0].startMs}-${sorted[0].endMs} (${sorted[0].endMs - sorted[0].startMs}ms)` + ` First tx: ${sorted[0].startMs}-${sorted[0].endMs} (${ + sorted[0].endMs - sorted[0].startMs + }ms)` ); console.log( - ` Second tx: ${sorted[1].startMs}-${sorted[1].endMs} (${sorted[1].endMs - sorted[1].startMs}ms)` + ` Second tx: ${sorted[1].startMs}-${sorted[1].endMs} (${ + sorted[1].endMs - sorted[1].startMs + }ms)` ); console.log(` Gap between first end and second start: ${gap}ms`); console.assert( @@ -218,6 +238,80 @@ async function test() { ); console.log("PASS: Nonce preserved after rollback\n"); + // --- Test 5 --- + console.log( + "--- Test 5: Persisted tx history keeps nonce order under concurrency ---" + ); + results.length = 0; + await resetAll(); + + const signer5a = createMockSigner("0xaaaa", async (nonce) => { + results.push({ id: 1, nonce, startMs: Date.now(), endMs: 0 }); + await new Promise((r) => setTimeout(r, 200)); + }); + const signer5b = createMockSigner("0xaaaa", async (nonce) => { + results.push({ id: 2, nonce, startMs: Date.now(), endMs: 0 }); + await new Promise((r) => setTimeout(r, 150)); + }); + const signer5c = createMockSigner("0xaaaa", async (nonce) => { + results.push({ id: 3, nonce, startMs: Date.now(), endMs: 0 }); + await new Promise((r) => setTimeout(r, 100)); + }); + + const wrapped5a = wrapWithNonceQueue(signer5a, 1); + const wrapped5b = wrapWithNonceQueue(signer5b, 1); + const wrapped5c = wrapWithNonceQueue(signer5c, 1); + + await Promise.all([ + wrapped5a.sendTransaction({ to: "0xbbbb", data: "0x" }), + wrapped5b.sendTransaction({ to: "0xbbbb", data: "0x" }), + wrapped5c.sendTransaction({ to: "0xbbbb", data: "0x" }), + ]); + + const verifyPool = new Pool({ connectionString: process.env.DATABASE_URL }); + await waitFor(async () => { + const { rows } = await verifyPool.query( + `SELECT COUNT(*)::int AS count + FROM nonce_queue_transactions + WHERE signer_address = $1 AND chain_id = $2`, + ["0xaaaa", 1] + ); + return Number(rows[0].count) >= 3; + }, 10_000); + const persisted = await verifyPool.query( + `SELECT nonce, status, tx_hash + FROM nonce_queue_transactions + WHERE signer_address = $1 AND chain_id = $2 + ORDER BY nonce ASC, submitted_at ASC`, + ["0xaaaa", 1] + ); + await verifyPool.end(); + + const persistedNonces = persisted.rows.map((row: any) => Number(row.nonce)); + const uniqueHashes = new Set(persisted.rows.map((row: any) => row.tx_hash)); + + console.log( + "Results:", + persisted.rows + .map((row: any) => `nonce=${row.nonce} status=${row.status}`) + .join(", ") + ); + console.assert( + persisted.rows.length === 3, + `Expected 3 persisted tx rows, got ${persisted.rows.length}` + ); + console.assert( + persistedNonces.join(",") === "0,1,2", + `Expected persisted nonces [0,1,2], got [${persistedNonces}]` + ); + console.assert( + uniqueHashes.size === 3, + `Expected 3 unique tx hashes, got ${uniqueHashes.size}` + ); + console.log( + "PASS: Concurrent sends persisted with strictly increasing nonces\n" + ); + // --- Cleanup --- const pool = getNoncePool(); if (pool) await pool.end(); diff --git a/contracts/tasks/lib/nonceQueue.ts b/contracts/tasks/lib/nonceQueue.ts index c8eb78d938..2e7ba72f6b 100644 --- a/contracts/tasks/lib/nonceQueue.ts +++ b/contracts/tasks/lib/nonceQueue.ts @@ -5,6 +5,7 @@ import { recoverNonceFromChain, submitNonceQueuedTransaction, } from "./nonceQueueTxLifecycle"; +import { recordNonceQueueTxLifecycleEvent } from "./nonceQueueTxHistory"; const log = require("../../utils/logger")("utils:nonceQueue"); @@ -134,7 +135,9 @@ async function withNonceLock( await client.query("COMMIT"); log( - `Released nonce lock: address=${signerAddress} chain=${chainId} nonce=${nonce} → ${nonce + 1}` + `Released nonce lock: address=${signerAddress} chain=${chainId} nonce=${nonce} → ${ + nonce + 1 + }` ); return result; @@ -153,7 +156,9 @@ async function withNonceLock( if (isNonceMismatchError(err)) { log( - `Nonce mismatch (attempt ${attempt + 1}/${maxRetries}), recovering from chain…` + `Nonce mismatch (attempt ${ + attempt + 1 + }/${maxRetries}), recovering from chain…` ); await recoverNonceFromChain({ pool: p, @@ -215,6 +220,23 @@ export function wrapWithNonceQueue( nonce, signerAddress, chainId, + onLifecycleEvent: (event) => { + // Keep lifecycle persistence out-of-band so lock holders never + // block on acquiring another DB connection from the same pool. + void recordNonceQueueTxLifecycleEvent({ + pool: p, + event, + }).catch((err: any) => { + // History persistence must not block transaction sending flow. + log( + `Failed to persist nonce-queue transaction history: type=${ + event.type + } address=${signerAddress} chain=${chainId} nonce=${nonce} error="${ + err?.message ?? String(err) + }"` + ); + }); + }, }); } ); diff --git a/contracts/tasks/lib/nonceQueueTxHistory.test.ts b/contracts/tasks/lib/nonceQueueTxHistory.test.ts new file mode 100644 index 0000000000..27cdc854eb --- /dev/null +++ b/contracts/tasks/lib/nonceQueueTxHistory.test.ts @@ -0,0 +1,523 @@ +import { Pool } from "pg"; + +import { submitNonceQueuedTransaction } from "./nonceQueueTxLifecycle"; +import { + _resetNonceQueueTxHistoryForTesting, + listNonceQueueTransactions, + recordNonceQueueTxLifecycleEvent, +} from "./nonceQueueTxHistory"; + +type EnvOverrides = Record; + +if (!process.env.DATABASE_URL) { + console.error( + "Set DATABASE_URL to run this test, e.g.:\n" + + " DATABASE_URL=postgresql://test:test@localhost:5433/nonce_test npx ts-node tasks/lib/nonceQueueTxHistory.test.ts" + ); + process.exit(1); +} + +function makeResponse(hash: string, raw?: string): any { + return { + hash, + raw, + rawTransaction: raw, + wait: async () => ({ + status: 1, + transactionHash: hash, + blockNumber: 12345, + }), + }; +} + +async function withEnv(overrides: EnvOverrides, fn: () => Promise) { + const previousValues: Record = {}; + for (const key of Object.keys(overrides)) { + previousValues[key] = process.env[key]; + } + + for (const [key, value] of Object.entries(overrides)) { + if (value === undefined) { + delete process.env[key]; + } else { + process.env[key] = value; + } + } + + try { + return await fn(); + } finally { + for (const [key, value] of Object.entries(previousValues)) { + if (value === undefined) { + delete process.env[key]; + } else { + process.env[key] = value; + } + } + } +} + +async function waitFor( + predicate: () => Promise, + timeoutMs = 5_000, + pollMs = 50 +) { + const started = Date.now(); + while (Date.now() - started < timeoutMs) { + if (await predicate()) return; + await new Promise((resolve) => setTimeout(resolve, pollMs)); + } + throw new Error(`Condition not met within ${timeoutMs}ms`); +} + +async function resetHistoryTable(pool: Pool) { + await pool.query("DROP TABLE IF EXISTS nonce_queue_transactions"); + _resetNonceQueueTxHistoryForTesting(); +} + +async function testInitialSendCreatesPendingRow(pool: Pool) { + console.log("--- Tx History Test 1: Initial send creates pending row ---"); + await resetHistoryTable(pool); + + let shouldMine = false; + const signerSendTransaction = async () => + makeResponse("0xhist-pending", "0xraw"); + const provider: any = { + async getTransactionReceipt() { + if (!shouldMine) return null; + return { status: 1, transactionHash: "0xhist-pending", blockNumber: 100 }; + }, + async getFeeData() { + return {}; + }, + async sendTransaction(raw: string) { + return makeResponse("0xhist-pending", raw); + }, + }; + + const txPromise = withEnv( + { + NONCE_QUEUE_TX_CONFIRM_TIMEOUT_S: "20", + NONCE_QUEUE_RECEIPT_POLL_S: "1", + NONCE_QUEUE_REBROADCAST_INTERVAL_S: "0", + NONCE_QUEUE_REPLACE_INTERVAL_S: "0", + }, + () => + submitNonceQueuedTransaction({ + sendTransaction: signerSendTransaction as any, + provider, + transaction: { + to: "0x0000000000000000000000000000000000000001", + data: "0x", + } as any, + nonce: 100, + signerAddress: "0xAAAA", + chainId: 1, + onLifecycleEvent: (event) => + recordNonceQueueTxLifecycleEvent({ pool, event }), + }) + ); + + await waitFor(async () => { + try { + const { rows } = await pool.query( + "SELECT status, lifecycle_state FROM nonce_queue_transactions WHERE tx_hash = $1", + ["0xhist-pending"] + ); + return rows.length === 1; + } catch (err: any) { + if (err?.code === "42P01") { + return false; + } + throw err; + } + }); + + const pendingRow = await pool.query( + "SELECT status, lifecycle_state FROM nonce_queue_transactions WHERE tx_hash = $1", + ["0xhist-pending"] + ); + + console.assert( + pendingRow.rows[0].status === "pending", + `Expected pending status, got ${pendingRow.rows[0].status}` + ); + console.assert( + pendingRow.rows[0].lifecycle_state === "submitted_initial", + `Expected lifecycle_state=submitted_initial, got ${pendingRow.rows[0].lifecycle_state}` + ); + + shouldMine = true; + await txPromise; + console.log("PASS: pending row created on initial send\n"); +} + +async function testMinedSuccessPersistsCompleted(pool: Pool) { + console.log("--- Tx History Test 2: Mined success marks completed ---"); + await resetHistoryTable(pool); + + const signerSendTransaction = async () => + makeResponse("0xhist-success", "0xraw"); + const provider: any = { + async getTransactionReceipt() { + return { status: 1, transactionHash: "0xhist-success", blockNumber: 200 }; + }, + async getFeeData() { + return {}; + }, + async sendTransaction(raw: string) { + return makeResponse("0xhist-success", raw); + }, + }; + + await withEnv( + { + NONCE_QUEUE_REBROADCAST_INTERVAL_S: "0", + NONCE_QUEUE_REPLACE_INTERVAL_S: "0", + }, + () => + submitNonceQueuedTransaction({ + sendTransaction: signerSendTransaction as any, + provider, + transaction: { + to: "0x0000000000000000000000000000000000000001", + data: "0x", + } as any, + nonce: 101, + signerAddress: "0xAAAA", + chainId: 1, + onLifecycleEvent: (event) => + recordNonceQueueTxLifecycleEvent({ pool, event }), + }) + ); + + const { rows } = await pool.query( + "SELECT status, lifecycle_state, block_number FROM nonce_queue_transactions WHERE tx_hash = $1", + ["0xhist-success"] + ); + + console.assert(rows[0].status === "completed", "Expected completed status"); + console.assert( + rows[0].lifecycle_state === "confirmed", + `Expected lifecycle_state=confirmed, got ${rows[0].lifecycle_state}` + ); + console.assert( + Number(rows[0].block_number) === 200, + `Expected block_number=200, got ${rows[0].block_number}` + ); + console.log("PASS: completed row persisted after mined success\n"); +} + +async function testMinedRevertPersistsFailed(pool: Pool) { + console.log("--- Tx History Test 3: Mined revert marks failed/reverted ---"); + await resetHistoryTable(pool); + + const signerSendTransaction = async () => + makeResponse("0xhist-revert", "0xraw"); + const provider: any = { + async getTransactionReceipt() { + return { status: 0, transactionHash: "0xhist-revert", blockNumber: 300 }; + }, + async getFeeData() { + return {}; + }, + async sendTransaction(raw: string) { + return makeResponse("0xhist-revert", raw); + }, + }; + + let revertError: Error | undefined; + await withEnv( + { + NONCE_QUEUE_REBROADCAST_INTERVAL_S: "0", + NONCE_QUEUE_REPLACE_INTERVAL_S: "0", + }, + async () => { + try { + await submitNonceQueuedTransaction({ + sendTransaction: signerSendTransaction as any, + provider, + transaction: { + to: "0x0000000000000000000000000000000000000001", + data: "0x", + } as any, + nonce: 102, + signerAddress: "0xAAAA", + chainId: 1, + onLifecycleEvent: (event) => + recordNonceQueueTxLifecycleEvent({ pool, event }), + }); + } catch (err: any) { + revertError = err; + } + } + ); + + if (!revertError) { + throw new Error("Expected revert error"); + } + + const { rows } = await pool.query( + "SELECT status, lifecycle_state FROM nonce_queue_transactions WHERE tx_hash = $1", + ["0xhist-revert"] + ); + console.assert(rows[0].status === "failed", "Expected failed status"); + console.assert( + rows[0].lifecycle_state === "reverted", + `Expected lifecycle_state=reverted, got ${rows[0].lifecycle_state}` + ); + console.log("PASS: reverted row persisted as failed/reverted\n"); +} + +async function testTimeoutMarksPendingRows(pool: Pool) { + console.log("--- Tx History Test 4: Timeout marks failed/timed_out ---"); + await resetHistoryTable(pool); + + const signerSendTransaction = async () => + makeResponse("0xhist-timeout", "0xraw"); + const provider: any = { + async getTransactionReceipt() { + return null; + }, + async getFeeData() { + return {}; + }, + async sendTransaction(raw: string) { + return makeResponse("0xhist-timeout", raw); + }, + }; + + let timeoutError: Error | undefined; + await withEnv( + { + NONCE_QUEUE_TX_CONFIRM_TIMEOUT_S: "2", + NONCE_QUEUE_RECEIPT_POLL_S: "1", + NONCE_QUEUE_REBROADCAST_INTERVAL_S: "0", + NONCE_QUEUE_REPLACE_INTERVAL_S: "0", + }, + async () => { + try { + await submitNonceQueuedTransaction({ + sendTransaction: signerSendTransaction as any, + provider, + transaction: { + to: "0x0000000000000000000000000000000000000001", + data: "0x", + } as any, + nonce: 103, + signerAddress: "0xAAAA", + chainId: 1, + onLifecycleEvent: (event) => + recordNonceQueueTxLifecycleEvent({ pool, event }), + }); + } catch (err: any) { + timeoutError = err; + } + } + ); + + if (!timeoutError) { + throw new Error("Expected timeout error"); + } + + const { rows } = await pool.query( + "SELECT status, lifecycle_state, error_message FROM nonce_queue_transactions WHERE tx_hash = $1", + ["0xhist-timeout"] + ); + console.assert(rows[0].status === "failed", "Expected failed status"); + console.assert( + rows[0].lifecycle_state === "timed_out", + `Expected lifecycle_state=timed_out, got ${rows[0].lifecycle_state}` + ); + console.assert( + String(rows[0].error_message).includes( + "Timed out waiting for nonce-queued tx confirmation" + ), + `Expected timeout error message, got ${rows[0].error_message}` + ); + console.log("PASS: timeout persisted as failed/timed_out\n"); +} + +async function testReplacementPathPersistsWinnerAndLoser(pool: Pool) { + console.log("--- Tx History Test 5: Replacement winner/loser states ---"); + await resetHistoryTable(pool); + + let sendCount = 0; + const signerSendTransaction = async () => { + if (sendCount === 0) { + sendCount++; + return makeResponse("0xhist-initial", "0xraw-initial"); + } + sendCount++; + return makeResponse("0xhist-replacement", "0xraw-replacement"); + }; + + let receiptChecks = 0; + const provider: any = { + async getTransactionReceipt(hash: string) { + receiptChecks++; + if (hash === "0xhist-replacement" && receiptChecks >= 4) { + return { + status: 1, + transactionHash: "0xhist-replacement", + blockNumber: 400, + }; + } + return null; + }, + async getFeeData() { + return { + maxFeePerGas: 400, + maxPriorityFeePerGas: 5, + }; + }, + async sendTransaction() { + throw new Error("rebroadcast disabled"); + }, + }; + + await withEnv( + { + NONCE_QUEUE_TX_CONFIRM_TIMEOUT_S: "20", + NONCE_QUEUE_RECEIPT_POLL_S: "1", + NONCE_QUEUE_REBROADCAST_INTERVAL_S: "0", + NONCE_QUEUE_REPLACE_INTERVAL_S: "1", + NONCE_QUEUE_MAX_REPLACEMENTS: "2", + NONCE_QUEUE_FEE_BUMP_PCT: "20", + }, + () => + submitNonceQueuedTransaction({ + sendTransaction: signerSendTransaction as any, + provider, + transaction: { + to: "0x0000000000000000000000000000000000000001", + data: "0x", + maxFeePerGas: 100, + maxPriorityFeePerGas: 2, + } as any, + nonce: 104, + signerAddress: "0xAAAA", + chainId: 1, + onLifecycleEvent: (event) => + recordNonceQueueTxLifecycleEvent({ pool, event }), + }) + ); + + const records = await listNonceQueueTransactions({ + pool, + params: { limit: 10, address: "0xaaaa", chainId: 1 }, + }); + const initial = records.find((row) => row.txHash === "0xhist-initial"); + const replacement = records.find( + (row) => row.txHash === "0xhist-replacement" + ); + + if (!initial || !replacement) { + throw new Error("Expected both initial and replacement rows"); + } + + console.assert( + initial.status === "failed" && initial.lifecycleState === "replaced", + `Expected initial row failed/replaced, got ${initial.status}/${initial.lifecycleState}` + ); + console.assert( + replacement.status === "completed" && + replacement.lifecycleState === "confirmed", + `Expected replacement row completed/confirmed, got ${replacement.status}/${replacement.lifecycleState}` + ); + console.log("PASS: replacement winner/loser rows persisted correctly\n"); +} + +async function testRebroadcastIncrementsSendCount(pool: Pool) { + console.log("--- Tx History Test 6: Rebroadcast increments send_count ---"); + await resetHistoryTable(pool); + + const signerSendTransaction = async () => + makeResponse("0xhist-rebroadcast", "0xraw"); + + let receiptChecks = 0; + let providerSends = 0; + const provider: any = { + async getTransactionReceipt(hash: string) { + receiptChecks++; + if (hash === "0xhist-rebroadcast" && receiptChecks >= 3) { + return { + status: 1, + transactionHash: "0xhist-rebroadcast", + blockNumber: 500, + }; + } + return null; + }, + async getFeeData() { + return {}; + }, + async sendTransaction(raw: string) { + providerSends++; + return makeResponse("0xhist-rebroadcast", raw); + }, + }; + + await withEnv( + { + NONCE_QUEUE_TX_CONFIRM_TIMEOUT_S: "10", + NONCE_QUEUE_RECEIPT_POLL_S: "1", + NONCE_QUEUE_REBROADCAST_INTERVAL_S: "1", + NONCE_QUEUE_REPLACE_INTERVAL_S: "0", + }, + () => + submitNonceQueuedTransaction({ + sendTransaction: signerSendTransaction as any, + provider, + transaction: { + to: "0x0000000000000000000000000000000000000001", + data: "0x", + } as any, + nonce: 105, + signerAddress: "0xAAAA", + chainId: 1, + onLifecycleEvent: (event) => + recordNonceQueueTxLifecycleEvent({ pool, event }), + }) + ); + + console.assert( + providerSends === 1, + `Expected 1 rebroadcast, got ${providerSends}` + ); + + const { rows } = await pool.query( + "SELECT send_count, status FROM nonce_queue_transactions WHERE tx_hash = $1", + ["0xhist-rebroadcast"] + ); + + console.assert(rows.length === 1, `Expected 1 row, got ${rows.length}`); + console.assert( + Number(rows[0].send_count) === 2, + `Expected send_count=2, got ${rows[0].send_count}` + ); + console.assert(rows[0].status === "completed", "Expected completed status"); + console.log( + "PASS: rebroadcast upsert increments send_count without duplicates\n" + ); +} + +async function test() { + const pool = new Pool({ connectionString: process.env.DATABASE_URL }); + try { + await testInitialSendCreatesPendingRow(pool); + await testMinedSuccessPersistsCompleted(pool); + await testMinedRevertPersistsFailed(pool); + await testTimeoutMarksPendingRows(pool); + await testReplacementPathPersistsWinnerAndLoser(pool); + await testRebroadcastIncrementsSendCount(pool); + console.log("All nonceQueueTxHistory tests passed!"); + } finally { + await pool.end(); + } +} + +test().catch((err) => { + console.error("TEST FAILED:", err); + process.exit(1); +}); diff --git a/contracts/tasks/lib/nonceQueueTxHistory.ts b/contracts/tasks/lib/nonceQueueTxHistory.ts new file mode 100644 index 0000000000..e74df01c7c --- /dev/null +++ b/contracts/tasks/lib/nonceQueueTxHistory.ts @@ -0,0 +1,394 @@ +import type { Pool } from "pg"; + +const EXPLORER_TX_BASE_BY_CHAIN: Record = { + 1: "https://etherscan.io/tx/", + 8453: "https://basescan.org/tx/", + 42161: "https://arbiscan.io/tx/", + 17000: "https://holesky.etherscan.io/tx/", +}; + +let tableEnsurePromise: Promise | null = null; + +export type NonceQueueTxStage = "initial" | "replacement" | "rebroadcast"; + +export type NonceQueueTxStatus = "pending" | "completed" | "failed"; + +export type NonceQueueTxLifecycleState = + | "submitted_initial" + | "submitted_replacement" + | "submitted_rebroadcast" + | "confirmed" + | "reverted" + | "replaced" + | "timed_out" + | "send_error"; + +export type NonceQueueTxLifecycleEvent = + | { + type: "send_accepted"; + txHash: string; + stage: NonceQueueTxStage; + signerAddress: string; + chainId: number; + nonce: number; + } + | { + type: "mined_success"; + txHash: string; + signerAddress: string; + chainId: number; + nonce: number; + blockNumber: number | null; + } + | { + type: "mined_revert"; + txHash: string; + signerAddress: string; + chainId: number; + nonce: number; + blockNumber: number | null; + errorMessage?: string; + } + | { + type: "timeout"; + signerAddress: string; + chainId: number; + nonce: number; + errorMessage: string; + } + | { + type: "terminal_send_error"; + signerAddress: string; + chainId: number; + nonce: number; + errorMessage: string; + txHash?: string; + }; + +export interface NonceQueueTransactionRecord { + txHash: string; + signerAddress: string; + chainId: number; + nonce: number; + stage: NonceQueueTxStage; + status: NonceQueueTxStatus; + lifecycleState: string; + explorerUrl: string | null; + sendCount: number; + blockNumber: number | null; + errorMessage: string | null; + submittedAt: string; + finalizedAt: string | null; + updatedAt: string; +} + +export interface ListNonceQueueTransactionsParams { + limit: number; + address?: string; + chainId?: number; +} + +function lifecycleStateForSubmit( + stage: NonceQueueTxStage +): NonceQueueTxLifecycleState { + if (stage === "initial") return "submitted_initial"; + if (stage === "replacement") return "submitted_replacement"; + return "submitted_rebroadcast"; +} + +function explorerUrlForHash(chainId: number, txHash: string): string | null { + const base = EXPLORER_TX_BASE_BY_CHAIN[chainId]; + return base ? `${base}${txHash}` : null; +} + +async function ensureNonceQueueTransactionsTable(pool: Pool): Promise { + if (!tableEnsurePromise) { + tableEnsurePromise = pool + .query( + ` + CREATE TABLE IF NOT EXISTS nonce_queue_transactions ( + tx_hash TEXT PRIMARY KEY, + signer_address TEXT NOT NULL, + chain_id INTEGER NOT NULL, + nonce INTEGER NOT NULL, + stage TEXT NOT NULL CHECK (stage IN ('initial', 'replacement', 'rebroadcast')), + status TEXT NOT NULL CHECK (status IN ('pending', 'completed', 'failed')), + lifecycle_state TEXT NOT NULL, + explorer_url TEXT, + send_count INTEGER NOT NULL DEFAULT 1, + block_number INTEGER, + error_message TEXT, + submitted_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), + finalized_at TIMESTAMPTZ, + updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW() + ); + + CREATE INDEX IF NOT EXISTS nonce_queue_transactions_submitted_at_idx + ON nonce_queue_transactions (submitted_at DESC); + + CREATE INDEX IF NOT EXISTS nonce_queue_transactions_address_chain_submitted_at_idx + ON nonce_queue_transactions (signer_address, chain_id, submitted_at DESC); + ` + ) + .then(() => {}); + } + + await tableEnsurePromise; +} + +export async function recordNonceQueueTxLifecycleEvent({ + pool, + event, +}: { + pool: Pool; + event: NonceQueueTxLifecycleEvent; +}): Promise { + await ensureNonceQueueTransactionsTable(pool); + + const signerAddress = event.signerAddress.toLowerCase(); + + if (event.type === "send_accepted") { + const lifecycleState = lifecycleStateForSubmit(event.stage); + await pool.query( + ` + INSERT INTO nonce_queue_transactions ( + tx_hash, + signer_address, + chain_id, + nonce, + stage, + status, + lifecycle_state, + explorer_url, + send_count, + submitted_at, + updated_at + ) + VALUES ($1, $2, $3, $4, $5, 'pending', $6, $7, 1, NOW(), NOW()) + ON CONFLICT (tx_hash) DO UPDATE SET + send_count = nonce_queue_transactions.send_count + 1, + stage = EXCLUDED.stage, + lifecycle_state = EXCLUDED.lifecycle_state, + explorer_url = COALESCE(nonce_queue_transactions.explorer_url, EXCLUDED.explorer_url), + updated_at = NOW(), + error_message = NULL + `, + [ + event.txHash, + signerAddress, + event.chainId, + event.nonce, + event.stage, + lifecycleState, + explorerUrlForHash(event.chainId, event.txHash), + ] + ); + return; + } + + if (event.type === "timeout") { + await pool.query( + ` + UPDATE nonce_queue_transactions + SET + status = 'failed', + lifecycle_state = 'timed_out', + finalized_at = COALESCE(finalized_at, NOW()), + updated_at = NOW(), + error_message = $4 + WHERE signer_address = $1 + AND chain_id = $2 + AND nonce = $3 + AND status = 'pending' + `, + [signerAddress, event.chainId, event.nonce, event.errorMessage] + ); + return; + } + + if (event.type === "terminal_send_error") { + if (event.txHash) { + await pool.query( + ` + UPDATE nonce_queue_transactions + SET + status = 'failed', + lifecycle_state = 'send_error', + finalized_at = COALESCE(finalized_at, NOW()), + updated_at = NOW(), + error_message = $2 + WHERE tx_hash = $1 + AND status = 'pending' + `, + [event.txHash, event.errorMessage] + ); + return; + } + + await pool.query( + ` + UPDATE nonce_queue_transactions + SET + status = 'failed', + lifecycle_state = 'send_error', + finalized_at = COALESCE(finalized_at, NOW()), + updated_at = NOW(), + error_message = $4 + WHERE signer_address = $1 + AND chain_id = $2 + AND nonce = $3 + AND status = 'pending' + `, + [signerAddress, event.chainId, event.nonce, event.errorMessage] + ); + return; + } + + const client = await pool.connect(); + const isSuccess = event.type === "mined_success"; + const minedStatus: NonceQueueTxStatus = isSuccess ? "completed" : "failed"; + const minedLifecycleState: NonceQueueTxLifecycleState = isSuccess + ? "confirmed" + : "reverted"; + + try { + await client.query("BEGIN"); + + await client.query( + ` + UPDATE nonce_queue_transactions + SET + status = $2, + lifecycle_state = $3, + block_number = $4, + finalized_at = COALESCE(finalized_at, NOW()), + updated_at = NOW(), + error_message = $5 + WHERE tx_hash = $1 + `, + [ + event.txHash, + minedStatus, + minedLifecycleState, + event.blockNumber, + isSuccess + ? null + : event.errorMessage ?? "Nonce-queued transaction reverted", + ] + ); + + await client.query( + ` + UPDATE nonce_queue_transactions + SET + status = 'failed', + lifecycle_state = 'replaced', + finalized_at = COALESCE(finalized_at, NOW()), + updated_at = NOW(), + error_message = $5 + WHERE signer_address = $1 + AND chain_id = $2 + AND nonce = $3 + AND tx_hash <> $4 + AND status = 'pending' + `, + [ + signerAddress, + event.chainId, + event.nonce, + event.txHash, + `Replaced by mined transaction ${event.txHash}`, + ] + ); + + await client.query("COMMIT"); + } catch (err) { + await client.query("ROLLBACK").catch(() => {}); + throw err; + } finally { + client.release(); + } +} + +export async function listNonceQueueTransactions({ + pool, + params, +}: { + pool: Pool; + params: ListNonceQueueTransactionsParams; +}): Promise { + await ensureNonceQueueTransactionsTable(pool); + + const clauses: string[] = []; + const values: Array = []; + + if (params.address) { + values.push(params.address.toLowerCase()); + clauses.push(`signer_address = $${values.length}`); + } + + if (params.chainId !== undefined) { + values.push(params.chainId); + clauses.push(`chain_id = $${values.length}`); + } + + values.push(params.limit); + const limitParam = `$${values.length}`; + const where = clauses.length > 0 ? `WHERE ${clauses.join(" AND ")}` : ""; + + const { rows } = await pool.query( + ` + SELECT + tx_hash, + signer_address, + chain_id, + nonce, + stage, + status, + lifecycle_state, + explorer_url, + send_count, + block_number, + error_message, + submitted_at, + finalized_at, + updated_at + FROM nonce_queue_transactions + ${where} + ORDER BY submitted_at DESC + LIMIT ${limitParam} + `, + values + ); + + return rows.map((row: any) => ({ + txHash: row.tx_hash, + signerAddress: row.signer_address, + chainId: Number(row.chain_id), + nonce: Number(row.nonce), + stage: row.stage, + status: row.status, + lifecycleState: row.lifecycle_state, + explorerUrl: row.explorer_url, + sendCount: Number(row.send_count), + blockNumber: + row.block_number === null || row.block_number === undefined + ? null + : Number(row.block_number), + errorMessage: row.error_message, + submittedAt: new Date(row.submitted_at).toISOString(), + finalizedAt: row.finalized_at + ? new Date(row.finalized_at).toISOString() + : null, + updatedAt: new Date(row.updated_at).toISOString(), + })); +} + +/** Reset module state. Only for testing. */ +export function _resetNonceQueueTxHistoryForTesting() { + tableEnsurePromise = null; +} + +export function _getExplorerTxBaseByChainForTesting() { + return EXPLORER_TX_BASE_BY_CHAIN; +} diff --git a/contracts/tasks/lib/nonceQueueTxLifecycle.ts b/contracts/tasks/lib/nonceQueueTxLifecycle.ts index 1d2f4789cb..80e3bb615e 100644 --- a/contracts/tasks/lib/nonceQueueTxLifecycle.ts +++ b/contracts/tasks/lib/nonceQueueTxLifecycle.ts @@ -1,6 +1,7 @@ import type { Pool, PoolClient } from "pg"; import { BigNumber, utils } from "ethers"; import type { ethers } from "ethers"; +import type { NonceQueueTxLifecycleEvent } from "./nonceQueueTxHistory"; const log = require("../../utils/logger")("utils:nonceQueueTxLifecycle"); @@ -17,6 +18,9 @@ export interface SubmitNonceQueuedTxParams { nonce: number; signerAddress: string; chainId: number; + onLifecycleEvent?: ( + event: NonceQueueTxLifecycleEvent + ) => void | Promise; } interface TxLifecycleConfig { @@ -408,194 +412,307 @@ export async function submitNonceQueuedTransaction({ nonce, signerAddress, chainId, + onLifecycleEvent, }: SubmitNonceQueuedTxParams): Promise { + const emitLifecycleEvent = async (event: NonceQueueTxLifecycleEvent) => { + if (!onLifecycleEvent) return; + try { + await onLifecycleEvent(event); + } catch (err: any) { + log( + `Failed to record nonce queue transaction lifecycle event: type=${ + event.type + } address=${event.signerAddress} chain=${event.chainId} nonce=${ + event.nonce + } error="${err?.message ?? String(err)}"` + ); + } + }; + const config = getTxLifecycleConfig(); const maxGasPriceEnvKey = getPerChainMaxGasPriceEnvKey(chainId); // The lifecycle intentionally ignores the legacy global cap and only reads // per-chain caps, so operators can tune limits independently per network. const maxGasPriceWei = resolveMaxGasPriceWeiForChain(chainId); - let initialTx: Parameters[0] = { - ...transaction, - nonce, - }; + let activeResponse: ethers.providers.TransactionResponse | undefined; + let terminalStateAlreadyRecorded = false; - // Apply optional global gas-limit headroom over provider estimate to reduce - // under-estimation failures during volatile state changes. - initialTx = await applyGasLimitBuffer({ - transaction: initialTx, - provider, - gasLimitBufferPct: config.gasLimitBufferPct, - signerAddress, - chainId, - nonce, - stage: "initial submission", - }); + try { + let initialTx: Parameters[0] = { + ...transaction, + nonce, + }; + + // Apply optional global gas-limit headroom over provider estimate to reduce + // under-estimation failures during volatile state changes. + initialTx = await applyGasLimitBuffer({ + transaction: initialTx, + provider, + gasLimitBufferPct: config.gasLimitBufferPct, + signerAddress, + chainId, + nonce, + stage: "initial submission", + }); - // Enforce fee cap before any on-chain submission. - await enforceSubmissionGasPriceCap({ - transaction: initialTx, - provider, - maxGasPriceWei, - maxGasPriceEnvKey, - stage: "initial submission", - signerAddress, - chainId, - nonce, - }); + // Enforce fee cap before any on-chain submission. + await enforceSubmissionGasPriceCap({ + transaction: initialTx, + provider, + maxGasPriceWei, + maxGasPriceEnvKey, + stage: "initial submission", + signerAddress, + chainId, + nonce, + }); - const firstResponse = await sendTransaction(initialTx); - const responsesByHash = new Map( - [[firstResponse.hash, firstResponse]] - ); - const knownHashes: string[] = [firstResponse.hash]; - let activeTx = initialTx; - let activeResponse = firstResponse; - let activeRawTx = extractRawTransaction(firstResponse); - let replacementCount = 0; - let rebroadcastRawUnavailableLogged = false; + const firstResponse = await sendTransaction(initialTx); + const responsesByHash = new Map< + string, + ethers.providers.TransactionResponse + >([[firstResponse.hash, firstResponse]]); + const knownHashes: string[] = [firstResponse.hash]; + let activeTx = initialTx; + activeResponse = firstResponse; + let activeRawTx = extractRawTransaction(firstResponse); + let replacementCount = 0; + let rebroadcastRawUnavailableLogged = false; + + await emitLifecycleEvent({ + type: "send_accepted", + stage: "initial", + txHash: firstResponse.hash, + signerAddress, + chainId, + nonce, + }); - log( - `Submitted tx: address=${signerAddress} chain=${chainId} nonce=${nonce} hash=${firstResponse.hash}` - ); + log( + `Submitted tx: address=${signerAddress} chain=${chainId} nonce=${nonce} hash=${firstResponse.hash}` + ); - if (!provider || typeof provider.getTransactionReceipt !== "function") { - await firstResponse.wait(); - return firstResponse; - } - const txProvider = provider; - - const startedAt = Date.now(); - let nextRebroadcastAt = - config.rebroadcastIntervalS > 0 - ? startedAt + secondsToMs(config.rebroadcastIntervalS) - : Number.POSITIVE_INFINITY; - let nextReplaceAt = - config.replaceIntervalS > 0 - ? startedAt + secondsToMs(config.replaceIntervalS) - : Number.POSITIVE_INFINITY; - - // Single in-flight lifecycle loop: - // 1) check mined receipts across known hashes - // 2) optional rebroadcast raw tx - // 3) optional same-nonce replacement with bumped fee - while (true) { - const receipt = await findMinedReceipt(txProvider, knownHashes); - if (receipt) { - if (receipt.status === 0) { + if (!provider || typeof provider.getTransactionReceipt !== "function") { + const receipt = await firstResponse.wait(); + if (receipt?.status === 0) { + terminalStateAlreadyRecorded = true; + await emitLifecycleEvent({ + type: "mined_revert", + txHash: firstResponse.hash, + signerAddress, + chainId, + nonce, + blockNumber: receipt?.blockNumber ?? null, + errorMessage: `Nonce-queued transaction reverted on-chain: hash=${firstResponse.hash} nonce=${nonce}`, + }); throw new Error( - `Nonce-queued transaction reverted on-chain: hash=${receipt.transactionHash} nonce=${nonce}` + `Nonce-queued transaction reverted on-chain: hash=${firstResponse.hash} nonce=${nonce}` ); } - return responsesByHash.get(receipt.transactionHash) ?? activeResponse; - } - const now = Date.now(); - if ( - config.txConfirmTimeoutS > 0 && - now - startedAt >= secondsToMs(config.txConfirmTimeoutS) - ) { - throw new Error( - `Timed out waiting for nonce-queued tx confirmation after ${config.txConfirmTimeoutS}s: address=${signerAddress} chain=${chainId} nonce=${nonce} lastHash=${activeResponse.hash}` - ); + await emitLifecycleEvent({ + type: "mined_success", + txHash: firstResponse.hash, + signerAddress, + chainId, + nonce, + blockNumber: receipt?.blockNumber ?? null, + }); + return firstResponse; } - if (now >= nextRebroadcastAt) { - nextRebroadcastAt = now + secondsToMs(config.rebroadcastIntervalS); + const txProvider = provider; - if (activeRawTx && typeof txProvider.sendTransaction === "function") { - try { - // Re-check cap at rebroadcast time; tx may have been replaced with - // a higher fee since the initial submission. - enforceRebroadcastGasPriceCap({ - rawTransaction: activeRawTx, - maxGasPriceWei, - maxGasPriceEnvKey, + const startedAt = Date.now(); + let nextRebroadcastAt = + config.rebroadcastIntervalS > 0 + ? startedAt + secondsToMs(config.rebroadcastIntervalS) + : Number.POSITIVE_INFINITY; + let nextReplaceAt = + config.replaceIntervalS > 0 + ? startedAt + secondsToMs(config.replaceIntervalS) + : Number.POSITIVE_INFINITY; + + // Single in-flight lifecycle loop: + // 1) check mined receipts across known hashes + // 2) optional rebroadcast raw tx + // 3) optional same-nonce replacement with bumped fee + while (true) { + const receipt = await findMinedReceipt(txProvider, knownHashes); + if (receipt) { + if (receipt.status === 0) { + terminalStateAlreadyRecorded = true; + await emitLifecycleEvent({ + type: "mined_revert", + txHash: receipt.transactionHash, signerAddress, chainId, nonce, + blockNumber: receipt.blockNumber ?? null, + errorMessage: `Nonce-queued transaction reverted on-chain: hash=${receipt.transactionHash} nonce=${nonce}`, }); - const rebroadcastResponse = await txProvider.sendTransaction( - activeRawTx + throw new Error( + `Nonce-queued transaction reverted on-chain: hash=${receipt.transactionHash} nonce=${nonce}` ); - if (!responsesByHash.has(rebroadcastResponse.hash)) { - responsesByHash.set(rebroadcastResponse.hash, rebroadcastResponse); - knownHashes.push(rebroadcastResponse.hash); + } + + await emitLifecycleEvent({ + type: "mined_success", + txHash: receipt.transactionHash, + signerAddress, + chainId, + nonce, + blockNumber: receipt.blockNumber ?? null, + }); + return responsesByHash.get(receipt.transactionHash) ?? activeResponse; + } + + const now = Date.now(); + if ( + config.txConfirmTimeoutS > 0 && + now - startedAt >= secondsToMs(config.txConfirmTimeoutS) + ) { + const timeoutMessage = `Timed out waiting for nonce-queued tx confirmation after ${config.txConfirmTimeoutS}s: address=${signerAddress} chain=${chainId} nonce=${nonce} lastHash=${activeResponse.hash}`; + terminalStateAlreadyRecorded = true; + await emitLifecycleEvent({ + type: "timeout", + signerAddress, + chainId, + nonce, + errorMessage: timeoutMessage, + }); + throw new Error(timeoutMessage); + } + + if (now >= nextRebroadcastAt) { + nextRebroadcastAt = now + secondsToMs(config.rebroadcastIntervalS); + + if (activeRawTx && typeof txProvider.sendTransaction === "function") { + try { + // Re-check cap at rebroadcast time; tx may have been replaced with + // a higher fee since the initial submission. + enforceRebroadcastGasPriceCap({ + rawTransaction: activeRawTx, + maxGasPriceWei, + maxGasPriceEnvKey, + signerAddress, + chainId, + nonce, + }); + const rebroadcastResponse = await txProvider.sendTransaction( + activeRawTx + ); + if (!responsesByHash.has(rebroadcastResponse.hash)) { + responsesByHash.set( + rebroadcastResponse.hash, + rebroadcastResponse + ); + knownHashes.push(rebroadcastResponse.hash); + } + await emitLifecycleEvent({ + type: "send_accepted", + stage: "rebroadcast", + txHash: rebroadcastResponse.hash, + signerAddress, + chainId, + nonce, + }); + log( + `Rebroadcasted raw tx: address=${signerAddress} chain=${chainId} nonce=${nonce} hash=${rebroadcastResponse.hash}` + ); + } catch (err: any) { + if (!isDuplicateBroadcastError(err)) throw err; + log( + `Rebroadcast ignored duplicate: address=${signerAddress} chain=${chainId} nonce=${nonce} hash=${activeResponse.hash}` + ); + } + } else if (!rebroadcastRawUnavailableLogged) { + rebroadcastRawUnavailableLogged = true; + log( + `Rebroadcast skipped: raw transaction payload unavailable for hash=${activeResponse.hash} address=${signerAddress} chain=${chainId}` + ); + } + } + + if ( + now >= nextReplaceAt && + replacementCount < config.maxReplacements && + config.replaceIntervalS > 0 + ) { + nextReplaceAt = now + secondsToMs(config.replaceIntervalS); + activeTx = await buildReplacementTransaction( + activeTx, + txProvider, + config.feeBumpPct + ); + activeTx = await applyGasLimitBuffer({ + transaction: activeTx, + provider: txProvider, + gasLimitBufferPct: config.gasLimitBufferPct, + signerAddress, + chainId, + nonce, + stage: "replacement", + }); + // Replacement txs are still fresh submissions. Enforce the same chain cap + // after fee bumping so retries never exceed operator limits. + await enforceSubmissionGasPriceCap({ + transaction: activeTx, + provider: txProvider, + maxGasPriceWei, + maxGasPriceEnvKey, + stage: "replacement", + signerAddress, + chainId, + nonce, + }); + + try { + const replacementResponse = await sendTransaction(activeTx); + replacementCount++; + activeResponse = replacementResponse; + activeRawTx = extractRawTransaction(replacementResponse); + if (!responsesByHash.has(replacementResponse.hash)) { + responsesByHash.set(replacementResponse.hash, replacementResponse); + knownHashes.push(replacementResponse.hash); } + await emitLifecycleEvent({ + type: "send_accepted", + stage: "replacement", + txHash: replacementResponse.hash, + signerAddress, + chainId, + nonce, + }); log( - `Rebroadcasted raw tx: address=${signerAddress} chain=${chainId} nonce=${nonce} hash=${rebroadcastResponse.hash}` + `Submitted replacement tx: address=${signerAddress} chain=${chainId} nonce=${nonce} hash=${replacementResponse.hash} replacements=${replacementCount}/${config.maxReplacements}` ); } catch (err: any) { - if (!isDuplicateBroadcastError(err)) throw err; + if (!isNonceMismatchError(err) && !isDuplicateBroadcastError(err)) { + throw err; + } log( - `Rebroadcast ignored duplicate: address=${signerAddress} chain=${chainId} nonce=${nonce} hash=${activeResponse.hash}` + `Replacement attempt not accepted yet: address=${signerAddress} chain=${chainId} nonce=${nonce} reason="${ + err?.message ?? String(err) + }"` ); } - } else if (!rebroadcastRawUnavailableLogged) { - rebroadcastRawUnavailableLogged = true; - log( - `Rebroadcast skipped: raw transaction payload unavailable for hash=${activeResponse.hash} address=${signerAddress} chain=${chainId}` - ); } - } - if ( - now >= nextReplaceAt && - replacementCount < config.maxReplacements && - config.replaceIntervalS > 0 - ) { - nextReplaceAt = now + secondsToMs(config.replaceIntervalS); - activeTx = await buildReplacementTransaction( - activeTx, - txProvider, - config.feeBumpPct - ); - activeTx = await applyGasLimitBuffer({ - transaction: activeTx, - provider: txProvider, - gasLimitBufferPct: config.gasLimitBufferPct, - signerAddress, - chainId, - nonce, - stage: "replacement", - }); - // Replacement txs are still fresh submissions. Enforce the same chain cap - // after fee bumping so retries never exceed operator limits. - await enforceSubmissionGasPriceCap({ - transaction: activeTx, - provider: txProvider, - maxGasPriceWei, - maxGasPriceEnvKey, - stage: "replacement", + await sleep(secondsToMs(config.receiptPollS)); + } + } catch (err: any) { + if (!terminalStateAlreadyRecorded && activeResponse?.hash) { + await emitLifecycleEvent({ + type: "terminal_send_error", signerAddress, chainId, nonce, + txHash: activeResponse.hash, + errorMessage: err?.message ?? String(err), }); - - try { - const replacementResponse = await sendTransaction(activeTx); - replacementCount++; - activeResponse = replacementResponse; - activeRawTx = extractRawTransaction(replacementResponse); - if (!responsesByHash.has(replacementResponse.hash)) { - responsesByHash.set(replacementResponse.hash, replacementResponse); - knownHashes.push(replacementResponse.hash); - } - log( - `Submitted replacement tx: address=${signerAddress} chain=${chainId} nonce=${nonce} hash=${replacementResponse.hash} replacements=${replacementCount}/${config.maxReplacements}` - ); - } catch (err: any) { - if (!isNonceMismatchError(err) && !isDuplicateBroadcastError(err)) { - throw err; - } - log( - `Replacement attempt not accepted yet: address=${signerAddress} chain=${chainId} nonce=${nonce} reason="${ - err?.message ?? String(err) - }"` - ); - } } - - await sleep(secondsToMs(config.receiptPollS)); + throw err; } } From f7a6837009c628420de39c48ffbae3c7910dc16b Mon Sep 17 00:00:00 2001 From: Domen Grabec Date: Thu, 16 Apr 2026 19:19:38 +0200 Subject: [PATCH 60/62] persist action name and run-id across the different log messages. Allow a flag to differentiate between Winston contextualized logs and old way of logs --- contracts/cron/README.md | 24 +++-- contracts/tasks/crossChain.js | 25 ++--- contracts/tasks/lib/action.test.ts | 2 + contracts/tasks/lib/action.ts | 131 +++++++++++++++---------- contracts/tasks/lib/logger.ts | 47 +++++++++ contracts/utils/logger.js | 140 ++++++++++++++++++++++++++- contracts/utils/managePassThrough.js | 3 +- contracts/utils/morpho.js | 6 +- contracts/utils/sonic.js | 18 ++-- 9 files changed, 309 insertions(+), 87 deletions(-) diff --git a/contracts/cron/README.md b/contracts/cron/README.md index 785a68d55b..0ebbb18317 100644 --- a/contracts/cron/README.md +++ b/contracts/cron/README.md @@ -60,16 +60,20 @@ Set `enabled: false` to define a job that can only be triggered via the API. ## Environment variables -| Variable | Description | -| ------------------------- | ------------------------------------- | -| `ACTION_API_BEARER_TOKEN` | Required. Auth token for the HTTP API | -| `PROVIDER_URL` | Mainnet RPC endpoint | -| `HARDHAT_NETWORK` | Default network for tasks | -| `LOKI_URL` | Grafana Loki push endpoint (optional) | -| `LOKI_USER` | Loki basic auth user (optional) | -| `LOKI_API_KEY` | Loki basic auth key (optional) | -| `AWS_ACCESS_KEY_ID` | For KMS signer (optional) | -| `AWS_SECRET_ACCESS_KEY` | For KMS signer (optional) | +| Variable | Description | +| -------------------------- | -------------------------------------------------------------------- | +| `ACTION_API_BEARER_TOKEN` | Required. Auth token for the HTTP API | +| `PROVIDER_URL` | Mainnet RPC endpoint | +| `HARDHAT_NETWORK` | Default network for tasks | +| `WINSTON_LOG_MODE_ENABLED` | Enable structured winston logging with run/action correlation fields | +| `LOKI_URL` | Grafana Loki push endpoint (optional) | +| `LOKI_USER` | Loki basic auth user (optional) | +| `LOKI_API_KEY` | Loki basic auth key (optional) | +| `AWS_ACCESS_KEY_ID` | For KMS signer (optional) | +| `AWS_SECRET_ACCESS_KEY` | For KMS signer (optional) | + +When `WINSTON_LOG_MODE_ENABLED` is unset/false, task modules continue to use the +legacy `debug` logger flow (`DEBUG=origin:*` wildcard filtering). ## Observability diff --git a/contracts/tasks/crossChain.js b/contracts/tasks/crossChain.js index 6a0ea4092b..22ab211dad 100644 --- a/contracts/tasks/crossChain.js +++ b/contracts/tasks/crossChain.js @@ -2,6 +2,7 @@ const ethers = require("ethers"); const { logTxDetails } = require("../utils/txLogger"); const { api: cctpApi } = require("../utils/cctp"); +const log = require("../utils/logger")("task:crossChain"); const cctpOperationsConfig = async ({ destinationChainSigner, @@ -35,7 +36,7 @@ const cctpOperationsConfig = async ({ }; const fetchAttestation = async ({ transactionHash, cctpChainId }) => { - console.log( + log( `Fetching attestation for transaction hash: ${transactionHash} on cctp chain id: ${cctpChainId}` ); const response = await fetch( @@ -50,7 +51,7 @@ const fetchAttestation = async ({ transactionHash, cctpChainId }) => { } const resultJson = await response.json(); - console.log("resultJson", resultJson); + log("resultJson", resultJson); if (resultJson.messages.length !== 1) { throw new Error( @@ -96,7 +97,7 @@ const fetchTxHashesFromCctpTransactions = async ({ const messageTransmittedTopic = cctpIntegrationContractSource.interface.getEventTopic("MessageTransmitted"); - console.log( + log( `Fetching event logs from block ${resolvedFromBlock} to block ${resolvedToBlock}` ); const [eventLogsTokenBridged, eventLogsMessageTransmitted] = @@ -122,7 +123,7 @@ const fetchTxHashesFromCctpTransactions = async ({ ].map((log) => log.transactionHash); const allTxHashes = Array.from(new Set([...possiblyDuplicatedTxHashes])); - console.log(`Found ${allTxHashes.length} transactions that emitted messages`); + log(`Found ${allTxHashes.length} transactions that emitted messages`); return { allTxHashes }; }; @@ -146,7 +147,7 @@ const processCctpBridgeTransactions = async ({ cctpIntegrationContractAddress, cctpIntegrationContractAddressDestination, }); - console.log( + log( `Fetching cctp messages posted on ${config.networkName} network.${ block ? ` Only for block: ${block}` : " Looking at most recent blocks" }` @@ -163,7 +164,7 @@ const processCctpBridgeTransactions = async ({ const storedValue = await store.get(storeKey); if (storedValue === "processed") { - console.log( + log( `Transaction with hash: ${txHash} has already been processed. Skipping...` ); continue; @@ -174,17 +175,17 @@ const processCctpBridgeTransactions = async ({ cctpChainId: cctpSourceDomainId, }); if (status !== "ok") { - console.log( + log( `Attestation from tx hash: ${txHash} on cctp chain id: ${config.cctpSourceDomainId} is not attested yet, status: ${status}. Skipping...` ); } - console.log( + log( `Attempting to relay attestation with tx hash: ${txHash} and message: ${message} to cctp chain id: ${cctpDestinationDomainId}` ); if (dryrun) { - console.log( + log( `Dryrun: Would have relayed attestation with tx hash: ${txHash} to cctp chain id: ${cctpDestinationDomainId}` ); continue; @@ -195,17 +196,17 @@ const processCctpBridgeTransactions = async ({ attestation, { gasLimit: 4000000 } ); - console.log( + log( `Relay transaction with hash ${relayTx.hash} sent to cctp chain id: ${cctpDestinationDomainId}` ); const receipt = await logTxDetails(relayTx, "CCTP relay"); // Final verification if (receipt.status === 1) { - console.log("SUCCESS: Transaction executed successfully!"); + log("SUCCESS: Transaction executed successfully!"); await store.put(storeKey, "processed"); } else { - console.log("FAILURE: Transaction reverted!"); + log("FAILURE: Transaction reverted!"); throw new Error(`Transaction reverted - status: ${receipt.status}`); } } diff --git a/contracts/tasks/lib/action.test.ts b/contracts/tasks/lib/action.test.ts index 29e7801559..30101324de 100644 --- a/contracts/tasks/lib/action.test.ts +++ b/contracts/tasks/lib/action.test.ts @@ -13,6 +13,8 @@ import { createActionHandler } from "./action"; import type { ActionContext } from "./action"; import logger from "./logger"; +process.env.WINSTON_LOG_MODE_ENABLED = "true"; + const SNAPSHOT_PATH = path.join(__dirname, "action.snapshot.jsonl"); const updateSnapshot = process.argv.includes("--update"); diff --git a/contracts/tasks/lib/action.ts b/contracts/tasks/lib/action.ts index a8a2b8064a..0eb9333024 100644 --- a/contracts/tasks/lib/action.ts +++ b/contracts/tasks/lib/action.ts @@ -5,7 +5,11 @@ import type { ConfigurableTaskDefinition } from "hardhat/types"; import type { Logger } from "winston"; import { getSigner as defaultGetSigner } from "../../utils/signers"; -import logger, { flushLogger } from "./logger"; +import logger, { + flushLogger, + isWinstonLogModeEnabled, + withLogContext, +} from "./logger"; import { wrapWithNonceQueue } from "./nonceQueue"; export interface ActionContext { @@ -40,67 +44,96 @@ const CHAIN_NAMES: Record = { export function createActionHandler( config: ActionConfig, - deps: ActionDeps = {}, + deps: ActionDeps = {} ) { const { name, chains, run } = config; const getSigner = deps.getSigner ?? defaultGetSigner; + // eslint-disable-next-line @typescript-eslint/no-var-requires + const legacyLoggerFactory = require("../../utils/logger"); return async (taskArgs: Record) => { + const winstonMode = isWinstonLogModeEnabled(); const runId = randomUUID(); - const log = logger.child({ action: name, run_id: runId }); + const log: Logger = winstonMode + ? logger.child({ action: name, run_id: runId }) + : legacyLoggerFactory(`action:${name}`); const startTime = Date.now(); let chainId: number | undefined; let networkName: string | undefined; - try { - const rawSigner = await getSigner(); - const network = await rawSigner.provider!.getNetwork(); - chainId = Number(network.chainId); - const signer = wrapWithNonceQueue(rawSigner, chainId); - networkName = CHAIN_NAMES[chainId] ?? `unknown-${chainId}`; - - log.info(`Running on ${networkName} (${chainId})`, { - event: "action.start", - source: "task", - chain_id: chainId, - network: networkName, - }); - - if (chains && !chains.includes(chainId)) { - const valid = chains - .map((id) => `${CHAIN_NAMES[id] ?? id} (${id})`) - .join(", "); - throw new Error( - `${name} only supports ${valid}, not ${networkName} (${chainId})`, - ); + const execute = async () => { + try { + const rawSigner = await getSigner(); + const network = await rawSigner.provider!.getNetwork(); + chainId = Number(network.chainId); + const signer = wrapWithNonceQueue(rawSigner, chainId); + networkName = CHAIN_NAMES[chainId] ?? `unknown-${chainId}`; + + if (winstonMode) { + log.info(`Running on ${networkName} (${chainId})`, { + event: "action.start", + source: "task", + chain_id: chainId, + network: networkName, + }); + } else { + log.info(`Running on ${networkName} (${chainId})`); + } + + if (chains && !chains.includes(chainId)) { + const valid = chains + .map((id) => `${CHAIN_NAMES[id] ?? id} (${id})`) + .join(", "); + throw new Error( + `${name} only supports ${valid}, not ${networkName} (${chainId})` + ); + } + + await run({ signer, chainId, networkName, log, args: taskArgs }); + if (winstonMode) { + log.info( + `Completed in ${((Date.now() - startTime) / 1000).toFixed(1)}s`, + { + event: "action.success", + source: "task", + chain_id: chainId, + network: networkName, + duration_ms: Date.now() - startTime, + } + ); + } else { + log.info( + `Completed in ${((Date.now() - startTime) / 1000).toFixed(1)}s` + ); + } + } catch (err: any) { + if (winstonMode) { + log.error(`${err?.name ?? "Error"}: ${err?.message ?? String(err)}`, { + event: "action.error", + source: "task", + chain_id: chainId, + network: networkName, + duration_ms: Date.now() - startTime, + error_name: err?.name ?? "Error", + error_message: err?.message ?? String(err), + error_stack: err?.stack, + }); + } else { + log.error(`${err?.name ?? "Error"}: ${err?.message ?? String(err)}`); + } + throw err; + } finally { + if (winstonMode) { + await flushLogger(); + } } + }; - await run({ signer, chainId, networkName, log, args: taskArgs }); - log.info( - `Completed in ${((Date.now() - startTime) / 1000).toFixed(1)}s`, - { - event: "action.success", - source: "task", - chain_id: chainId, - network: networkName, - duration_ms: Date.now() - startTime, - }, - ); - } catch (err: any) { - log.error(`${err?.name ?? "Error"}: ${err?.message ?? String(err)}`, { - event: "action.error", - source: "task", - chain_id: chainId, - network: networkName, - duration_ms: Date.now() - startTime, - error_name: err?.name ?? "Error", - error_message: err?.message ?? String(err), - error_stack: err?.stack, - }); - throw err; - } finally { - await flushLogger(); + if (!winstonMode) { + return execute(); } + + return withLogContext({ action: name, run_id: runId }, execute); }; } diff --git a/contracts/tasks/lib/logger.ts b/contracts/tasks/lib/logger.ts index d116f34d35..dc8c6fb476 100644 --- a/contracts/tasks/lib/logger.ts +++ b/contracts/tasks/lib/logger.ts @@ -1,9 +1,56 @@ +import { AsyncLocalStorage } from "node:async_hooks"; +import util from "node:util"; import { createLogger, format, transports } from "winston"; import LokiTransport from "winston-loki"; const lokiUrl = process.env.LOKI_URL; const lokiUser = process.env.LOKI_USER; const lokiApiKey = process.env.LOKI_API_KEY; +const WINSTON_LOG_MODE_ENABLED_ENV = "WINSTON_LOG_MODE_ENABLED"; + +const LOG_MODE_ENABLED_VALUES = new Set(["1", "true", "yes", "on"]); + +export interface LogContext { + action?: string; + run_id?: string; + [key: string]: unknown; +} + +const logContextStorage = new AsyncLocalStorage(); + +export function isWinstonLogModeEnabled(): boolean { + const rawValue = process.env[WINSTON_LOG_MODE_ENABLED_ENV]; + if (!rawValue) return false; + return LOG_MODE_ENABLED_VALUES.has(rawValue.toLowerCase()); +} + +export function withLogContext( + context: LogContext, + fn: () => Promise | T +): Promise | T { + return logContextStorage.run(context, fn); +} + +export function getLogContext(): LogContext | undefined { + return logContextStorage.getStore(); +} + +function toMessageString(message: unknown): string { + if (typeof message === "string") return message; + return util.format("%o", message); +} + +export function logWithContext( + level: string, + message: unknown, + meta: Record = {} +): void { + const context = getLogContext() ?? {}; + logger.log(level, toMessageString(message), { + ...context, + ...meta, + }); +} const consoleFormat = format.combine( format.timestamp(), diff --git a/contracts/utils/logger.js b/contracts/utils/logger.js index b4362787ae..37350dce90 100644 --- a/contracts/utils/logger.js +++ b/contracts/utils/logger.js @@ -1,10 +1,145 @@ const debug = require("debug"); +const util = require("node:util"); // https://www.npmjs.com/package/debug#output-streams // set all output to go via console.log instead of stderr // This is needed for Defender Actions to capture the logs debug.log = console.log.bind(console); +const LOG_MODE_ENABLED_VALUES = new Set(["1", "true", "yes", "on"]); + +const isWinstonLogModeEnabled = () => { + const rawValue = process.env.WINSTON_LOG_MODE_ENABLED; + if (!rawValue) return false; + return LOG_MODE_ENABLED_VALUES.has(rawValue.toLowerCase()); +}; + +const isPlainObject = (value) => + value !== null && + typeof value === "object" && + Object.getPrototypeOf(value) === Object.prototype; + +const formatArgs = (args) => { + if (args.length === 0) return ""; + if (typeof args[0] === "string") { + return util.format(...args); + } + return args + .map((arg) => + typeof arg === "string" ? arg : util.inspect(arg, { depth: null }) + ) + .join(" "); +}; + +const parseLogArguments = (args) => { + if ( + args.length === 2 && + typeof args[0] === "string" && + isPlainObject(args[1]) + ) { + return { + message: args[0], + meta: args[1], + }; + } + + return { + message: formatArgs(args), + meta: {}, + }; +}; + +const createDebugLogger = (module) => { + const debugLogger = debug(`origin:${module}`); + + const write = (...args) => { + const { message, meta } = parseLogArguments(args); + const extra = + Object.keys(meta).length > 0 ? ` ${JSON.stringify(meta)}` : ""; + debugLogger(`${message}${extra}`); + }; + + const logger = (...args) => write(...args); + logger.debug = (...args) => write(...args); + logger.info = (...args) => write(...args); + logger.warn = (...args) => write(...args); + logger.error = (...args) => write(...args); + logger.child = () => logger; + return logger; +}; + +const createWinstonLogger = (module) => { + let bridge; + try { + // ts-node is registered by hardhat and cron entrypoints. + bridge = require("../tasks/lib/logger"); + } catch (err) { + const fallback = createDebugLogger(module); + fallback( + `Failed to load winston bridge; falling back to debug logger: ${ + err?.message ?? String(err) + }` + ); + return fallback; + } + + const write = (level, ...args) => { + const { message, meta } = parseLogArguments(args); + bridge.logWithContext(level, message, { module, ...meta }); + }; + + const logger = (...args) => write("info", ...args); + logger.debug = (...args) => write("debug", ...args); + logger.info = (...args) => write("info", ...args); + logger.warn = (...args) => write("warn", ...args); + logger.error = (...args) => write("error", ...args); + logger.child = (meta = {}) => { + const childLogger = (...args) => { + const { message, meta: inlineMeta } = parseLogArguments(args); + bridge.logWithContext("info", message, { + module, + ...meta, + ...inlineMeta, + }); + }; + childLogger.debug = (...args) => { + const { message, meta: inlineMeta } = parseLogArguments(args); + bridge.logWithContext("debug", message, { + module, + ...meta, + ...inlineMeta, + }); + }; + childLogger.info = (...args) => { + const { message, meta: inlineMeta } = parseLogArguments(args); + bridge.logWithContext("info", message, { + module, + ...meta, + ...inlineMeta, + }); + }; + childLogger.warn = (...args) => { + const { message, meta: inlineMeta } = parseLogArguments(args); + bridge.logWithContext("warn", message, { + module, + ...meta, + ...inlineMeta, + }); + }; + childLogger.error = (...args) => { + const { message, meta: inlineMeta } = parseLogArguments(args); + bridge.logWithContext("error", message, { + module, + ...meta, + ...inlineMeta, + }); + }; + childLogger.child = () => childLogger; + return childLogger; + }; + return logger; +}; + /** * Creates a logger for a module. * @example @@ -12,6 +147,9 @@ debug.log = console.log.bind(console); * log('something interesting happened'); * @param {string} module name of the module to log for. eg "test:fork:vault", "task:token" or "utils:deploy" */ -const logger = (module) => debug(`origin:${module}`); +const logger = (module) => + isWinstonLogModeEnabled() + ? createWinstonLogger(module) + : createDebugLogger(module); module.exports = logger; diff --git a/contracts/utils/managePassThrough.js b/contracts/utils/managePassThrough.js index 056dded5e1..9c23de3817 100644 --- a/contracts/utils/managePassThrough.js +++ b/contracts/utils/managePassThrough.js @@ -2,6 +2,7 @@ const addresses = require("../utils/addresses"); const { ethers } = require("ethers"); const passThroughAbi = require("../abi/passThrough.json"); const { logTxDetails } = require("../utils/txLogger"); +const log = require("../utils/logger")("utils:managePassThrough"); async function transferTokens({ signer }) { const OUSD = addresses.mainnet.OUSDProxy; @@ -19,7 +20,7 @@ async function transferTokens({ signer }) { ], }; - console.log("DEBUG: Token PassThroughs mapping", tokenPassThroughs); + log("DEBUG: Token PassThroughs mapping", tokenPassThroughs); // Process all tokens and their passThrough contracts for (const [token, passThroughAddresses] of Object.entries( diff --git a/contracts/utils/morpho.js b/contracts/utils/morpho.js index 44b9a2db97..389d0755cb 100644 --- a/contracts/utils/morpho.js +++ b/contracts/utils/morpho.js @@ -90,13 +90,13 @@ async function snapMorpho({ block }) { { blockTag } ); - console.log( + log( `Strategy balance : ${formatUnits( strategyUSDCBalance, 6 )} USDC` ); - console.log( + log( `Max withdrawable from underlying: ${formatUnits(maxWithdrawal, 6)} USDC` ); @@ -108,7 +108,7 @@ async function snapMorpho({ block }) { .mul(BigNumber.from(10000)) .div(strategyUSDCBalance); - console.log( + log( `Withdraw shortfall : ${formatUnits( shortfall, 6 diff --git a/contracts/utils/sonic.js b/contracts/utils/sonic.js index b12f64f93f..39b75e6205 100644 --- a/contracts/utils/sonic.js +++ b/contracts/utils/sonic.js @@ -46,7 +46,7 @@ async function snapSonicStaking(taskArguments) { let totalStaked = ethers.BigNumber.from(0); let totalPendingRewards = ethers.BigNumber.from(0); for (const validatorId of [15, 16, 17, 18]) { - console.log(`${validatorId}:`); + log(`${validatorId}:`); const stakedAmount = await sfc.getStake( sonicStakingStrategy.address, validatorId, @@ -62,37 +62,33 @@ async function snapSonicStaking(taskArguments) { ); totalPendingRewards = totalPendingRewards.add(pendingRewards); - console.log(` Staked amount : ${formatUnits(stakedAmount, 18)}`); - console.log( - ` Pending rewards : ${formatUnits(pendingRewards, 18)}` - ); + log(` Staked amount : ${formatUnits(stakedAmount, 18)}`); + log(` Pending rewards : ${formatUnits(pendingRewards, 18)}`); } const stakedPercent = totalStaked.mul(10000).div(strategyBalance); const pendingRewardsPercentage = totalPendingRewards .mul(10000) .div(strategyBalance); - console.log( + log( `\nTotal Staked : ${formatUnits( totalStaked, 18 )} ${formatUnits(stakedPercent, 2)}%` ); - console.log( + log( `Total pending withdrawals : ${formatUnits( pendingWithdrawals, 18 )} ${formatUnits(pendingWithdrawalsPercentage, 2)}%` ); - console.log( + log( `Total pending rewards : ${formatUnits( totalPendingRewards, 18 )} ${formatUnits(pendingRewardsPercentage, 2)}%` ); - console.log( - `Strategy balance : ${formatUnits(strategyBalance, 18)}` - ); + log(`Strategy balance : ${formatUnits(strategyBalance, 18)}`); } module.exports = { From 647bdd26e562a4fe5918bdcea09f42519076063f Mon Sep 17 00:00:00 2001 From: Domen Grabec Date: Thu, 16 Apr 2026 21:52:13 +0200 Subject: [PATCH 61/62] fix logging errors where action name and run id wouldn't get propagated to all logs. Also fix issue where Grafana wouldn't receive most of emitted logs --- contracts/cron/api.ts | 56 +++++++++++++++++++++++++++++++++-- contracts/tasks/lib/action.ts | 6 +++- contracts/utils/txLogger.js | 19 +++++++++--- 3 files changed, 73 insertions(+), 8 deletions(-) diff --git a/contracts/cron/api.ts b/contracts/cron/api.ts index 17bc5dbae3..9158f394e7 100644 --- a/contracts/cron/api.ts +++ b/contracts/cron/api.ts @@ -86,12 +86,25 @@ export function createApi(opts: ApiOpts): http.Server { run.status = "running"; run.startedAt = nowIso(); run.command = action.command; + const startedAtMs = Date.now(); + let terminalEventEmitted = false; - log.info(`Starting run ${run.runId} for "${action.name}"`); + log.info(`Starting run ${run.runId} for "${action.name}"`, { + event: "action.start", + source: "supervisor", + action: action.name, + run_id: run.runId, + schedule: action.schedule, + command: action.command, + }); const child = spawn("/bin/sh", ["-lc", action.command], { cwd: workdir, - env: process.env, + env: { + ...process.env, + ACTION_RUN_ID: run.runId, + ACTION_NAME: action.name, + }, stdio: "inherit", }); run.pid = child.pid ?? null; @@ -102,7 +115,22 @@ export function createApi(opts: ApiOpts): http.Server { run.exitCode = null; run.signal = null; run.error = err.message; - log.error(`Run ${run.runId} failed to spawn: ${err.message}`); + if (terminalEventEmitted) return; + terminalEventEmitted = true; + log.error(`Run ${run.runId} failed to spawn: ${err.message}`, { + event: "action.failure", + source: "supervisor", + action: action.name, + run_id: run.runId, + schedule: action.schedule, + command: action.command, + duration_ms: Date.now() - startedAtMs, + exit_code: null, + signal: null, + spawn_failed: true, + error_name: err?.name ?? "Error", + error_message: err?.message ?? String(err), + }); }); child.on("exit", (code, signal) => { @@ -110,6 +138,28 @@ export function createApi(opts: ApiOpts): http.Server { run.exitCode = code; run.signal = signal; run.status = code === 0 ? "succeeded" : "failed"; + if (terminalEventEmitted) return; + terminalEventEmitted = true; + const terminalMeta = { + event: code === 0 ? "action.success" : "action.failure", + source: "supervisor", + action: action.name, + run_id: run.runId, + schedule: action.schedule, + command: action.command, + duration_ms: Date.now() - startedAtMs, + exit_code: code, + signal, + spawn_failed: false, + }; + if (code === 0) { + log.info(`Run ${run.runId} completed successfully`, terminalMeta); + } else { + log.error( + `Run ${run.runId} failed (exit_code=${code}, signal=${signal})`, + terminalMeta + ); + } }); } diff --git a/contracts/tasks/lib/action.ts b/contracts/tasks/lib/action.ts index 0eb9333024..1eaa874fd5 100644 --- a/contracts/tasks/lib/action.ts +++ b/contracts/tasks/lib/action.ts @@ -53,7 +53,11 @@ export function createActionHandler( return async (taskArgs: Record) => { const winstonMode = isWinstonLogModeEnabled(); - const runId = randomUUID(); + const propagatedRunId = process.env.ACTION_RUN_ID?.trim(); + const runId = + propagatedRunId && propagatedRunId.length > 0 + ? propagatedRunId + : randomUUID(); const log: Logger = winstonMode ? logger.child({ action: name, run_id: runId }) : legacyLoggerFactory(`action:${name}`); diff --git a/contracts/utils/txLogger.js b/contracts/utils/txLogger.js index 4e722c23fe..9f714eceb4 100644 --- a/contracts/utils/txLogger.js +++ b/contracts/utils/txLogger.js @@ -1,3 +1,4 @@ +const { BigNumber } = require("ethers"); const { formatUnits } = require("ethers/lib/utils"); const log = require("./logger")("utils:txLogger"); @@ -9,10 +10,14 @@ const log = require("./logger")("utils:txLogger"); * @returns {ContractReceipt} transaction receipt */ async function logTxDetails(tx, method) { + const submittedGasPrice = + tx.gasPrice ?? tx.maxFeePerGas ?? tx.maxPriorityFeePerGas; + const submittedGasPriceGwei = submittedGasPrice + ? formatUnits(submittedGasPrice, "gwei") + : "n/a"; + log( - `Sent ${method} transaction with hash ${tx.hash} from ${ - tx.from - } with gas price ${tx.gasPrice?.toNumber() / 1e9} Gwei` + `Sent ${method} transaction with hash ${tx.hash} from ${tx.from} with gas price ${submittedGasPriceGwei} Gwei` ); const receipt = await tx.wait(); @@ -20,8 +25,14 @@ async function logTxDetails(tx, method) { throw new Error(`Transaction ${method} failed`); } + const effectiveGasPrice = + receipt.effectiveGasPrice ?? + tx.gasPrice ?? + tx.maxFeePerGas ?? + BigNumber.from(0); + // Calculate tx cost in Wei - const txCost = receipt.gasUsed.mul(tx.gasPrice ?? 0); + const txCost = receipt.gasUsed.mul(effectiveGasPrice); log( `Processed ${method} tx in block ${receipt.blockNumber}, using ${ receipt.gasUsed From baa8aa9e05bc68ec6cadac3019ee21e0ae92116d Mon Sep 17 00:00:00 2001 From: Domen Grabec Date: Fri, 17 Apr 2026 10:41:50 +0200 Subject: [PATCH 62/62] attempt to fix logging error --- contracts/tasks/lib/action.snapshot.jsonl | 16 ++++++++-------- contracts/tasks/lib/action.ts | 12 ++++++++++-- contracts/tasks/lib/logger.ts | 2 +- 3 files changed, 19 insertions(+), 11 deletions(-) diff --git a/contracts/tasks/lib/action.snapshot.jsonl b/contracts/tasks/lib/action.snapshot.jsonl index 7b2a47d3c9..18ab0221c1 100644 --- a/contracts/tasks/lib/action.snapshot.jsonl +++ b/contracts/tasks/lib/action.snapshot.jsonl @@ -1,8 +1,8 @@ -{"action":"test_harvest","run_id":"","event":"action.start","source":"task","chain_id":1,"network":"mainnet","level":"info","message":"Running on mainnet (1)"} -{"action":"test_harvest","run_id":"","message":"Harvesting rewards","level":"info"} -{"action":"test_harvest","run_id":"","message":"Swapped 100 CRV -> 0.5 ETH","level":"info"} -{"action":"test_harvest","run_id":"","event":"action.success","source":"task","chain_id":1,"network":"mainnet","duration_ms":"","level":"info","message":"Completed in 0.0s"} -{"action":"test_harvest","run_id":"","event":"action.start","source":"task","chain_id":1,"network":"mainnet","level":"info","message":"Running on mainnet (1)"} -{"action":"test_harvest","run_id":"","event":"action.error","source":"task","chain_id":1,"network":"mainnet","duration_ms":"","error_name":"Error","error_message":"insufficient funds for gas","error_stack":"Error: insufficient funds for gas","level":"error","message":"Error: insufficient funds for gas"} -{"action":"sonic_only_action","run_id":"","event":"action.start","source":"task","chain_id":1,"network":"mainnet","level":"info","message":"Running on mainnet (1)"} -{"action":"sonic_only_action","run_id":"","event":"action.error","source":"task","chain_id":1,"network":"mainnet","duration_ms":"","error_name":"Error","error_message":"sonic_only_action only supports sonic (146), not mainnet (1)","error_stack":"Error: sonic_only_action only supports sonic (146), not mainnet (1)","level":"error","message":"Error: sonic_only_action only supports sonic (146), not mainnet (1)"} +{"action":"test_harvest","run_id":"","source":"task","event":"action.start","chain_id":1,"network":"mainnet","level":"info","message":"Running on mainnet (1)"} +{"action":"test_harvest","run_id":"","source":"task","message":"Harvesting rewards","level":"info"} +{"action":"test_harvest","run_id":"","source":"task","message":"Swapped 100 CRV -> 0.5 ETH","level":"info"} +{"action":"test_harvest","run_id":"","source":"task","event":"action.success","chain_id":1,"network":"mainnet","duration_ms":"","level":"info","message":"Completed in 0.0s"} +{"action":"test_harvest","run_id":"","source":"task","event":"action.start","chain_id":1,"network":"mainnet","level":"info","message":"Running on mainnet (1)"} +{"action":"test_harvest","run_id":"","source":"task","event":"action.error","chain_id":1,"network":"mainnet","duration_ms":"","error_name":"Error","error_message":"insufficient funds for gas","error_stack":"Error: insufficient funds for gas","level":"error","message":"Error: insufficient funds for gas"} +{"action":"sonic_only_action","run_id":"","source":"task","event":"action.start","chain_id":1,"network":"mainnet","level":"info","message":"Running on mainnet (1)"} +{"action":"sonic_only_action","run_id":"","source":"task","event":"action.error","chain_id":1,"network":"mainnet","duration_ms":"","error_name":"Error","error_message":"sonic_only_action only supports sonic (146), not mainnet (1)","error_stack":"Error: sonic_only_action only supports sonic (146), not mainnet (1)","level":"error","message":"Error: sonic_only_action only supports sonic (146), not mainnet (1)"} diff --git a/contracts/tasks/lib/action.ts b/contracts/tasks/lib/action.ts index 1eaa874fd5..bc9436f059 100644 --- a/contracts/tasks/lib/action.ts +++ b/contracts/tasks/lib/action.ts @@ -54,12 +54,17 @@ export function createActionHandler( return async (taskArgs: Record) => { const winstonMode = isWinstonLogModeEnabled(); const propagatedRunId = process.env.ACTION_RUN_ID?.trim(); + const propagatedActionName = process.env.ACTION_NAME?.trim(); + const actionLabel = + propagatedActionName && propagatedActionName.length > 0 + ? propagatedActionName + : name; const runId = propagatedRunId && propagatedRunId.length > 0 ? propagatedRunId : randomUUID(); const log: Logger = winstonMode - ? logger.child({ action: name, run_id: runId }) + ? logger.child({ action: actionLabel, run_id: runId, source: "task" }) : legacyLoggerFactory(`action:${name}`); const startTime = Date.now(); let chainId: number | undefined; @@ -137,7 +142,10 @@ export function createActionHandler( return execute(); } - return withLogContext({ action: name, run_id: runId }, execute); + return withLogContext( + { action: actionLabel, run_id: runId, source: "task" }, + execute + ); }; } diff --git a/contracts/tasks/lib/logger.ts b/contracts/tasks/lib/logger.ts index dc8c6fb476..68c68e4847 100644 --- a/contracts/tasks/lib/logger.ts +++ b/contracts/tasks/lib/logger.ts @@ -71,7 +71,7 @@ if (lokiUrl) { lokiTransport = new LokiTransport({ host: lokiUrl, basicAuth: lokiUrl && lokiApiKey ? `${lokiUser}:${lokiApiKey}` : undefined, - labels: { app: "origin-dollar" }, + labels: { app: "origin-dollar", service_name: "origin-dollar" }, json: true, format: format.combine( // Promote select low-cardinality fields from metadata to Loki labels.