From b21c98fe5acd86ba93c08eec2361ddf513401e64 Mon Sep 17 00:00:00 2001 From: ahramy Date: Thu, 29 Aug 2024 00:04:36 -0700 Subject: [PATCH 1/9] feat(evm): use gmp executable --- .../CallContractGasEstimation.sol | 14 +- .../CallContractWithTokenExpress.sol | 31 +- .../CallContractWithToken.sol | 38 +- examples/evm/call-contract/CallContract.sol | 14 +- hardhat.config.js | 2 +- package-lock.json | 2788 ++++++++++++++++- package.json | 5 +- 7 files changed, 2704 insertions(+), 188 deletions(-) diff --git a/examples/evm/call-contract-gas-estimation/CallContractGasEstimation.sol b/examples/evm/call-contract-gas-estimation/CallContractGasEstimation.sol index 254f71e1..c8448a4c 100644 --- a/examples/evm/call-contract-gas-estimation/CallContractGasEstimation.sol +++ b/examples/evm/call-contract-gas-estimation/CallContractGasEstimation.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; -import { AxelarExecutable } from '@axelar-network/axelar-gmp-sdk-solidity/contracts/executable/AxelarExecutable.sol'; +import { AxelarGMPExecutable } from '@axelar-network/axelar-gmp-sdk-solidity/contracts/executable/AxelarGMPExecutable.sol'; import { IAxelarGateway } from '@axelar-network/axelar-gmp-sdk-solidity/contracts/interfaces/IAxelarGateway.sol'; import { IAxelarGasService } from '@axelar-network/axelar-gmp-sdk-solidity/contracts/interfaces/IAxelarGasService.sol'; import { IERC20 } from '@axelar-network/axelar-gmp-sdk-solidity/contracts/interfaces/IERC20.sol'; @@ -10,21 +10,21 @@ import { IERC20 } from '@axelar-network/axelar-gmp-sdk-solidity/contracts/interf * @title CallContractGasEstimation * @notice Send a message from chain A to chain B and stores gmp message */ -contract CallContractGasEstimation is AxelarExecutable { +contract CallContractGasEstimation is AxelarGMPExecutable { string public message; string public sourceChain; string public sourceAddress; IAxelarGasService public immutable gasService; uint256 public constant GAS_LIMIT = 200000; - event Executed(string _from, string _message); + event Executed(bytes32 commandId, string _from, string _message); /** * * @param _gateway address of axl gateway on deployed chain * @param _gasReceiver address of axl gas service on deployed chain */ - constructor(address _gateway, address _gasReceiver) AxelarExecutable(_gateway) { + constructor(address _gateway, address _gasReceiver) AxelarGMPExecutable(_gateway) { gasService = IAxelarGasService(_gasReceiver); } @@ -76,7 +76,7 @@ contract CallContractGasEstimation is AxelarExecutable { msg.sender, new bytes(0) ); - gateway.callContract(destinationChain, destinationAddress, payload); + gateway().callContract(destinationChain, destinationAddress, payload); } /** @@ -86,11 +86,11 @@ contract CallContractGasEstimation is AxelarExecutable { * @param _sourceAddress address on src chain where tx is originating from * @param _payload encoded gmp message sent from src chain */ - function _execute(string calldata _sourceChain, string calldata _sourceAddress, bytes calldata _payload) internal override { + function _execute(bytes32 commandId,string calldata _sourceChain, string calldata _sourceAddress, bytes calldata _payload) internal override { (message) = abi.decode(_payload, (string)); sourceChain = _sourceChain; sourceAddress = _sourceAddress; - emit Executed(sourceAddress, message); + emit Executed(commandId, sourceAddress, message); } } diff --git a/examples/evm/call-contract-with-token-express/CallContractWithTokenExpress.sol b/examples/evm/call-contract-with-token-express/CallContractWithTokenExpress.sol index df789724..dec903c6 100644 --- a/examples/evm/call-contract-with-token-express/CallContractWithTokenExpress.sol +++ b/examples/evm/call-contract-with-token-express/CallContractWithTokenExpress.sol @@ -1,9 +1,7 @@ //SPDX-License-Identifier: MIT -pragma solidity 0.8.9; +pragma solidity ^0.8.0; -import { AxelarExecutable } from '@axelar-network/axelar-gmp-sdk-solidity/contracts/executable/AxelarExecutable.sol'; import { AxelarExpressExecutable } from '@axelar-network/axelar-gmp-sdk-solidity/contracts/express/AxelarExpressExecutable.sol'; -import { IAxelarGateway } from '@axelar-network/axelar-gmp-sdk-solidity/contracts/interfaces/IAxelarGateway.sol'; import { IERC20 } from '@axelar-network/axelar-gmp-sdk-solidity/contracts/interfaces/IERC20.sol'; import { IAxelarGasService } from '@axelar-network/axelar-gmp-sdk-solidity/contracts/interfaces/IAxelarGasService.sol'; import { Upgradable } from '@axelar-network/axelar-gmp-sdk-solidity/contracts/upgradable/Upgradable.sol'; @@ -11,6 +9,9 @@ import { Upgradable } from '@axelar-network/axelar-gmp-sdk-solidity/contracts/up contract CallContractWithTokenExpress is AxelarExpressExecutable { IAxelarGasService public immutable gasService; + event Executed(bytes32 commandId, string sourceChain, string sourceAddress, bytes payload); + event ExecutedWithToken(bytes32 commandId, string sourceChain, string sourceAddress, bytes payload, string tokenSymbol, uint256 amount); + constructor(address gateway_, address gasReceiver_) AxelarExpressExecutable(gateway_) { gasService = IAxelarGasService(gasReceiver_); } @@ -22,9 +23,9 @@ contract CallContractWithTokenExpress is AxelarExpressExecutable { string memory symbol, uint256 amount ) external payable { - address tokenAddress = gateway.tokenAddresses(symbol); + address tokenAddress = gatewayWithToken().tokenAddresses(symbol); IERC20(tokenAddress).transferFrom(msg.sender, address(this), amount); - IERC20(tokenAddress).approve(address(gateway), amount); + IERC20(tokenAddress).approve(address(gatewayWithToken()), amount); bytes memory payload = abi.encode(destinationAddresses); if (msg.value > 0) { gasService.payNativeGasForContractCallWithToken{ value: msg.value }( @@ -37,23 +38,35 @@ contract CallContractWithTokenExpress is AxelarExpressExecutable { msg.sender ); } - gateway.callContractWithToken(destinationChain, destinationAddress, payload, symbol, amount); + gatewayWithToken().callContractWithToken(destinationChain, destinationAddress, payload, symbol, amount); + } + + function _execute( + bytes32 commandId, + string calldata sourceChain, + string calldata sourceAddress, + bytes calldata payload + ) internal override { + emit Executed(commandId,sourceChain, sourceAddress, payload); } function _executeWithToken( - string calldata, - string calldata, + bytes32 commandId, + string calldata sourceChain, + string calldata sourceAddress, bytes calldata payload, string calldata tokenSymbol, uint256 amount ) internal override { address[] memory recipients = abi.decode(payload, (address[])); - address tokenAddress = gateway.tokenAddresses(tokenSymbol); + address tokenAddress = gatewayWithToken().tokenAddresses(tokenSymbol); uint256 sentAmount = amount / recipients.length; for (uint256 i = 0; i < recipients.length; i++) { IERC20(tokenAddress).transfer(recipients[i], sentAmount); } + + emit ExecutedWithToken(commandId, sourceChain, sourceAddress, payload, tokenSymbol, amount); } function contractId() external pure returns (bytes32) { diff --git a/examples/evm/call-contract-with-token/CallContractWithToken.sol b/examples/evm/call-contract-with-token/CallContractWithToken.sol index 3a21a2d2..12c5d272 100644 --- a/examples/evm/call-contract-with-token/CallContractWithToken.sol +++ b/examples/evm/call-contract-with-token/CallContractWithToken.sol @@ -1,27 +1,27 @@ //SPDX-License-Identifier: MIT pragma solidity ^0.8.0; -import { AxelarExecutable } from '@axelar-network/axelar-gmp-sdk-solidity/contracts/executable/AxelarExecutable.sol'; -import { IAxelarGateway } from '@axelar-network/axelar-gmp-sdk-solidity/contracts/interfaces/IAxelarGateway.sol'; +import { AxelarGMPExecutableWithToken } from '@axelar-network/axelar-gmp-sdk-solidity/contracts/executable/AxelarGMPExecutableWithToken.sol'; +import { IAxelarGMPGateway } from '@axelar-network/axelar-gmp-sdk-solidity/contracts/interfaces/IAxelarGMPGateway.sol'; import { IERC20 } from '@axelar-network/axelar-gmp-sdk-solidity/contracts/interfaces/IERC20.sol'; import { IAxelarGasService } from '@axelar-network/axelar-gmp-sdk-solidity/contracts/interfaces/IAxelarGasService.sol'; - /** - * @title Call Contract With Token + * @title Call Contract With Token * @notice Send a token along with an Axelar GMP message between two blockchains */ -contract CallContractWithToken is AxelarExecutable { +contract CallContractWithToken is AxelarGMPExecutableWithToken { IAxelarGasService public immutable gasService; - event Executed(); + event Executed(bytes32 commandId, string sourceChain, string sourceAddress, bytes payload); + event ExecutedWithToken(bytes32 commandId, string sourceChain, string sourceAddress, bytes payload, string tokenSymbol, uint256 amount); /** - * + * * @param _gateway address of axl gateway on deployed chain * @param _gasReceiver address of axl gas service on deployed chain */ - constructor(address _gateway, address _gasReceiver) AxelarExecutable(_gateway) { + constructor(address _gateway, address _gasReceiver) AxelarGMPExecutableWithToken(_gateway) { gasService = IAxelarGasService(_gasReceiver); } @@ -30,7 +30,7 @@ contract CallContractWithToken is AxelarExecutable { * @dev destinationAddresses will be passed in as gmp message in this tx * @param destinationChain name of the dest chain (ex. "Fantom") * @param destinationAddress address on dest chain this tx is going to - * @param destinationAddresses recipient addresses receiving sent funds + * @param destinationAddresses recipient addresses receiving sent funds * @param symbol symbol of token being sent * @param amount amount of tokens being sent */ @@ -43,9 +43,9 @@ contract CallContractWithToken is AxelarExecutable { ) external payable { require(msg.value > 0, 'Gas payment is required'); - address tokenAddress = gateway.tokenAddresses(symbol); + address tokenAddress = gatewayWithToken().tokenAddresses(symbol); IERC20(tokenAddress).transferFrom(msg.sender, address(this), amount); - IERC20(tokenAddress).approve(address(gateway), amount); + IERC20(tokenAddress).approve(address(gatewayWithToken()), amount); bytes memory payload = abi.encode(destinationAddresses); gasService.payNativeGasForContractCallWithToken{ value: msg.value }( address(this), @@ -56,7 +56,11 @@ contract CallContractWithToken is AxelarExecutable { amount, msg.sender ); - gateway.callContractWithToken(destinationChain, destinationAddress, payload, symbol, amount); + gatewayWithToken().callContractWithToken(destinationChain, destinationAddress, payload, symbol, amount); + } + + function _execute(bytes32 commandId,string calldata sourceChain, string calldata sourceAddress, bytes calldata payload) internal override { + emit Executed(commandId,sourceChain, sourceAddress, payload); } /** @@ -67,20 +71,22 @@ contract CallContractWithToken is AxelarExecutable { * @param amount amount of tokens sent from src chain */ function _executeWithToken( - string calldata, - string calldata, + bytes32 commandId, + string calldata sourceChain, + string calldata sourceAddress, bytes calldata payload, string calldata tokenSymbol, uint256 amount ) internal override { address[] memory recipients = abi.decode(payload, (address[])); - address tokenAddress = gateway.tokenAddresses(tokenSymbol); + address tokenAddress = gatewayWithToken().tokenAddresses(tokenSymbol); uint256 sentAmount = amount / recipients.length; for (uint256 i = 0; i < recipients.length; i++) { IERC20(tokenAddress).transfer(recipients[i], sentAmount); } - emit Executed(); + emit ExecutedWithToken(commandId, sourceChain, sourceAddress, payload, tokenSymbol, amount); } + } diff --git a/examples/evm/call-contract/CallContract.sol b/examples/evm/call-contract/CallContract.sol index 40762ee2..e7d10f27 100644 --- a/examples/evm/call-contract/CallContract.sol +++ b/examples/evm/call-contract/CallContract.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; -import { AxelarExecutable } from '@axelar-network/axelar-gmp-sdk-solidity/contracts/executable/AxelarExecutable.sol'; +import { AxelarGMPExecutable } from '@axelar-network/axelar-gmp-sdk-solidity/contracts/executable/AxelarGMPExecutable.sol'; import { IAxelarGateway } from '@axelar-network/axelar-gmp-sdk-solidity/contracts/interfaces/IAxelarGateway.sol'; import { IAxelarGasService } from '@axelar-network/axelar-gmp-sdk-solidity/contracts/interfaces/IAxelarGasService.sol'; import { IERC20 } from '@axelar-network/axelar-gmp-sdk-solidity/contracts/interfaces/IERC20.sol'; @@ -10,20 +10,20 @@ import { IERC20 } from '@axelar-network/axelar-gmp-sdk-solidity/contracts/interf * @title CallContract * @notice Send a message from chain A to chain B and stores gmp message */ -contract CallContract is AxelarExecutable { +contract CallContract is AxelarGMPExecutable { string public message; string public sourceChain; string public sourceAddress; IAxelarGasService public immutable gasService; - event Executed(string _from, string _message); + event Executed(bytes32 commandId, string _from, string _message); /** * * @param _gateway address of axl gateway on deployed chain * @param _gasReceiver address of axl gas service on deployed chain */ - constructor(address _gateway, address _gasReceiver) AxelarExecutable(_gateway) { + constructor(address _gateway, address _gasReceiver) AxelarGMPExecutable(_gateway) { gasService = IAxelarGasService(_gasReceiver); } @@ -49,7 +49,7 @@ contract CallContract is AxelarExecutable { payload, msg.sender ); - gateway.callContract(destinationChain, destinationAddress, payload); + gateway().callContract(destinationChain, destinationAddress, payload); } /** @@ -59,11 +59,11 @@ contract CallContract is AxelarExecutable { * @param _sourceAddress address on src chain where tx is originating from * @param _payload encoded gmp message sent from src chain */ - function _execute(string calldata _sourceChain, string calldata _sourceAddress, bytes calldata _payload) internal override { + function _execute(bytes32 commandId, string calldata _sourceChain, string calldata _sourceAddress, bytes calldata _payload) internal override { (message) = abi.decode(_payload, (string)); sourceChain = _sourceChain; sourceAddress = _sourceAddress; - emit Executed(sourceAddress, message); + emit Executed(commandId, sourceAddress, message); } } diff --git a/hardhat.config.js b/hardhat.config.js index 7e5be423..aa6659a4 100644 --- a/hardhat.config.js +++ b/hardhat.config.js @@ -7,7 +7,7 @@ require("@nomicfoundation/hardhat-chai-matchers") */ module.exports = { solidity: { - version: '0.8.9', + version: '0.8.19', settings: { evmVersion: process.env.EVM_VERSION || 'london', optimizer: { diff --git a/package-lock.json b/package-lock.json index fe9052f1..9e99f820 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,7 @@ "license": "ISC", "dependencies": { "@axelar-network/axelar-chains-config": "^1.2.0", - "@axelar-network/axelar-gmp-sdk-solidity": "^5.9.0", + "@axelar-network/axelar-gmp-sdk-solidity": "file:../axelar-gmp-sdk-solidity", "@axelar-network/axelar-local-dev": "^2.3.3", "@axelar-network/axelar-local-dev-cosmos": "^2.3.0", "@axelar-network/axelar-local-dev-multiversx": "^2.3.0", @@ -24,10 +24,13 @@ "axios": "^0.27.2", "bech32": "^2.0.0", "bip39": "^3.0.4", + "build": "^0.1.4", "commander": "^12.0.0", "config": "^3.3.9", "dotenv": "^16.0.2", "ethers": "^5.6.2", + "npm": "^10.8.3", + "run": "^1.5.0", "uuid": "^8.3.2" }, "devDependencies": { @@ -47,6 +50,30 @@ "node": "^16.0.0 || ^18.0.0" } }, + "../axelar-gmp-sdk-solidity": { + "name": "@axelar-network/axelar-gmp-sdk-solidity", + "version": "5.10.0", + "license": "MIT", + "devDependencies": { + "@axelar-network/axelar-chains-config": "^1.2.0", + "@nomicfoundation/hardhat-toolbox": "^2.0.2", + "cross-env": "^7.0.3", + "eslint": "^8.57.0", + "eslint-config-richardpringle": "^2.0.0", + "fs-extra": "^11.1.1", + "hardhat": "~2.22.3", + "hardhat-contract-sizer": "^2.10.0", + "hardhat-storage-layout": "^0.1.7", + "lodash": "^4.17.21", + "mocha": "^10.2.0", + "prettier": "^2.8.8", + "prettier-plugin-solidity": "1.0.0-beta.19", + "solhint": "^4.5.2" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/@aashutoshrathi/word-wrap": { "version": "1.2.6", "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", @@ -86,12 +113,8 @@ } }, "node_modules/@axelar-network/axelar-gmp-sdk-solidity": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/@axelar-network/axelar-gmp-sdk-solidity/-/axelar-gmp-sdk-solidity-5.9.0.tgz", - "integrity": "sha512-BarUqOln3m5jnvBo+LF6ARWwbRXqek93dDtCgIevKGl+Be2JcNOaBB32Bg2LOOBnpOKJBvJq1SI2ZoGurBQ4Qg==", - "engines": { - "node": ">=18" - } + "resolved": "../axelar-gmp-sdk-solidity", + "link": true }, "node_modules/@axelar-network/axelar-local-dev": { "version": "2.3.3", @@ -166,6 +189,14 @@ "node": ">=14.14" } }, + "node_modules/@axelar-network/axelar-local-dev-multiversx/node_modules/@axelar-network/axelar-gmp-sdk-solidity": { + "version": "5.6.4", + "resolved": "https://registry.npmjs.org/@axelar-network/axelar-gmp-sdk-solidity/-/axelar-gmp-sdk-solidity-5.6.4.tgz", + "integrity": "sha512-PQjV+HeJynmSRMhyM3SexwnbFNruSaiRUeNCWjV8/7CkdPsDqypoqIXVRVU8Zk92DUUHeqZZzL/3qP2LYuvlnA==", + "engines": { + "node": ">=16" + } + }, "node_modules/@axelar-network/axelar-local-dev-multiversx/node_modules/@axelar-network/axelar-local-dev": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/@axelar-network/axelar-local-dev/-/axelar-local-dev-2.3.0.tgz", @@ -4027,8 +4058,7 @@ "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "devOptional": true + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "node_modules/base-x": { "version": "3.0.9", @@ -4159,7 +4189,6 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "devOptional": true, "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -4269,6 +4298,34 @@ "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", "dev": true }, + "node_modules/build": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/build/-/build-0.1.4.tgz", + "integrity": "sha512-KwbDJ/zrsU8KZRRMfoURG14cKIAStUlS8D5jBDvtrZbwO5FEkYqc3oB8HIhRiyD64A48w1lc+sOmQ+mmBw5U/Q==", + "dependencies": { + "cssmin": "0.3.x", + "jsmin": "1.x", + "jxLoader": "*", + "moo-server": "*", + "promised-io": "*", + "timespan": "2.x", + "uglify-js": "1.x", + "walker": "1.x", + "winston": "*", + "wrench": "1.3.x" + }, + "engines": { + "node": ">v0.4.12" + } + }, + "node_modules/build/node_modules/uglify-js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-1.3.5.tgz", + "integrity": "sha512-YPX1DjKtom8l9XslmPFQnqWzTBkvI4N0pbkzLuPZZ4QTyig0uQqvZz9NgUdfEV+qccJzi7fVcGWdESvRIjWptQ==", + "bin": { + "uglifyjs": "bin/uglifyjs" + } + }, "node_modules/bytes": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", @@ -4697,8 +4754,7 @@ "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "devOptional": true + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, "node_modules/concat-stream": { "version": "1.6.2", @@ -4887,6 +4943,14 @@ "node": "*" } }, + "node_modules/cssmin": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/cssmin/-/cssmin-0.3.2.tgz", + "integrity": "sha512-bynxGIAJ8ybrnFobjsQotIjA8HFDDgPwbeUWNXXXfR+B4f9kkxdcUyagJoQCSUOfMV+ZZ6bMn8bvbozlCzUGwQ==", + "bin": { + "cssmin": "bin/cssmin" + } + }, "node_modules/death": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/death/-/death-1.1.0.tgz", @@ -11718,6 +11782,17 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/jsmin": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/jsmin/-/jsmin-1.0.1.tgz", + "integrity": "sha512-OPuL5X/bFKgVdMvEIX3hnpx3jbVpFCrEM8pKPXjFkZUqg521r41ijdyTz7vACOhW6o1neVlcLyd+wkbK5fNHRg==", + "bin": { + "jsmin": "bin/jsmin" + }, + "engines": { + "node": ">=0.1.93" + } + }, "node_modules/json-bigint": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", @@ -11794,6 +11869,28 @@ "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-6.2.0.tgz", "integrity": "sha512-cYofQu2Xpom82S6qD778jBDpwvvy39s1l/hrYij2u9AMdQcGRpaBu6kY4mVhuno5kJVi1DAz4aiphA2WI1/OAw==" }, + "node_modules/jxLoader": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jxLoader/-/jxLoader-0.1.1.tgz", + "integrity": "sha512-ClEvAj3K68y8uKhub3RgTmcRPo5DfIWvtxqrKQdDPyZ1UVHIIKvVvjrAsJFSVL5wjv0rt5iH9SMCZ0XRKNzeUA==", + "dependencies": { + "js-yaml": "0.3.x", + "moo-server": "1.3.x", + "promised-io": "*", + "walker": "1.x" + }, + "engines": { + "node": ">v0.4.10" + } + }, + "node_modules/jxLoader/node_modules/js-yaml": { + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-0.3.7.tgz", + "integrity": "sha512-/7PsVDNP2tVe2Z1cF9kTEkjamIwz4aooDpRKmN1+g/9eePCgcxsv4QDvEbxO0EH+gdDD7MLyDoR6BASo3hH51g==", + "engines": { + "node": "> 0.4.11" + } + }, "node_modules/keccak": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.4.tgz", @@ -12023,6 +12120,14 @@ "yallist": "^3.0.2" } }, + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dependencies": { + "tmpl": "1.0.5" + } + }, "node_modules/markdown-table": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-1.1.3.tgz", @@ -12141,7 +12246,6 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "devOptional": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -12331,6 +12435,14 @@ "node": ">=10" } }, + "node_modules/moo-server": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/moo-server/-/moo-server-1.3.0.tgz", + "integrity": "sha512-9A8/eor2DXwpv1+a4pZAAydqLFVrWoKoO1fzdzqLUhYVXAO1Kgd1FR2gFZi7YdHzF0s4W8cDNwCfKJQrvLqxDw==", + "engines": { + "node": ">v0.4.10" + } + }, "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -12610,188 +12722,2521 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/number-to-bn": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", - "integrity": "sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig==", - "dev": true, + "node_modules/npm": { + "version": "10.8.3", + "resolved": "https://registry.npmjs.org/npm/-/npm-10.8.3.tgz", + "integrity": "sha512-0IQlyAYvVtQ7uOhDFYZCGK8kkut2nh8cpAdA9E6FvRSJaTgtZRZgNjlC5ZCct//L73ygrpY93CxXpRJDtNqPVg==", + "bundleDependencies": [ + "@isaacs/string-locale-compare", + "@npmcli/arborist", + "@npmcli/config", + "@npmcli/fs", + "@npmcli/map-workspaces", + "@npmcli/package-json", + "@npmcli/promise-spawn", + "@npmcli/redact", + "@npmcli/run-script", + "@sigstore/tuf", + "abbrev", + "archy", + "cacache", + "chalk", + "ci-info", + "cli-columns", + "fastest-levenshtein", + "fs-minipass", + "glob", + "graceful-fs", + "hosted-git-info", + "ini", + "init-package-json", + "is-cidr", + "json-parse-even-better-errors", + "libnpmaccess", + "libnpmdiff", + "libnpmexec", + "libnpmfund", + "libnpmhook", + "libnpmorg", + "libnpmpack", + "libnpmpublish", + "libnpmsearch", + "libnpmteam", + "libnpmversion", + "make-fetch-happen", + "minimatch", + "minipass", + "minipass-pipeline", + "ms", + "node-gyp", + "nopt", + "normalize-package-data", + "npm-audit-report", + "npm-install-checks", + "npm-package-arg", + "npm-pick-manifest", + "npm-profile", + "npm-registry-fetch", + "npm-user-validate", + "p-map", + "pacote", + "parse-conflict-json", + "proc-log", + "qrcode-terminal", + "read", + "semver", + "spdx-expression-parse", + "ssri", + "supports-color", + "tar", + "text-table", + "tiny-relative-date", + "treeverse", + "validate-npm-package-name", + "which", + "write-file-atomic" + ], "dependencies": { - "bn.js": "4.11.6", - "strip-hex-prefix": "1.0.0" + "@isaacs/string-locale-compare": "^1.1.0", + "@npmcli/arborist": "^7.5.4", + "@npmcli/config": "^8.3.4", + "@npmcli/fs": "^3.1.1", + "@npmcli/map-workspaces": "^3.0.6", + "@npmcli/package-json": "^5.2.0", + "@npmcli/promise-spawn": "^7.0.2", + "@npmcli/redact": "^2.0.1", + "@npmcli/run-script": "^8.1.0", + "@sigstore/tuf": "^2.3.4", + "abbrev": "^2.0.0", + "archy": "~1.0.0", + "cacache": "^18.0.4", + "chalk": "^5.3.0", + "ci-info": "^4.0.0", + "cli-columns": "^4.0.0", + "fastest-levenshtein": "^1.0.16", + "fs-minipass": "^3.0.3", + "glob": "^10.4.5", + "graceful-fs": "^4.2.11", + "hosted-git-info": "^7.0.2", + "ini": "^4.1.3", + "init-package-json": "^6.0.3", + "is-cidr": "^5.1.0", + "json-parse-even-better-errors": "^3.0.2", + "libnpmaccess": "^8.0.6", + "libnpmdiff": "^6.1.4", + "libnpmexec": "^8.1.4", + "libnpmfund": "^5.0.12", + "libnpmhook": "^10.0.5", + "libnpmorg": "^6.0.6", + "libnpmpack": "^7.0.4", + "libnpmpublish": "^9.0.9", + "libnpmsearch": "^7.0.6", + "libnpmteam": "^6.0.5", + "libnpmversion": "^6.0.3", + "make-fetch-happen": "^13.0.1", + "minimatch": "^9.0.5", + "minipass": "^7.1.1", + "minipass-pipeline": "^1.2.4", + "ms": "^2.1.2", + "node-gyp": "^10.2.0", + "nopt": "^7.2.1", + "normalize-package-data": "^6.0.2", + "npm-audit-report": "^5.0.0", + "npm-install-checks": "^6.3.0", + "npm-package-arg": "^11.0.3", + "npm-pick-manifest": "^9.1.0", + "npm-profile": "^10.0.0", + "npm-registry-fetch": "^17.1.0", + "npm-user-validate": "^2.0.1", + "p-map": "^4.0.0", + "pacote": "^18.0.6", + "parse-conflict-json": "^3.0.1", + "proc-log": "^4.2.0", + "qrcode-terminal": "^0.12.0", + "read": "^3.0.1", + "semver": "^7.6.3", + "spdx-expression-parse": "^4.0.0", + "ssri": "^10.0.6", + "supports-color": "^9.4.0", + "tar": "^6.2.1", + "text-table": "~0.2.0", + "tiny-relative-date": "^1.3.0", + "treeverse": "^3.0.0", + "validate-npm-package-name": "^5.0.1", + "which": "^4.0.0", + "write-file-atomic": "^5.0.1" + }, + "bin": { + "npm": "bin/npm-cli.js", + "npx": "bin/npx-cli.js" }, "engines": { - "node": ">=6.5.0", - "npm": ">=3" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/number-to-bn/node_modules/bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==", - "dev": true - }, - "node_modules/o3": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/o3/-/o3-1.0.3.tgz", - "integrity": "sha512-f+4n+vC6s4ysy7YO7O2gslWZBUu8Qj2i2OUJOvjRxQva7jVjYjB29jrr9NCjmxZQR0gzrOcv1RnqoYOeMs5VRQ==", - "optional": true, + "node_modules/npm/node_modules/@isaacs/cliui": { + "version": "8.0.2", + "inBundle": true, + "license": "ISC", "dependencies": { - "capability": "^0.2.5" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true, + "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" + }, "engines": { - "node": ">=0.10.0" + "node": ">=12" } }, - "node_modules/object-inspect": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", - "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", - "dev": true, + "node_modules/npm/node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.0.1", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "engines": { - "node": ">= 0.4" - } + "node_modules/npm/node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "inBundle": true, + "license": "MIT" }, - "node_modules/object.assign": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", - "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", - "dev": true, + "node_modules/npm/node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "inBundle": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.5", - "define-properties": "^1.2.1", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" }, "engines": { - "node": ">= 0.4" + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/object.fromentries": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz", - "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==", - "dev": true, + "node_modules/npm/node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "inBundle": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "ansi-regex": "^6.0.1" }, "engines": { - "node": ">= 0.4" + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/object.groupby": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.1.tgz", - "integrity": "sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1" - } + "node_modules/npm/node_modules/@isaacs/string-locale-compare": { + "version": "1.1.0", + "inBundle": true, + "license": "ISC" }, - "node_modules/object.values": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz", - "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==", - "dev": true, + "node_modules/npm/node_modules/@npmcli/agent": { + "version": "2.2.2", + "inBundle": true, + "license": "ISC", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "agent-base": "^7.1.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.1", + "lru-cache": "^10.0.1", + "socks-proxy-agent": "^8.0.3" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/obliterator": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-2.0.4.tgz", - "integrity": "sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==", - "dev": true - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "devOptional": true, + "node_modules/npm/node_modules/@npmcli/arborist": { + "version": "7.5.4", + "inBundle": true, + "license": "ISC", "dependencies": { - "wrappy": "1" + "@isaacs/string-locale-compare": "^1.1.0", + "@npmcli/fs": "^3.1.1", + "@npmcli/installed-package-contents": "^2.1.0", + "@npmcli/map-workspaces": "^3.0.2", + "@npmcli/metavuln-calculator": "^7.1.1", + "@npmcli/name-from-folder": "^2.0.0", + "@npmcli/node-gyp": "^3.0.0", + "@npmcli/package-json": "^5.1.0", + "@npmcli/query": "^3.1.0", + "@npmcli/redact": "^2.0.0", + "@npmcli/run-script": "^8.1.0", + "bin-links": "^4.0.4", + "cacache": "^18.0.3", + "common-ancestor-path": "^1.0.1", + "hosted-git-info": "^7.0.2", + "json-parse-even-better-errors": "^3.0.2", + "json-stringify-nice": "^1.1.4", + "lru-cache": "^10.2.2", + "minimatch": "^9.0.4", + "nopt": "^7.2.1", + "npm-install-checks": "^6.2.0", + "npm-package-arg": "^11.0.2", + "npm-pick-manifest": "^9.0.1", + "npm-registry-fetch": "^17.0.1", + "pacote": "^18.0.6", + "parse-conflict-json": "^3.0.0", + "proc-log": "^4.2.0", + "proggy": "^2.0.0", + "promise-all-reject-late": "^1.0.0", + "promise-call-limit": "^3.0.1", + "read-package-json-fast": "^3.0.2", + "semver": "^7.3.7", + "ssri": "^10.0.6", + "treeverse": "^3.0.0", + "walk-up-path": "^3.0.1" + }, + "bin": { + "arborist": "bin/index.js" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/one-time": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz", - "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==", + "node_modules/npm/node_modules/@npmcli/config": { + "version": "8.3.4", + "inBundle": true, + "license": "ISC", "dependencies": { - "fn.name": "1.x.x" + "@npmcli/map-workspaces": "^3.0.2", + "@npmcli/package-json": "^5.1.1", + "ci-info": "^4.0.0", + "ini": "^4.1.2", + "nopt": "^7.2.1", + "proc-log": "^4.2.0", + "semver": "^7.3.5", + "walk-up-path": "^3.0.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/optionator": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", - "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", - "dev": true, - "peer": true, + "node_modules/npm/node_modules/@npmcli/fs": { + "version": "3.1.1", + "inBundle": true, + "license": "ISC", "dependencies": { - "@aashutoshrathi/word-wrap": "^1.2.3", - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0" + "semver": "^7.3.5" }, "engines": { - "node": ">= 0.8.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/ordinal": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/ordinal/-/ordinal-1.0.3.tgz", - "integrity": "sha512-cMddMgb2QElm8G7vdaa02jhUNbTSrhsgAGUz1OokD83uJTwSUn+nKoNoKVVaRa08yF6sgfO7Maou1+bgLd9rdQ==", - "dev": true - }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", - "dev": true, + "node_modules/npm/node_modules/@npmcli/git": { + "version": "5.0.8", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/promise-spawn": "^7.0.0", + "ini": "^4.1.3", + "lru-cache": "^10.0.1", + "npm-pick-manifest": "^9.0.0", + "proc-log": "^4.0.0", + "promise-inflight": "^1.0.1", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^4.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/p-cancelable": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", - "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", - "optional": true, + "node_modules/npm/node_modules/@npmcli/installed-package-contents": { + "version": "2.1.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "npm-bundled": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "bin": { + "installed-package-contents": "bin/index.js" + }, "engines": { - "node": ">=8" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@npmcli/map-workspaces": { + "version": "3.0.6", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/name-from-folder": "^2.0.0", + "glob": "^10.2.2", + "minimatch": "^9.0.0", + "read-package-json-fast": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@npmcli/metavuln-calculator": { + "version": "7.1.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "cacache": "^18.0.0", + "json-parse-even-better-errors": "^3.0.0", + "pacote": "^18.0.0", + "proc-log": "^4.1.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@npmcli/name-from-folder": { + "version": "2.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@npmcli/node-gyp": { + "version": "3.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@npmcli/package-json": { + "version": "5.2.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/git": "^5.0.0", + "glob": "^10.2.2", + "hosted-git-info": "^7.0.0", + "json-parse-even-better-errors": "^3.0.0", + "normalize-package-data": "^6.0.0", + "proc-log": "^4.0.0", + "semver": "^7.5.3" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@npmcli/promise-spawn": { + "version": "7.0.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "which": "^4.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@npmcli/query": { + "version": "3.1.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@npmcli/redact": { + "version": "2.0.1", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@npmcli/run-script": { + "version": "8.1.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/node-gyp": "^3.0.0", + "@npmcli/package-json": "^5.0.0", + "@npmcli/promise-spawn": "^7.0.0", + "node-gyp": "^10.0.0", + "proc-log": "^4.0.0", + "which": "^4.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "inBundle": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/npm/node_modules/@sigstore/bundle": { + "version": "2.3.2", + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/protobuf-specs": "^0.3.2" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@sigstore/core": { + "version": "1.1.0", + "inBundle": true, + "license": "Apache-2.0", + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@sigstore/protobuf-specs": { + "version": "0.3.2", + "inBundle": true, + "license": "Apache-2.0", + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@sigstore/sign": { + "version": "2.3.2", + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/bundle": "^2.3.2", + "@sigstore/core": "^1.0.0", + "@sigstore/protobuf-specs": "^0.3.2", + "make-fetch-happen": "^13.0.1", + "proc-log": "^4.2.0", + "promise-retry": "^2.0.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@sigstore/tuf": { + "version": "2.3.4", + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/protobuf-specs": "^0.3.2", + "tuf-js": "^2.2.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@sigstore/verify": { + "version": "1.2.1", + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/bundle": "^2.3.2", + "@sigstore/core": "^1.1.0", + "@sigstore/protobuf-specs": "^0.3.2" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@tufjs/canonical-json": { + "version": "2.0.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@tufjs/models": { + "version": "2.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "@tufjs/canonical-json": "2.0.0", + "minimatch": "^9.0.4" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/abbrev": { + "version": "2.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/agent-base": { + "version": "7.1.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/npm/node_modules/aggregate-error": { + "version": "3.1.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/ansi-regex": { + "version": "5.0.1", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/ansi-styles": { + "version": "6.2.1", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/npm/node_modules/aproba": { + "version": "2.0.0", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/archy": { + "version": "1.0.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/balanced-match": { + "version": "1.0.2", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/bin-links": { + "version": "4.0.4", + "inBundle": true, + "license": "ISC", + "dependencies": { + "cmd-shim": "^6.0.0", + "npm-normalize-package-bin": "^3.0.0", + "read-cmd-shim": "^4.0.0", + "write-file-atomic": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/binary-extensions": { + "version": "2.3.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm/node_modules/brace-expansion": { + "version": "2.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/npm/node_modules/cacache": { + "version": "18.0.4", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^10.0.1", + "minipass": "^7.0.3", + "minipass-collect": "^2.0.1", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^4.0.0", + "ssri": "^10.0.0", + "tar": "^6.1.11", + "unique-filename": "^3.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/chalk": { + "version": "5.3.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/npm/node_modules/chownr": { + "version": "2.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/npm/node_modules/ci-info": { + "version": "4.0.0", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/cidr-regex": { + "version": "4.1.1", + "inBundle": true, + "license": "BSD-2-Clause", + "dependencies": { + "ip-regex": "^5.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/npm/node_modules/clean-stack": { + "version": "2.2.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/npm/node_modules/cli-columns": { + "version": "4.0.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/npm/node_modules/cmd-shim": { + "version": "6.0.3", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/color-convert": { + "version": "2.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/npm/node_modules/color-name": { + "version": "1.1.4", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/common-ancestor-path": { + "version": "1.0.1", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/cross-spawn": { + "version": "7.0.3", + "inBundle": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/npm/node_modules/cross-spawn/node_modules/which": { + "version": "2.0.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/npm/node_modules/cssesc": { + "version": "3.0.0", + "inBundle": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm/node_modules/debug": { + "version": "4.3.6", + "inBundle": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/npm/node_modules/debug/node_modules/ms": { + "version": "2.1.2", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/diff": { + "version": "5.2.0", + "inBundle": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/npm/node_modules/eastasianwidth": { + "version": "0.2.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/emoji-regex": { + "version": "8.0.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/encoding": { + "version": "0.1.13", + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/npm/node_modules/env-paths": { + "version": "2.2.1", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/npm/node_modules/err-code": { + "version": "2.0.3", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/exponential-backoff": { + "version": "3.1.1", + "inBundle": true, + "license": "Apache-2.0" + }, + "node_modules/npm/node_modules/fastest-levenshtein": { + "version": "1.0.16", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 4.9.1" + } + }, + "node_modules/npm/node_modules/foreground-child": { + "version": "3.3.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/fs-minipass": { + "version": "3.0.3", + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/glob": { + "version": "10.4.5", + "inBundle": true, + "license": "ISC", + "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" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/graceful-fs": { + "version": "4.2.11", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/hosted-git-info": { + "version": "7.0.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^10.0.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/http-cache-semantics": { + "version": "4.1.1", + "inBundle": true, + "license": "BSD-2-Clause" + }, + "node_modules/npm/node_modules/http-proxy-agent": { + "version": "7.0.2", + "inBundle": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/npm/node_modules/https-proxy-agent": { + "version": "7.0.5", + "inBundle": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.0.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/npm/node_modules/iconv-lite": { + "version": "0.6.3", + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm/node_modules/ignore-walk": { + "version": "6.0.5", + "inBundle": true, + "license": "ISC", + "dependencies": { + "minimatch": "^9.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/imurmurhash": { + "version": "0.1.4", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/npm/node_modules/indent-string": { + "version": "4.0.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/ini": { + "version": "4.1.3", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/init-package-json": { + "version": "6.0.3", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/package-json": "^5.0.0", + "npm-package-arg": "^11.0.0", + "promzard": "^1.0.0", + "read": "^3.0.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4", + "validate-npm-package-name": "^5.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/ip-address": { + "version": "9.0.5", + "inBundle": true, + "license": "MIT", + "dependencies": { + "jsbn": "1.1.0", + "sprintf-js": "^1.1.3" + }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/npm/node_modules/ip-regex": { + "version": "5.0.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm/node_modules/is-cidr": { + "version": "5.1.0", + "inBundle": true, + "license": "BSD-2-Clause", + "dependencies": { + "cidr-regex": "^4.1.1" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/npm/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/is-lambda": { + "version": "1.0.1", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/isexe": { + "version": "2.0.0", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/jackspeak": { + "version": "3.4.3", + "inBundle": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/npm/node_modules/jsbn": { + "version": "1.1.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/json-parse-even-better-errors": { + "version": "3.0.2", + "inBundle": true, + "license": "MIT", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/json-stringify-nice": { + "version": "1.1.4", + "inBundle": true, + "license": "ISC", + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/jsonparse": { + "version": "1.3.1", + "engines": [ + "node >= 0.2.0" + ], + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/just-diff": { + "version": "6.0.2", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/just-diff-apply": { + "version": "5.5.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/libnpmaccess": { + "version": "8.0.6", + "inBundle": true, + "license": "ISC", + "dependencies": { + "npm-package-arg": "^11.0.2", + "npm-registry-fetch": "^17.0.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/libnpmdiff": { + "version": "6.1.4", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/arborist": "^7.5.4", + "@npmcli/installed-package-contents": "^2.1.0", + "binary-extensions": "^2.3.0", + "diff": "^5.1.0", + "minimatch": "^9.0.4", + "npm-package-arg": "^11.0.2", + "pacote": "^18.0.6", + "tar": "^6.2.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/libnpmexec": { + "version": "8.1.4", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/arborist": "^7.5.4", + "@npmcli/run-script": "^8.1.0", + "ci-info": "^4.0.0", + "npm-package-arg": "^11.0.2", + "pacote": "^18.0.6", + "proc-log": "^4.2.0", + "read": "^3.0.1", + "read-package-json-fast": "^3.0.2", + "semver": "^7.3.7", + "walk-up-path": "^3.0.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/libnpmfund": { + "version": "5.0.12", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/arborist": "^7.5.4" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/libnpmhook": { + "version": "10.0.5", + "inBundle": true, + "license": "ISC", + "dependencies": { + "aproba": "^2.0.0", + "npm-registry-fetch": "^17.0.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/libnpmorg": { + "version": "6.0.6", + "inBundle": true, + "license": "ISC", + "dependencies": { + "aproba": "^2.0.0", + "npm-registry-fetch": "^17.0.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/libnpmpack": { + "version": "7.0.4", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/arborist": "^7.5.4", + "@npmcli/run-script": "^8.1.0", + "npm-package-arg": "^11.0.2", + "pacote": "^18.0.6" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/libnpmpublish": { + "version": "9.0.9", + "inBundle": true, + "license": "ISC", + "dependencies": { + "ci-info": "^4.0.0", + "normalize-package-data": "^6.0.1", + "npm-package-arg": "^11.0.2", + "npm-registry-fetch": "^17.0.1", + "proc-log": "^4.2.0", + "semver": "^7.3.7", + "sigstore": "^2.2.0", + "ssri": "^10.0.6" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/libnpmsearch": { + "version": "7.0.6", + "inBundle": true, + "license": "ISC", + "dependencies": { + "npm-registry-fetch": "^17.0.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/libnpmteam": { + "version": "6.0.5", + "inBundle": true, + "license": "ISC", + "dependencies": { + "aproba": "^2.0.0", + "npm-registry-fetch": "^17.0.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/libnpmversion": { + "version": "6.0.3", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/git": "^5.0.7", + "@npmcli/run-script": "^8.1.0", + "json-parse-even-better-errors": "^3.0.2", + "proc-log": "^4.2.0", + "semver": "^7.3.7" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/lru-cache": { + "version": "10.4.3", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/make-fetch-happen": { + "version": "13.0.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/agent": "^2.0.0", + "cacache": "^18.0.0", + "http-cache-semantics": "^4.1.1", + "is-lambda": "^1.0.1", + "minipass": "^7.0.2", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "proc-log": "^4.2.0", + "promise-retry": "^2.0.1", + "ssri": "^10.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/minimatch": { + "version": "9.0.5", + "inBundle": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/minipass": { + "version": "7.1.2", + "inBundle": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/npm/node_modules/minipass-collect": { + "version": "2.0.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/npm/node_modules/minipass-fetch": { + "version": "3.0.5", + "inBundle": true, + "license": "MIT", + "dependencies": { + "minipass": "^7.0.3", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "node_modules/npm/node_modules/minipass-flush": { + "version": "1.0.5", + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/npm/node_modules/minipass-flush/node_modules/minipass": { + "version": "3.3.6", + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/minipass-pipeline": { + "version": "1.2.4", + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/minipass-pipeline/node_modules/minipass": { + "version": "3.3.6", + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/minipass-sized": { + "version": "1.0.3", + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/minipass-sized/node_modules/minipass": { + "version": "3.3.6", + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/minizlib": { + "version": "2.1.2", + "inBundle": true, + "license": "MIT", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/npm/node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/mkdirp": { + "version": "1.0.4", + "inBundle": true, + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm/node_modules/ms": { + "version": "2.1.3", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/mute-stream": { + "version": "1.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/negotiator": { + "version": "0.6.3", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/npm/node_modules/node-gyp": { + "version": "10.2.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "glob": "^10.3.10", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^13.0.0", + "nopt": "^7.0.0", + "proc-log": "^4.1.0", + "semver": "^7.3.5", + "tar": "^6.2.1", + "which": "^4.0.0" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/nopt": { + "version": "7.2.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "abbrev": "^2.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/normalize-package-data": { + "version": "6.0.2", + "inBundle": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^7.0.0", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/npm-audit-report": { + "version": "5.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/npm-bundled": { + "version": "3.0.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/npm-install-checks": { + "version": "6.3.0", + "inBundle": true, + "license": "BSD-2-Clause", + "dependencies": { + "semver": "^7.1.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/npm-normalize-package-bin": { + "version": "3.0.1", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/npm-package-arg": { + "version": "11.0.3", + "inBundle": true, + "license": "ISC", + "dependencies": { + "hosted-git-info": "^7.0.0", + "proc-log": "^4.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^5.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/npm-packlist": { + "version": "8.0.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "ignore-walk": "^6.0.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/npm-pick-manifest": { + "version": "9.1.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "npm-install-checks": "^6.0.0", + "npm-normalize-package-bin": "^3.0.0", + "npm-package-arg": "^11.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/npm-profile": { + "version": "10.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "npm-registry-fetch": "^17.0.1", + "proc-log": "^4.0.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/npm/node_modules/npm-registry-fetch": { + "version": "17.1.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/redact": "^2.0.0", + "jsonparse": "^1.3.1", + "make-fetch-happen": "^13.0.0", + "minipass": "^7.0.2", + "minipass-fetch": "^3.0.0", + "minizlib": "^2.1.2", + "npm-package-arg": "^11.0.0", + "proc-log": "^4.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/npm-user-validate": { + "version": "2.0.1", + "inBundle": true, + "license": "BSD-2-Clause", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/p-map": { + "version": "4.0.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm/node_modules/package-json-from-dist": { + "version": "1.0.0", + "inBundle": true, + "license": "BlueOak-1.0.0" + }, + "node_modules/npm/node_modules/pacote": { + "version": "18.0.6", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/git": "^5.0.0", + "@npmcli/installed-package-contents": "^2.0.1", + "@npmcli/package-json": "^5.1.0", + "@npmcli/promise-spawn": "^7.0.0", + "@npmcli/run-script": "^8.0.0", + "cacache": "^18.0.0", + "fs-minipass": "^3.0.0", + "minipass": "^7.0.2", + "npm-package-arg": "^11.0.0", + "npm-packlist": "^8.0.0", + "npm-pick-manifest": "^9.0.0", + "npm-registry-fetch": "^17.0.0", + "proc-log": "^4.0.0", + "promise-retry": "^2.0.1", + "sigstore": "^2.2.0", + "ssri": "^10.0.0", + "tar": "^6.1.11" + }, + "bin": { + "pacote": "bin/index.js" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/parse-conflict-json": { + "version": "3.0.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "json-parse-even-better-errors": "^3.0.0", + "just-diff": "^6.0.0", + "just-diff-apply": "^5.2.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/path-key": { + "version": "3.1.1", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/path-scurry": { + "version": "1.11.1", + "inBundle": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/postcss-selector-parser": { + "version": "6.1.2", + "inBundle": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm/node_modules/proc-log": { + "version": "4.2.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/proggy": { + "version": "2.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/promise-all-reject-late": { + "version": "1.0.1", + "inBundle": true, + "license": "ISC", + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/promise-call-limit": { + "version": "3.0.1", + "inBundle": true, + "license": "ISC", + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/promise-inflight": { + "version": "1.0.1", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/promise-retry": { + "version": "2.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm/node_modules/promzard": { + "version": "1.0.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "read": "^3.0.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/qrcode-terminal": { + "version": "0.12.0", + "inBundle": true, + "bin": { + "qrcode-terminal": "bin/qrcode-terminal.js" + } + }, + "node_modules/npm/node_modules/read": { + "version": "3.0.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "mute-stream": "^1.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/read-cmd-shim": { + "version": "4.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/read-package-json-fast": { + "version": "3.0.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "json-parse-even-better-errors": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/retry": { + "version": "0.12.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/npm/node_modules/safer-buffer": { + "version": "2.1.2", + "inBundle": true, + "license": "MIT", + "optional": true + }, + "node_modules/npm/node_modules/semver": { + "version": "7.6.3", + "inBundle": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm/node_modules/shebang-command": { + "version": "2.0.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/shebang-regex": { + "version": "3.0.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/signal-exit": { + "version": "4.1.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/sigstore": { + "version": "2.3.1", + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/bundle": "^2.3.2", + "@sigstore/core": "^1.0.0", + "@sigstore/protobuf-specs": "^0.3.2", + "@sigstore/sign": "^2.3.2", + "@sigstore/tuf": "^2.3.4", + "@sigstore/verify": "^1.2.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/smart-buffer": { + "version": "4.2.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/npm/node_modules/socks": { + "version": "2.8.3", + "inBundle": true, + "license": "MIT", + "dependencies": { + "ip-address": "^9.0.5", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/npm/node_modules/socks-proxy-agent": { + "version": "8.0.4", + "inBundle": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.1", + "debug": "^4.3.4", + "socks": "^2.8.3" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/npm/node_modules/spdx-correct": { + "version": "3.2.0", + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/npm/node_modules/spdx-correct/node_modules/spdx-expression-parse": { + "version": "3.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/npm/node_modules/spdx-exceptions": { + "version": "2.5.0", + "inBundle": true, + "license": "CC-BY-3.0" + }, + "node_modules/npm/node_modules/spdx-expression-parse": { + "version": "4.0.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/npm/node_modules/spdx-license-ids": { + "version": "3.0.18", + "inBundle": true, + "license": "CC0-1.0" + }, + "node_modules/npm/node_modules/sprintf-js": { + "version": "1.1.3", + "inBundle": true, + "license": "BSD-3-Clause" + }, + "node_modules/npm/node_modules/ssri": { + "version": "10.0.6", + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/string-width": { + "version": "4.2.3", + "inBundle": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "inBundle": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/strip-ansi": { + "version": "6.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/supports-color": { + "version": "9.4.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/npm/node_modules/tar": { + "version": "6.2.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm/node_modules/tar/node_modules/fs-minipass": { + "version": "2.1.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/npm/node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/tar/node_modules/minipass": { + "version": "5.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/text-table": { + "version": "0.2.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/tiny-relative-date": { + "version": "1.3.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/treeverse": { + "version": "3.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/tuf-js": { + "version": "2.2.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "@tufjs/models": "2.0.1", + "debug": "^4.3.4", + "make-fetch-happen": "^13.0.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/unique-filename": { + "version": "3.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "unique-slug": "^4.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/unique-slug": { + "version": "4.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/util-deprecate": { + "version": "1.0.2", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/validate-npm-package-license": { + "version": "3.0.4", + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/npm/node_modules/validate-npm-package-license/node_modules/spdx-expression-parse": { + "version": "3.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/npm/node_modules/validate-npm-package-name": { + "version": "5.0.1", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/walk-up-path": { + "version": "3.0.1", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/which": { + "version": "4.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/which/node_modules/isexe": { + "version": "3.1.1", + "inBundle": true, + "license": "ISC", + "engines": { + "node": ">=16" + } + }, + "node_modules/npm/node_modules/wrap-ansi": { + "version": "8.1.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/npm/node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/npm/node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/npm/node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "6.0.1", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/npm/node_modules/wrap-ansi/node_modules/emoji-regex": { + "version": "9.2.2", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/wrap-ansi/node_modules/string-width": { + "version": "5.1.2", + "inBundle": true, + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm/node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "7.1.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/npm/node_modules/write-file-atomic": { + "version": "5.0.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/yallist": { + "version": "4.0.0", + "inBundle": true, + "license": "ISC" + }, + "node_modules/number-to-bn": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", + "integrity": "sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig==", + "dev": true, + "dependencies": { + "bn.js": "4.11.6", + "strip-hex-prefix": "1.0.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/number-to-bn/node_modules/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==", + "dev": true + }, + "node_modules/o3": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/o3/-/o3-1.0.3.tgz", + "integrity": "sha512-f+4n+vC6s4ysy7YO7O2gslWZBUu8Qj2i2OUJOvjRxQva7jVjYjB29jrr9NCjmxZQR0gzrOcv1RnqoYOeMs5VRQ==", + "optional": true, + "dependencies": { + "capability": "^0.2.5" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz", + "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.groupby": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.1.tgz", + "integrity": "sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1" + } + }, + "node_modules/object.values": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz", + "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/obliterator": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-2.0.4.tgz", + "integrity": "sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==", + "dev": true + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "devOptional": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/one-time": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz", + "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==", + "dependencies": { + "fn.name": "1.x.x" + } + }, + "node_modules/optionator": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "dev": true, + "peer": true, + "dependencies": { + "@aashutoshrathi/word-wrap": "^1.2.3", + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/ordinal": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/ordinal/-/ordinal-1.0.3.tgz", + "integrity": "sha512-cMddMgb2QElm8G7vdaa02jhUNbTSrhsgAGUz1OokD83uJTwSUn+nKoNoKVVaRa08yF6sgfO7Maou1+bgLd9rdQ==", + "dev": true + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/p-cancelable": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", + "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", + "optional": true, + "engines": { + "node": ">=8" } }, "node_modules/p-limit": { @@ -13107,6 +15552,11 @@ "asap": "~2.0.6" } }, + "node_modules/promised-io": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/promised-io/-/promised-io-0.3.6.tgz", + "integrity": "sha512-bNwZusuNIW4m0SPR8jooSyndD35ggirHlxVl/UhIaZD/F0OBv9ebfc6tNmbpZts3QXHggkjIBH8lvtnzhtcz0A==" + }, "node_modules/promisify-child-process": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/promisify-child-process/-/promisify-child-process-4.1.2.tgz", @@ -13521,6 +15971,20 @@ "rlp": "bin/rlp" } }, + "node_modules/run": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/run/-/run-1.5.0.tgz", + "integrity": "sha512-CBPzeX6JQZUdhZpSFyNt2vUk44ivKMWZYCNBYoZYEE46mL9nf6WyMP3320WnzIrJuo89+njiUvlo83jUEXjXLg==", + "dependencies": { + "minimatch": "*" + }, + "bin": { + "runjs": "cli.js" + }, + "engines": { + "node": ">=v0.9.0" + } + }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -14899,6 +17363,14 @@ "node": ">= 0.12" } }, + "node_modules/timespan": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/timespan/-/timespan-2.3.0.tgz", + "integrity": "sha512-0Jq9+58T2wbOyLth0EU+AUb6JMGCLaTWIykJFa7hyAybjVH9gpVMTfUAwo5fWAvtFt2Tjh/Elg8JtgNpnMnM8g==", + "engines": { + "node": ">= 0.2.0" + } + }, "node_modules/tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", @@ -14911,6 +17383,11 @@ "node": ">=0.6.0" } }, + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==" + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -15188,6 +17665,14 @@ "uuid": "dist/bin/uuid" } }, + "node_modules/walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dependencies": { + "makeerror": "1.0.12" + } + }, "node_modules/web3-utils": { "version": "1.10.3", "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.10.3.tgz", @@ -15412,6 +17897,15 @@ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "devOptional": true }, + "node_modules/wrench": { + "version": "1.3.9", + "resolved": "https://registry.npmjs.org/wrench/-/wrench-1.3.9.tgz", + "integrity": "sha512-srTJQmLTP5YtW+F5zDuqjMEZqLLr/eJOZfDI5ibfPfRMeDh3oBUefAscuH0q5wBKE339ptH/S/0D18ZkfOfmKQ==", + "deprecated": "wrench.js is deprecated! You should check out fs-extra (https://github.com/jprichardson/node-fs-extra) for any operations you were using wrench for. Thanks for all the usage over the years.", + "engines": { + "node": ">=0.1.97" + } + }, "node_modules/ws": { "version": "8.16.0", "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz", diff --git a/package.json b/package.json index 5f6e4548..075410d9 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,7 @@ "license": "ISC", "dependencies": { "@axelar-network/axelar-chains-config": "^1.2.0", - "@axelar-network/axelar-gmp-sdk-solidity": "^5.9.0", + "@axelar-network/axelar-gmp-sdk-solidity": "file:../axelar-gmp-sdk-solidity", "@axelar-network/axelar-local-dev": "^2.3.3", "@axelar-network/axelar-local-dev-cosmos": "^2.3.0", "@axelar-network/axelar-local-dev-multiversx": "^2.3.0", @@ -36,10 +36,13 @@ "axios": "^0.27.2", "bech32": "^2.0.0", "bip39": "^3.0.4", + "build": "^0.1.4", "commander": "^12.0.0", "config": "^3.3.9", "dotenv": "^16.0.2", "ethers": "^5.6.2", + "npm": "^10.8.3", + "run": "^1.5.0", "uuid": "^8.3.2" }, "devDependencies": { From 191d0595c5a80019b7d04da9f784cb6ac29946fa Mon Sep 17 00:00:00 2001 From: ahramy Date: Fri, 6 Sep 2024 09:24:48 -0700 Subject: [PATCH 2/9] removed redundant dependencies --- package.json | 3 --- 1 file changed, 3 deletions(-) diff --git a/package.json b/package.json index 075410d9..754240ab 100644 --- a/package.json +++ b/package.json @@ -36,13 +36,10 @@ "axios": "^0.27.2", "bech32": "^2.0.0", "bip39": "^3.0.4", - "build": "^0.1.4", "commander": "^12.0.0", "config": "^3.3.9", "dotenv": "^16.0.2", "ethers": "^5.6.2", - "npm": "^10.8.3", - "run": "^1.5.0", "uuid": "^8.3.2" }, "devDependencies": { From 36d14f06d127eaf6c8b1856c4073b22339a084ca Mon Sep 17 00:00:00 2001 From: ahramy Date: Thu, 10 Oct 2024 13:53:42 -0700 Subject: [PATCH 3/9] updated code --- .../contracts/CallContractWithToken.sol | 38 ++++++----- .../contracts/call-contract/CallContract.sol | 24 +++---- .../contracts/nft-linker/NFTLinker.sol | 16 ++--- .../evm-contract/SendReceive.sol | 9 ++- .../CallContractGasEstimation.sol | 21 +++--- .../CallContractWithToken.sol | 17 +++-- .../evm/call-contract-with-token/index.js | 6 +- examples/evm/call-contract/CallContract.sol | 14 ++-- .../cross-chain-lending/CompoundInterface.sol | 30 ++++++--- .../cross-chain-lending/LendingSatellite.sol | 38 +++++++---- .../evm/cross-chain-token/ERC20CrossChain.sol | 9 ++- examples/evm/deposit-address/index.js | 12 ++-- .../evm/multichain-game/MultichainGame.sol | 33 ++++++--- .../MultichainGameReceiver.sol | 21 ++++-- .../multichain-nft-mint/MultichainNFTMint.sol | 4 +- .../evm/multichain-swap/MultichainSwap.sol | 29 +++++--- .../NftAuctionhouseRemote.sol | 67 ++++++++----------- examples/evm/nft-auctionhouse/index.js | 6 +- examples/evm/nft-linker/NftLinker.sol | 11 ++- .../evm/nonced-execution/NoncedExecutable.sol | 30 ++++----- examples/evm/send-ack/SendAckReceiver.sol | 12 ++-- .../SendAckReceiverImplementation.sol | 6 +- examples/evm/send-ack/SendAckSender.sol | 18 ++--- examples/evm/send-token/index.js | 6 +- .../call-contract/contracts/HelloWorld.sol | 15 ++--- package.json | 2 +- scripts/libs/execute.js | 10 +-- 27 files changed, 269 insertions(+), 235 deletions(-) diff --git a/examples-web/contracts/call-contract-with-token/contracts/CallContractWithToken.sol b/examples-web/contracts/call-contract-with-token/contracts/CallContractWithToken.sol index d997f1bd..4b0d3aa7 100644 --- a/examples-web/contracts/call-contract-with-token/contracts/CallContractWithToken.sol +++ b/examples-web/contracts/call-contract-with-token/contracts/CallContractWithToken.sol @@ -1,26 +1,28 @@ //SPDX-License-Identifier: MIT pragma solidity ^0.8.0; -import { AxelarExecutable } from '@axelar-network/axelar-gmp-sdk-solidity/contracts/executable/AxelarExecutable.sol'; -import { IAxelarGateway } from '@axelar-network/axelar-gmp-sdk-solidity/contracts/interfaces/IAxelarGateway.sol'; -import { IERC20 } from '@axelar-network/axelar-gmp-sdk-solidity/contracts/interfaces/IERC20.sol'; -import { IAxelarGasService } from '@axelar-network/axelar-gmp-sdk-solidity/contracts/interfaces/IAxelarGasService.sol'; +import {AxelarExecutableWithToken} from "@axelar-network/axelar-gmp-sdk-solidity/contracts/executable/AxelarExecutableWithToken.sol"; +import {IERC20} from "@axelar-network/axelar-gmp-sdk-solidity/contracts/interfaces/IERC20.sol"; +import {IAxelarGasService} from "@axelar-network/axelar-gmp-sdk-solidity/contracts/interfaces/IAxelarGasService.sol"; /** * @title Call Contract With Token Contract * @notice Send a token along with an Axelar GMP message between two blockchains */ -contract CallContractWithToken is AxelarExecutable { +contract CallContractWithToken is AxelarExecutableWithToken { IAxelarGasService public immutable gasService; event Executed(); /** - * + * * @param _gateway address of axl gateway on deployed chain * @param _gasReceiver address of axl gas service on deployed chain */ - constructor(address _gateway, address _gasReceiver) AxelarExecutable(_gateway) { + constructor( + address _gateway, + address _gasReceiver + ) AxelarExecutableWithToken(_gateway) { gasService = IAxelarGasService(_gasReceiver); } @@ -29,7 +31,7 @@ contract CallContractWithToken is AxelarExecutable { * @dev destinationAddresses will be passed in as gmp message in this tx * @param destinationChain name of the dest chain (ex. "Fantom") * @param destinationAddress address on dest chain this tx is going to - * @param destinationAddresses recipient addresses receiving sent funds + * @param destinationAddresses recipient addresses receiving sent funds * @param symbol symbol of token being sent * @param amount amount of tokens being sent */ @@ -40,13 +42,13 @@ contract CallContractWithToken is AxelarExecutable { string memory symbol, uint256 amount ) external payable { - require(msg.value > 0, 'Gas payment is required'); + require(msg.value > 0, "Gas payment is required"); - address tokenAddress = gateway.tokenAddresses(symbol); + address tokenAddress = gatewayWithToken().tokenAddresses(symbol); IERC20(tokenAddress).transferFrom(msg.sender, address(this), amount); - IERC20(tokenAddress).approve(address(gateway), amount); + IERC20(tokenAddress).approve(address(gatewayWithToken()), amount); bytes memory payload = abi.encode(destinationAddresses); - gasService.payNativeGasForContractCallWithToken{ value: msg.value }( + gasService.payNativeGasForContractCallWithToken{value: msg.value}( address(this), destinationChain, destinationAddress, @@ -55,11 +57,15 @@ contract CallContractWithToken is AxelarExecutable { amount, msg.sender ); - gateway.callContractWithToken(destinationChain, destinationAddress, payload, symbol, amount); + gatewayWithToken().callContractWithToken( + destinationChain, + destinationAddress, + payload, + symbol, + amount + ); } - - /** * @notice logic to be executed on dest chain * @dev this is triggered automatically by relayer @@ -77,7 +83,7 @@ contract CallContractWithToken is AxelarExecutable { uint256 amount ) internal override { address[] memory recipients = abi.decode(payload, (address[])); - address tokenAddress = gateway.tokenAddresses(tokenSymbol); + address tokenAddress = gatewayWithToken().tokenAddresses(tokenSymbol); uint256 sentAmount = amount / recipients.length; for (uint256 i = 0; i < recipients.length; i++) { diff --git a/examples-web/contracts/call-contract/CallContract.sol b/examples-web/contracts/call-contract/CallContract.sol index 5b0d9cc3..221a97e0 100644 --- a/examples-web/contracts/call-contract/CallContract.sol +++ b/examples-web/contracts/call-contract/CallContract.sol @@ -1,16 +1,14 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; -import { AxelarExecutable } from '@axelar-network/axelar-gmp-sdk-solidity/contracts/executable/AxelarExecutable.sol'; -import { IAxelarGateway } from '@axelar-network/axelar-gmp-sdk-solidity/contracts/interfaces/IAxelarGateway.sol'; -import { IAxelarGasService } from '@axelar-network/axelar-gmp-sdk-solidity/contracts/interfaces/IAxelarGasService.sol'; -import { IERC20 } from '@axelar-network/axelar-gmp-sdk-solidity/contracts/interfaces/IERC20.sol'; +import {AxelarExecutable} from "@axelar-network/axelar-gmp-sdk-solidity/contracts/executable/AxelarExecutable.sol"; +import {IAxelarGasService} from "@axelar-network/axelar-gmp-sdk-solidity/contracts/interfaces/IAxelarGasService.sol"; +import {IERC20} from "@axelar-network/axelar-gmp-sdk-solidity/contracts/interfaces/IERC20.sol"; /** * @title CallContract * @notice Send a message from chain A to chain B and stores gmp message */ contract CallContract is AxelarExecutable { - string public message; string public sourceChain; @@ -20,11 +18,14 @@ contract CallContract is AxelarExecutable { event Executed(string _from, string _message); /** - * + * * @param _gateway address of axl gateway on deployed chain * @param _gasReceiver address of axl gas service on deployed chain */ - constructor(address _gateway, address _gasReceiver) AxelarExecutable(_gateway) { + constructor( + address _gateway, + address _gasReceiver + ) AxelarExecutable(_gateway) { gasService = IAxelarGasService(_gasReceiver); } @@ -40,23 +41,23 @@ contract CallContract is AxelarExecutable { string calldata destinationAddress, string calldata _message ) external payable { - require(msg.value > 0, 'Gas payment is required'); + require(msg.value > 0, "Gas payment is required"); bytes memory payload = abi.encode(_message); - gasService.payNativeGasForContractCall{ value: msg.value }( + gasService.payNativeGasForContractCall{value: msg.value}( address(this), destinationChain, destinationAddress, payload, msg.sender ); - gateway.callContract(destinationChain, destinationAddress, payload); + gateway().callContract(destinationChain, destinationAddress, payload); } /** * @notice logic to be executed on dest chain * @dev this is triggered automatically by relayer - * @param _sourceChain blockchain where tx is originating from + * @param _sourceChain blockchain where tx is originating from * @param _sourceAddress address on src chain where tx is originating from * @param _payload encoded gmp message sent from src chain */ @@ -70,6 +71,5 @@ contract CallContract is AxelarExecutable { sourceAddress = _sourceAddress; emit Executed(sourceAddress, message); - } } diff --git a/examples-web/contracts/nft-linker/NFTLinker.sol b/examples-web/contracts/nft-linker/NFTLinker.sol index a4d74c57..33d800d1 100644 --- a/examples-web/contracts/nft-linker/NFTLinker.sol +++ b/examples-web/contracts/nft-linker/NFTLinker.sol @@ -3,7 +3,6 @@ pragma solidity ^0.8.0; import {IERC20} from "@axelar-network/axelar-gmp-sdk-solidity/contracts/interfaces/IERC20.sol"; import {IAxelarGasService} from "@axelar-network/axelar-gmp-sdk-solidity/contracts/interfaces/IAxelarGasService.sol"; -import {IAxelarGateway} from "@axelar-network/axelar-gmp-sdk-solidity/contracts/interfaces/IAxelarGateway.sol"; import {AxelarExecutable} from "@axelar-network/axelar-gmp-sdk-solidity/contracts/executable/AxelarExecutable.sol"; import {Upgradable} from "@axelar-network/axelar-gmp-sdk-solidity/contracts/upgradable/Upgradable.sol"; import {StringToAddress, AddressToString} from "@axelar-network/axelar-gmp-sdk-solidity/contracts/libs/AddressString.sol"; @@ -24,7 +23,7 @@ contract NftLinker is ERC721URIStorage, AxelarExecutable, Upgradable { error AlreadyInitialized(); /** - * + * * @param _gateway address of axl gateway on deployed chain * @param _gasReceiver address of axl gas service on deployed chain */ @@ -49,7 +48,7 @@ contract NftLinker is ERC721URIStorage, AxelarExecutable, Upgradable { * @notice send nft from src chain to dest chain * @param operator contract handling the nft briding * @param tokenId id of the token being sent - * @param destinationChain name of the dest chain + * @param destinationChain name of the dest chain * @param destinationAddress address on dest chain tx is going to */ function sendNFT( @@ -81,7 +80,7 @@ contract NftLinker is ERC721URIStorage, AxelarExecutable, Upgradable { * @notice Burns and sends interchain nft tx * @dev Used when sending nft back to origin chain * @param tokenId id of nft to be bridged - * @param destinationChain name of the dest chain + * @param destinationChain name of the dest chain * @param destinationAddress address on dest chain tx is going to */ function _sendMintedToken( @@ -115,16 +114,15 @@ contract NftLinker is ERC721URIStorage, AxelarExecutable, Upgradable { msg.sender ); //Call the remote contract. - gateway.callContract(destinationChain, stringAddress, payload); + gateway().callContract(destinationChain, stringAddress, payload); } - /** * @notice Locks and sends a token from src to dest chain. * @dev Used when sending from original chain to dest * @param operator contract handling the nft briding * @param tokenId id of nft to be bridged - * @param destinationChain name of the dest chain + * @param destinationChain name of the dest chain * @param destinationAddress address on dest chain tx is going to */ function _sendNativeToken( @@ -152,10 +150,10 @@ contract NftLinker is ERC721URIStorage, AxelarExecutable, Upgradable { msg.sender ); //Call remote contract. - gateway.callContract(destinationChain, stringAddress, payload); + gateway().callContract(destinationChain, stringAddress, payload); } - /** + /** * @notice logic to be executed on dest chain * @dev this is triggered automatically by relayer since gas was paid for * @param diff --git a/examples/cosmos/call-contract/evm-contract/SendReceive.sol b/examples/cosmos/call-contract/evm-contract/SendReceive.sol index 01330795..fd3eeda6 100644 --- a/examples/cosmos/call-contract/evm-contract/SendReceive.sol +++ b/examples/cosmos/call-contract/evm-contract/SendReceive.sol @@ -42,7 +42,7 @@ contract SendReceive is AxelarExecutable { ); // 3. Make GMP call - gateway.callContract(destinationChain, destinationAddress, payload); + gateway().callContract(destinationChain, destinationAddress, payload); } function _encodePayloadToCosmWasm(bytes memory executeMsgPayload) internal view returns (bytes memory) { @@ -73,7 +73,12 @@ contract SendReceive is AxelarExecutable { return abi.encodePacked(bytes4(0x00000001), gmpPayload); } - function _execute(string calldata /*sourceChain*/, string calldata /*sourceAddress*/, bytes calldata payload) internal override { + function _execute( + bytes32 /*commandId*/, + string calldata /*sourceChain*/, + string calldata /*sourceAddress*/, + bytes calldata payload + ) internal override { (string memory sender, string memory message) = abi.decode(payload, (string, string)); storedMessage = Message(sender, message); } diff --git a/examples/evm/call-contract-gas-estimation/CallContractGasEstimation.sol b/examples/evm/call-contract-gas-estimation/CallContractGasEstimation.sol index c8448a4c..13f00d4f 100644 --- a/examples/evm/call-contract-gas-estimation/CallContractGasEstimation.sol +++ b/examples/evm/call-contract-gas-estimation/CallContractGasEstimation.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; -import { AxelarGMPExecutable } from '@axelar-network/axelar-gmp-sdk-solidity/contracts/executable/AxelarGMPExecutable.sol'; +import { AxelarExecutable } from '@axelar-network/axelar-gmp-sdk-solidity/contracts/executable/AxelarExecutable.sol'; import { IAxelarGateway } from '@axelar-network/axelar-gmp-sdk-solidity/contracts/interfaces/IAxelarGateway.sol'; import { IAxelarGasService } from '@axelar-network/axelar-gmp-sdk-solidity/contracts/interfaces/IAxelarGasService.sol'; import { IERC20 } from '@axelar-network/axelar-gmp-sdk-solidity/contracts/interfaces/IERC20.sol'; @@ -10,7 +10,7 @@ import { IERC20 } from '@axelar-network/axelar-gmp-sdk-solidity/contracts/interf * @title CallContractGasEstimation * @notice Send a message from chain A to chain B and stores gmp message */ -contract CallContractGasEstimation is AxelarGMPExecutable { +contract CallContractGasEstimation is AxelarExecutable { string public message; string public sourceChain; string public sourceAddress; @@ -24,7 +24,7 @@ contract CallContractGasEstimation is AxelarGMPExecutable { * @param _gateway address of axl gateway on deployed chain * @param _gasReceiver address of axl gas service on deployed chain */ - constructor(address _gateway, address _gasReceiver) AxelarGMPExecutable(_gateway) { + constructor(address _gateway, address _gasReceiver) AxelarExecutable(_gateway) { gasService = IAxelarGasService(_gasReceiver); } @@ -42,13 +42,7 @@ contract CallContractGasEstimation is AxelarGMPExecutable { ) external view returns (uint256) { bytes memory payload = abi.encode(_message); - return gasService.estimateGasFee( - destinationChain, - destinationAddress, - payload, - GAS_LIMIT, - new bytes(0) - ); + return gasService.estimateGasFee(destinationChain, destinationAddress, payload, GAS_LIMIT, new bytes(0)); } /** @@ -86,7 +80,12 @@ contract CallContractGasEstimation is AxelarGMPExecutable { * @param _sourceAddress address on src chain where tx is originating from * @param _payload encoded gmp message sent from src chain */ - function _execute(bytes32 commandId,string calldata _sourceChain, string calldata _sourceAddress, bytes calldata _payload) internal override { + function _execute( + bytes32 commandId, + string calldata _sourceChain, + string calldata _sourceAddress, + bytes calldata _payload + ) internal override { (message) = abi.decode(_payload, (string)); sourceChain = _sourceChain; sourceAddress = _sourceAddress; diff --git a/examples/evm/call-contract-with-token/CallContractWithToken.sol b/examples/evm/call-contract-with-token/CallContractWithToken.sol index 12c5d272..42cf5d6b 100644 --- a/examples/evm/call-contract-with-token/CallContractWithToken.sol +++ b/examples/evm/call-contract-with-token/CallContractWithToken.sol @@ -1,8 +1,7 @@ //SPDX-License-Identifier: MIT pragma solidity ^0.8.0; -import { AxelarGMPExecutableWithToken } from '@axelar-network/axelar-gmp-sdk-solidity/contracts/executable/AxelarGMPExecutableWithToken.sol'; -import { IAxelarGMPGateway } from '@axelar-network/axelar-gmp-sdk-solidity/contracts/interfaces/IAxelarGMPGateway.sol'; +import { AxelarExecutableWithToken } from '@axelar-network/axelar-gmp-sdk-solidity/contracts/executable/AxelarExecutableWithToken.sol'; import { IERC20 } from '@axelar-network/axelar-gmp-sdk-solidity/contracts/interfaces/IERC20.sol'; import { IAxelarGasService } from '@axelar-network/axelar-gmp-sdk-solidity/contracts/interfaces/IAxelarGasService.sol'; @@ -10,7 +9,7 @@ import { IAxelarGasService } from '@axelar-network/axelar-gmp-sdk-solidity/contr * @title Call Contract With Token * @notice Send a token along with an Axelar GMP message between two blockchains */ -contract CallContractWithToken is AxelarGMPExecutableWithToken { +contract CallContractWithToken is AxelarExecutableWithToken { IAxelarGasService public immutable gasService; event Executed(bytes32 commandId, string sourceChain, string sourceAddress, bytes payload); @@ -21,7 +20,7 @@ contract CallContractWithToken is AxelarGMPExecutableWithToken { * @param _gateway address of axl gateway on deployed chain * @param _gasReceiver address of axl gas service on deployed chain */ - constructor(address _gateway, address _gasReceiver) AxelarGMPExecutableWithToken(_gateway) { + constructor(address _gateway, address _gasReceiver) AxelarExecutableWithToken(_gateway) { gasService = IAxelarGasService(_gasReceiver); } @@ -59,8 +58,13 @@ contract CallContractWithToken is AxelarGMPExecutableWithToken { gatewayWithToken().callContractWithToken(destinationChain, destinationAddress, payload, symbol, amount); } - function _execute(bytes32 commandId,string calldata sourceChain, string calldata sourceAddress, bytes calldata payload) internal override { - emit Executed(commandId,sourceChain, sourceAddress, payload); + function _execute( + bytes32 commandId, + string calldata sourceChain, + string calldata sourceAddress, + bytes calldata payload + ) internal override { + emit Executed(commandId, sourceChain, sourceAddress, payload); } /** @@ -88,5 +92,4 @@ contract CallContractWithToken is AxelarGMPExecutableWithToken { emit ExecutedWithToken(commandId, sourceChain, sourceAddress, payload, tokenSymbol, amount); } - } diff --git a/examples/evm/call-contract-with-token/index.js b/examples/evm/call-contract-with-token/index.js index 22a6021f..bc2999e6 100644 --- a/examples/evm/call-contract-with-token/index.js +++ b/examples/evm/call-contract-with-token/index.js @@ -8,8 +8,8 @@ const { const CallContractWithToken = rootRequire( './artifacts/examples/evm/call-contract-with-token/CallContractWithToken.sol/CallContractWithToken.json', ); -const Gateway = rootRequire( - './artifacts/@axelar-network/axelar-gmp-sdk-solidity/contracts/interfaces/IAxelarGateway.sol/IAxelarGateway.json', +const GatewayWithToken = rootRequire( + './artifacts/@axelar-network/axelar-gmp-sdk-solidity/contracts/interfaces/IAxelarGatewayWithToken.sol/IAxelarGatewayWithToken.json', ); const IERC20 = rootRequire('./artifacts/@axelar-network/axelar-gmp-sdk-solidity/contracts/interfaces/IERC20.sol/IERC20.json'); @@ -18,7 +18,7 @@ async function deploy(chain, wallet) { const provider = getDefaultProvider(chain.rpc); chain.wallet = wallet.connect(provider); chain.contract = await deployContract(wallet, CallContractWithToken, [chain.gateway, chain.gasService]); - const gateway = new Contract(chain.gateway, Gateway.abi, chain.wallet); + const gateway = new Contract(chain.gateway, GatewayWithToken.abi, chain.wallet); const usdcAddress = await gateway.tokenAddresses('aUSDC'); chain.usdc = new Contract(usdcAddress, IERC20.abi, chain.wallet); console.log(`Deployed CallContractWithToken for ${chain.name} at ${chain.contract.address}.`); diff --git a/examples/evm/call-contract/CallContract.sol b/examples/evm/call-contract/CallContract.sol index e7d10f27..818a3b43 100644 --- a/examples/evm/call-contract/CallContract.sol +++ b/examples/evm/call-contract/CallContract.sol @@ -1,8 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; -import { AxelarGMPExecutable } from '@axelar-network/axelar-gmp-sdk-solidity/contracts/executable/AxelarGMPExecutable.sol'; -import { IAxelarGateway } from '@axelar-network/axelar-gmp-sdk-solidity/contracts/interfaces/IAxelarGateway.sol'; +import { AxelarExecutable } from '@axelar-network/axelar-gmp-sdk-solidity/contracts/executable/AxelarExecutable.sol'; import { IAxelarGasService } from '@axelar-network/axelar-gmp-sdk-solidity/contracts/interfaces/IAxelarGasService.sol'; import { IERC20 } from '@axelar-network/axelar-gmp-sdk-solidity/contracts/interfaces/IERC20.sol'; @@ -10,7 +9,7 @@ import { IERC20 } from '@axelar-network/axelar-gmp-sdk-solidity/contracts/interf * @title CallContract * @notice Send a message from chain A to chain B and stores gmp message */ -contract CallContract is AxelarGMPExecutable { +contract CallContract is AxelarExecutable { string public message; string public sourceChain; string public sourceAddress; @@ -23,7 +22,7 @@ contract CallContract is AxelarGMPExecutable { * @param _gateway address of axl gateway on deployed chain * @param _gasReceiver address of axl gas service on deployed chain */ - constructor(address _gateway, address _gasReceiver) AxelarGMPExecutable(_gateway) { + constructor(address _gateway, address _gasReceiver) AxelarExecutable(_gateway) { gasService = IAxelarGasService(_gasReceiver); } @@ -59,7 +58,12 @@ contract CallContract is AxelarGMPExecutable { * @param _sourceAddress address on src chain where tx is originating from * @param _payload encoded gmp message sent from src chain */ - function _execute(bytes32 commandId, string calldata _sourceChain, string calldata _sourceAddress, bytes calldata _payload) internal override { + function _execute( + bytes32 commandId, + string calldata _sourceChain, + string calldata _sourceAddress, + bytes calldata _payload + ) internal override { (message) = abi.decode(_payload, (string)); sourceChain = _sourceChain; sourceAddress = _sourceAddress; diff --git a/examples/evm/cross-chain-lending/CompoundInterface.sol b/examples/evm/cross-chain-lending/CompoundInterface.sol index 2f251448..2330023d 100644 --- a/examples/evm/cross-chain-lending/CompoundInterface.sol +++ b/examples/evm/cross-chain-lending/CompoundInterface.sol @@ -1,12 +1,12 @@ //SPDX-License-Identifier: MIT pragma solidity ^0.8.0; -import '@axelar-network/axelar-gmp-sdk-solidity/contracts/executable/AxelarExecutable.sol'; +import '@axelar-network/axelar-gmp-sdk-solidity/contracts/executable/AxelarExecutableWithToken.sol'; import '@axelar-network/axelar-gmp-sdk-solidity/contracts/interfaces/IERC20.sol'; import './interfaces/CErc20Interface.sol'; import './interfaces/Comptroller.sol'; -contract CompoundInterface is AxelarExecutable { +contract CompoundInterface is AxelarExecutableWithToken { bytes32 internal constant SELECTOR_SUPPLY_AND_BORROW = keccak256('supplyAndBorrow'); bytes32 internal constant SELECTOR_REPAY_AND_REDEEM = keccak256('repayAndRedeem'); @@ -26,7 +26,7 @@ contract CompoundInterface is AxelarExecutable { Comptroller comptroller_, string[] memory supportedTokens, address[] memory cTokens - ) AxelarExecutable(gateway_) { + ) AxelarExecutableWithToken(gateway_) { require(supportedTokens.length == cTokens.length, 'Lengths missmatch'); comptroller = comptroller_; @@ -66,7 +66,7 @@ contract CompoundInterface is AxelarExecutable { function _mint(string calldata tokenSymbol, uint256 amount, string memory userAddress) internal { CErc20Interface cToken = _cTokens[tokenSymbol]; - IERC20 tokenAddress = IERC20(gateway.tokenAddresses(tokenSymbol)); + IERC20 tokenAddress = IERC20(gatewayWithToken().tokenAddresses(tokenSymbol)); tokenAddress.approve(address(cToken), amount); uint256 balanceBefore = cToken.balanceOf(address(this)); @@ -79,18 +79,18 @@ contract CompoundInterface is AxelarExecutable { function _borrow(string calldata sourceChain, string memory userAddress, string memory tokenSymbol, uint256 amount) internal { CErc20Interface cToken = _cTokens[tokenSymbol]; - IERC20 tokenAddress = IERC20(gateway.tokenAddresses(tokenSymbol)); + IERC20 tokenAddress = IERC20(gatewayWithToken().tokenAddresses(tokenSymbol)); // in production must limit borrow amount corresponding to the proportion this user supplied as collateral cToken.borrow(amount); - tokenAddress.approve(address(gateway), amount); - gateway.sendToken(sourceChain, userAddress, tokenSymbol, amount); + tokenAddress.approve(address(gatewayWithToken()), amount); + gatewayWithToken().sendToken(sourceChain, userAddress, tokenSymbol, amount); } function _repayBorrow(string calldata tokenSymbol, uint256 amount) internal { CErc20Interface cToken = _cTokens[tokenSymbol]; - IERC20 tokenAddress = IERC20(gateway.tokenAddresses(tokenSymbol)); + IERC20 tokenAddress = IERC20(gatewayWithToken().tokenAddresses(tokenSymbol)); tokenAddress.approve(address(cToken), amount); cToken.repayBorrow(amount); @@ -98,7 +98,7 @@ contract CompoundInterface is AxelarExecutable { function _redeem(string calldata sourceChain, string memory userAddress, string memory tokenSymbol, uint256 amount) internal { CErc20Interface cToken = _cTokens[tokenSymbol]; - IERC20 tokenAddress = IERC20(gateway.tokenAddresses(tokenSymbol)); + IERC20 tokenAddress = IERC20(gatewayWithToken().tokenAddresses(tokenSymbol)); require(cBalances[userAddress][tokenSymbol] >= amount, 'Not enough balance'); cBalances[userAddress][tokenSymbol] -= amount; @@ -108,11 +108,12 @@ contract CompoundInterface is AxelarExecutable { require(result == 0, 'Error redeeming for underlying'); uint256 redeemedAmount = tokenAddress.balanceOf(address(this)) - balanceBefore; - tokenAddress.approve(address(gateway), redeemedAmount); - gateway.sendToken(sourceChain, userAddress, tokenSymbol, redeemedAmount); + tokenAddress.approve(address(gatewayWithToken()), redeemedAmount); + gatewayWithToken().sendToken(sourceChain, userAddress, tokenSymbol, redeemedAmount); } function _executeWithToken( + bytes32 /*commandId*/, string calldata sourceChain, string calldata sourceAddress, bytes calldata payload, @@ -150,4 +151,11 @@ contract CompoundInterface is AxelarExecutable { } } } + + function _execute( + bytes32 commandId, + string calldata sourceChain, + string calldata sourceAddress, + bytes calldata payload + ) internal override {} } diff --git a/examples/evm/cross-chain-lending/LendingSatellite.sol b/examples/evm/cross-chain-lending/LendingSatellite.sol index 510a0387..202a3052 100644 --- a/examples/evm/cross-chain-lending/LendingSatellite.sol +++ b/examples/evm/cross-chain-lending/LendingSatellite.sol @@ -1,19 +1,15 @@ //SPDX-License-Identifier: MIT pragma solidity ^0.8.0; -import '@axelar-network/axelar-gmp-sdk-solidity/contracts/executable/AxelarExecutable.sol'; +import '@axelar-network/axelar-gmp-sdk-solidity/contracts/executable/AxelarExecutableWithToken.sol'; import '@axelar-network/axelar-gmp-sdk-solidity/contracts/interfaces/IERC20.sol'; import '@openzeppelin/contracts/utils/Strings.sol'; -contract LendingSatellite is AxelarExecutable { +contract LendingSatellite is AxelarExecutableWithToken { string public baseChain; string public baseContract; - constructor( - address gateway_, - string memory baseChain_, - string memory baseContract_ - ) AxelarExecutable(gateway_) { + constructor(address gateway_, string memory baseChain_, string memory baseContract_) AxelarExecutableWithToken(gateway_) { baseChain = baseChain_; baseContract = baseContract_; } @@ -24,14 +20,14 @@ contract LendingSatellite is AxelarExecutable { string calldata borrowTokenSymbol, uint256 borrowAmount ) external { - address supplyTokenAddress = gateway.tokenAddresses(supplyTokenSymbol); + address supplyTokenAddress = gatewayWithToken().tokenAddresses(supplyTokenSymbol); IERC20(supplyTokenAddress).transferFrom(msg.sender, address(this), supplyAmount); - IERC20(supplyTokenAddress).approve(address(gateway), supplyAmount); + IERC20(supplyTokenAddress).approve(address(gatewayWithToken()), supplyAmount); bytes memory params = abi.encode(borrowTokenSymbol, borrowAmount, Strings.toHexString(uint256(uint160(msg.sender)), 20)); bytes memory payload = abi.encode('supplyAndBorrow', params); - gateway.callContractWithToken(baseChain, baseContract, payload, supplyTokenSymbol, supplyAmount); + gatewayWithToken().callContractWithToken(baseChain, baseContract, payload, supplyTokenSymbol, supplyAmount); } function repayAndRedeem( @@ -40,13 +36,29 @@ contract LendingSatellite is AxelarExecutable { string calldata redeemTokenSymbol, uint256 redeemAmount ) external { - address repayTokenAddress = gateway.tokenAddresses(repayTokenSymbol); + address repayTokenAddress = gatewayWithToken().tokenAddresses(repayTokenSymbol); IERC20(repayTokenAddress).transferFrom(msg.sender, address(this), repayAmount); - IERC20(repayTokenAddress).approve(address(gateway), repayAmount); + IERC20(repayTokenAddress).approve(address(gatewayWithToken()), repayAmount); bytes memory params = abi.encode(redeemTokenSymbol, redeemAmount, Strings.toHexString(uint256(uint160(msg.sender)), 20)); bytes memory payload = abi.encode('repayAndRedeem', params); - gateway.callContractWithToken(baseChain, baseContract, payload, repayTokenSymbol, repayAmount); + gatewayWithToken().callContractWithToken(baseChain, baseContract, payload, repayTokenSymbol, repayAmount); } + + function _execute( + bytes32 commandId, + string calldata sourceChain, + string calldata sourceAddress, + bytes calldata payload + ) internal virtual override {} + + function _executeWithToken( + bytes32 commandId, + string calldata sourceChain, + string calldata sourceAddress, + bytes calldata payload, + string calldata tokenSymbol, + uint256 amount + ) internal virtual override {} } diff --git a/examples/evm/cross-chain-token/ERC20CrossChain.sol b/examples/evm/cross-chain-token/ERC20CrossChain.sol index e5f77aff..b1f3134c 100644 --- a/examples/evm/cross-chain-token/ERC20CrossChain.sol +++ b/examples/evm/cross-chain-token/ERC20CrossChain.sol @@ -42,10 +42,15 @@ contract ERC20CrossChain is AxelarExecutable, ERC20, Upgradable, IERC20CrossChai bytes memory payload = abi.encode(destinationAddress, amount); string memory stringAddress = address(this).toString(); gasService.payNativeGasForContractCall{ value: msg.value }(address(this), destinationChain, stringAddress, payload, msg.sender); - gateway.callContract(destinationChain, stringAddress, payload); + gateway().callContract(destinationChain, stringAddress, payload); } - function _execute(string calldata /*sourceChain*/, string calldata sourceAddress, bytes calldata payload) internal override { + function _execute( + bytes32 /*commandId*/, + string calldata /*sourceChain*/, + string calldata sourceAddress, + bytes calldata payload + ) internal override { if (sourceAddress.toAddress() != address(this)) { emit FalseSender(sourceAddress, sourceAddress); return; diff --git a/examples/evm/deposit-address/index.js b/examples/evm/deposit-address/index.js index 90d10fd2..41921bdd 100644 --- a/examples/evm/deposit-address/index.js +++ b/examples/evm/deposit-address/index.js @@ -2,8 +2,8 @@ const { getDefaultProvider, Contract, utils } = require('ethers'); -const Gateway = rootRequire( - './artifacts/@axelar-network/axelar-gmp-sdk-solidity/contracts/interfaces/IAxelarGateway.sol/IAxelarGateway.json', +const GatewayWithToken = rootRequire( + './artifacts/@axelar-network/axelar-gmp-sdk-solidity/contracts/interfaces/IAxelarGatewayWithToken.sol/IAxelarGatewayWithToken.json', ); const IERC20 = rootRequire('./artifacts/@axelar-network/axelar-gmp-sdk-solidity/contracts/interfaces/IERC20.sol/IERC20.json'); @@ -17,16 +17,16 @@ async function execute(chains, wallet, options = {}) { for (const chain of [source, destination]) { const provider = getDefaultProvider(chain.rpc); chain.wallet = wallet.connect(provider); - chain.contract = new Contract(chain.gateway.address, Gateway.abi, chain.wallet); + chain.contract = new Contract(chain.gateway.address, GatewayWithToken.abi, chain.wallet); const tokenAddress = await chain.contract.tokenAddresses(symbol); chain.token = new Contract(tokenAddress, IERC20.abi, chain.wallet); } async function print() { - const sourceBalance = utils.formatEther(await source.token.balanceOf(wallet.address)) - const destBalance = utils.formatEther(await destination.token.balanceOf(destinationAddress)) + const sourceBalance = utils.formatEther(await source.token.balanceOf(wallet.address)); + const destBalance = utils.formatEther(await destination.token.balanceOf(destinationAddress)); - console.log(`Balance at ${source.name} is ${Number(sourceBalance).toFixed(3)}`); + console.log(`Balance at ${source.name} is ${Number(sourceBalance).toFixed(3)}`); console.log(`Balance at ${destination.name} is ${Number(destBalance).toFixed(3)}`); } diff --git a/examples/evm/multichain-game/MultichainGame.sol b/examples/evm/multichain-game/MultichainGame.sol index 3c9e29b1..5f21bf0e 100644 --- a/examples/evm/multichain-game/MultichainGame.sol +++ b/examples/evm/multichain-game/MultichainGame.sol @@ -3,21 +3,20 @@ pragma solidity ^0.8.0; import { IERC20 } from '@openzeppelin/contracts/token/ERC20/IERC20.sol'; -import { AxelarExecutable } from '@axelar-network/axelar-gmp-sdk-solidity/contracts/executable/AxelarExecutable.sol'; -import { IAxelarGateway } from '@axelar-network/axelar-gmp-sdk-solidity/contracts/interfaces/IAxelarGateway.sol'; +import { AxelarExecutableWithToken } from '@axelar-network/axelar-gmp-sdk-solidity/contracts/executable/AxelarExecutableWithToken.sol'; import { IAxelarGasService } from '@axelar-network/axelar-gmp-sdk-solidity/contracts/interfaces/IAxelarGasService.sol'; import '@openzeppelin/contracts/utils/Strings.sol'; import { AddressToString, StringToAddress } from '@axelar-network/axelar-gmp-sdk-solidity/contracts/libs/AddressString.sol'; import { MultichainGameReceiver } from './MultichainGameReceiver.sol'; -contract MultichainGame is AxelarExecutable { +contract MultichainGame is AxelarExecutableWithToken { using AddressToString for address; using StringToAddress for string; IAxelarGasService public immutable gasService; - constructor(address _gateway, address _gasService) AxelarExecutable(_gateway) { + constructor(address _gateway, address _gasService) AxelarExecutableWithToken(_gateway) { gasService = IAxelarGasService(_gasService); } @@ -30,7 +29,7 @@ contract MultichainGame is AxelarExecutable { ) external payable { require(_guess >= 1 && _guess <= 6, 'Invalid guess'); - address tokenAddress = gateway.tokenAddresses(_symbol); + address tokenAddress = gatewayWithToken().tokenAddresses(_symbol); require(tokenAddress != address(0), 'Invalid token'); @@ -45,7 +44,7 @@ contract MultichainGame is AxelarExecutable { bytes memory encodedGuess = abi.encode(msg.sender, _guess); IERC20(tokenAddress).transferFrom(msg.sender, address(this), _amount); - IERC20(tokenAddress).approve(address(gateway), _amount); + IERC20(tokenAddress).approve(address(gatewayWithToken()), _amount); gasService.payNativeGasForContractCallWithToken{ value: msg.value }( address(this), @@ -57,19 +56,20 @@ contract MultichainGame is AxelarExecutable { msg.sender ); - gateway.callContractWithToken(_destChain, _gameReceiver, encodedGuess, _symbol, _amount); + gatewayWithToken().callContractWithToken(_destChain, _gameReceiver, encodedGuess, _symbol, _amount); } } function _executeWithToken( - string calldata, - string calldata, + bytes32 /*commandId*/, + string calldata /*sourceChain*/, + string calldata /*sourceAddress*/, bytes calldata _payload, string calldata _symbol, uint256 _amount ) internal override { address player = abi.decode(_payload, (address)); - address tokenAddress = gateway.tokenAddresses(_symbol); + address tokenAddress = gatewayWithToken().tokenAddresses(_symbol); IERC20(tokenAddress).transfer(player, _amount); } @@ -83,6 +83,17 @@ contract MultichainGame is AxelarExecutable { } function _payoutWinner(address _player, address _gameReceiver) internal { - MultichainGameReceiver(_gameReceiver).payOutAllTokensToWinnerSameChain(_player, address(this).toString(), Strings.toString(block.chainid)); + MultichainGameReceiver(_gameReceiver).payOutAllTokensToWinnerSameChain( + _player, + address(this).toString(), + Strings.toString(block.chainid) + ); } + + function _execute( + bytes32 commandId, + string calldata sourceChain, + string calldata sourceAddress, + bytes calldata payload + ) internal virtual override {} } diff --git a/examples/evm/multichain-game/MultichainGameReceiver.sol b/examples/evm/multichain-game/MultichainGameReceiver.sol index c1de7493..2bc00971 100644 --- a/examples/evm/multichain-game/MultichainGameReceiver.sol +++ b/examples/evm/multichain-game/MultichainGameReceiver.sol @@ -3,19 +3,18 @@ pragma solidity ^0.8.0; import { IERC20 } from '@openzeppelin/contracts/token/ERC20/IERC20.sol'; -import { AxelarExecutable } from '@axelar-network/axelar-gmp-sdk-solidity/contracts/executable/AxelarExecutable.sol'; -import { IAxelarGateway } from '@axelar-network/axelar-gmp-sdk-solidity/contracts/interfaces/IAxelarGateway.sol'; +import { AxelarExecutableWithToken } from '@axelar-network/axelar-gmp-sdk-solidity/contracts/executable/AxelarExecutableWithToken.sol'; import { IAxelarGasService } from '@axelar-network/axelar-gmp-sdk-solidity/contracts/interfaces/IAxelarGasService.sol'; import '@openzeppelin/contracts/utils/Strings.sol'; -contract MultichainGameReceiver is AxelarExecutable { +contract MultichainGameReceiver is AxelarExecutableWithToken { string[] public uniqueTokens; IAxelarGasService public immutable gasService; address multichainGame; - constructor(address _gateway, address _gasService, address _game) AxelarExecutable(_gateway) { + constructor(address _gateway, address _gasService, address _game) AxelarExecutableWithToken(_gateway) { gasService = IAxelarGasService(_gasService); multichainGame = _game; } @@ -26,6 +25,7 @@ contract MultichainGameReceiver is AxelarExecutable { } function _executeWithToken( + bytes32 /*commandId*/, string calldata _sourceChain, string calldata _sourceAddress, bytes calldata _payload, @@ -72,14 +72,21 @@ contract MultichainGameReceiver is AxelarExecutable { function _payout(address _player, string calldata _sourceAddress, string calldata _winnersChain) internal { for (uint i = 0; i < uniqueTokens.length; i++) { string memory tokenSymbol = uniqueTokens[i]; - address tokenAddress = gateway.tokenAddresses(tokenSymbol); + address tokenAddress = gatewayWithToken().tokenAddresses(tokenSymbol); uint256 transferAmount = IERC20(tokenAddress).balanceOf(address(this)); if (keccak256(abi.encode(_winnersChain)) == keccak256(abi.encode(Strings.toString(block.chainid)))) { IERC20(tokenAddress).transfer(_player, transferAmount); } else { - IERC20(tokenAddress).approve(address(gateway), transferAmount); - gateway.callContractWithToken(_winnersChain, _sourceAddress, abi.encode(_player), tokenSymbol, transferAmount); + IERC20(tokenAddress).approve(address(gatewayWithToken()), transferAmount); + gatewayWithToken().callContractWithToken(_winnersChain, _sourceAddress, abi.encode(_player), tokenSymbol, transferAmount); } } } + + function _execute( + bytes32 commandId, + string calldata sourceChain, + string calldata sourceAddress, + bytes calldata payload + ) internal virtual override {} } diff --git a/examples/evm/multichain-nft-mint/MultichainNFTMint.sol b/examples/evm/multichain-nft-mint/MultichainNFTMint.sol index df315246..c7b1b915 100644 --- a/examples/evm/multichain-nft-mint/MultichainNFTMint.sol +++ b/examples/evm/multichain-nft-mint/MultichainNFTMint.sol @@ -35,10 +35,10 @@ contract MultichainNFTMint is AxelarExecutable { msg.sender ); - gateway.callContract(_destChain, _destContractAddr, mintNftPayload); + gateway().callContract(_destChain, _destContractAddr, mintNftPayload); } - function _execute(string calldata, string calldata, bytes calldata _payload) internal override { + function _execute(bytes32 /*commandId*/, string calldata, string calldata, bytes calldata _payload) internal override { (bool success, ) = address(nft).call(_payload); require(success, 'safeMint() call failed'); } diff --git a/examples/evm/multichain-swap/MultichainSwap.sol b/examples/evm/multichain-swap/MultichainSwap.sol index 17ffa21b..42e8f0fe 100644 --- a/examples/evm/multichain-swap/MultichainSwap.sol +++ b/examples/evm/multichain-swap/MultichainSwap.sol @@ -3,13 +3,12 @@ pragma solidity ^0.8.0; import { IERC20 } from '@openzeppelin/contracts/token/ERC20/IERC20.sol'; -import { AxelarExecutable } from '@axelar-network/axelar-gmp-sdk-solidity/contracts/executable/AxelarExecutable.sol'; -import { IAxelarGateway } from '@axelar-network/axelar-gmp-sdk-solidity/contracts/interfaces/IAxelarGateway.sol'; +import { AxelarExecutableWithToken } from '@axelar-network/axelar-gmp-sdk-solidity/contracts/executable/AxelarExecutableWithToken.sol'; import { IAxelarGasService } from '@axelar-network/axelar-gmp-sdk-solidity/contracts/interfaces/IAxelarGasService.sol'; import '@uniswap/v3-periphery/contracts/interfaces/ISwapRouter.sol'; -contract MultichainSwap is AxelarExecutable { +contract MultichainSwap is AxelarExecutableWithToken { address public wmatic; //Mumbai: 0x9c3C9283D3e44854697Cd22D3Faa240Cfb032889 address public weth; //Mumbai: 0xA6FA4fB5f76172d178d61B04b0ecd319C5d1C0aa @@ -18,27 +17,27 @@ contract MultichainSwap is AxelarExecutable { // mumbai router ISwapRouter public immutable swapRouter = ISwapRouter(0xE592427A0AEce92De3Edee1F18E0157C05861564); - constructor(address _gateway, address _gasService, address _wmatic, address _weth) AxelarExecutable(_gateway) { + constructor(address _gateway, address _gasService, address _wmatic, address _weth) AxelarExecutableWithToken(_gateway) { gasService = IAxelarGasService(_gasService); wmatic = _wmatic; weth = _weth; } - + // Example from live demo was: //WMATIC from Celo sent to Mumbai for the swap function interchainSwap( string memory _destChain, string memory _destContractAddr, - string memory _symbol, + string memory _symbol, uint256 _amount ) external payable { require(msg.value > 0, 'Gas payment required'); uint24 poolFee = 3000; - address tokenAddress = gateway.tokenAddresses(_symbol); + address tokenAddress = gatewayWithToken().tokenAddresses(_symbol); IERC20(tokenAddress).transferFrom(msg.sender, address(this), _amount); - IERC20(tokenAddress).approve(address(gateway), _amount); + IERC20(tokenAddress).approve(address(gatewayWithToken()), _amount); ISwapRouter.ExactInputSingleParams memory swapParams = ISwapRouter.ExactInputSingleParams({ tokenIn: wmatic, @@ -63,12 +62,13 @@ contract MultichainSwap is AxelarExecutable { msg.sender ); - gateway.callContractWithToken(_destChain, _destContractAddr, encodedSwapPayload, _symbol, _amount); + gatewayWithToken().callContractWithToken(_destChain, _destContractAddr, encodedSwapPayload, _symbol, _amount); } function _executeWithToken( - string calldata, - string calldata, + bytes32 /*commandId*/, + string calldata /*sourceChain*/, + string calldata /*sourceAddress*/, bytes calldata _payload, string calldata, uint256 _amount @@ -79,4 +79,11 @@ contract MultichainSwap is AxelarExecutable { swapRouter.exactInputSingle(decodedGmpMessage); } + + function _execute( + bytes32 commandId, + string calldata sourceChain, + string calldata sourceAddress, + bytes calldata payload + ) internal override {} } diff --git a/examples/evm/nft-auctionhouse/NftAuctionhouseRemote.sol b/examples/evm/nft-auctionhouse/NftAuctionhouseRemote.sol index a83e22ae..d2256775 100644 --- a/examples/evm/nft-auctionhouse/NftAuctionhouseRemote.sol +++ b/examples/evm/nft-auctionhouse/NftAuctionhouseRemote.sol @@ -3,13 +3,12 @@ pragma solidity ^0.8.0; import '@openzeppelin/contracts/token/ERC721/IERC721.sol'; import '@openzeppelin/contracts/token/ERC20/IERC20.sol'; -import { AxelarExecutable } from '@axelar-network/axelar-gmp-sdk-solidity/contracts/executable/AxelarExecutable.sol'; -import { IAxelarGateway } from '@axelar-network/axelar-gmp-sdk-solidity/contracts/interfaces/IAxelarGateway.sol'; +import { AxelarExecutableWithToken } from '@axelar-network/axelar-gmp-sdk-solidity/contracts/executable/AxelarExecutableWithToken.sol'; import '@axelar-network/axelar-gmp-sdk-solidity/contracts/interfaces/IAxelarGasService.sol'; import './NftAuctionhouse.sol'; import { AddressToString } from '@axelar-network/axelar-gmp-sdk-solidity/contracts/libs/AddressString.sol'; -contract NftAuctionhouseRemote is NftAuctionhouse, AxelarExecutable { +contract NftAuctionhouseRemote is NftAuctionhouse, AxelarExecutableWithToken { IAxelarGasService public immutable gasService; mapping(address => mapping(uint256 => address)) biddersRemote; mapping(address => mapping(uint256 => string)) sourceChains; @@ -17,11 +16,7 @@ contract NftAuctionhouseRemote is NftAuctionhouse, AxelarExecutable { using AddressToString for address; - constructor( - address gateway_, - address gasReceiver_, - address usdc_ - ) NftAuctionhouse(usdc_) AxelarExecutable(gateway_) { + constructor(address gateway_, address gasReceiver_, address usdc_) NftAuctionhouse(usdc_) AxelarExecutableWithToken(gateway_) { gasService = IAxelarGasService(gasReceiver_); } @@ -35,25 +30,25 @@ contract NftAuctionhouseRemote is NftAuctionhouse, AxelarExecutable { ) external payable { require(msg.value > 0, 'Gas payment is required'); - usdc.transferFrom(msg.sender, address(this), amount); - usdc.approve(address(gateway), amount); + usdc.approve(address(gatewayWithToken()), amount); bytes memory payload = abi.encode(msg.sender, bidder, operator, tokenId); - gasService.payNativeGasForContractCallWithToken{ value: msg.value }( - address(this), - destinationChain, - destinationAuctionhouse, - payload, - 'aUSDC', - amount, - msg.sender - ); - gateway.callContractWithToken(destinationChain, destinationAuctionhouse, payload, 'aUSDC', amount); + gasService.payNativeGasForContractCallWithToken{ value: msg.value }( + address(this), + destinationChain, + destinationAuctionhouse, + payload, + 'aUSDC', + amount, + msg.sender + ); + gatewayWithToken().callContractWithToken(destinationChain, destinationAuctionhouse, payload, 'aUSDC', amount); } function _executeWithToken( + bytes32 /*commandId*/, string calldata sourceChain, - string calldata, /*sourceAddress*/ + string calldata /*sourceAddress*/, bytes calldata payload, string calldata tokenSymbol, uint256 amount @@ -64,8 +59,8 @@ contract NftAuctionhouseRemote is NftAuctionhouse, AxelarExecutable { ); (bool success, ) = address(this).call(abi.encodeWithSelector(this._bid.selector, address(this), operator, tokenId, amount)); if (!success) { - usdc.approve(address(gateway), amount); - gateway.sendToken(sourceChain, refundAddress.toString(), tokenSymbol, amount); + usdc.approve(address(gatewayWithToken()), amount); + gatewayWithToken().sendToken(sourceChain, refundAddress.toString(), tokenSymbol, amount); } else { biddersRemote[operator][tokenId] = bidder; sourceChains[operator][tokenId] = sourceChain; @@ -73,27 +68,16 @@ contract NftAuctionhouseRemote is NftAuctionhouse, AxelarExecutable { } } - function _refundPrevBidder( - address bidder, - uint256 amount, - address operator, - uint256 tokenId - ) internal override { + function _refundPrevBidder(address bidder, uint256 amount, address operator, uint256 tokenId) internal override { if (bidder == address(this)) { - usdc.approve(address(gateway), amount); - gateway.sendToken(sourceChains[operator][tokenId], refundAddresses[operator][tokenId].toString(), 'aUSDC', amount); + usdc.approve(address(gatewayWithToken()), amount); + gatewayWithToken().sendToken(sourceChains[operator][tokenId], refundAddresses[operator][tokenId].toString(), 'aUSDC', amount); } else { usdc.transfer(bidder, amount); } } - function _giveNft( - address auctioneer, - address lastBidder, - address operator, - uint256 tokenId, - uint256 lastBid - ) internal override { + function _giveNft(address auctioneer, address lastBidder, address operator, uint256 tokenId, uint256 lastBid) internal override { usdc.transfer(auctioneer, lastBid); address actualBidder = lastBidder == address(this) ? biddersRemote[operator][tokenId] : lastBidder; @@ -102,4 +86,11 @@ contract NftAuctionhouseRemote is NftAuctionhouse, AxelarExecutable { bidders[operator][tokenId] = address(0); bids[operator][tokenId] = 0; } + + function _execute( + bytes32 commandId, + string calldata sourceChain, + string calldata sourceAddress, + bytes calldata payload + ) internal override {} } diff --git a/examples/evm/nft-auctionhouse/index.js b/examples/evm/nft-auctionhouse/index.js index 6af11063..fb0c1d37 100644 --- a/examples/evm/nft-auctionhouse/index.js +++ b/examples/evm/nft-auctionhouse/index.js @@ -16,8 +16,8 @@ const bidRemote = require('./bidRemote'); const auction = require('./auction'); const resolveAuction = require('./resolveAuction'); -const Gateway = rootRequire( - './artifacts/@axelar-network/axelar-gmp-sdk-solidity/contracts/interfaces/IAxelarGateway.sol/IAxelarGateway.json', +const GatewayWithToken = rootRequire( + './artifacts/@axelar-network/axelar-gmp-sdk-solidity/contracts/interfaces/IAxelarGatewayWithToken.sol/IAxelarGatewayWithToken.json', ); const ERC721 = rootRequire('./artifacts/examples/evm/nft-auctionhouse/ERC721Demo.sol/ERC721Demo.json'); const NftAuctionHouse = rootRequire('./artifacts/examples/evm/nft-auctionhouse/NftAuctionhouseRemote.sol/NftAuctionhouseRemote.json'); @@ -31,7 +31,7 @@ async function deploy(chain, wallet) { chain.erc721 = erc721.address; console.log(`Deployed ERC721Demo for ${chain.name} at ${chain.erc721}.`); console.log(`Deploying NftAuctionhouse for ${chain.name}.`); - const gateway = new Contract(chain.gateway, Gateway.abi, wallet); + const gateway = new Contract(chain.gateway, GatewayWithToken.abi, wallet); const tokenAddress = await gateway.tokenAddresses('aUSDC'); console.log(tokenAddress); chain.contract = await deployContract(wallet, NftAuctionHouse, [chain.gateway, chain.gasService, tokenAddress]); diff --git a/examples/evm/nft-linker/NftLinker.sol b/examples/evm/nft-linker/NftLinker.sol index fa330458..a3ab9185 100644 --- a/examples/evm/nft-linker/NftLinker.sol +++ b/examples/evm/nft-linker/NftLinker.sol @@ -85,7 +85,7 @@ contract NftLinker is ERC721URIStorage, AxelarExecutable, Upgradable { //Pay for gas. We could also send the contract call here but then the _sourceAddress will be that of the gas receiver which is a problem later. gasService.payNativeGasForContractCall{ value: msg.value }(address(this), _destinationChain, stringAddress, payload, msg.sender); //Call the remote contract. - gateway.callContract(_destinationChain, stringAddress, payload); + gateway().callContract(_destinationChain, stringAddress, payload); } /** @@ -106,7 +106,7 @@ contract NftLinker is ERC721URIStorage, AxelarExecutable, Upgradable { gasService.payNativeGasForContractCall{ value: msg.value }(address(this), _destinationChain, stringAddress, payload, msg.sender); //Call remote contract. - gateway.callContract(_destinationChain, stringAddress, payload); + gateway().callContract(_destinationChain, stringAddress, payload); } /** @@ -116,7 +116,12 @@ contract NftLinker is ERC721URIStorage, AxelarExecutable, Upgradable { * @param _sourceAddress address on src chain where tx is originating from * @param _payload encoded gmp message sent from src chain */ - function _execute(string calldata /*sourceChain*/, string calldata _sourceAddress, bytes calldata _payload) internal override { + function _execute( + bytes32 /*commandId*/, + string calldata /*sourceChain*/, + string calldata _sourceAddress, + bytes calldata _payload + ) internal override { //Check that the sender is another token linker. require(_sourceAddress.toAddress() == address(this), 'NOT_A_LINKER'); diff --git a/examples/evm/nonced-execution/NoncedExecutable.sol b/examples/evm/nonced-execution/NoncedExecutable.sol index ab0d8f3f..e3a93ff1 100644 --- a/examples/evm/nonced-execution/NoncedExecutable.sol +++ b/examples/evm/nonced-execution/NoncedExecutable.sol @@ -28,15 +28,18 @@ abstract contract NoncedExecutable is AxelarExecutable { } /** - * @dev Send a contract call to a contract on another chain. - * @param destinationChain The chain to send the contract call to. - * @param destinationContract The address of the contract to call. - * @param payload The payload to send to the contract. + * @dev Send a contract call to a contract on another chain. + * @param destinationChain The chain to send the contract call to. + * @param destinationContract The address of the contract to call. + * @param payload The payload to send to the contract. */ - function sendContractCall(string calldata destinationChain, string calldata destinationContract, bytes calldata payload) external payable { + function sendContractCall( + string calldata destinationChain, + string calldata destinationContract, + bytes calldata payload + ) external payable { require(msg.value > 0, 'Gas payment is required'); - // Build the payload. The first 32 bytes are the nonce, the next 32 bytes are the address of the sender, and the rest is the payload passed by the caller. bytes memory newPayload = abi.encode(outgoingNonces[destinationChain][address(this)], address(this), payload); @@ -53,14 +56,10 @@ abstract contract NoncedExecutable is AxelarExecutable { ); // Send the call to AxelarGateway. - gateway.callContract(destinationChain, destinationContract, newPayload); + gateway().callContract(destinationChain, destinationContract, newPayload); } - function _execute( - string calldata sourceChain, - string calldata, - bytes calldata payload - ) internal override { + function _execute(bytes32 /*commandId*/, string calldata sourceChain, string calldata, bytes calldata payload) internal override { // Decode the payload. The first 32 bytes are the nonce, the next 32 bytes are the address of the sender, and the rest is the payload passed by the sender. (uint256 nonce, address sender, bytes memory newPayload) = abi.decode(payload, (uint256, address, bytes)); @@ -75,10 +74,5 @@ abstract contract NoncedExecutable is AxelarExecutable { } // Override these. - function _executeNonced( - string calldata sourceChain, - address sourceAddress, - uint256 nonce, - bytes memory payload - ) internal virtual {} + function _executeNonced(string calldata sourceChain, address sourceAddress, uint256 nonce, bytes memory payload) internal virtual {} } diff --git a/examples/evm/send-ack/SendAckReceiver.sol b/examples/evm/send-ack/SendAckReceiver.sol index 31a178b9..fff56f0b 100644 --- a/examples/evm/send-ack/SendAckReceiver.sol +++ b/examples/evm/send-ack/SendAckReceiver.sol @@ -2,25 +2,21 @@ pragma solidity ^0.8.0; import { AxelarExecutable } from '@axelar-network/axelar-gmp-sdk-solidity/contracts/executable/AxelarExecutable.sol'; -import { IAxelarGateway } from '@axelar-network/axelar-gmp-sdk-solidity/contracts/interfaces/IAxelarGateway.sol'; -abstract contract SendAckReceiver is AxelarExecutable { +contract SendAckReceiver is AxelarExecutable { constructor(address gateway_) AxelarExecutable(gateway_) {} function _execute( + bytes32 /*commandId*/, string calldata sourceChain, string calldata sourceAddress, bytes calldata payload ) internal override { (uint256 nonce, bytes memory payloadActual) = abi.decode(payload, (uint256, bytes)); - gateway.callContract(sourceChain, sourceAddress, abi.encode(nonce)); + gateway().callContract(sourceChain, sourceAddress, abi.encode(nonce)); _executePostAck(sourceChain, sourceAddress, payloadActual); } // override this to do stuff - function _executePostAck( - string memory sourceChain, - string memory sourceAddress, - bytes memory payload - ) internal virtual; + function _executePostAck(string memory sourceChain, string memory sourceAddress, bytes memory payload) internal virtual {} } diff --git a/examples/evm/send-ack/SendAckReceiverImplementation.sol b/examples/evm/send-ack/SendAckReceiverImplementation.sol index 74a091ca..20d61ac9 100644 --- a/examples/evm/send-ack/SendAckReceiverImplementation.sol +++ b/examples/evm/send-ack/SendAckReceiverImplementation.sol @@ -15,11 +15,7 @@ contract SendAckReceiverImplementation is SendAckReceiver { } // override this to do stuff - function _executePostAck( - string memory, /*sourceChain*/ - string memory, /*sourceAddress*/ - bytes memory payload - ) internal override { + function _executePostAck(string memory /*sourceChain*/, string memory /*sourceAddress*/, bytes memory payload) internal override { string memory message = abi.decode(payload, (string)); messages.push(message); } diff --git a/examples/evm/send-ack/SendAckSender.sol b/examples/evm/send-ack/SendAckSender.sol index 789a5a77..fca10177 100644 --- a/examples/evm/send-ack/SendAckSender.sol +++ b/examples/evm/send-ack/SendAckSender.sol @@ -21,11 +21,7 @@ contract SendAckSender is AxelarExecutable { IAxelarGasService public immutable gasService; string public thisChain; - constructor( - address gateway_, - address gasReceiver_, - string memory thisChain_ - ) AxelarExecutable(gateway_) { + constructor(address gateway_, address gasReceiver_, string memory thisChain_) AxelarExecutable(gateway_) { gasService = IAxelarGasService(gasReceiver_); thisChain = thisChain_; } @@ -34,15 +30,11 @@ contract SendAckSender is AxelarExecutable { return keccak256(abi.encode(destinationChain, contractAddress)); } - function sendContractCall( - string calldata destinationChain, - string calldata contractAddress, - bytes calldata payload - ) external payable { + function sendContractCall(string calldata destinationChain, string calldata contractAddress, bytes calldata payload) external payable { uint256 nonce_ = nonce; bytes memory modifiedPayload = abi.encode(nonce_, payload); - if (msg.value == 0) revert NotEnoughValueForGas(); + if (msg.value == 0) revert NotEnoughValueForGas(); gasService.payNativeGasForContractCall{ value: msg.value }( address(this), @@ -52,14 +44,14 @@ contract SendAckSender is AxelarExecutable { msg.sender ); - - gateway.callContract(destinationChain, contractAddress, modifiedPayload); + gateway().callContract(destinationChain, contractAddress, modifiedPayload); emit ContractCallSent(destinationChain, contractAddress, payload, nonce_); destination[nonce_] = _getDestinationHash(destinationChain, contractAddress); nonce = nonce_ + 1; } function _execute( + bytes32 /*commandId*/, string calldata sourceChain, string calldata sourceAddress, bytes calldata payload diff --git a/examples/evm/send-token/index.js b/examples/evm/send-token/index.js index f6971490..8565d5ae 100644 --- a/examples/evm/send-token/index.js +++ b/examples/evm/send-token/index.js @@ -1,8 +1,8 @@ 'use strict'; const { getDefaultProvider, Contract } = require('ethers'); -const Gateway = rootRequire( - './artifacts/@axelar-network/axelar-gmp-sdk-solidity/contracts/interfaces/IAxelarGateway.sol/IAxelarGateway.json', +const GatewayWithToken = rootRequire( + './artifacts/@axelar-network/axelar-gmp-sdk-solidity/contracts/interfaces/IAxelarGatewayWithToken.sol/IAxelarGatewayWithToken.json', ); const IERC20 = rootRequire('./artifacts/@axelar-network/axelar-gmp-sdk-solidity/contracts/interfaces/IERC20.sol/IERC20.json'); @@ -17,7 +17,7 @@ async function execute(chains, wallet, options = {}) { for (const chain of [source, destination]) { const provider = getDefaultProvider(chain.rpc); chain.wallet = wallet.connect(provider); - chain.contract = new Contract(chain.gateway.address, Gateway.abi, chain.wallet); + chain.contract = new Contract(chain.gateway.address, GatewayWithToken.abi, chain.wallet); const tokenAddress = await chain.contract.tokenAddresses(symbol); chain.token = new Contract(tokenAddress, IERC20.abi, chain.wallet); } diff --git a/examples/multiversx/call-contract/contracts/HelloWorld.sol b/examples/multiversx/call-contract/contracts/HelloWorld.sol index 95a95b34..a6751cf6 100644 --- a/examples/multiversx/call-contract/contracts/HelloWorld.sol +++ b/examples/multiversx/call-contract/contracts/HelloWorld.sol @@ -11,35 +11,30 @@ contract HelloWorld is AxelarExecutable { string public sourceAddress; IAxelarGasService gasService; - constructor(address _gateway, address _gasReceiver) - AxelarExecutable(_gateway) - { + constructor(address _gateway, address _gasReceiver) AxelarExecutable(_gateway) { gasService = IAxelarGasService(_gasReceiver); } event Executed(); // Call this function to update the value of this contract along with all its siblings'. - function setRemoteValue( - string memory destinationChain, - string memory destinationAddress, - string calldata message - ) external payable { + function setRemoteValue(string memory destinationChain, string memory destinationAddress, string calldata message) external payable { require(msg.value > 0, 'Gas payment is required'); bytes memory payload = abi.encodePacked(message); - gasService.payNativeGasForContractCall{value: msg.value}( + gasService.payNativeGasForContractCall{ value: msg.value }( address(this), destinationChain, destinationAddress, payload, msg.sender ); - gateway.callContract(destinationChain, destinationAddress, payload); + gateway().callContract(destinationChain, destinationAddress, payload); } // Handles calls created by setAndSend. Updates this contract's value function _execute( + bytes32 /*commandId*/, string calldata sourceChain_, string calldata sourceAddress_, bytes calldata payload_ diff --git a/package.json b/package.json index 754240ab..d0dff5f4 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,7 @@ "license": "ISC", "dependencies": { "@axelar-network/axelar-chains-config": "^1.2.0", - "@axelar-network/axelar-gmp-sdk-solidity": "file:../axelar-gmp-sdk-solidity", + "@axelar-network/axelar-gmp-sdk-solidity": "6.0.0", "@axelar-network/axelar-local-dev": "^2.3.3", "@axelar-network/axelar-local-dev-cosmos": "^2.3.0", "@axelar-network/axelar-local-dev-multiversx": "^2.3.0", diff --git a/scripts/libs/execute.js b/scripts/libs/execute.js index d9df144b..365bed70 100644 --- a/scripts/libs/execute.js +++ b/scripts/libs/execute.js @@ -4,8 +4,8 @@ const { Contract, getDefaultProvider } = require('ethers'); const { CosmosClient } = require('@axelar-network/axelar-local-dev-cosmos'); const { calculateBridgeFee, getDepositAddress, calculateBridgeExpressFee, readChainConfig } = require('./utils.js'); const { configPath } = require('../../config/index.js'); -const AxelarGatewayContract = rootRequire( - 'artifacts/@axelar-network/axelar-gmp-sdk-solidity/contracts/interfaces/IAxelarGateway.sol/IAxelarGateway.json', +const AxelarGatewayWithTokenContract = rootRequire( + 'artifacts/@axelar-network/axelar-gmp-sdk-solidity/contracts/interfaces/IAxelarGatewayWithToken.sol/IAxelarGatewayWithToken.json', ); const AxelarGasServiceContract = rootRequire( 'artifacts/@axelar-network/axelar-gmp-sdk-solidity/contracts/interfaces/IAxelarGasService.sol/IAxelarGasService.json', @@ -22,7 +22,7 @@ async function executeCosmosExample(_env, chains, args, wallet, example) { deserializeContract(evmChain, connectedWallet); // Recover axelar contracts to chain object. - evmChain.gateway = new Contract(evmChain.gateway, AxelarGatewayContract.abi, connectedWallet); + evmChain.gateway = new Contract(evmChain.gateway, AxelarGatewayWithTokenContract.abi, connectedWallet); evmChain.gasService = new Contract(evmChain.gasService, AxelarGasServiceContract.abi, connectedWallet); const config = readChainConfig(configPath.localCosmosChains); @@ -48,7 +48,7 @@ async function executeMultiversXExample(chains, args, wallet, example) { deserializeContract(evmChain, connectedWallet); // Recover axelar contracts to chain object. - evmChain.gateway = new Contract(evmChain.gateway, AxelarGatewayContract.abi, connectedWallet); + evmChain.gateway = new Contract(evmChain.gateway, AxelarGatewayWithTokenContract.abi, connectedWallet); evmChain.gasService = new Contract(evmChain.gasService, AxelarGasServiceContract.abi, connectedWallet); const tokenAddress = await evmChain.gateway.tokenAddresses('aUSDC'); @@ -77,7 +77,7 @@ async function executeEVMExample(env, chains, args, wallet, example) { deserializeContract(chain, connectedWallet); // Recover axelar contracts to chain object. - chain.gateway = new Contract(chain.gateway, AxelarGatewayContract.abi, connectedWallet); + chain.gateway = new Contract(chain.gateway, AxelarGatewayWithTokenContract.abi, connectedWallet); chain.gasService = new Contract(chain.gasService, AxelarGasServiceContract.abi, connectedWallet); const tokenAddress = await chain.gateway.tokenAddresses('aUSDC'); chain.usdc = new Contract(tokenAddress, IERC20.abi, connectedWallet); From 8bccb1fa23d28e0a7518132c162683ee36c4f45d Mon Sep 17 00:00:00 2001 From: ahramy Date: Wed, 16 Oct 2024 10:44:37 -0700 Subject: [PATCH 4/9] updated package-lock.json --- package-lock.json | 2776 +++------------------------------------------ 1 file changed, 145 insertions(+), 2631 deletions(-) diff --git a/package-lock.json b/package-lock.json index 9e99f820..f5c4f820 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,7 @@ "license": "ISC", "dependencies": { "@axelar-network/axelar-chains-config": "^1.2.0", - "@axelar-network/axelar-gmp-sdk-solidity": "file:../axelar-gmp-sdk-solidity", + "@axelar-network/axelar-gmp-sdk-solidity": "6.0.0", "@axelar-network/axelar-local-dev": "^2.3.3", "@axelar-network/axelar-local-dev-cosmos": "^2.3.0", "@axelar-network/axelar-local-dev-multiversx": "^2.3.0", @@ -24,13 +24,10 @@ "axios": "^0.27.2", "bech32": "^2.0.0", "bip39": "^3.0.4", - "build": "^0.1.4", "commander": "^12.0.0", "config": "^3.3.9", "dotenv": "^16.0.2", "ethers": "^5.6.2", - "npm": "^10.8.3", - "run": "^1.5.0", "uuid": "^8.3.2" }, "devDependencies": { @@ -50,30 +47,6 @@ "node": "^16.0.0 || ^18.0.0" } }, - "../axelar-gmp-sdk-solidity": { - "name": "@axelar-network/axelar-gmp-sdk-solidity", - "version": "5.10.0", - "license": "MIT", - "devDependencies": { - "@axelar-network/axelar-chains-config": "^1.2.0", - "@nomicfoundation/hardhat-toolbox": "^2.0.2", - "cross-env": "^7.0.3", - "eslint": "^8.57.0", - "eslint-config-richardpringle": "^2.0.0", - "fs-extra": "^11.1.1", - "hardhat": "~2.22.3", - "hardhat-contract-sizer": "^2.10.0", - "hardhat-storage-layout": "^0.1.7", - "lodash": "^4.17.21", - "mocha": "^10.2.0", - "prettier": "^2.8.8", - "prettier-plugin-solidity": "1.0.0-beta.19", - "solhint": "^4.5.2" - }, - "engines": { - "node": ">=18" - } - }, "node_modules/@aashutoshrathi/word-wrap": { "version": "1.2.6", "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", @@ -113,8 +86,12 @@ } }, "node_modules/@axelar-network/axelar-gmp-sdk-solidity": { - "resolved": "../axelar-gmp-sdk-solidity", - "link": true + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@axelar-network/axelar-gmp-sdk-solidity/-/axelar-gmp-sdk-solidity-6.0.0.tgz", + "integrity": "sha512-skmHwbvYOkyuIrL5twVDlRNbyDAWQXcPGGufSMhBZ125iy85TAti76EFayoyfFXvLsq3BnKE8D+D1iC2mXB5eA==", + "engines": { + "node": ">=18" + } }, "node_modules/@axelar-network/axelar-local-dev": { "version": "2.3.3", @@ -4058,7 +4035,8 @@ "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "devOptional": true }, "node_modules/base-x": { "version": "3.0.9", @@ -4189,6 +4167,7 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "devOptional": true, "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -4298,34 +4277,6 @@ "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", "dev": true }, - "node_modules/build": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/build/-/build-0.1.4.tgz", - "integrity": "sha512-KwbDJ/zrsU8KZRRMfoURG14cKIAStUlS8D5jBDvtrZbwO5FEkYqc3oB8HIhRiyD64A48w1lc+sOmQ+mmBw5U/Q==", - "dependencies": { - "cssmin": "0.3.x", - "jsmin": "1.x", - "jxLoader": "*", - "moo-server": "*", - "promised-io": "*", - "timespan": "2.x", - "uglify-js": "1.x", - "walker": "1.x", - "winston": "*", - "wrench": "1.3.x" - }, - "engines": { - "node": ">v0.4.12" - } - }, - "node_modules/build/node_modules/uglify-js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-1.3.5.tgz", - "integrity": "sha512-YPX1DjKtom8l9XslmPFQnqWzTBkvI4N0pbkzLuPZZ4QTyig0uQqvZz9NgUdfEV+qccJzi7fVcGWdESvRIjWptQ==", - "bin": { - "uglifyjs": "bin/uglifyjs" - } - }, "node_modules/bytes": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", @@ -4754,7 +4705,8 @@ "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "devOptional": true }, "node_modules/concat-stream": { "version": "1.6.2", @@ -4943,14 +4895,6 @@ "node": "*" } }, - "node_modules/cssmin": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/cssmin/-/cssmin-0.3.2.tgz", - "integrity": "sha512-bynxGIAJ8ybrnFobjsQotIjA8HFDDgPwbeUWNXXXfR+B4f9kkxdcUyagJoQCSUOfMV+ZZ6bMn8bvbozlCzUGwQ==", - "bin": { - "cssmin": "bin/cssmin" - } - }, "node_modules/death": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/death/-/death-1.1.0.tgz", @@ -11782,17 +11726,6 @@ "js-yaml": "bin/js-yaml.js" } }, - "node_modules/jsmin": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/jsmin/-/jsmin-1.0.1.tgz", - "integrity": "sha512-OPuL5X/bFKgVdMvEIX3hnpx3jbVpFCrEM8pKPXjFkZUqg521r41ijdyTz7vACOhW6o1neVlcLyd+wkbK5fNHRg==", - "bin": { - "jsmin": "bin/jsmin" - }, - "engines": { - "node": ">=0.1.93" - } - }, "node_modules/json-bigint": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", @@ -11869,28 +11802,6 @@ "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-6.2.0.tgz", "integrity": "sha512-cYofQu2Xpom82S6qD778jBDpwvvy39s1l/hrYij2u9AMdQcGRpaBu6kY4mVhuno5kJVi1DAz4aiphA2WI1/OAw==" }, - "node_modules/jxLoader": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jxLoader/-/jxLoader-0.1.1.tgz", - "integrity": "sha512-ClEvAj3K68y8uKhub3RgTmcRPo5DfIWvtxqrKQdDPyZ1UVHIIKvVvjrAsJFSVL5wjv0rt5iH9SMCZ0XRKNzeUA==", - "dependencies": { - "js-yaml": "0.3.x", - "moo-server": "1.3.x", - "promised-io": "*", - "walker": "1.x" - }, - "engines": { - "node": ">v0.4.10" - } - }, - "node_modules/jxLoader/node_modules/js-yaml": { - "version": "0.3.7", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-0.3.7.tgz", - "integrity": "sha512-/7PsVDNP2tVe2Z1cF9kTEkjamIwz4aooDpRKmN1+g/9eePCgcxsv4QDvEbxO0EH+gdDD7MLyDoR6BASo3hH51g==", - "engines": { - "node": "> 0.4.11" - } - }, "node_modules/keccak": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.4.tgz", @@ -12120,14 +12031,6 @@ "yallist": "^3.0.2" } }, - "node_modules/makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", - "dependencies": { - "tmpl": "1.0.5" - } - }, "node_modules/markdown-table": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-1.1.3.tgz", @@ -12246,6 +12149,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "devOptional": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -12435,14 +12339,6 @@ "node": ">=10" } }, - "node_modules/moo-server": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/moo-server/-/moo-server-1.3.0.tgz", - "integrity": "sha512-9A8/eor2DXwpv1+a4pZAAydqLFVrWoKoO1fzdzqLUhYVXAO1Kgd1FR2gFZi7YdHzF0s4W8cDNwCfKJQrvLqxDw==", - "engines": { - "node": ">v0.4.10" - } - }, "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -12722,2521 +12618,188 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/npm": { - "version": "10.8.3", - "resolved": "https://registry.npmjs.org/npm/-/npm-10.8.3.tgz", - "integrity": "sha512-0IQlyAYvVtQ7uOhDFYZCGK8kkut2nh8cpAdA9E6FvRSJaTgtZRZgNjlC5ZCct//L73ygrpY93CxXpRJDtNqPVg==", - "bundleDependencies": [ - "@isaacs/string-locale-compare", - "@npmcli/arborist", - "@npmcli/config", - "@npmcli/fs", - "@npmcli/map-workspaces", - "@npmcli/package-json", - "@npmcli/promise-spawn", - "@npmcli/redact", - "@npmcli/run-script", - "@sigstore/tuf", - "abbrev", - "archy", - "cacache", - "chalk", - "ci-info", - "cli-columns", - "fastest-levenshtein", - "fs-minipass", - "glob", - "graceful-fs", - "hosted-git-info", - "ini", - "init-package-json", - "is-cidr", - "json-parse-even-better-errors", - "libnpmaccess", - "libnpmdiff", - "libnpmexec", - "libnpmfund", - "libnpmhook", - "libnpmorg", - "libnpmpack", - "libnpmpublish", - "libnpmsearch", - "libnpmteam", - "libnpmversion", - "make-fetch-happen", - "minimatch", - "minipass", - "minipass-pipeline", - "ms", - "node-gyp", - "nopt", - "normalize-package-data", - "npm-audit-report", - "npm-install-checks", - "npm-package-arg", - "npm-pick-manifest", - "npm-profile", - "npm-registry-fetch", - "npm-user-validate", - "p-map", - "pacote", - "parse-conflict-json", - "proc-log", - "qrcode-terminal", - "read", - "semver", - "spdx-expression-parse", - "ssri", - "supports-color", - "tar", - "text-table", - "tiny-relative-date", - "treeverse", - "validate-npm-package-name", - "which", - "write-file-atomic" - ], + "node_modules/number-to-bn": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", + "integrity": "sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig==", + "dev": true, "dependencies": { - "@isaacs/string-locale-compare": "^1.1.0", - "@npmcli/arborist": "^7.5.4", - "@npmcli/config": "^8.3.4", - "@npmcli/fs": "^3.1.1", - "@npmcli/map-workspaces": "^3.0.6", - "@npmcli/package-json": "^5.2.0", - "@npmcli/promise-spawn": "^7.0.2", - "@npmcli/redact": "^2.0.1", - "@npmcli/run-script": "^8.1.0", - "@sigstore/tuf": "^2.3.4", - "abbrev": "^2.0.0", - "archy": "~1.0.0", - "cacache": "^18.0.4", - "chalk": "^5.3.0", - "ci-info": "^4.0.0", - "cli-columns": "^4.0.0", - "fastest-levenshtein": "^1.0.16", - "fs-minipass": "^3.0.3", - "glob": "^10.4.5", - "graceful-fs": "^4.2.11", - "hosted-git-info": "^7.0.2", - "ini": "^4.1.3", - "init-package-json": "^6.0.3", - "is-cidr": "^5.1.0", - "json-parse-even-better-errors": "^3.0.2", - "libnpmaccess": "^8.0.6", - "libnpmdiff": "^6.1.4", - "libnpmexec": "^8.1.4", - "libnpmfund": "^5.0.12", - "libnpmhook": "^10.0.5", - "libnpmorg": "^6.0.6", - "libnpmpack": "^7.0.4", - "libnpmpublish": "^9.0.9", - "libnpmsearch": "^7.0.6", - "libnpmteam": "^6.0.5", - "libnpmversion": "^6.0.3", - "make-fetch-happen": "^13.0.1", - "minimatch": "^9.0.5", - "minipass": "^7.1.1", - "minipass-pipeline": "^1.2.4", - "ms": "^2.1.2", - "node-gyp": "^10.2.0", - "nopt": "^7.2.1", - "normalize-package-data": "^6.0.2", - "npm-audit-report": "^5.0.0", - "npm-install-checks": "^6.3.0", - "npm-package-arg": "^11.0.3", - "npm-pick-manifest": "^9.1.0", - "npm-profile": "^10.0.0", - "npm-registry-fetch": "^17.1.0", - "npm-user-validate": "^2.0.1", - "p-map": "^4.0.0", - "pacote": "^18.0.6", - "parse-conflict-json": "^3.0.1", - "proc-log": "^4.2.0", - "qrcode-terminal": "^0.12.0", - "read": "^3.0.1", - "semver": "^7.6.3", - "spdx-expression-parse": "^4.0.0", - "ssri": "^10.0.6", - "supports-color": "^9.4.0", - "tar": "^6.2.1", - "text-table": "~0.2.0", - "tiny-relative-date": "^1.3.0", - "treeverse": "^3.0.0", - "validate-npm-package-name": "^5.0.1", - "which": "^4.0.0", - "write-file-atomic": "^5.0.1" - }, - "bin": { - "npm": "bin/npm-cli.js", - "npx": "bin/npx-cli.js" + "bn.js": "4.11.6", + "strip-hex-prefix": "1.0.0" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">=6.5.0", + "npm": ">=3" } }, - "node_modules/npm/node_modules/@isaacs/cliui": { - "version": "8.0.2", - "inBundle": true, - "license": "ISC", + "node_modules/number-to-bn/node_modules/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==", + "dev": true + }, + "node_modules/o3": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/o3/-/o3-1.0.3.tgz", + "integrity": "sha512-f+4n+vC6s4ysy7YO7O2gslWZBUu8Qj2i2OUJOvjRxQva7jVjYjB29jrr9NCjmxZQR0gzrOcv1RnqoYOeMs5VRQ==", + "optional": true, "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" - }, - "engines": { - "node": ">=12" + "capability": "^0.2.5" } }, - "node_modules/npm/node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.0.1", - "inBundle": true, - "license": "MIT", + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, "engines": { - "node": ">=12" - }, + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "dev": true, "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/npm/node_modules/@isaacs/cliui/node_modules/emoji-regex": { - "version": "9.2.2", - "inBundle": true, - "license": "MIT" + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "engines": { + "node": ">= 0.4" + } }, - "node_modules/npm/node_modules/@isaacs/cliui/node_modules/string-width": { - "version": "5.1.2", - "inBundle": true, - "license": "MIT", + "node_modules/object.assign": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "dev": true, "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" }, "engines": { - "node": ">=12" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/npm/node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.1.0", - "inBundle": true, - "license": "MIT", + "node_modules/object.fromentries": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz", + "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==", + "dev": true, "dependencies": { - "ansi-regex": "^6.0.1" + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" }, "engines": { - "node": ">=12" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/npm/node_modules/@isaacs/string-locale-compare": { - "version": "1.1.0", - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/@npmcli/agent": { - "version": "2.2.2", - "inBundle": true, - "license": "ISC", + "node_modules/object.groupby": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.1.tgz", + "integrity": "sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==", + "dev": true, "dependencies": { - "agent-base": "^7.1.0", - "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.1", - "lru-cache": "^10.0.1", - "socks-proxy-agent": "^8.0.3" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1" } }, - "node_modules/npm/node_modules/@npmcli/arborist": { - "version": "7.5.4", - "inBundle": true, - "license": "ISC", + "node_modules/object.values": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz", + "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==", + "dev": true, "dependencies": { - "@isaacs/string-locale-compare": "^1.1.0", - "@npmcli/fs": "^3.1.1", - "@npmcli/installed-package-contents": "^2.1.0", - "@npmcli/map-workspaces": "^3.0.2", - "@npmcli/metavuln-calculator": "^7.1.1", - "@npmcli/name-from-folder": "^2.0.0", - "@npmcli/node-gyp": "^3.0.0", - "@npmcli/package-json": "^5.1.0", - "@npmcli/query": "^3.1.0", - "@npmcli/redact": "^2.0.0", - "@npmcli/run-script": "^8.1.0", - "bin-links": "^4.0.4", - "cacache": "^18.0.3", - "common-ancestor-path": "^1.0.1", - "hosted-git-info": "^7.0.2", - "json-parse-even-better-errors": "^3.0.2", - "json-stringify-nice": "^1.1.4", - "lru-cache": "^10.2.2", - "minimatch": "^9.0.4", - "nopt": "^7.2.1", - "npm-install-checks": "^6.2.0", - "npm-package-arg": "^11.0.2", - "npm-pick-manifest": "^9.0.1", - "npm-registry-fetch": "^17.0.1", - "pacote": "^18.0.6", - "parse-conflict-json": "^3.0.0", - "proc-log": "^4.2.0", - "proggy": "^2.0.0", - "promise-all-reject-late": "^1.0.0", - "promise-call-limit": "^3.0.1", - "read-package-json-fast": "^3.0.2", - "semver": "^7.3.7", - "ssri": "^10.0.6", - "treeverse": "^3.0.0", - "walk-up-path": "^3.0.1" - }, - "bin": { - "arborist": "bin/index.js" + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/npm/node_modules/@npmcli/config": { - "version": "8.3.4", - "inBundle": true, - "license": "ISC", + "node_modules/obliterator": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-2.0.4.tgz", + "integrity": "sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==", + "dev": true + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "devOptional": true, "dependencies": { - "@npmcli/map-workspaces": "^3.0.2", - "@npmcli/package-json": "^5.1.1", - "ci-info": "^4.0.0", - "ini": "^4.1.2", - "nopt": "^7.2.1", - "proc-log": "^4.2.0", - "semver": "^7.3.5", - "walk-up-path": "^3.0.1" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" + "wrappy": "1" } }, - "node_modules/npm/node_modules/@npmcli/fs": { - "version": "3.1.1", - "inBundle": true, - "license": "ISC", + "node_modules/one-time": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz", + "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==", "dependencies": { - "semver": "^7.3.5" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "fn.name": "1.x.x" } }, - "node_modules/npm/node_modules/@npmcli/git": { - "version": "5.0.8", - "inBundle": true, - "license": "ISC", + "node_modules/optionator": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "dev": true, + "peer": true, "dependencies": { - "@npmcli/promise-spawn": "^7.0.0", - "ini": "^4.1.3", - "lru-cache": "^10.0.1", - "npm-pick-manifest": "^9.0.0", - "proc-log": "^4.0.0", - "promise-inflight": "^1.0.1", - "promise-retry": "^2.0.1", - "semver": "^7.3.5", - "which": "^4.0.0" + "@aashutoshrathi/word-wrap": "^1.2.3", + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": ">= 0.8.0" } }, - "node_modules/npm/node_modules/@npmcli/installed-package-contents": { - "version": "2.1.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "npm-bundled": "^3.0.0", - "npm-normalize-package-bin": "^3.0.0" - }, - "bin": { - "installed-package-contents": "bin/index.js" - }, + "node_modules/ordinal": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/ordinal/-/ordinal-1.0.3.tgz", + "integrity": "sha512-cMddMgb2QElm8G7vdaa02jhUNbTSrhsgAGUz1OokD83uJTwSUn+nKoNoKVVaRa08yF6sgfO7Maou1+bgLd9rdQ==", + "dev": true + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "dev": true, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=0.10.0" } }, - "node_modules/npm/node_modules/@npmcli/map-workspaces": { - "version": "3.0.6", - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/name-from-folder": "^2.0.0", - "glob": "^10.2.2", - "minimatch": "^9.0.0", - "read-package-json-fast": "^3.0.0" - }, + "node_modules/p-cancelable": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", + "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", + "optional": true, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/@npmcli/metavuln-calculator": { - "version": "7.1.1", - "inBundle": true, - "license": "ISC", - "dependencies": { - "cacache": "^18.0.0", - "json-parse-even-better-errors": "^3.0.0", - "pacote": "^18.0.0", - "proc-log": "^4.1.0", - "semver": "^7.3.5" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/@npmcli/name-from-folder": { - "version": "2.0.0", - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/@npmcli/node-gyp": { - "version": "3.0.0", - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/@npmcli/package-json": { - "version": "5.2.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/git": "^5.0.0", - "glob": "^10.2.2", - "hosted-git-info": "^7.0.0", - "json-parse-even-better-errors": "^3.0.0", - "normalize-package-data": "^6.0.0", - "proc-log": "^4.0.0", - "semver": "^7.5.3" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/@npmcli/promise-spawn": { - "version": "7.0.2", - "inBundle": true, - "license": "ISC", - "dependencies": { - "which": "^4.0.0" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/@npmcli/query": { - "version": "3.1.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "postcss-selector-parser": "^6.0.10" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/@npmcli/redact": { - "version": "2.0.1", - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/@npmcli/run-script": { - "version": "8.1.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/node-gyp": "^3.0.0", - "@npmcli/package-json": "^5.0.0", - "@npmcli/promise-spawn": "^7.0.0", - "node-gyp": "^10.0.0", - "proc-log": "^4.0.0", - "which": "^4.0.0" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "inBundle": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/npm/node_modules/@sigstore/bundle": { - "version": "2.3.2", - "inBundle": true, - "license": "Apache-2.0", - "dependencies": { - "@sigstore/protobuf-specs": "^0.3.2" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/@sigstore/core": { - "version": "1.1.0", - "inBundle": true, - "license": "Apache-2.0", - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/@sigstore/protobuf-specs": { - "version": "0.3.2", - "inBundle": true, - "license": "Apache-2.0", - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/@sigstore/sign": { - "version": "2.3.2", - "inBundle": true, - "license": "Apache-2.0", - "dependencies": { - "@sigstore/bundle": "^2.3.2", - "@sigstore/core": "^1.0.0", - "@sigstore/protobuf-specs": "^0.3.2", - "make-fetch-happen": "^13.0.1", - "proc-log": "^4.2.0", - "promise-retry": "^2.0.1" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/@sigstore/tuf": { - "version": "2.3.4", - "inBundle": true, - "license": "Apache-2.0", - "dependencies": { - "@sigstore/protobuf-specs": "^0.3.2", - "tuf-js": "^2.2.1" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/@sigstore/verify": { - "version": "1.2.1", - "inBundle": true, - "license": "Apache-2.0", - "dependencies": { - "@sigstore/bundle": "^2.3.2", - "@sigstore/core": "^1.1.0", - "@sigstore/protobuf-specs": "^0.3.2" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/@tufjs/canonical-json": { - "version": "2.0.0", - "inBundle": true, - "license": "MIT", - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/@tufjs/models": { - "version": "2.0.1", - "inBundle": true, - "license": "MIT", - "dependencies": { - "@tufjs/canonical-json": "2.0.0", - "minimatch": "^9.0.4" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/abbrev": { - "version": "2.0.0", - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/agent-base": { - "version": "7.1.1", - "inBundle": true, - "license": "MIT", - "dependencies": { - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/npm/node_modules/aggregate-error": { - "version": "3.1.0", - "inBundle": true, - "license": "MIT", - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/ansi-regex": { - "version": "5.0.1", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/ansi-styles": { - "version": "6.2.1", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/npm/node_modules/aproba": { - "version": "2.0.0", - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/archy": { - "version": "1.0.0", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/balanced-match": { - "version": "1.0.2", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/bin-links": { - "version": "4.0.4", - "inBundle": true, - "license": "ISC", - "dependencies": { - "cmd-shim": "^6.0.0", - "npm-normalize-package-bin": "^3.0.0", - "read-cmd-shim": "^4.0.0", - "write-file-atomic": "^5.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/binary-extensions": { - "version": "2.3.0", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm/node_modules/brace-expansion": { - "version": "2.0.1", - "inBundle": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/npm/node_modules/cacache": { - "version": "18.0.4", - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/fs": "^3.1.0", - "fs-minipass": "^3.0.0", - "glob": "^10.2.2", - "lru-cache": "^10.0.1", - "minipass": "^7.0.3", - "minipass-collect": "^2.0.1", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "p-map": "^4.0.0", - "ssri": "^10.0.0", - "tar": "^6.1.11", - "unique-filename": "^3.0.0" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/chalk": { - "version": "5.3.0", - "inBundle": true, - "license": "MIT", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/npm/node_modules/chownr": { - "version": "2.0.0", - "inBundle": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/npm/node_modules/ci-info": { - "version": "4.0.0", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/cidr-regex": { - "version": "4.1.1", - "inBundle": true, - "license": "BSD-2-Clause", - "dependencies": { - "ip-regex": "^5.0.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/npm/node_modules/clean-stack": { - "version": "2.2.0", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/npm/node_modules/cli-columns": { - "version": "4.0.0", - "inBundle": true, - "license": "MIT", - "dependencies": { - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/npm/node_modules/cmd-shim": { - "version": "6.0.3", - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/color-convert": { - "version": "2.0.1", - "inBundle": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/npm/node_modules/color-name": { - "version": "1.1.4", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/common-ancestor-path": { - "version": "1.0.1", - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/cross-spawn": { - "version": "7.0.3", - "inBundle": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/npm/node_modules/cross-spawn/node_modules/which": { - "version": "2.0.2", - "inBundle": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/npm/node_modules/cssesc": { - "version": "3.0.0", - "inBundle": true, - "license": "MIT", - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/npm/node_modules/debug": { - "version": "4.3.6", - "inBundle": true, - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/npm/node_modules/debug/node_modules/ms": { - "version": "2.1.2", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/diff": { - "version": "5.2.0", - "inBundle": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/npm/node_modules/eastasianwidth": { - "version": "0.2.0", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/emoji-regex": { - "version": "8.0.0", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/encoding": { - "version": "0.1.13", - "inBundle": true, - "license": "MIT", - "optional": true, - "dependencies": { - "iconv-lite": "^0.6.2" - } - }, - "node_modules/npm/node_modules/env-paths": { - "version": "2.2.1", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/npm/node_modules/err-code": { - "version": "2.0.3", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/exponential-backoff": { - "version": "3.1.1", - "inBundle": true, - "license": "Apache-2.0" - }, - "node_modules/npm/node_modules/fastest-levenshtein": { - "version": "1.0.16", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">= 4.9.1" - } - }, - "node_modules/npm/node_modules/foreground-child": { - "version": "3.3.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/npm/node_modules/fs-minipass": { - "version": "3.0.3", - "inBundle": true, - "license": "ISC", - "dependencies": { - "minipass": "^7.0.3" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/glob": { - "version": "10.4.5", - "inBundle": true, - "license": "ISC", - "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" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/npm/node_modules/graceful-fs": { - "version": "4.2.11", - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/hosted-git-info": { - "version": "7.0.2", - "inBundle": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^10.0.1" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/http-cache-semantics": { - "version": "4.1.1", - "inBundle": true, - "license": "BSD-2-Clause" - }, - "node_modules/npm/node_modules/http-proxy-agent": { - "version": "7.0.2", - "inBundle": true, - "license": "MIT", - "dependencies": { - "agent-base": "^7.1.0", - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/npm/node_modules/https-proxy-agent": { - "version": "7.0.5", - "inBundle": true, - "license": "MIT", - "dependencies": { - "agent-base": "^7.0.2", - "debug": "4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/npm/node_modules/iconv-lite": { - "version": "0.6.3", - "inBundle": true, - "license": "MIT", - "optional": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm/node_modules/ignore-walk": { - "version": "6.0.5", - "inBundle": true, - "license": "ISC", - "dependencies": { - "minimatch": "^9.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/imurmurhash": { - "version": "0.1.4", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/npm/node_modules/indent-string": { - "version": "4.0.0", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/ini": { - "version": "4.1.3", - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/init-package-json": { - "version": "6.0.3", - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/package-json": "^5.0.0", - "npm-package-arg": "^11.0.0", - "promzard": "^1.0.0", - "read": "^3.0.1", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4", - "validate-npm-package-name": "^5.0.0" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/ip-address": { - "version": "9.0.5", - "inBundle": true, - "license": "MIT", - "dependencies": { - "jsbn": "1.1.0", - "sprintf-js": "^1.1.3" - }, - "engines": { - "node": ">= 12" - } - }, - "node_modules/npm/node_modules/ip-regex": { - "version": "5.0.0", - "inBundle": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm/node_modules/is-cidr": { - "version": "5.1.0", - "inBundle": true, - "license": "BSD-2-Clause", - "dependencies": { - "cidr-regex": "^4.1.1" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/npm/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/is-lambda": { - "version": "1.0.1", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/isexe": { - "version": "2.0.0", - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/jackspeak": { - "version": "3.4.3", - "inBundle": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, - "node_modules/npm/node_modules/jsbn": { - "version": "1.1.0", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/json-parse-even-better-errors": { - "version": "3.0.2", - "inBundle": true, - "license": "MIT", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/json-stringify-nice": { - "version": "1.1.4", - "inBundle": true, - "license": "ISC", - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/npm/node_modules/jsonparse": { - "version": "1.3.1", - "engines": [ - "node >= 0.2.0" - ], - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/just-diff": { - "version": "6.0.2", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/just-diff-apply": { - "version": "5.5.0", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/libnpmaccess": { - "version": "8.0.6", - "inBundle": true, - "license": "ISC", - "dependencies": { - "npm-package-arg": "^11.0.2", - "npm-registry-fetch": "^17.0.1" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/libnpmdiff": { - "version": "6.1.4", - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/arborist": "^7.5.4", - "@npmcli/installed-package-contents": "^2.1.0", - "binary-extensions": "^2.3.0", - "diff": "^5.1.0", - "minimatch": "^9.0.4", - "npm-package-arg": "^11.0.2", - "pacote": "^18.0.6", - "tar": "^6.2.1" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/libnpmexec": { - "version": "8.1.4", - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/arborist": "^7.5.4", - "@npmcli/run-script": "^8.1.0", - "ci-info": "^4.0.0", - "npm-package-arg": "^11.0.2", - "pacote": "^18.0.6", - "proc-log": "^4.2.0", - "read": "^3.0.1", - "read-package-json-fast": "^3.0.2", - "semver": "^7.3.7", - "walk-up-path": "^3.0.1" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/libnpmfund": { - "version": "5.0.12", - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/arborist": "^7.5.4" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/libnpmhook": { - "version": "10.0.5", - "inBundle": true, - "license": "ISC", - "dependencies": { - "aproba": "^2.0.0", - "npm-registry-fetch": "^17.0.1" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/libnpmorg": { - "version": "6.0.6", - "inBundle": true, - "license": "ISC", - "dependencies": { - "aproba": "^2.0.0", - "npm-registry-fetch": "^17.0.1" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/libnpmpack": { - "version": "7.0.4", - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/arborist": "^7.5.4", - "@npmcli/run-script": "^8.1.0", - "npm-package-arg": "^11.0.2", - "pacote": "^18.0.6" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/libnpmpublish": { - "version": "9.0.9", - "inBundle": true, - "license": "ISC", - "dependencies": { - "ci-info": "^4.0.0", - "normalize-package-data": "^6.0.1", - "npm-package-arg": "^11.0.2", - "npm-registry-fetch": "^17.0.1", - "proc-log": "^4.2.0", - "semver": "^7.3.7", - "sigstore": "^2.2.0", - "ssri": "^10.0.6" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/libnpmsearch": { - "version": "7.0.6", - "inBundle": true, - "license": "ISC", - "dependencies": { - "npm-registry-fetch": "^17.0.1" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/libnpmteam": { - "version": "6.0.5", - "inBundle": true, - "license": "ISC", - "dependencies": { - "aproba": "^2.0.0", - "npm-registry-fetch": "^17.0.1" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/libnpmversion": { - "version": "6.0.3", - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/git": "^5.0.7", - "@npmcli/run-script": "^8.1.0", - "json-parse-even-better-errors": "^3.0.2", - "proc-log": "^4.2.0", - "semver": "^7.3.7" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/lru-cache": { - "version": "10.4.3", - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/make-fetch-happen": { - "version": "13.0.1", - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/agent": "^2.0.0", - "cacache": "^18.0.0", - "http-cache-semantics": "^4.1.1", - "is-lambda": "^1.0.1", - "minipass": "^7.0.2", - "minipass-fetch": "^3.0.0", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "proc-log": "^4.2.0", - "promise-retry": "^2.0.1", - "ssri": "^10.0.0" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/minimatch": { - "version": "9.0.5", - "inBundle": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/npm/node_modules/minipass": { - "version": "7.1.2", - "inBundle": true, - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/npm/node_modules/minipass-collect": { - "version": "2.0.1", - "inBundle": true, - "license": "ISC", - "dependencies": { - "minipass": "^7.0.3" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/npm/node_modules/minipass-fetch": { - "version": "3.0.5", - "inBundle": true, - "license": "MIT", - "dependencies": { - "minipass": "^7.0.3", - "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - }, - "optionalDependencies": { - "encoding": "^0.1.13" - } - }, - "node_modules/npm/node_modules/minipass-flush": { - "version": "1.0.5", - "inBundle": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/npm/node_modules/minipass-flush/node_modules/minipass": { - "version": "3.3.6", - "inBundle": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/minipass-pipeline": { - "version": "1.2.4", - "inBundle": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/minipass-pipeline/node_modules/minipass": { - "version": "3.3.6", - "inBundle": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/minipass-sized": { - "version": "1.0.3", - "inBundle": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/minipass-sized/node_modules/minipass": { - "version": "3.3.6", - "inBundle": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/minizlib": { - "version": "2.1.2", - "inBundle": true, - "license": "MIT", - "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/npm/node_modules/minizlib/node_modules/minipass": { - "version": "3.3.6", - "inBundle": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/mkdirp": { - "version": "1.0.4", - "inBundle": true, - "license": "MIT", - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/npm/node_modules/ms": { - "version": "2.1.3", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/mute-stream": { - "version": "1.0.0", - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/negotiator": { - "version": "0.6.3", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/npm/node_modules/node-gyp": { - "version": "10.2.0", - "inBundle": true, - "license": "MIT", - "dependencies": { - "env-paths": "^2.2.0", - "exponential-backoff": "^3.1.1", - "glob": "^10.3.10", - "graceful-fs": "^4.2.6", - "make-fetch-happen": "^13.0.0", - "nopt": "^7.0.0", - "proc-log": "^4.1.0", - "semver": "^7.3.5", - "tar": "^6.2.1", - "which": "^4.0.0" - }, - "bin": { - "node-gyp": "bin/node-gyp.js" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/nopt": { - "version": "7.2.1", - "inBundle": true, - "license": "ISC", - "dependencies": { - "abbrev": "^2.0.0" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/normalize-package-data": { - "version": "6.0.2", - "inBundle": true, - "license": "BSD-2-Clause", - "dependencies": { - "hosted-git-info": "^7.0.0", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/npm-audit-report": { - "version": "5.0.0", - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/npm-bundled": { - "version": "3.0.1", - "inBundle": true, - "license": "ISC", - "dependencies": { - "npm-normalize-package-bin": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/npm-install-checks": { - "version": "6.3.0", - "inBundle": true, - "license": "BSD-2-Clause", - "dependencies": { - "semver": "^7.1.1" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/npm-normalize-package-bin": { - "version": "3.0.1", - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/npm-package-arg": { - "version": "11.0.3", - "inBundle": true, - "license": "ISC", - "dependencies": { - "hosted-git-info": "^7.0.0", - "proc-log": "^4.0.0", - "semver": "^7.3.5", - "validate-npm-package-name": "^5.0.0" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/npm-packlist": { - "version": "8.0.2", - "inBundle": true, - "license": "ISC", - "dependencies": { - "ignore-walk": "^6.0.4" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/npm-pick-manifest": { - "version": "9.1.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "npm-install-checks": "^6.0.0", - "npm-normalize-package-bin": "^3.0.0", - "npm-package-arg": "^11.0.0", - "semver": "^7.3.5" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/npm-profile": { - "version": "10.0.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "npm-registry-fetch": "^17.0.1", - "proc-log": "^4.0.0" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/npm/node_modules/npm-registry-fetch": { - "version": "17.1.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/redact": "^2.0.0", - "jsonparse": "^1.3.1", - "make-fetch-happen": "^13.0.0", - "minipass": "^7.0.2", - "minipass-fetch": "^3.0.0", - "minizlib": "^2.1.2", - "npm-package-arg": "^11.0.0", - "proc-log": "^4.0.0" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/npm-user-validate": { - "version": "2.0.1", - "inBundle": true, - "license": "BSD-2-Clause", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/p-map": { - "version": "4.0.0", - "inBundle": true, - "license": "MIT", - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm/node_modules/package-json-from-dist": { - "version": "1.0.0", - "inBundle": true, - "license": "BlueOak-1.0.0" - }, - "node_modules/npm/node_modules/pacote": { - "version": "18.0.6", - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/git": "^5.0.0", - "@npmcli/installed-package-contents": "^2.0.1", - "@npmcli/package-json": "^5.1.0", - "@npmcli/promise-spawn": "^7.0.0", - "@npmcli/run-script": "^8.0.0", - "cacache": "^18.0.0", - "fs-minipass": "^3.0.0", - "minipass": "^7.0.2", - "npm-package-arg": "^11.0.0", - "npm-packlist": "^8.0.0", - "npm-pick-manifest": "^9.0.0", - "npm-registry-fetch": "^17.0.0", - "proc-log": "^4.0.0", - "promise-retry": "^2.0.1", - "sigstore": "^2.2.0", - "ssri": "^10.0.0", - "tar": "^6.1.11" - }, - "bin": { - "pacote": "bin/index.js" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/parse-conflict-json": { - "version": "3.0.1", - "inBundle": true, - "license": "ISC", - "dependencies": { - "json-parse-even-better-errors": "^3.0.0", - "just-diff": "^6.0.0", - "just-diff-apply": "^5.2.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/path-key": { - "version": "3.1.1", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/path-scurry": { - "version": "1.11.1", - "inBundle": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/npm/node_modules/postcss-selector-parser": { - "version": "6.1.2", - "inBundle": true, - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/npm/node_modules/proc-log": { - "version": "4.2.0", - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/proggy": { - "version": "2.0.0", - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/promise-all-reject-late": { - "version": "1.0.1", - "inBundle": true, - "license": "ISC", - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/npm/node_modules/promise-call-limit": { - "version": "3.0.1", - "inBundle": true, - "license": "ISC", - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/npm/node_modules/promise-inflight": { - "version": "1.0.1", - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/promise-retry": { - "version": "2.0.1", - "inBundle": true, - "license": "MIT", - "dependencies": { - "err-code": "^2.0.2", - "retry": "^0.12.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/npm/node_modules/promzard": { - "version": "1.0.2", - "inBundle": true, - "license": "ISC", - "dependencies": { - "read": "^3.0.1" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/qrcode-terminal": { - "version": "0.12.0", - "inBundle": true, - "bin": { - "qrcode-terminal": "bin/qrcode-terminal.js" - } - }, - "node_modules/npm/node_modules/read": { - "version": "3.0.1", - "inBundle": true, - "license": "ISC", - "dependencies": { - "mute-stream": "^1.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/read-cmd-shim": { - "version": "4.0.0", - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/read-package-json-fast": { - "version": "3.0.2", - "inBundle": true, - "license": "ISC", - "dependencies": { - "json-parse-even-better-errors": "^3.0.0", - "npm-normalize-package-bin": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/retry": { - "version": "0.12.0", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/npm/node_modules/safer-buffer": { - "version": "2.1.2", - "inBundle": true, - "license": "MIT", - "optional": true - }, - "node_modules/npm/node_modules/semver": { - "version": "7.6.3", - "inBundle": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/npm/node_modules/shebang-command": { - "version": "2.0.0", - "inBundle": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/shebang-regex": { - "version": "3.0.0", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/signal-exit": { - "version": "4.1.0", - "inBundle": true, - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/npm/node_modules/sigstore": { - "version": "2.3.1", - "inBundle": true, - "license": "Apache-2.0", - "dependencies": { - "@sigstore/bundle": "^2.3.2", - "@sigstore/core": "^1.0.0", - "@sigstore/protobuf-specs": "^0.3.2", - "@sigstore/sign": "^2.3.2", - "@sigstore/tuf": "^2.3.4", - "@sigstore/verify": "^1.2.1" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/smart-buffer": { - "version": "4.2.0", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">= 6.0.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/npm/node_modules/socks": { - "version": "2.8.3", - "inBundle": true, - "license": "MIT", - "dependencies": { - "ip-address": "^9.0.5", - "smart-buffer": "^4.2.0" - }, - "engines": { - "node": ">= 10.0.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/npm/node_modules/socks-proxy-agent": { - "version": "8.0.4", - "inBundle": true, - "license": "MIT", - "dependencies": { - "agent-base": "^7.1.1", - "debug": "^4.3.4", - "socks": "^2.8.3" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/npm/node_modules/spdx-correct": { - "version": "3.2.0", - "inBundle": true, - "license": "Apache-2.0", - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/npm/node_modules/spdx-correct/node_modules/spdx-expression-parse": { - "version": "3.0.1", - "inBundle": true, - "license": "MIT", - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/npm/node_modules/spdx-exceptions": { - "version": "2.5.0", - "inBundle": true, - "license": "CC-BY-3.0" - }, - "node_modules/npm/node_modules/spdx-expression-parse": { - "version": "4.0.0", - "inBundle": true, - "license": "MIT", - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/npm/node_modules/spdx-license-ids": { - "version": "3.0.18", - "inBundle": true, - "license": "CC0-1.0" - }, - "node_modules/npm/node_modules/sprintf-js": { - "version": "1.1.3", - "inBundle": true, - "license": "BSD-3-Clause" - }, - "node_modules/npm/node_modules/ssri": { - "version": "10.0.6", - "inBundle": true, - "license": "ISC", - "dependencies": { - "minipass": "^7.0.3" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/string-width": { - "version": "4.2.3", - "inBundle": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "inBundle": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/strip-ansi": { - "version": "6.0.1", - "inBundle": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "inBundle": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/supports-color": { - "version": "9.4.0", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/npm/node_modules/tar": { - "version": "6.2.1", - "inBundle": true, - "license": "ISC", - "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^5.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/npm/node_modules/tar/node_modules/fs-minipass": { - "version": "2.1.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/npm/node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { - "version": "3.3.6", - "inBundle": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/tar/node_modules/minipass": { - "version": "5.0.0", - "inBundle": true, - "license": "ISC", - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/text-table": { - "version": "0.2.0", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/tiny-relative-date": { - "version": "1.3.0", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/treeverse": { - "version": "3.0.0", - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/tuf-js": { - "version": "2.2.1", - "inBundle": true, - "license": "MIT", - "dependencies": { - "@tufjs/models": "2.0.1", - "debug": "^4.3.4", - "make-fetch-happen": "^13.0.1" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/unique-filename": { - "version": "3.0.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "unique-slug": "^4.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/unique-slug": { - "version": "4.0.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "imurmurhash": "^0.1.4" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/util-deprecate": { - "version": "1.0.2", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/validate-npm-package-license": { - "version": "3.0.4", - "inBundle": true, - "license": "Apache-2.0", - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "node_modules/npm/node_modules/validate-npm-package-license/node_modules/spdx-expression-parse": { - "version": "3.0.1", - "inBundle": true, - "license": "MIT", - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/npm/node_modules/validate-npm-package-name": { - "version": "5.0.1", - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/walk-up-path": { - "version": "3.0.1", - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/which": { - "version": "4.0.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "isexe": "^3.1.1" - }, - "bin": { - "node-which": "bin/which.js" - }, - "engines": { - "node": "^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/which/node_modules/isexe": { - "version": "3.1.1", - "inBundle": true, - "license": "ISC", - "engines": { - "node": ">=16" - } - }, - "node_modules/npm/node_modules/wrap-ansi": { - "version": "8.1.0", - "inBundle": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/npm/node_modules/wrap-ansi-cjs": { - "name": "wrap-ansi", - "version": "7.0.0", - "inBundle": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/npm/node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { - "version": "4.3.0", - "inBundle": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/npm/node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "6.0.1", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/npm/node_modules/wrap-ansi/node_modules/emoji-regex": { - "version": "9.2.2", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/wrap-ansi/node_modules/string-width": { - "version": "5.1.2", - "inBundle": true, - "license": "MIT", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm/node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "7.1.0", - "inBundle": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/npm/node_modules/write-file-atomic": { - "version": "5.0.1", - "inBundle": true, - "license": "ISC", - "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/yallist": { - "version": "4.0.0", - "inBundle": true, - "license": "ISC" - }, - "node_modules/number-to-bn": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", - "integrity": "sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig==", - "dev": true, - "dependencies": { - "bn.js": "4.11.6", - "strip-hex-prefix": "1.0.0" - }, - "engines": { - "node": ">=6.5.0", - "npm": ">=3" - } - }, - "node_modules/number-to-bn/node_modules/bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==", - "dev": true - }, - "node_modules/o3": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/o3/-/o3-1.0.3.tgz", - "integrity": "sha512-f+4n+vC6s4ysy7YO7O2gslWZBUu8Qj2i2OUJOvjRxQva7jVjYjB29jrr9NCjmxZQR0gzrOcv1RnqoYOeMs5VRQ==", - "optional": true, - "dependencies": { - "capability": "^0.2.5" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", - "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", - "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.5", - "define-properties": "^1.2.1", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.fromentries": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz", - "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.groupby": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.1.tgz", - "integrity": "sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1" - } - }, - "node_modules/object.values": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz", - "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/obliterator": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-2.0.4.tgz", - "integrity": "sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==", - "dev": true - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "devOptional": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/one-time": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz", - "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==", - "dependencies": { - "fn.name": "1.x.x" - } - }, - "node_modules/optionator": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", - "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", - "dev": true, - "peer": true, - "dependencies": { - "@aashutoshrathi/word-wrap": "^1.2.3", - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/ordinal": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/ordinal/-/ordinal-1.0.3.tgz", - "integrity": "sha512-cMddMgb2QElm8G7vdaa02jhUNbTSrhsgAGUz1OokD83uJTwSUn+nKoNoKVVaRa08yF6sgfO7Maou1+bgLd9rdQ==", - "dev": true - }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/p-cancelable": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", - "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", - "optional": true, - "engines": { - "node": ">=8" + "node": ">=8" } }, "node_modules/p-limit": { @@ -15552,11 +13115,6 @@ "asap": "~2.0.6" } }, - "node_modules/promised-io": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/promised-io/-/promised-io-0.3.6.tgz", - "integrity": "sha512-bNwZusuNIW4m0SPR8jooSyndD35ggirHlxVl/UhIaZD/F0OBv9ebfc6tNmbpZts3QXHggkjIBH8lvtnzhtcz0A==" - }, "node_modules/promisify-child-process": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/promisify-child-process/-/promisify-child-process-4.1.2.tgz", @@ -15971,20 +13529,6 @@ "rlp": "bin/rlp" } }, - "node_modules/run": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/run/-/run-1.5.0.tgz", - "integrity": "sha512-CBPzeX6JQZUdhZpSFyNt2vUk44ivKMWZYCNBYoZYEE46mL9nf6WyMP3320WnzIrJuo89+njiUvlo83jUEXjXLg==", - "dependencies": { - "minimatch": "*" - }, - "bin": { - "runjs": "cli.js" - }, - "engines": { - "node": ">=v0.9.0" - } - }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -17363,14 +14907,6 @@ "node": ">= 0.12" } }, - "node_modules/timespan": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/timespan/-/timespan-2.3.0.tgz", - "integrity": "sha512-0Jq9+58T2wbOyLth0EU+AUb6JMGCLaTWIykJFa7hyAybjVH9gpVMTfUAwo5fWAvtFt2Tjh/Elg8JtgNpnMnM8g==", - "engines": { - "node": ">= 0.2.0" - } - }, "node_modules/tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", @@ -17383,11 +14919,6 @@ "node": ">=0.6.0" } }, - "node_modules/tmpl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==" - }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -17665,14 +15196,6 @@ "uuid": "dist/bin/uuid" } }, - "node_modules/walker": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", - "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", - "dependencies": { - "makeerror": "1.0.12" - } - }, "node_modules/web3-utils": { "version": "1.10.3", "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.10.3.tgz", @@ -17897,15 +15420,6 @@ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "devOptional": true }, - "node_modules/wrench": { - "version": "1.3.9", - "resolved": "https://registry.npmjs.org/wrench/-/wrench-1.3.9.tgz", - "integrity": "sha512-srTJQmLTP5YtW+F5zDuqjMEZqLLr/eJOZfDI5ibfPfRMeDh3oBUefAscuH0q5wBKE339ptH/S/0D18ZkfOfmKQ==", - "deprecated": "wrench.js is deprecated! You should check out fs-extra (https://github.com/jprichardson/node-fs-extra) for any operations you were using wrench for. Thanks for all the usage over the years.", - "engines": { - "node": ">=0.1.97" - } - }, "node_modules/ws": { "version": "8.16.0", "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz", From 4945f42ed0477cee07367395ed6395e843dca1d8 Mon Sep 17 00:00:00 2001 From: ahramy Date: Sun, 20 Oct 2024 00:40:56 -0700 Subject: [PATCH 5/9] updated gmp test --- examples/amplifier/contracts/AmplifierGMPTest.sol | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/examples/amplifier/contracts/AmplifierGMPTest.sol b/examples/amplifier/contracts/AmplifierGMPTest.sol index 47145c50..90db9943 100644 --- a/examples/amplifier/contracts/AmplifierGMPTest.sol +++ b/examples/amplifier/contracts/AmplifierGMPTest.sol @@ -2,7 +2,6 @@ pragma solidity ^0.8.0; import { AxelarExecutable } from '@axelar-network/axelar-gmp-sdk-solidity/contracts/executable/AxelarExecutable.sol'; -import { IAxelarGateway } from '@axelar-network/axelar-gmp-sdk-solidity/contracts/interfaces/IAxelarGateway.sol'; /** * @title AmplifierGMPTest @@ -24,7 +23,7 @@ contract AmplifierGMPTest is AxelarExecutable { */ function setRemoteValue(string calldata destinationChain, string calldata destinationAddress, string calldata _message) external { bytes memory payload = abi.encode(_message); - gateway.callContract(destinationChain, destinationAddress, payload); + gateway().callContract(destinationChain, destinationAddress, payload); } /** @@ -34,7 +33,12 @@ contract AmplifierGMPTest is AxelarExecutable { * @param _sourceAddress address on src chain where tx is originating from * @param _payload encoded gmp message sent from src chain */ - function _execute(string calldata _sourceChain, string calldata _sourceAddress, bytes calldata _payload) internal override { + function _execute( + bytes32 /*commandId*/, + string calldata _sourceChain, + string calldata _sourceAddress, + bytes calldata _payload + ) internal virtual override { (message) = abi.decode(_payload, (string)); sourceChain = _sourceChain; sourceAddress = _sourceAddress; From e0b91ea6ce20aad562119afb63db370bd29ee96c Mon Sep 17 00:00:00 2001 From: ahramy Date: Sun, 20 Oct 2024 00:45:31 -0700 Subject: [PATCH 6/9] update paackage.json --- examples-web/package-lock.json | 2 +- examples-web/package.json | 2 +- package-lock.json | 2 +- package.json | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/examples-web/package-lock.json b/examples-web/package-lock.json index 1f1e748b..e14dac39 100644 --- a/examples-web/package-lock.json +++ b/examples-web/package-lock.json @@ -8,7 +8,7 @@ "name": "axelar-example-web", "version": "0.1.0", "dependencies": { - "@axelar-network/axelar-gmp-sdk-solidity": "^5.3.1", + "@axelar-network/axelar-gmp-sdk-solidity": "^6.0.0", "@axelar-network/axelar-local-dev": "^2.1.1", "@axelar-network/axelarjs-sdk": "^0.15.0", "@openzeppelin/contracts": "^4.8.1", diff --git a/examples-web/package.json b/examples-web/package.json index 9072248a..9f0bbf7a 100644 --- a/examples-web/package.json +++ b/examples-web/package.json @@ -14,7 +14,7 @@ "contracts:clean": "rm -rf artifacts src/types" }, "dependencies": { - "@axelar-network/axelar-gmp-sdk-solidity": "^5.3.1", + "@axelar-network/axelar-gmp-sdk-solidity": "^6.0.0", "@axelar-network/axelar-local-dev": "^2.1.1", "@axelar-network/axelarjs-sdk": "^0.15.0", "@openzeppelin/contracts": "^4.8.1", diff --git a/package-lock.json b/package-lock.json index f5c4f820..03e058f3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,7 @@ "license": "ISC", "dependencies": { "@axelar-network/axelar-chains-config": "^1.2.0", - "@axelar-network/axelar-gmp-sdk-solidity": "6.0.0", + "@axelar-network/axelar-gmp-sdk-solidity": "^6.0.0", "@axelar-network/axelar-local-dev": "^2.3.3", "@axelar-network/axelar-local-dev-cosmos": "^2.3.0", "@axelar-network/axelar-local-dev-multiversx": "^2.3.0", diff --git a/package.json b/package.json index d0dff5f4..75bd15f9 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,7 @@ "license": "ISC", "dependencies": { "@axelar-network/axelar-chains-config": "^1.2.0", - "@axelar-network/axelar-gmp-sdk-solidity": "6.0.0", + "@axelar-network/axelar-gmp-sdk-solidity": "^6.0.0", "@axelar-network/axelar-local-dev": "^2.3.3", "@axelar-network/axelar-local-dev-cosmos": "^2.3.0", "@axelar-network/axelar-local-dev-multiversx": "^2.3.0", From 04b22792254d3433eddef5cd331ac9d277f462f0 Mon Sep 17 00:00:00 2001 From: ahramy Date: Sun, 20 Oct 2024 00:51:13 -0700 Subject: [PATCH 7/9] updated package-lock.json --- examples-web/package-lock.json | 44 ++++++++++++++++++++++++++++------ 1 file changed, 37 insertions(+), 7 deletions(-) diff --git a/examples-web/package-lock.json b/examples-web/package-lock.json index e14dac39..6351d1c1 100644 --- a/examples-web/package-lock.json +++ b/examples-web/package-lock.json @@ -51,6 +51,14 @@ "node": ">=16" } }, + "node_modules/@axelar-network/axelar-cgp-solidity/node_modules/@axelar-network/axelar-gmp-sdk-solidity": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/@axelar-network/axelar-gmp-sdk-solidity/-/axelar-gmp-sdk-solidity-5.10.0.tgz", + "integrity": "sha512-s8SImALvYB+5AeiT3tbfWNBI2Mhqw1x91i/zM3DNpVUCnAR2HKtsB9T84KnUn/OJjOVgb4h0lv7q9smeYniRPw==", + "engines": { + "node": ">=18" + } + }, "node_modules/@axelar-network/axelar-chains-config": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/@axelar-network/axelar-chains-config/-/axelar-chains-config-0.1.2.tgz", @@ -74,11 +82,11 @@ } }, "node_modules/@axelar-network/axelar-gmp-sdk-solidity": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/@axelar-network/axelar-gmp-sdk-solidity/-/axelar-gmp-sdk-solidity-5.3.1.tgz", - "integrity": "sha512-pwhSKbHjByavmJdETxf21lRekclAO5RBJkCYGVT/MmsfacNEAKbVFdOVbJ/JPLTIc5bPKWdp9ak4ET3GKrSjhg==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@axelar-network/axelar-gmp-sdk-solidity/-/axelar-gmp-sdk-solidity-6.0.0.tgz", + "integrity": "sha512-skmHwbvYOkyuIrL5twVDlRNbyDAWQXcPGGufSMhBZ125iy85TAti76EFayoyfFXvLsq3BnKE8D+D1iC2mXB5eA==", "engines": { - "node": ">=16" + "node": ">=18" } }, "node_modules/@axelar-network/axelar-local-dev": { @@ -101,6 +109,14 @@ "near-workspaces": "^3.3.0" } }, + "node_modules/@axelar-network/axelar-local-dev/node_modules/@axelar-network/axelar-gmp-sdk-solidity": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/@axelar-network/axelar-gmp-sdk-solidity/-/axelar-gmp-sdk-solidity-5.10.0.tgz", + "integrity": "sha512-s8SImALvYB+5AeiT3tbfWNBI2Mhqw1x91i/zM3DNpVUCnAR2HKtsB9T84KnUn/OJjOVgb4h0lv7q9smeYniRPw==", + "engines": { + "node": ">=18" + } + }, "node_modules/@axelar-network/axelarjs-sdk": { "version": "0.15.0", "resolved": "https://registry.npmjs.org/@axelar-network/axelarjs-sdk/-/axelarjs-sdk-0.15.0.tgz", @@ -14865,6 +14881,13 @@ "integrity": "sha512-NHoJySnSujCmytYQIXtT760oPd4G8HSxH9qDhK6xd64soGLT6cnoMpZzQuhfonSqZRc/XWW7VJnvVX2AlgQ0Aw==", "requires": { "@axelar-network/axelar-gmp-sdk-solidity": "^5.3.0" + }, + "dependencies": { + "@axelar-network/axelar-gmp-sdk-solidity": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/@axelar-network/axelar-gmp-sdk-solidity/-/axelar-gmp-sdk-solidity-5.10.0.tgz", + "integrity": "sha512-s8SImALvYB+5AeiT3tbfWNBI2Mhqw1x91i/zM3DNpVUCnAR2HKtsB9T84KnUn/OJjOVgb4h0lv7q9smeYniRPw==" + } } }, "@axelar-network/axelar-chains-config": { @@ -14889,9 +14912,9 @@ } }, "@axelar-network/axelar-gmp-sdk-solidity": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/@axelar-network/axelar-gmp-sdk-solidity/-/axelar-gmp-sdk-solidity-5.3.1.tgz", - "integrity": "sha512-pwhSKbHjByavmJdETxf21lRekclAO5RBJkCYGVT/MmsfacNEAKbVFdOVbJ/JPLTIc5bPKWdp9ak4ET3GKrSjhg==" + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@axelar-network/axelar-gmp-sdk-solidity/-/axelar-gmp-sdk-solidity-6.0.0.tgz", + "integrity": "sha512-skmHwbvYOkyuIrL5twVDlRNbyDAWQXcPGGufSMhBZ125iy85TAti76EFayoyfFXvLsq3BnKE8D+D1iC2mXB5eA==" }, "@axelar-network/axelar-local-dev": { "version": "2.1.1", @@ -14906,6 +14929,13 @@ "ganache": "^7.1.0", "lodash": "^4.17.21", "near-workspaces": "^3.3.0" + }, + "dependencies": { + "@axelar-network/axelar-gmp-sdk-solidity": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/@axelar-network/axelar-gmp-sdk-solidity/-/axelar-gmp-sdk-solidity-5.10.0.tgz", + "integrity": "sha512-s8SImALvYB+5AeiT3tbfWNBI2Mhqw1x91i/zM3DNpVUCnAR2HKtsB9T84KnUn/OJjOVgb4h0lv7q9smeYniRPw==" + } } }, "@axelar-network/axelarjs-sdk": { From 7ce1a25f25af0cd5c6a437deacb4bef5d84fc197 Mon Sep 17 00:00:00 2001 From: ahramy Date: Sun, 20 Oct 2024 01:05:59 -0700 Subject: [PATCH 8/9] updated --- .../contracts/CallContractWithToken.sol | 12 ++++++++++-- examples-web/contracts/nft-linker/NFTLinker.sol | 1 + 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/examples-web/contracts/call-contract-with-token/contracts/CallContractWithToken.sol b/examples-web/contracts/call-contract-with-token/contracts/CallContractWithToken.sol index 4b0d3aa7..2c269441 100644 --- a/examples-web/contracts/call-contract-with-token/contracts/CallContractWithToken.sol +++ b/examples-web/contracts/call-contract-with-token/contracts/CallContractWithToken.sol @@ -76,8 +76,9 @@ contract CallContractWithToken is AxelarExecutableWithToken { * @param amount amount of tokens sent from src chain */ function _executeWithToken( - string calldata, - string calldata, + bytes32 /*commandId*/, + string calldata /*sourceChain*/, + string calldata /*sourceAddress*/, bytes calldata payload, string calldata tokenSymbol, uint256 amount @@ -91,4 +92,11 @@ contract CallContractWithToken is AxelarExecutableWithToken { } emit Executed(); } + + function _execute( + bytes32 commandId, + string calldata sourceChain, + string calldata sourceAddress, + bytes calldata payload + ) internal virtual override {} } diff --git a/examples-web/contracts/nft-linker/NFTLinker.sol b/examples-web/contracts/nft-linker/NFTLinker.sol index 33d800d1..a383a470 100644 --- a/examples-web/contracts/nft-linker/NFTLinker.sol +++ b/examples-web/contracts/nft-linker/NFTLinker.sol @@ -161,6 +161,7 @@ contract NftLinker is ERC721URIStorage, AxelarExecutable, Upgradable { * @param payload encoded gmp message sent from src chain */ function _execute( + bytes32 /*commandId*/, string calldata /*sourceChain*/, string calldata sourceAddress, bytes calldata payload From 6704d6160b0c35b62ead8cedac8eb862ed3077dc Mon Sep 17 00:00:00 2001 From: ahramy Date: Sun, 20 Oct 2024 01:10:49 -0700 Subject: [PATCH 9/9] update --- .../contracts/CallContractWithToken.sol | 1 + examples-web/contracts/call-contract/CallContract.sol | 2 ++ examples/amplifier/contracts/AmplifierGMPTest.sol | 1 + examples/evm/nft-linker/NftLinker.sol | 1 + 4 files changed, 5 insertions(+) diff --git a/examples-web/contracts/call-contract-with-token/contracts/CallContractWithToken.sol b/examples-web/contracts/call-contract-with-token/contracts/CallContractWithToken.sol index 2c269441..4d4e3e0d 100644 --- a/examples-web/contracts/call-contract-with-token/contracts/CallContractWithToken.sol +++ b/examples-web/contracts/call-contract-with-token/contracts/CallContractWithToken.sol @@ -71,6 +71,7 @@ contract CallContractWithToken is AxelarExecutableWithToken { * @dev this is triggered automatically by relayer * @param * @param + * @param * @param payload encoded gmp message sent from src chain * @param tokenSymbol symbol of token sent from src chain * @param amount amount of tokens sent from src chain diff --git a/examples-web/contracts/call-contract/CallContract.sol b/examples-web/contracts/call-contract/CallContract.sol index 221a97e0..b906f542 100644 --- a/examples-web/contracts/call-contract/CallContract.sol +++ b/examples-web/contracts/call-contract/CallContract.sol @@ -57,11 +57,13 @@ contract CallContract is AxelarExecutable { /** * @notice logic to be executed on dest chain * @dev this is triggered automatically by relayer + * @param * @param _sourceChain blockchain where tx is originating from * @param _sourceAddress address on src chain where tx is originating from * @param _payload encoded gmp message sent from src chain */ function _execute( + bytes32 /*commandId*/, string calldata _sourceChain, string calldata _sourceAddress, bytes calldata _payload diff --git a/examples/amplifier/contracts/AmplifierGMPTest.sol b/examples/amplifier/contracts/AmplifierGMPTest.sol index 90db9943..3278477f 100644 --- a/examples/amplifier/contracts/AmplifierGMPTest.sol +++ b/examples/amplifier/contracts/AmplifierGMPTest.sol @@ -29,6 +29,7 @@ contract AmplifierGMPTest is AxelarExecutable { /** * @notice logic to be executed on dest chain * @dev this is triggered automatically by relayer + * @param * @param _sourceChain blockchain where tx is originating from * @param _sourceAddress address on src chain where tx is originating from * @param _payload encoded gmp message sent from src chain diff --git a/examples/evm/nft-linker/NftLinker.sol b/examples/evm/nft-linker/NftLinker.sol index a3ab9185..f8467f33 100644 --- a/examples/evm/nft-linker/NftLinker.sol +++ b/examples/evm/nft-linker/NftLinker.sol @@ -113,6 +113,7 @@ contract NftLinker is ERC721URIStorage, AxelarExecutable, Upgradable { * @notice logic to be executed on dest chain * @dev this is triggered automatically by relayer since gas was paid for * @param + * @param * @param _sourceAddress address on src chain where tx is originating from * @param _payload encoded gmp message sent from src chain */