From 2aef069c9905798729fcd47f3c18035e0e3f6a1d Mon Sep 17 00:00:00 2001 From: Dwight Lyle Date: Mon, 15 Jan 2024 09:49:03 -0700 Subject: [PATCH 01/21] Update docs for contracts NPM 1-0-0 --- package-lock.json | 37 +++++++++++++++------- package.json | 2 +- public/samples/Automation/example.sol | 4 +-- public/samples/ChainlinkNodes/Operator.sol | 4 +-- 4 files changed, 30 insertions(+), 17 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4bfa6eeab0c..fb063d17ccd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,7 +18,7 @@ "@astrojs/react": "^3.0.4", "@astrojs/sitemap": "^3.0.3", "@chainlink/components": "^0.4.5", - "@chainlink/contracts": "^0.8.0", + "@chainlink/contracts": "^1.0.0-beta.0", "@chainlink/contracts-ccip": "^1.2.1", "@chainlink/design-system": "^0.1.50", "@chainlink/solana-sdk": "^0.2.2", @@ -1042,14 +1042,14 @@ } }, "node_modules/@chainlink/contracts": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@chainlink/contracts/-/contracts-0.8.0.tgz", - "integrity": "sha512-nUv1Uxw5Mn92wgLs2bgPYmo8hpdQ3s9jB/lcbdU0LmNOVu0hbfmouVnqwRLa28Ll50q6GczUA+eO0ikNIKLZsA==", + "version": "1.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@chainlink/contracts/-/contracts-1.0.0-beta.0.tgz", + "integrity": "sha512-YYd5ssgg9lZ8SvwTQtU07cEFkZulJWf+IZp5iG8tXswR0KmZ7VhD1xe44P1l1uCXMTujBSsoxED9GwL2xLXlGA==", "dependencies": { - "@eth-optimism/contracts": "^0.5.21", - "@openzeppelin/contracts": "~4.3.3", - "@openzeppelin/contracts-upgradeable-4.7.3": "npm:@openzeppelin/contracts-upgradeable@v4.7.3", - "@openzeppelin/contracts-v0.7": "npm:@openzeppelin/contracts@v3.4.2" + "@eth-optimism/contracts": "0.6.0", + "@openzeppelin/contracts": "4.9.3", + "@openzeppelin/contracts-upgradeable": "4.9.3", + "@scroll-tech/contracts": "0.1.0" } }, "node_modules/@chainlink/contracts-ccip": { @@ -1068,10 +1068,18 @@ "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.3.3.tgz", "integrity": "sha512-tDBopO1c98Yk7Cv/PZlHqrvtVjlgK5R4J6jxLwoO7qxK4xqOiZG+zSkIvGFpPZ0ikc3QOED3plgdqjgNTnBc7g==" }, - "node_modules/@chainlink/contracts/node_modules/@openzeppelin/contracts": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.3.3.tgz", - "integrity": "sha512-tDBopO1c98Yk7Cv/PZlHqrvtVjlgK5R4J6jxLwoO7qxK4xqOiZG+zSkIvGFpPZ0ikc3QOED3plgdqjgNTnBc7g==" + "node_modules/@chainlink/contracts/node_modules/@eth-optimism/contracts": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@eth-optimism/contracts/-/contracts-0.6.0.tgz", + "integrity": "sha512-vQ04wfG9kMf1Fwy3FEMqH2QZbgS0gldKhcBeBUPfO8zu68L61VI97UDXmsMQXzTsEAxK8HnokW3/gosl4/NW3w==", + "dependencies": { + "@eth-optimism/core-utils": "0.12.0", + "@ethersproject/abstract-provider": "^5.7.0", + "@ethersproject/abstract-signer": "^5.7.0" + }, + "peerDependencies": { + "ethers": "^5" + } }, "node_modules/@chainlink/design-system": { "version": "0.1.50", @@ -4326,6 +4334,11 @@ "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.9.5.tgz", "integrity": "sha512-ZK+W5mVhRppff9BE6YdR8CC52C8zAvsVAiWhEtQ5+oNxFE6h1WdeWo+FJSF8KKvtxxVYZ7MTP/5KoVpAU3aSWg==" }, + "node_modules/@openzeppelin/contracts-upgradeable": { + "version": "4.9.3", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-4.9.3.tgz", + "integrity": "sha512-jjaHAVRMrE4UuZNfDwjlLGDxTHWIOwTJS2ldnc278a0gevfXfPr8hxKEVBGFBE96kl2G3VHDZhUimw/+G3TG2A==" + }, "node_modules/@openzeppelin/contracts-upgradeable-4.7.3": { "name": "@openzeppelin/contracts-upgradeable", "version": "4.7.3", diff --git a/package.json b/package.json index d5196e07b83..979c9865ad1 100644 --- a/package.json +++ b/package.json @@ -37,7 +37,7 @@ "@astrojs/react": "^3.0.4", "@astrojs/sitemap": "^3.0.3", "@chainlink/components": "^0.4.5", - "@chainlink/contracts": "^0.8.0", + "@chainlink/contracts": "^1.0.0-beta.0", "@chainlink/contracts-ccip": "^1.2.1", "@chainlink/design-system": "^0.1.50", "@chainlink/solana-sdk": "^0.2.2", diff --git a/public/samples/Automation/example.sol b/public/samples/Automation/example.sol index 049f2bce03d..41b37f51054 100644 --- a/public/samples/Automation/example.sol +++ b/public/samples/Automation/example.sol @@ -1,9 +1,9 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.7.0; +pragma solidity ^0.8.0; // KeeperCompatible.sol imports the functions from both ./KeeperBase.sol and // ./interfaces/KeeperCompatibleInterface.sol -import "@chainlink/contracts/src/v0.7/KeeperCompatible.sol"; +import "@chainlink/contracts/src/v0.8/Automation/KeeperCompatible.sol"; /** * THIS IS AN EXAMPLE CONTRACT THAT USES HARDCODED VALUES FOR CLARITY. diff --git a/public/samples/ChainlinkNodes/Operator.sol b/public/samples/ChainlinkNodes/Operator.sol index d88a048fd72..5fcc794ec14 100644 --- a/public/samples/ChainlinkNodes/Operator.sol +++ b/public/samples/ChainlinkNodes/Operator.sol @@ -1,3 +1,3 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.7.6; -import "@chainlink/contracts/src/v0.7/Operator.sol"; +pragma solidity ^0.8.19; +import "@chainlink/contracts/src/v0.8/operatorforwarder/dev/Operator.sol"; From 07061d803cdb7ddfd963b0395c086d9a27d0f55a Mon Sep 17 00:00:00 2001 From: Dwight Lyle Date: Mon, 12 Feb 2024 20:06:39 -0700 Subject: [PATCH 02/21] Update URLs update imports and update function names --- package-lock.json | 10 + public/samples/APIRequests/APIConsumer.sol | 16 +- .../APIRequests/APIConsumerForwarder.sol | 26 +- .../samples/APIRequests/ATestnetConsumer.sol | 18 +- public/samples/APIRequests/FetchFromArray.sol | 14 +- public/samples/APIRequests/GenericBigWord.sol | 14 +- public/samples/APIRequests/GetGasPrice.sol | 10 +- .../samples/APIRequests/MultiWordConsumer.sol | 22 +- public/samples/Automation/example.sol | 2 +- .../VRFSubscriptionBalanceMonitor.sol | 2 +- .../AutomatedFunctionsConsumerExample.sol | 2 +- ...ustomAutomatedFunctionsConsumerExample.sol | 4 +- .../FunctionsConsumerDecoder.sol | 4 +- .../FunctionsConsumerExample.sol | 4 +- .../GettingStartedFunctionsConsumer.sol | 4 +- public/samples/ChainlinkNodes/Oracle.sol | 3 - public/samples/DataFeeds/DataConsumerV3.sol | 2 +- .../DataConsumerWithSequencerCheck.sol | 2 +- .../DataFeeds/HistoricalDataConsumer.sol | 2 +- .../DataFeeds/NFTFloorPriceConsumerV3.sol | 2 +- public/samples/DataFeeds/PriceConverter.sol | 2 +- .../samples/DataFeeds/ReserveConsumerV3.sol | 2 +- public/samples/DataStreams/StreamsUpkeep.sol | 4 +- public/samples/VRF/VRFD20.sol | 2 +- public/samples/VRF/VRFv2Consumer.sol | 2 +- public/samples/VRF/VRFv2MultiplePaths.sol | 2 +- .../samples/VRF/VRFv2SubscriptionManager.sol | 2 +- public/samples/VRF/mock/LinkToken.sol | 4 +- .../samples/VRF/mock/VRFCoordinatorV2Mock.sol | 2 +- public/samples/VRF/mock/VRFV2Wrapper.sol | 2 +- public/samples/VRF/mock/VRFv2Consumer.sol | 2 +- .../avasummit/VRFv2SubscriptionManager.sol | 2 +- src/content/any-api/api-reference.mdx | 64 ++-- .../get-request/examples/array-response.mdx | 2 +- .../get-request/examples/large-responses.mdx | 4 +- .../examples/multi-variable-responses.mdx | 4 +- .../examples/single-word-response.mdx | 6 +- src/content/any-api/getting-started.mdx | 4 +- src/content/any-api/testnet-oracles.mdx | 44 +-- .../chainlink-functions/getting-started.mdx | 4 +- .../external-adapters/contract-creators.mdx | 14 +- .../oracle-jobs/v1/adapters.mdx | 24 +- .../v1/fulfilling-requests.mdx | 2 +- .../chainlink-nodes/v1/using-forwarder.mdx | 2 +- src/content/vrf/v2/getting-started.mdx | 10 +- .../common/AutomatedFunctionsConsumer.mdx | 2 +- .../CustomAutomatedFunctionsConsumer.mdx | 2 +- .../common/FunctionsConsumer.mdx | 4 +- src/scripts/link-to-wallet.ts | 2 +- src/scripts/reference/LinkToken.json | 323 ++++++++++++++++++ 50 files changed, 519 insertions(+), 189 deletions(-) delete mode 100644 public/samples/ChainlinkNodes/Oracle.sol create mode 100644 src/scripts/reference/LinkToken.json diff --git a/package-lock.json b/package-lock.json index fb063d17ccd..f7286b86c55 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1081,6 +1081,11 @@ "ethers": "^5" } }, + "node_modules/@chainlink/contracts/node_modules/@openzeppelin/contracts": { + "version": "4.9.3", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.9.3.tgz", + "integrity": "sha512-He3LieZ1pP2TNt5JbkPA4PNT9WC3gOTOlDcFGJW4Le4QKqwmiNJCRt44APfxMxvq7OugU/cqYuPcSBzOw38DAg==" + }, "node_modules/@chainlink/design-system": { "version": "0.1.50", "resolved": "https://registry.npmjs.org/@chainlink/design-system/-/design-system-0.1.50.tgz", @@ -5530,6 +5535,11 @@ ], "peer": true }, + "node_modules/@scroll-tech/contracts": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@scroll-tech/contracts/-/contracts-0.1.0.tgz", + "integrity": "sha512-aBbDOc3WB/WveZdpJYcrfvMYMz7ZTEiW8M9XMJLba8p9FAR5KGYB/cV+8+EUsq3MKt7C1BfR+WnXoTVdvwIY6w==" + }, "node_modules/@scure/base": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.5.tgz", diff --git a/public/samples/APIRequests/APIConsumer.sol b/public/samples/APIRequests/APIConsumer.sol index 4e02c71f7e2..fecb5594eb5 100644 --- a/public/samples/APIRequests/APIConsumer.sol +++ b/public/samples/APIRequests/APIConsumer.sol @@ -34,8 +34,8 @@ contract APIConsumer is ChainlinkClient, ConfirmedOwner { * */ constructor() ConfirmedOwner(msg.sender) { - setChainlinkToken(0x779877A7B0D9E8603169DdbD7836e478b4624789); - setChainlinkOracle(0x6090149792dAAeE9D1D568c9f9a6F6B46AA29eFD); + _setChainlinkToken(0x779877A7B0D9E8603169DdbD7836e478b4624789); + _setChainlinkOracle(0x6090149792dAAeE9D1D568c9f9a6F6B46AA29eFD); jobId = "ca98366cc7314957b8c012c72f05aeeb"; fee = (1 * LINK_DIVISIBILITY) / 10; // 0,1 * 10**18 (Varies by network and job) } @@ -45,14 +45,14 @@ contract APIConsumer is ChainlinkClient, ConfirmedOwner { * data, then multiply by 1000000000000000000 (to remove decimal places from data). */ function requestVolumeData() public returns (bytes32 requestId) { - Chainlink.Request memory req = buildChainlinkRequest( + Chainlink.Request memory req = _buildChainlinkRequest( jobId, address(this), this.fulfill.selector ); // Set the URL to perform the GET request on - req.add( + req._add( "get", "https://min-api.cryptocompare.com/data/pricemultifull?fsyms=ETH&tsyms=USD" ); @@ -68,14 +68,14 @@ contract APIConsumer is ChainlinkClient, ConfirmedOwner { // } // } // request.add("path", "RAW.ETH.USD.VOLUME24HOUR"); // Chainlink nodes prior to 1.0.0 support this format - req.add("path", "RAW,ETH,USD,VOLUME24HOUR"); // Chainlink nodes 1.0.0 and later support this format + req._add("path", "RAW,ETH,USD,VOLUME24HOUR"); // Chainlink nodes 1.0.0 and later support this format // Multiply the result by 1000000000000000000 to remove decimals int256 timesAmount = 10 ** 18; - req.addInt("times", timesAmount); + req._addInt("times", timesAmount); // Sends the request - return sendChainlinkRequest(req, fee); + return _sendChainlinkRequest(req, fee); } /** @@ -93,7 +93,7 @@ contract APIConsumer is ChainlinkClient, ConfirmedOwner { * Allow withdraw of Link tokens from the contract */ function withdrawLink() public onlyOwner { - LinkTokenInterface link = LinkTokenInterface(chainlinkTokenAddress()); + LinkTokenInterface link = LinkTokenInterface(_chainlinkTokenAddress()); require( link.transfer(msg.sender, link.balanceOf(address(this))), "Unable to transfer" diff --git a/public/samples/APIRequests/APIConsumerForwarder.sol b/public/samples/APIRequests/APIConsumerForwarder.sol index 57e6e6a37de..a1ac390b089 100644 --- a/public/samples/APIRequests/APIConsumerForwarder.sol +++ b/public/samples/APIRequests/APIConsumerForwarder.sol @@ -28,25 +28,25 @@ contract APIConsumerForwarder is ChainlinkClient, ConfirmedOwner { * @dev Check https://docs.chain.link/docs/link-token-contracts/ for LINK address for the right network */ constructor() ConfirmedOwner(msg.sender) { - setChainlinkToken(0x779877A7B0D9E8603169DdbD7836e478b4624789); + _setChainlinkToken(0x779877A7B0D9E8603169DdbD7836e478b4624789); } function requestEthereumPrice( address _oracle, string memory _jobId ) public onlyOwner { - Chainlink.Request memory req = buildChainlinkRequest( + Chainlink.Request memory req = _buildChainlinkRequest( stringToBytes32(_jobId), address(this), this.fulfillEthereumPrice.selector ); - req.add( + req._add( "get", "https://min-api.cryptocompare.com/data/price?fsym=ETH&tsyms=USD" ); - req.add("path", "USD"); - req.addInt("times", 100); - sendChainlinkRequestTo(_oracle, req, ORACLE_PAYMENT); + req._add("path", "USD"); + req._addInt("times", 100); + _sendChainlinkRequestTo(_oracle, req, ORACLE_PAYMENT); } /** @@ -57,7 +57,7 @@ contract APIConsumerForwarder is ChainlinkClient, ConfirmedOwner { address _oracle, string memory _jobId ) public onlyOwner { - Chainlink.Request memory req = buildChainlinkRequest( + Chainlink.Request memory req = _buildChainlinkRequest( stringToBytes32(_jobId), address(this), this.fulfillFirstId.selector @@ -65,7 +65,7 @@ contract APIConsumerForwarder is ChainlinkClient, ConfirmedOwner { // Set the URL to perform the GET request on // API docs: https://www.coingecko.com/en/api/documentation? - req.add( + req._add( "get", "https://api.coingecko.com/api/v3/coins/markets?vs_currency=usd&per_page=10" ); @@ -80,9 +80,9 @@ contract APIConsumerForwarder is ChainlinkClient, ConfirmedOwner { // ... // .. }] // request.add("path", "0.id"); // Chainlink nodes prior to 1.0.0 support this format - req.add("path", "0,id"); // Chainlink nodes 1.0.0 and later support this format + req._add("path", "0,id"); // Chainlink nodes 1.0.0 and later support this format // Sends the request - sendChainlinkRequestTo(_oracle, req, ORACLE_PAYMENT); + _sendChainlinkRequestTo(_oracle, req, ORACLE_PAYMENT); } function fulfillEthereumPrice( @@ -105,11 +105,11 @@ contract APIConsumerForwarder is ChainlinkClient, ConfirmedOwner { } function getChainlinkToken() public view returns (address) { - return chainlinkTokenAddress(); + return _chainlinkTokenAddress(); } function withdrawLink() public onlyOwner { - LinkTokenInterface link = LinkTokenInterface(chainlinkTokenAddress()); + LinkTokenInterface link = LinkTokenInterface(_chainlinkTokenAddress()); require( link.transfer(msg.sender, link.balanceOf(address(this))), "Unable to transfer" @@ -122,7 +122,7 @@ contract APIConsumerForwarder is ChainlinkClient, ConfirmedOwner { bytes4 _callbackFunctionId, uint256 _expiration ) public onlyOwner { - cancelChainlinkRequest( + _cancelChainlinkRequest( _requestId, _payment, _callbackFunctionId, diff --git a/public/samples/APIRequests/ATestnetConsumer.sol b/public/samples/APIRequests/ATestnetConsumer.sol index 946b6441857..11e9a3865ef 100644 --- a/public/samples/APIRequests/ATestnetConsumer.sol +++ b/public/samples/APIRequests/ATestnetConsumer.sol @@ -26,25 +26,25 @@ contract ATestnetConsumer is ChainlinkClient, ConfirmedOwner { * @dev Check https://docs.chain.link/docs/link-token-contracts/ for LINK address for the right network */ constructor() ConfirmedOwner(msg.sender) { - setChainlinkToken(0x779877A7B0D9E8603169DdbD7836e478b4624789); + _setChainlinkToken(0x779877A7B0D9E8603169DdbD7836e478b4624789); } function requestEthereumPrice( address _oracle, string memory _jobId ) public onlyOwner { - Chainlink.Request memory req = buildChainlinkRequest( + Chainlink.Request memory req = _buildChainlinkRequest( stringToBytes32(_jobId), address(this), this.fulfillEthereumPrice.selector ); - req.add( + req._add( "get", "https://min-api.cryptocompare.com/data/price?fsym=ETH&tsyms=USD" ); - req.add("path", "USD"); - req.addInt("times", 100); - sendChainlinkRequestTo(_oracle, req, ORACLE_PAYMENT); + req._add("path", "USD"); + req._addInt("times", 100); + _sendChainlinkRequestTo(_oracle, req, ORACLE_PAYMENT); } function fulfillEthereumPrice( @@ -56,11 +56,11 @@ contract ATestnetConsumer is ChainlinkClient, ConfirmedOwner { } function getChainlinkToken() public view returns (address) { - return chainlinkTokenAddress(); + return _chainlinkTokenAddress(); } function withdrawLink() public onlyOwner { - LinkTokenInterface link = LinkTokenInterface(chainlinkTokenAddress()); + LinkTokenInterface link = LinkTokenInterface(_chainlinkTokenAddress()); require( link.transfer(msg.sender, link.balanceOf(address(this))), "Unable to transfer" @@ -73,7 +73,7 @@ contract ATestnetConsumer is ChainlinkClient, ConfirmedOwner { bytes4 _callbackFunctionId, uint256 _expiration ) public onlyOwner { - cancelChainlinkRequest( + _cancelChainlinkRequest( _requestId, _payment, _callbackFunctionId, diff --git a/public/samples/APIRequests/FetchFromArray.sol b/public/samples/APIRequests/FetchFromArray.sol index d9224eecebf..deb4a565f27 100644 --- a/public/samples/APIRequests/FetchFromArray.sol +++ b/public/samples/APIRequests/FetchFromArray.sol @@ -35,8 +35,8 @@ contract FetchFromArray is ChainlinkClient, ConfirmedOwner { * */ constructor() ConfirmedOwner(msg.sender) { - setChainlinkToken(0x779877A7B0D9E8603169DdbD7836e478b4624789); - setChainlinkOracle(0x6090149792dAAeE9D1D568c9f9a6F6B46AA29eFD); + _setChainlinkToken(0x779877A7B0D9E8603169DdbD7836e478b4624789); + _setChainlinkOracle(0x6090149792dAAeE9D1D568c9f9a6F6B46AA29eFD); jobId = "7d80a6386ef543a3abb52817f6707e3b"; fee = (1 * LINK_DIVISIBILITY) / 10; // 0,1 * 10**18 (Varies by network and job) } @@ -46,7 +46,7 @@ contract FetchFromArray is ChainlinkClient, ConfirmedOwner { * data which is located in a list */ function requestFirstId() public returns (bytes32 requestId) { - Chainlink.Request memory req = buildChainlinkRequest( + Chainlink.Request memory req = _buildChainlinkRequest( jobId, address(this), this.fulfill.selector @@ -54,7 +54,7 @@ contract FetchFromArray is ChainlinkClient, ConfirmedOwner { // Set the URL to perform the GET request on // API docs: https://www.coingecko.com/en/api/documentation? - req.add( + req._add( "get", "https://api.coingecko.com/api/v3/coins/markets?vs_currency=usd&per_page=10" ); @@ -69,9 +69,9 @@ contract FetchFromArray is ChainlinkClient, ConfirmedOwner { // ... // .. }] // request.add("path", "0.id"); // Chainlink nodes prior to 1.0.0 support this format - req.add("path", "0,id"); // Chainlink nodes 1.0.0 and later support this format + req._add("path", "0,id"); // Chainlink nodes 1.0.0 and later support this format // Sends the request - return sendChainlinkRequest(req, fee); + return _sendChainlinkRequest(req, fee); } /** @@ -89,7 +89,7 @@ contract FetchFromArray is ChainlinkClient, ConfirmedOwner { * Allow withdraw of Link tokens from the contract */ function withdrawLink() public onlyOwner { - LinkTokenInterface link = LinkTokenInterface(chainlinkTokenAddress()); + LinkTokenInterface link = LinkTokenInterface(_chainlinkTokenAddress()); require( link.transfer(msg.sender, link.balanceOf(address(this))), "Unable to transfer" diff --git a/public/samples/APIRequests/GenericBigWord.sol b/public/samples/APIRequests/GenericBigWord.sol index 604c9e4b7fc..03609a5ccca 100644 --- a/public/samples/APIRequests/GenericBigWord.sol +++ b/public/samples/APIRequests/GenericBigWord.sol @@ -37,8 +37,8 @@ contract GenericLargeResponse is ChainlinkClient, ConfirmedOwner { * */ constructor() ConfirmedOwner(msg.sender) { - setChainlinkToken(0x779877A7B0D9E8603169DdbD7836e478b4624789); - setChainlinkOracle(0x6090149792dAAeE9D1D568c9f9a6F6B46AA29eFD); + _setChainlinkToken(0x779877A7B0D9E8603169DdbD7836e478b4624789); + _setChainlinkOracle(0x6090149792dAAeE9D1D568c9f9a6F6B46AA29eFD); jobId = "7da2702f37fd48e5b1b9a5715e3509b6"; fee = (1 * LINK_DIVISIBILITY) / 10; // 0,1 * 10**18 (Varies by network and job) } @@ -47,17 +47,17 @@ contract GenericLargeResponse is ChainlinkClient, ConfirmedOwner { * @notice Request variable bytes from the oracle */ function requestBytes() public { - Chainlink.Request memory req = buildChainlinkRequest( + Chainlink.Request memory req = _buildChainlinkRequest( jobId, address(this), this.fulfillBytes.selector ); - req.add( + req._add( "get", "https://ipfs.io/ipfs/QmZgsvrA1o1C8BGCrx6mHTqR1Ui1XqbCrtbMVrRLHtuPVD?filename=big-api-response.json" ); - req.add("path", "image"); - sendChainlinkRequest(req, fee); + req._add("path", "image"); + _sendChainlinkRequest(req, fee); } event RequestFulfilled(bytes32 indexed requestId, bytes indexed data); @@ -79,7 +79,7 @@ contract GenericLargeResponse is ChainlinkClient, ConfirmedOwner { * Allow withdraw of Link tokens from the contract */ function withdrawLink() public onlyOwner { - LinkTokenInterface link = LinkTokenInterface(chainlinkTokenAddress()); + LinkTokenInterface link = LinkTokenInterface(_chainlinkTokenAddress()); require( link.transfer(msg.sender, link.balanceOf(address(this))), "Unable to transfer" diff --git a/public/samples/APIRequests/GetGasPrice.sol b/public/samples/APIRequests/GetGasPrice.sol index 029e923c745..51702b3b634 100644 --- a/public/samples/APIRequests/GetGasPrice.sol +++ b/public/samples/APIRequests/GetGasPrice.sol @@ -42,8 +42,8 @@ contract GetGasPrice is ChainlinkClient, ConfirmedOwner { * */ constructor() ConfirmedOwner(msg.sender) { - setChainlinkToken(0x779877A7B0D9E8603169DdbD7836e478b4624789); - setChainlinkOracle(0x6090149792dAAeE9D1D568c9f9a6F6B46AA29eFD); + _setChainlinkToken(0x779877A7B0D9E8603169DdbD7836e478b4624789); + _setChainlinkOracle(0x6090149792dAAeE9D1D568c9f9a6F6B46AA29eFD); jobId = "7223acbd01654282865b678924126013"; fee = (1 * LINK_DIVISIBILITY) / 10; // 0,1 * 10**18 (Varies by network and job) } @@ -52,13 +52,13 @@ contract GetGasPrice is ChainlinkClient, ConfirmedOwner { * Create a Chainlink request the gas price from Etherscan */ function requestGasPrice() public returns (bytes32 requestId) { - Chainlink.Request memory req = buildChainlinkRequest( + Chainlink.Request memory req = _buildChainlinkRequest( jobId, address(this), this.fulfill.selector ); // No need extra parameters for this job. Send the request - return sendChainlinkRequest(req, fee); + return _sendChainlinkRequest(req, fee); } /** @@ -85,7 +85,7 @@ contract GetGasPrice is ChainlinkClient, ConfirmedOwner { * Allow withdraw of Link tokens from the contract */ function withdrawLink() public onlyOwner { - LinkTokenInterface link = LinkTokenInterface(chainlinkTokenAddress()); + LinkTokenInterface link = LinkTokenInterface(_chainlinkTokenAddress()); require( link.transfer(msg.sender, link.balanceOf(address(this))), "Unable to transfer" diff --git a/public/samples/APIRequests/MultiWordConsumer.sol b/public/samples/APIRequests/MultiWordConsumer.sol index 93fcb86c890..e5a6d0105a8 100644 --- a/public/samples/APIRequests/MultiWordConsumer.sol +++ b/public/samples/APIRequests/MultiWordConsumer.sol @@ -45,8 +45,8 @@ contract MultiWordConsumer is ChainlinkClient, ConfirmedOwner { * */ constructor() ConfirmedOwner(msg.sender) { - setChainlinkToken(0x779877A7B0D9E8603169DdbD7836e478b4624789); - setChainlinkOracle(0x6090149792dAAeE9D1D568c9f9a6F6B46AA29eFD); + _setChainlinkToken(0x779877A7B0D9E8603169DdbD7836e478b4624789); + _setChainlinkOracle(0x6090149792dAAeE9D1D568c9f9a6F6B46AA29eFD); jobId = "53f9755920cd451a8fe46f5087468395"; fee = (1 * LINK_DIVISIBILITY) / 10; // 0,1 * 10**18 (Varies by network and job) } @@ -55,27 +55,27 @@ contract MultiWordConsumer is ChainlinkClient, ConfirmedOwner { * @notice Request mutiple parameters from the oracle in a single transaction */ function requestMultipleParameters() public { - Chainlink.Request memory req = buildChainlinkRequest( + Chainlink.Request memory req = _buildChainlinkRequest( jobId, address(this), this.fulfillMultipleParameters.selector ); - req.add( + req._add( "urlBTC", "https://min-api.cryptocompare.com/data/price?fsym=ETH&tsyms=BTC" ); - req.add("pathBTC", "BTC"); - req.add( + req._add("pathBTC", "BTC"); + req._add( "urlUSD", "https://min-api.cryptocompare.com/data/price?fsym=ETH&tsyms=USD" ); - req.add("pathUSD", "USD"); - req.add( + req._add("pathUSD", "USD"); + req._add( "urlEUR", "https://min-api.cryptocompare.com/data/price?fsym=ETH&tsyms=EUR" ); - req.add("pathEUR", "EUR"); - sendChainlinkRequest(req, fee); // MWR API. + req._add("pathEUR", "EUR"); + _sendChainlinkRequest(req, fee); // MWR API. } /** @@ -103,7 +103,7 @@ contract MultiWordConsumer is ChainlinkClient, ConfirmedOwner { * Allow withdraw of Link tokens from the contract */ function withdrawLink() public onlyOwner { - LinkTokenInterface link = LinkTokenInterface(chainlinkTokenAddress()); + LinkTokenInterface link = LinkTokenInterface(_chainlinkTokenAddress()); require( link.transfer(msg.sender, link.balanceOf(address(this))), "Unable to transfer" diff --git a/public/samples/Automation/example.sol b/public/samples/Automation/example.sol index 41b37f51054..4ffd16fd44e 100644 --- a/public/samples/Automation/example.sol +++ b/public/samples/Automation/example.sol @@ -3,7 +3,7 @@ pragma solidity ^0.8.0; // KeeperCompatible.sol imports the functions from both ./KeeperBase.sol and // ./interfaces/KeeperCompatibleInterface.sol -import "@chainlink/contracts/src/v0.8/Automation/KeeperCompatible.sol"; +import "@chainlink/contracts/src/v0.8/automation/KeeperCompatible.sol"; /** * THIS IS AN EXAMPLE CONTRACT THAT USES HARDCODED VALUES FOR CLARITY. diff --git a/public/samples/Automation/tutorials/VRFSubscriptionBalanceMonitor.sol b/public/samples/Automation/tutorials/VRFSubscriptionBalanceMonitor.sol index 52b1bc2c543..b90df0736e3 100644 --- a/public/samples/Automation/tutorials/VRFSubscriptionBalanceMonitor.sol +++ b/public/samples/Automation/tutorials/VRFSubscriptionBalanceMonitor.sol @@ -4,7 +4,7 @@ pragma solidity 0.8.6; import "@chainlink/contracts/src/v0.8/shared/access/ConfirmedOwner.sol"; import "@chainlink/contracts/src/v0.8/automation/interfaces/KeeperCompatibleInterface.sol"; -import "@chainlink/contracts/src/v0.8/interfaces/VRFCoordinatorV2Interface.sol"; +import "@chainlink/contracts/src/v0.8/vrf/interfaces/VRFCoordinatorV2Interface.sol"; import "@chainlink/contracts/src/v0.8/shared/interfaces/LinkTokenInterface.sol"; import "@openzeppelin/contracts/security/Pausable.sol"; diff --git a/public/samples/ChainlinkFunctions/AutomatedFunctionsConsumerExample.sol b/public/samples/ChainlinkFunctions/AutomatedFunctionsConsumerExample.sol index 84cf0827a23..119a9aa85e6 100644 --- a/public/samples/ChainlinkFunctions/AutomatedFunctionsConsumerExample.sol +++ b/public/samples/ChainlinkFunctions/AutomatedFunctionsConsumerExample.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity 0.8.19; -import {FunctionsClient} from "@chainlink/contracts/src/v0.8/functions/dev/v1_0_0/FunctionsClient.sol"; +import {FunctionsClient} from "@chainlink/contracts/src/v0.8/functions/v1_0_0/FunctionsClient.sol"; import {ConfirmedOwner} from "@chainlink/contracts/src/v0.8/shared/access/ConfirmedOwner.sol"; /** diff --git a/public/samples/ChainlinkFunctions/CustomAutomatedFunctionsConsumerExample.sol b/public/samples/ChainlinkFunctions/CustomAutomatedFunctionsConsumerExample.sol index 519523200c7..9b9143fa748 100644 --- a/public/samples/ChainlinkFunctions/CustomAutomatedFunctionsConsumerExample.sol +++ b/public/samples/ChainlinkFunctions/CustomAutomatedFunctionsConsumerExample.sol @@ -1,10 +1,10 @@ // SPDX-License-Identifier: MIT pragma solidity 0.8.19; -import {FunctionsClient} from "@chainlink/contracts/src/v0.8/functions/dev/v1_0_0/FunctionsClient.sol"; +import {FunctionsClient} from "@chainlink/contracts/src/v0.8/functions/v1_0_0/FunctionsClient.sol"; import {AutomationCompatibleInterface} from "@chainlink/contracts/src/v0.8/automation/AutomationCompatible.sol"; import {ConfirmedOwner} from "@chainlink/contracts/src/v0.8/shared/access/ConfirmedOwner.sol"; -import {FunctionsRequest} from "@chainlink/contracts/src/v0.8/functions/dev/v1_0_0/libraries/FunctionsRequest.sol"; +import {FunctionsRequest} from "@chainlink/contracts/src/v0.8/functions/v1_0_0/libraries/FunctionsRequest.sol"; /** * @title Functions contract used for Automation. diff --git a/public/samples/ChainlinkFunctions/FunctionsConsumerDecoder.sol b/public/samples/ChainlinkFunctions/FunctionsConsumerDecoder.sol index 9e99ce2984a..72c3666d7b8 100644 --- a/public/samples/ChainlinkFunctions/FunctionsConsumerDecoder.sol +++ b/public/samples/ChainlinkFunctions/FunctionsConsumerDecoder.sol @@ -1,9 +1,9 @@ // SPDX-License-Identifier: MIT pragma solidity 0.8.19; -import {FunctionsClient} from "@chainlink/contracts/src/v0.8/functions/dev/v1_0_0/FunctionsClient.sol"; +import {FunctionsClient} from "@chainlink/contracts/src/v0.8/functions/v1_0_0/FunctionsClient.sol"; import {ConfirmedOwner} from "@chainlink/contracts/src/v0.8/shared/access/ConfirmedOwner.sol"; -import {FunctionsRequest} from "@chainlink/contracts/src/v0.8/functions/dev/v1_0_0/libraries/FunctionsRequest.sol"; +import {FunctionsRequest} from "@chainlink/contracts/src/v0.8/functions/v1_0_0/libraries/FunctionsRequest.sol"; /** * THIS IS AN EXAMPLE CONTRACT THAT USES HARDCODED VALUES FOR CLARITY. diff --git a/public/samples/ChainlinkFunctions/FunctionsConsumerExample.sol b/public/samples/ChainlinkFunctions/FunctionsConsumerExample.sol index 58ef2660516..8b284217d3f 100644 --- a/public/samples/ChainlinkFunctions/FunctionsConsumerExample.sol +++ b/public/samples/ChainlinkFunctions/FunctionsConsumerExample.sol @@ -1,9 +1,9 @@ // SPDX-License-Identifier: MIT pragma solidity 0.8.19; -import {FunctionsClient} from "@chainlink/contracts/src/v0.8/functions/dev/v1_0_0/FunctionsClient.sol"; +import {FunctionsClient} from "@chainlink/contracts/src/v0.8/functions/v1_0_0/FunctionsClient.sol"; import {ConfirmedOwner} from "@chainlink/contracts/src/v0.8/shared/access/ConfirmedOwner.sol"; -import {FunctionsRequest} from "@chainlink/contracts/src/v0.8/functions/dev/v1_0_0/libraries/FunctionsRequest.sol"; +import {FunctionsRequest} from "@chainlink/contracts/src/v0.8/functions/v1_0_0/libraries/FunctionsRequest.sol"; /** * THIS IS AN EXAMPLE CONTRACT THAT USES HARDCODED VALUES FOR CLARITY. diff --git a/public/samples/ChainlinkFunctions/GettingStartedFunctionsConsumer.sol b/public/samples/ChainlinkFunctions/GettingStartedFunctionsConsumer.sol index fc28b89513d..30b40549c14 100644 --- a/public/samples/ChainlinkFunctions/GettingStartedFunctionsConsumer.sol +++ b/public/samples/ChainlinkFunctions/GettingStartedFunctionsConsumer.sol @@ -1,9 +1,9 @@ // SPDX-License-Identifier: MIT pragma solidity 0.8.19; -import {FunctionsClient} from "@chainlink/contracts/src/v0.8/functions/dev/v1_0_0/FunctionsClient.sol"; +import {FunctionsClient} from "@chainlink/contracts/src/v0.8/functions/v1_0_0/FunctionsClient.sol"; import {ConfirmedOwner} from "@chainlink/contracts/src/v0.8/shared/access/ConfirmedOwner.sol"; -import {FunctionsRequest} from "@chainlink/contracts/src/v0.8/functions/dev/v1_0_0/libraries/FunctionsRequest.sol"; +import {FunctionsRequest} from "@chainlink/contracts/src/v0.8/functions/v1_0_0/libraries/FunctionsRequest.sol"; /** * Request testnet LINK and ETH here: https://faucets.chain.link/ diff --git a/public/samples/ChainlinkNodes/Oracle.sol b/public/samples/ChainlinkNodes/Oracle.sol deleted file mode 100644 index 3c08b34f431..00000000000 --- a/public/samples/ChainlinkNodes/Oracle.sol +++ /dev/null @@ -1,3 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity 0.6.6; -import "@chainlink/contracts/src/v0.6/Oracle.sol"; diff --git a/public/samples/DataFeeds/DataConsumerV3.sol b/public/samples/DataFeeds/DataConsumerV3.sol index a37f357680e..2d07d194ece 100644 --- a/public/samples/DataFeeds/DataConsumerV3.sol +++ b/public/samples/DataFeeds/DataConsumerV3.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.7; -import "@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol"; +import "@chainlink/contracts/src/v0.8/shared/interfaces/AggregatorV3Interface.sol"; /** * THIS IS AN EXAMPLE CONTRACT THAT USES HARDCODED diff --git a/public/samples/DataFeeds/DataConsumerWithSequencerCheck.sol b/public/samples/DataFeeds/DataConsumerWithSequencerCheck.sol index 0aa9c49f16e..9e87279e7e9 100644 --- a/public/samples/DataFeeds/DataConsumerWithSequencerCheck.sol +++ b/public/samples/DataFeeds/DataConsumerWithSequencerCheck.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.7; -import "@chainlink/contracts/src/v0.8/interfaces/AggregatorV2V3Interface.sol"; +import "@chainlink/contracts/src/v0.8/shared/interfaces/AggregatorV2V3Interface.sol"; /** * THIS IS AN EXAMPLE CONTRACT THAT USES HARDCODED VALUES FOR CLARITY. diff --git a/public/samples/DataFeeds/HistoricalDataConsumer.sol b/public/samples/DataFeeds/HistoricalDataConsumer.sol index 25840362375..d26b7cfea16 100644 --- a/public/samples/DataFeeds/HistoricalDataConsumer.sol +++ b/public/samples/DataFeeds/HistoricalDataConsumer.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.7; -import "@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol"; +import "@chainlink/contracts/src/v0.8/shared/interfaces/AggregatorV3Interface.sol"; /** * THIS IS AN EXAMPLE CONTRACT THAT USES HARDCODED VALUES FOR CLARITY. diff --git a/public/samples/DataFeeds/NFTFloorPriceConsumerV3.sol b/public/samples/DataFeeds/NFTFloorPriceConsumerV3.sol index 29230065a24..c7da163a7e8 100644 --- a/public/samples/DataFeeds/NFTFloorPriceConsumerV3.sol +++ b/public/samples/DataFeeds/NFTFloorPriceConsumerV3.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.7; -import "@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol"; +import "@chainlink/contracts/src/v0.8/shared/interfaces/AggregatorV3Interface.sol"; contract NFTFloorPriceConsumerV3 { AggregatorV3Interface internal nftFloorPriceFeed; diff --git a/public/samples/DataFeeds/PriceConverter.sol b/public/samples/DataFeeds/PriceConverter.sol index 8f6934869c6..78d1d929f1e 100644 --- a/public/samples/DataFeeds/PriceConverter.sol +++ b/public/samples/DataFeeds/PriceConverter.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.7; -import "@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol"; +import "@chainlink/contracts/src/v0.8/shared/interfaces/AggregatorV3Interface.sol"; /** * Network: Sepolia diff --git a/public/samples/DataFeeds/ReserveConsumerV3.sol b/public/samples/DataFeeds/ReserveConsumerV3.sol index 43e63e605b4..c4060b7fcf0 100644 --- a/public/samples/DataFeeds/ReserveConsumerV3.sol +++ b/public/samples/DataFeeds/ReserveConsumerV3.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.7; -import "@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol"; +import "@chainlink/contracts/src/v0.8/shared/interfaces/AggregatorV3Interface.sol"; contract ReserveConsumerV3 { AggregatorV3Interface internal reserveFeed; diff --git a/public/samples/DataStreams/StreamsUpkeep.sol b/public/samples/DataStreams/StreamsUpkeep.sol index 9642ef925d3..6e3f6dee5a1 100644 --- a/public/samples/DataStreams/StreamsUpkeep.sol +++ b/public/samples/DataStreams/StreamsUpkeep.sol @@ -1,12 +1,12 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.16; -import {Common} from "@chainlink/contracts/src/v0.8/libraries/Common.sol"; +import {Common} from "@chainlink/contracts/src/v0.8/llo-feeds/libraries/Common.sol"; import {StreamsLookupCompatibleInterface} from "@chainlink/contracts/src/v0.8/automation/interfaces/StreamsLookupCompatibleInterface.sol"; import {ILogAutomation, Log} from "@chainlink/contracts/src/v0.8/automation/interfaces/ILogAutomation.sol"; import {IRewardManager} from "@chainlink/contracts/src/v0.8/llo-feeds/interfaces/IRewardManager.sol"; import {IVerifierFeeManager} from "@chainlink/contracts/src/v0.8/llo-feeds/interfaces/IVerifierFeeManager.sol"; -import {IERC20} from "@chainlink/contracts/src/v0.8/vendor/openzeppelin-solidity/v4.8.0/contracts/interfaces/IERC20.sol"; +import {IERC20} from "@chainlink/contracts/src/v0.8/vendor/openzeppelin-solidity/v4.8.3/contracts/interfaces/IERC20.sol"; /** * THIS IS AN EXAMPLE CONTRACT THAT USES UN-AUDITED CODE FOR DEMONSTRATION PURPOSES. diff --git a/public/samples/VRF/VRFD20.sol b/public/samples/VRF/VRFD20.sol index 0aa5681246a..03ba0314a6e 100644 --- a/public/samples/VRF/VRFD20.sol +++ b/public/samples/VRF/VRFD20.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.7; -import "@chainlink/contracts/src/v0.8/interfaces/VRFCoordinatorV2Interface.sol"; +import "@chainlink/contracts/src/v0.8/vrf/interfaces/VRFCoordinatorV2Interface.sol"; import "@chainlink/contracts/src/v0.8/vrf/VRFConsumerBaseV2.sol"; /** diff --git a/public/samples/VRF/VRFv2Consumer.sol b/public/samples/VRF/VRFv2Consumer.sol index cb2d2559b98..ad0939c0f2e 100644 --- a/public/samples/VRF/VRFv2Consumer.sol +++ b/public/samples/VRF/VRFv2Consumer.sol @@ -2,7 +2,7 @@ // An example of a consumer contract that relies on a subscription for funding. pragma solidity ^0.8.7; -import "@chainlink/contracts/src/v0.8/interfaces/VRFCoordinatorV2Interface.sol"; +import "@chainlink/contracts/src/v0.8/vrf/interfaces/VRFCoordinatorV2Interface.sol"; import "@chainlink/contracts/src/v0.8/vrf/VRFConsumerBaseV2.sol"; import "@chainlink/contracts/src/v0.8/shared/access/ConfirmedOwner.sol"; diff --git a/public/samples/VRF/VRFv2MultiplePaths.sol b/public/samples/VRF/VRFv2MultiplePaths.sol index 9294df546a9..0a827673b7c 100644 --- a/public/samples/VRF/VRFv2MultiplePaths.sol +++ b/public/samples/VRF/VRFv2MultiplePaths.sol @@ -3,7 +3,7 @@ // It shows how to setup multiple execution paths for handling a response. pragma solidity ^0.8.7; -import "@chainlink/contracts/src/v0.8/interfaces/VRFCoordinatorV2Interface.sol"; +import "@chainlink/contracts/src/v0.8/vrf/interfaces/VRFCoordinatorV2Interface.sol"; import "@chainlink/contracts/src/v0.8/vrf/VRFConsumerBaseV2.sol"; /** diff --git a/public/samples/VRF/VRFv2SubscriptionManager.sol b/public/samples/VRF/VRFv2SubscriptionManager.sol index 52534ae01f5..5f25820626d 100644 --- a/public/samples/VRF/VRFv2SubscriptionManager.sol +++ b/public/samples/VRF/VRFv2SubscriptionManager.sol @@ -3,7 +3,7 @@ pragma solidity ^0.8.7; import "@chainlink/contracts/src/v0.8/shared/interfaces/LinkTokenInterface.sol"; -import "@chainlink/contracts/src/v0.8/interfaces/VRFCoordinatorV2Interface.sol"; +import "@chainlink/contracts/src/v0.8/vrf/interfaces/VRFCoordinatorV2Interface.sol"; import "@chainlink/contracts/src/v0.8/vrf/VRFConsumerBaseV2.sol"; /** diff --git a/public/samples/VRF/mock/LinkToken.sol b/public/samples/VRF/mock/LinkToken.sol index 0162bf76b31..4f908967c5f 100644 --- a/public/samples/VRF/mock/LinkToken.sol +++ b/public/samples/VRF/mock/LinkToken.sol @@ -1,4 +1,4 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.4.24; +pragma solidity ^0.8.0; -import "@chainlink/contracts/src/v0.4/LinkToken.sol"; +import "@chainlink/contracts/src/v0.8/shared/token/ERC677/LinkToken.sol"; diff --git a/public/samples/VRF/mock/VRFCoordinatorV2Mock.sol b/public/samples/VRF/mock/VRFCoordinatorV2Mock.sol index 1de23d5690c..0cfbcf2bf57 100644 --- a/public/samples/VRF/mock/VRFCoordinatorV2Mock.sol +++ b/public/samples/VRF/mock/VRFCoordinatorV2Mock.sol @@ -1,3 +1,3 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.7; -import "@chainlink/contracts/src/v0.8/mocks/VRFCoordinatorV2Mock.sol"; +import "@chainlink/contracts/src/v0.8/vrf/mocks/VRFCoordinatorV2Mock.sol"; diff --git a/public/samples/VRF/mock/VRFV2Wrapper.sol b/public/samples/VRF/mock/VRFV2Wrapper.sol index c230e45c131..b18598902bd 100644 --- a/public/samples/VRF/mock/VRFV2Wrapper.sol +++ b/public/samples/VRF/mock/VRFV2Wrapper.sol @@ -1,3 +1,3 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.7; +pragma solidity ^0.8.6; import "@chainlink/contracts/src/v0.8/vrf/VRFV2Wrapper.sol"; diff --git a/public/samples/VRF/mock/VRFv2Consumer.sol b/public/samples/VRF/mock/VRFv2Consumer.sol index c099202ac7f..b0715c333eb 100644 --- a/public/samples/VRF/mock/VRFv2Consumer.sol +++ b/public/samples/VRF/mock/VRFv2Consumer.sol @@ -2,7 +2,7 @@ // An example of a consumer contract that relies on a subscription for funding. pragma solidity ^0.8.7; -import "@chainlink/contracts/src/v0.8/interfaces/VRFCoordinatorV2Interface.sol"; +import "@chainlink/contracts/src/v0.8/vrf/interfaces/VRFCoordinatorV2Interface.sol"; import "@chainlink/contracts/src/v0.8/vrf/VRFConsumerBaseV2.sol"; /** diff --git a/public/samples/events/avasummit/VRFv2SubscriptionManager.sol b/public/samples/events/avasummit/VRFv2SubscriptionManager.sol index d054241c3e7..56ddc250809 100644 --- a/public/samples/events/avasummit/VRFv2SubscriptionManager.sol +++ b/public/samples/events/avasummit/VRFv2SubscriptionManager.sol @@ -3,7 +3,7 @@ pragma solidity ^0.8.7; import "@chainlink/contracts/src/v0.8/shared/interfaces/LinkTokenInterface.sol"; -import "@chainlink/contracts/src/v0.8/interfaces/VRFCoordinatorV2Interface.sol"; +import "@chainlink/contracts/src/v0.8/vrf/interfaces/VRFCoordinatorV2Interface.sol"; import "@chainlink/contracts/src/v0.8/vrf/VRFConsumerBaseV2.sol"; /** diff --git a/src/content/any-api/api-reference.mdx b/src/content/any-api/api-reference.mdx index 733d554e2c6..4ca1cbd1876 100644 --- a/src/content/any-api/api-reference.mdx +++ b/src/content/any-api/api-reference.mdx @@ -74,7 +74,7 @@ After the function signature and a short description, two code examples are prov {/* prettier-ignore */} ```solidity -function setChainlinkOracle( +function _setChainlinkOracle( address _oracle ) ``` @@ -87,7 +87,7 @@ Retrieve the oracle address using [chainlinkOracleAddress](#chainlinkoracleaddre ```solidity constructor(address _oracle) { - setChainlinkOracle(_oracle); + _setChainlinkOracle(_oracle); } ``` @@ -95,7 +95,7 @@ constructor(address _oracle) {/* prettier-ignore */} ```solidity -setChainlinkToken( +_setChainlinkToken( address _link ) ``` @@ -107,7 +107,7 @@ Sets the stored address for the LINK token which is used to send requests to Ora constructor(address _link) public { - setChainlinkToken(_link); + _setChainlinkToken(_link); } ``` @@ -118,7 +118,7 @@ Use `buildOperatorRequest` [function](#buildoperatorrequest) if the oracle is an {/* prettier-ignore */} ```solidity -function buildChainlinkRequest( +function _buildChainlinkRequest( bytes32 _jobId, address _callbackAddress, bytes4 _callbackFunctionSignature @@ -137,7 +137,7 @@ function requestPrice() // build a request that calls the myCallback function defined // below by specifying the address of this contract and the function // selector of the myCallback - Chainlink.Request memory request = buildChainlinkRequest( + Chainlink.Request memory request = _buildChainlinkRequest( jobId, address(this), selector); @@ -185,7 +185,7 @@ Use `sendOperatorRequest` [function](#sendoperatorrequest) if the oracle is an ` {/* prettier-ignore */} ```solidity -function sendChainlinkRequest( +function _sendChainlinkRequest( Chainlink.Request memory _req, uint256 _payment ) returns (bytes32 requestId) @@ -202,11 +202,11 @@ Sends the request payload to the stored oracle address. It takes a [Chainlink.Re function requestPrice() public { - Chainlink.Request memory request = buildChainlinkRequest(jobId, address(this), this.callback.selector); + Chainlink.Request memory request = _buildChainlinkRequest(jobId, address(this), this.callback.selector); uint256 paymentAmount = 1 * LINK_DIVISIBILITY / 10; // Equivalent to 0.1 LINK // send the request that you just built - sendChainlinkRequest(request, paymentAmount); + _sendChainlinkRequest(request, paymentAmount); } ``` @@ -217,7 +217,7 @@ Use `sendOperatorRequestTo` [function](#sendoperatorrequestto) if the oracle is {/* prettier-ignore */} ```solidity -function sendChainlinkRequestTo( +function _sendChainlinkRequestTo( address _oracle, Chainlink.Request memory _req, uint256 _payment @@ -233,11 +233,11 @@ Similar to [sendChainlinkRequest](#sendchainlinkrequest), `sendChainlinkRequestT function requestPriceFrom(address _oracle) public { - Chainlink.Request memory request = buildChainlinkRequest(jobId, address(this), this.callback.callbackSelector); + Chainlink.Request memory request = _buildChainlinkRequest(jobId, address(this), this.callback.callbackSelector); uint256 paymentAmount = 1 * LINK_DIVISIBILITY; // = 1 LINK // send the request that you just built to a specified oracle - sendChainlinkRequestTo(_oracle, request, paymentAmount); + _sendChainlinkRequestTo(_oracle, request, paymentAmount); } ``` @@ -282,7 +282,7 @@ It is recommended to use `sendOperatorRequestTo`, but make sure the oracle you a {/* prettier-ignore */} ```solidity -function sendChainlinkRequestTo( +function _sendChainlinkRequestTo( address _oracle, Chainlink.Request memory _req, uint256 _payment @@ -368,7 +368,7 @@ Being able to change a request means that you can change the data fed into a con {/* prettier-ignore */} ```solidity -function cancelChainlinkRequest(bytes32 _requestId, +function _cancelChainlinkRequest(bytes32 _requestId, uint256 _payment, bytes4 _callbackFunc, uint256 _expiration @@ -391,7 +391,7 @@ function cancelRequest( bytes4 _callbackFunc, uint256 _expiration ) public { - cancelChainlinkRequest(_requestId, _payment, _callbackFunc, _expiration); + _cancelChainlinkRequest(_requestId, _payment, _callbackFunc, _expiration); } ``` @@ -453,7 +453,7 @@ If an oracle provider supports listing their oracle on ENS, that provides the ad {/* prettier-ignore */} ```solidity -function chainlinkTokenAddress() returns (address) +function _chainlinkTokenAddress() returns (address) ``` The `chainlinkTokenAddress` function is a helper used to return the stored address of the Chainlink token. This variable is protected and so only made available through getters and setters. @@ -461,7 +461,7 @@ The `chainlinkTokenAddress` function is a helper used to return the stored addre {/* prettier-ignore */} ```solidity function withdrawLink() public { - LinkTokenInterface link = LinkTokenInterface(chainlinkTokenAddress()); + LinkTokenInterface link = LinkTokenInterface(_chainlinkTokenAddress()); require(link.transfer(msg.sender, link.balanceOf(address(this))), "Unable to transfer"); } @@ -609,11 +609,11 @@ Add a string value to the run request parameters. Commonly used for `get` with j function requestEthereumPrice() public { - Chainlink.Request memory req = buildChainlinkRequest(jobId, this, this.fulfill.selector); + Chainlink.Request memory req = _buildChainlinkRequest(jobId, this, this.fulfill.selector); - req.add("get", "https://min-api.cryptocompare.com/data/price?fsym=ETH&tsyms=USD,EUR,JPY"); + req._add("get", "https://min-api.cryptocompare.com/data/price?fsym=ETH&tsyms=USD,EUR,JPY"); - sendChainlinkRequest(req, 1 * LINK_DIVISIBILITY); // =1 LINK + _sendChainlinkRequest(req, 1 * LINK_DIVISIBILITY); // =1 LINK } ``` @@ -635,11 +635,11 @@ Add a CBOR bytes type value to the run request parameters. function requestEmojiPopularity(bytes _unicode) public { - Chainlink.Request memory req = buildChainlinkRequest(jobId, this, this.fulfill.selector); + Chainlink.Request memory req = _buildChainlinkRequest(jobId, this, this.fulfill.selector); req.addBytes("emojiUnicode", _unicode); - sendChainlinkRequest(req, LINK_DIVISIBILITY * 1); + _sendChainlinkRequest(req, LINK_DIVISIBILITY * 1); } ``` @@ -647,7 +647,7 @@ Note that this can also be used as a workaround to pass other data types like ar {/* prettier-ignore */} ```solidity -Chainlink.Request memory req = buildChainlinkRequest(jobId, this, this.fulfill.selector); +Chainlink.Request memory req = _buildChainlinkRequest(jobId, this, this.fulfill.selector); req.addBytes("address", abi.encode(msg.sender)); // msg.sender used in this example. Replace it with your address @@ -671,11 +671,11 @@ Add a CBOR signed integer type value to the run request parameters. Commonly use function requestPrice() public { - Chainlink.Request memory req = buildChainlinkRequest(jobId, this, this.fulfill.selector); + Chainlink.Request memory req = _buildChainlinkRequest(jobId, this, this.fulfill.selector); - req.addInt("times", 100); + req._addInt("times", 100); - sendChainlinkRequest(req, LINK_DIVISIBILITY * 1); + _sendChainlinkRequest(req, LINK_DIVISIBILITY * 1); } ``` @@ -697,11 +697,11 @@ Add a CBOR unsigned integer type value to the run request parameters. Commonly u function requestPrice() public { - Chainlink.Request memory req = buildChainlinkRequest(jobId, this, this.fulfill.selector); + Chainlink.Request memory req = _buildChainlinkRequest(jobId, this, this.fulfill.selector); req.addUint("times", 100); - sendChainlinkRequest(req, LINK_DIVISIBILITY * 1); + _sendChainlinkRequest(req, LINK_DIVISIBILITY * 1); } ``` @@ -723,7 +723,7 @@ Add a CBOR array of strings to the run request parameters. Commonly used with th function requestPrice(string _currency) public { - Chainlink.Request memory req = buildChainlinkRequest(JOB_ID, this, this.myCallback.selector); + Chainlink.Request memory req = _buildChainlinkRequest(JOB_ID, this, this.myCallback.selector); string[] memory path = new string[](2); path[0] = _currency; path[1] = "recent"; @@ -731,7 +731,7 @@ function requestPrice(string _currency) // specify templated fields in a job specification req.addStringArray("path", path); - sendChainlinkRequest(req, PAYMENT); + _sendChainlinkRequest(req, PAYMENT); } ``` @@ -752,11 +752,11 @@ Set the CBOR payload directly on the request object, avoiding the cost of encodi function requestPrice(bytes _cbor) public { - Chainlink.Request memory req = buildChainlinkRequest(JOB_ID, this, this.myCallback.selector); + Chainlink.Request memory req = _buildChainlinkRequest(JOB_ID, this, this.myCallback.selector); req.setBuffer(_cbor); - sendChainlinkRequest(req, PAYMENT); + _sendChainlinkRequest(req, PAYMENT); } ``` diff --git a/src/content/any-api/get-request/examples/array-response.mdx b/src/content/any-api/get-request/examples/array-response.mdx index 41d574f84dd..dd8573ede29 100644 --- a/src/content/any-api/get-request/examples/array-response.mdx +++ b/src/content/any-api/get-request/examples/array-response.mdx @@ -91,7 +91,7 @@ To use this contract: 1. Call the `id` function to confirm that the `id` state variable is not set. -1. Run the `requestFirstId` function. This builds the `Chainlink.Request` using the correct parameters. The `req.add("path", "0,id")` request parameter tells the oracle node to fetch the id at index 0 of the array returned by the GET request. It uses [JSONPath expression](https://jsonpath.com/) with comma `,` delimited string for nested objects, for example: `'0,id'`. +1. Run the `requestFirstId` function. This builds the `Chainlink.Request` using the correct parameters. The `req._add("path", "0,id")` request parameter tells the oracle node to fetch the id at index 0 of the array returned by the GET request. It uses [JSONPath expression](https://jsonpath.com/) with comma `,` delimited string for nested objects, for example: `'0,id'`. 1. After few seconds, call the `id` function. You should get a non-empty response: _bitcoin_ diff --git a/src/content/any-api/get-request/examples/large-responses.mdx b/src/content/any-api/get-request/examples/large-responses.mdx index e395a44e96d..38bba1db0ef 100644 --- a/src/content/any-api/get-request/examples/large-responses.mdx +++ b/src/content/any-api/get-request/examples/large-responses.mdx @@ -79,8 +79,8 @@ To use this contract: 1. Run the `requestBytes` function. This builds the `Chainlink.Request` using the correct parameters: - - The `req.add("get", "URL")` request parameter provides the oracle node with the [url](https://ipfs.io/ipfs/QmZgsvrA1o1C8BGCrx6mHTqR1Ui1XqbCrtbMVrRLHtuPVD?filename=big-api-response.json) where to fetch the response. - - The `req.add('path', 'image')` request parameter tells the oracle node how to parse the response. + - The `req._add("get", "URL")` request parameter provides the oracle node with the [url](https://ipfs.io/ipfs/QmZgsvrA1o1C8BGCrx6mHTqR1Ui1XqbCrtbMVrRLHtuPVD?filename=big-api-response.json) where to fetch the response. + - The `req._add('path', 'image')` request parameter tells the oracle node how to parse the response. 1. After few seconds, call the `data` and `image_url` functions. You should get non-empty responses. diff --git a/src/content/any-api/get-request/examples/multi-variable-responses.mdx b/src/content/any-api/get-request/examples/multi-variable-responses.mdx index 7646b6a49e7..1ca7a55e52c 100644 --- a/src/content/any-api/get-request/examples/multi-variable-responses.mdx +++ b/src/content/any-api/get-request/examples/multi-variable-responses.mdx @@ -85,8 +85,8 @@ To use this contract: 1. Run the `requestMultipleParameters` function. This builds the `Chainlink.Request` using the correct parameters: - - The `req.add("urlBTC", "CRYPTOCOMPARE_ETH_BTC_URL")` request parameter provides the oracle node with the [url](https://min-api.cryptocompare.com/data/price?fsym=ETH&tsyms=BTC) where to fetch the _ETH-BTC_ price. Same logic for `req.add("urlEUR", "CRYPTOCOMPARE_ETH_BTC_URL")` and `req.add("urlUSD", "CRYPTOCOMPARE_ETH_BTC_URL")`. - - THe `req.add('pathBTC', 'BTC')` request parameter tells the oracle node where to fetch the _ETH-BTC_ price in the _json_ response. Same logic for `req.add('pathUSD', 'EUR')` and `req.add('pathEUR', 'USD')`. + - The `req._add("urlBTC", "CRYPTOCOMPARE_ETH_BTC_URL")` request parameter provides the oracle node with the [url](https://min-api.cryptocompare.com/data/price?fsym=ETH&tsyms=BTC) where to fetch the _ETH-BTC_ price. Same logic for `req._add("urlEUR", "CRYPTOCOMPARE_ETH_BTC_URL")` and `req._add("urlUSD", "CRYPTOCOMPARE_ETH_BTC_URL")`. + - THe `req._add('pathBTC', 'BTC')` request parameter tells the oracle node where to fetch the _ETH-BTC_ price in the _json_ response. Same logic for `req._add('pathUSD', 'EUR')` and `req._add('pathEUR', 'USD')`. Because you provide the URLs and paths, the `MultiWordConsumer` in the example can call any public API as long as the URLs and paths are correct. 1. After few seconds, call the `btc`, `usd` , and `eur` functions. You should get a non-zero responses. diff --git a/src/content/any-api/get-request/examples/single-word-response.mdx b/src/content/any-api/get-request/examples/single-word-response.mdx index d34692e358e..64affe26e4a 100644 --- a/src/content/any-api/get-request/examples/single-word-response.mdx +++ b/src/content/any-api/get-request/examples/single-word-response.mdx @@ -106,9 +106,9 @@ To use this contract: 1. Run the `requestVolumeData` function. This builds the `Chainlink.Request` using the correct parameters: - - The `req.add("get", "CRYPTOCOMPARE_URL")` request parameter provides the oracle node with the [URL](https://min-api.cryptocompare.com/data/pricemultifull?fsyms=ETH&tsyms=USD) from which to fetch _ETH-USD_ trading info. - - The `req.add('path', 'RAW,ETH,USD,VOLUME24HOUR')` request parameter tells the oracle node where to fetch the 24h ETH volume in the _json_ response. It uses a [JSONPath expression](https://jsonpath.com/) with comma(,) delimited string for nested objects. For example: `'RAW,ETH,USD,VOLUME24HOUR'`. - - The `req.addInt('times', timesAmount)` request parameter provides the oracle node with the multiplier `timesAmount` by which the fetched volume is multiplied. Use this to remove any decimals from the volume. **_Note_**: The `times` parameter is mandatory. If the API that you call returns a number without any decimals then provide `1`as `timesAmount`. + - The `req._add("get", "CRYPTOCOMPARE_URL")` request parameter provides the oracle node with the [URL](https://min-api.cryptocompare.com/data/pricemultifull?fsyms=ETH&tsyms=USD) from which to fetch _ETH-USD_ trading info. + - The `req._add('path', 'RAW,ETH,USD,VOLUME24HOUR')` request parameter tells the oracle node where to fetch the 24h ETH volume in the _json_ response. It uses a [JSONPath expression](https://jsonpath.com/) with comma(,) delimited string for nested objects. For example: `'RAW,ETH,USD,VOLUME24HOUR'`. + - The `req._addInt('times', timesAmount)` request parameter provides the oracle node with the multiplier `timesAmount` by which the fetched volume is multiplied. Use this to remove any decimals from the volume. **_Note_**: The `times` parameter is mandatory. If the API that you call returns a number without any decimals then provide `1`as `timesAmount`. The `APIConsumer` in the example above is flexible enough to call any public API as long as the URL in _get_, _path_, and _timesAmounnt_ are correct. 1. After few seconds, call the `volume` function. You should get a non-zero response. diff --git a/src/content/any-api/getting-started.mdx b/src/content/any-api/getting-started.mdx index 8684a3cc8a3..b005e93d306 100644 --- a/src/content/any-api/getting-started.mdx +++ b/src/content/any-api/getting-started.mdx @@ -118,11 +118,11 @@ This will make your smart contract much more succinct. The `requestVolumeData` f {/* prettier-ignore */} ```solidity function requestVolumeData() public returns (bytes32 requestId) { - Chainlink.Request memory req = buildChainlinkRequest(jobId, address(this), this.fulfill.selector); + Chainlink.Request memory req = _buildChainlinkRequest(jobId, address(this), this.fulfill.selector); // Extra parameters don't need to be defined here because they are already defined in the job - return sendChainlinkRequest(req, fee); + return _sendChainlinkRequest(req, fee); } ``` diff --git a/src/content/any-api/testnet-oracles.mdx b/src/content/any-api/testnet-oracles.mdx index f4753c23391..42116003032 100644 --- a/src/content/any-api/testnet-oracles.mdx +++ b/src/content/any-api/testnet-oracles.mdx @@ -67,13 +67,13 @@ A full example can be found [here](/any-api/get-request/examples/large-responses {/* prettier-ignore */} ```solidity function request() public { - Chainlink.Request memory req = buildChainlinkRequest('7da2702f37fd48e5b1b9a5715e3509b6', address(this), this.fulfill.selector); - req.add( + Chainlink.Request memory req = _buildChainlinkRequest('7da2702f37fd48e5b1b9a5715e3509b6', address(this), this.fulfill.selector); + req._add( 'get', 'https://ipfs.io/ipfs/QmZgsvrA1o1C8BGCrx6mHTqR1Ui1XqbCrtbMVrRLHtuPVD?filename=big-api-response.json' ); - req.add('path', 'image'); - sendChainlinkRequest(req, (1 * LINK_DIVISIBILITY) / 10); // 0,1*10**18 LINK + req._add('path', 'image'); + _sendChainlinkRequest(req, (1 * LINK_DIVISIBILITY) / 10); // 0,1*10**18 LINK } ``` @@ -98,14 +98,14 @@ A full example can be found [here](/any-api/get-request/examples/single-word-res {/* prettier-ignore */} ```solidity function request() public { - Chainlink.Request memory req = buildChainlinkRequest('ca98366cc7314957b8c012c72f05aeeb', address(this), this.fulfill.selector); - req.add( + Chainlink.Request memory req = _buildChainlinkRequest('ca98366cc7314957b8c012c72f05aeeb', address(this), this.fulfill.selector); + req._add( 'get', 'https://min-api.cryptocompare.com/data/pricemultifull?fsyms=ETH&tsyms=USD' ); - req.add('path', 'RAW,ETH,USD,VOLUME24HOUR'); - req.addInt('times', 10**18); // Multiply by times value to remove decimals. Parameter required so pass '1' if the number returned doesn't have decimals - sendChainlinkRequest(req, (1 * LINK_DIVISIBILITY) / 10); // 0,1*10**18 LINK + req._add('path', 'RAW,ETH,USD,VOLUME24HOUR'); + req._addInt('times', 10**18); // Multiply by times value to remove decimals. Parameter required so pass '1' if the number returned doesn't have decimals + _sendChainlinkRequest(req, (1 * LINK_DIVISIBILITY) / 10); // 0,1*10**18 LINK } ``` @@ -126,14 +126,14 @@ function fulfill(bytes32 _requestId, uint256 _volume) public recordChainlinkFulf {/* prettier-ignore */} ```solidity function request() public { - Chainlink.Request memory req = buildChainlinkRequest('fcf4140d696d44b687012232948bdd5d', address(this), this.fulfill.selector); - req.add( + Chainlink.Request memory req = _buildChainlinkRequest('fcf4140d696d44b687012232948bdd5d', address(this), this.fulfill.selector); + req._add( 'get', 'https://min-api.cryptocompare.com/data/pricemultifull?fsyms=ETH&tsyms=USD' ); - req.add('path', 'RAW,ETH,USD,VOLUME24HOUR'); - req.addInt('times', 10**18); // Multiply by times value to remove decimals. Parameter required so pass '1' if the number returned doesn't have decimals - sendChainlinkRequest(req, (1 * LINK_DIVISIBILITY) / 10); // 0,1*10**18 LINK + req._add('path', 'RAW,ETH,USD,VOLUME24HOUR'); + req._addInt('times', 10**18); // Multiply by times value to remove decimals. Parameter required so pass '1' if the number returned doesn't have decimals + _sendChainlinkRequest(req, (1 * LINK_DIVISIBILITY) / 10); // 0,1*10**18 LINK } ``` @@ -154,13 +154,13 @@ function fulfill(bytes32 _requestId, int256 _volume) public recordChainlinkFulfi {/* prettier-ignore */} ```solidity function request() public { - Chainlink.Request memory req = buildChainlinkRequest('c1c5e92880894eb6b27d3cae19670aa3', address(this), this.fulfill.selector); - req.add( + Chainlink.Request memory req = _buildChainlinkRequest('c1c5e92880894eb6b27d3cae19670aa3', address(this), this.fulfill.selector); + req._add( 'get', 'https://app.proofi.com/api/verify/eip155/0xCB5085214B6318aF3dd0FBbb5E74fbF6bf332151?contract=0x2f7f7E44ca1e2Ca1A54db4222cF97ab47EE026F1' ); - req.add('path', 'approved'); - sendChainlinkRequest(req, (1 * LINK_DIVISIBILITY) / 10); // 0,1*10**18 LINK + req._add('path', 'approved'); + _sendChainlinkRequest(req, (1 * LINK_DIVISIBILITY) / 10); // 0,1*10**18 LINK } ``` @@ -183,13 +183,13 @@ A full example can be found [here](/any-api/get-request/examples/array-response) {/* prettier-ignore */} ```solidity function request() public { - Chainlink.Request memory req = buildChainlinkRequest('7d80a6386ef543a3abb52817f6707e3b', address(this), this.fulfill.selector); - req.add( + Chainlink.Request memory req = _buildChainlinkRequest('7d80a6386ef543a3abb52817f6707e3b', address(this), this.fulfill.selector); + req._add( 'get', 'https://api.coingecko.com/api/v3/coins/markets?vs_currency=usd&per_page=10' ); - req.add('path', '0,id'); - sendChainlinkRequest(req, (1 * LINK_DIVISIBILITY) / 10); // 0,1*10**18 LINK + req._add('path', '0,id'); + _sendChainlinkRequest(req, (1 * LINK_DIVISIBILITY) / 10); // 0,1*10**18 LINK } ``` diff --git a/src/content/chainlink-functions/getting-started.mdx b/src/content/chainlink-functions/getting-started.mdx index f016dd41b13..8dbd8e97bc4 100644 --- a/src/content/chainlink-functions/getting-started.mdx +++ b/src/content/chainlink-functions/getting-started.mdx @@ -235,8 +235,8 @@ Chainlink Functions is capable of much more than just retrieving data. Try one o These contracts are available in an NPM package so that you can import them from within your project. ``` - import {FunctionsClient} from "@chainlink/contracts/src/v0.8/functions/dev/v1_0_0/FunctionsClient.sol"; - import {FunctionsRequest} from "@chainlink/contracts/src/v0.8/functions/dev/v1_0_0/libraries/FunctionsRequest.sol"; + import {FunctionsClient} from "@chainlink/contracts/src/v0.8/functions/v1_0_0/FunctionsClient.sol"; + import {FunctionsRequest} from "@chainlink/contracts/src/v0.8/functions/v1_0_0/libraries/FunctionsRequest.sol"; ``` - Use the FunctionsRequest.sol library to get all the functions needed for building a Chainlink Functions request. diff --git a/src/content/chainlink-nodes/external-adapters/contract-creators.mdx b/src/content/chainlink-nodes/external-adapters/contract-creators.mdx index a92e6683a88..79648e74c09 100644 --- a/src/content/chainlink-nodes/external-adapters/contract-creators.mdx +++ b/src/content/chainlink-nodes/external-adapters/contract-creators.mdx @@ -20,13 +20,13 @@ function requestMWAPrice(string _coin, string _market) onlyOwner returns (bytes32 requestId) { - Chainlink.Request memory req = buildChainlinkRequest(SPEC_ID, this, this.fulfill.selector); - req.add("endpoint", "mwa-historic"); - req.add("coin", _coin); - req.add("market", _market); - req.add("copyPath", "data.-1.1"); - req.addInt("times", 100); - requestId = sendChainlinkRequest(req, oraclePayment); + Chainlink.Request memory req = _buildChainlinkRequest(SPEC_ID, this, this.fulfill.selector); + req._add("endpoint", "mwa-historic"); + req._add("coin", _coin); + req._add("market", _market); + req._add("copyPath", "data.-1.1"); + req._addInt("times", 100); + requestId = _sendChainlinkRequest(req, oraclePayment); } ``` diff --git a/src/content/chainlink-nodes/oracle-jobs/v1/adapters.mdx b/src/content/chainlink-nodes/oracle-jobs/v1/adapters.mdx index d1c76d09566..32ee376172f 100644 --- a/src/content/chainlink-nodes/oracle-jobs/v1/adapters.mdx +++ b/src/content/chainlink-nodes/oracle-jobs/v1/adapters.mdx @@ -54,8 +54,8 @@ This core adapter compares a user-specified value with the value from the previo {/* prettier-ignore */} ```solidity -req.addInt("value", 10000); -req.add("operator", "gte"); +req._addInt("value", 10000); +req._add("operator", "gte"); ``` ## Copy @@ -91,7 +91,7 @@ Or the following for a single comma-delimited string: {/* prettier-ignore */} ```solidity -req.add("copyPath", "RAW,ETH,USD,LASTMARKET"); +req._add("copyPath", "RAW,ETH,USD,LASTMARKET"); ``` -Consumer contract developers use the [FunctionsRequest library](https://github.com/smartcontractkit/chainlink/blob/9f19654c086e8e92720d935d217536c8a5600c08/contracts/src/v0.8/functions/dev/v1_0_0/libraries/FunctionsRequest.sol) to build their [requests](#request). +Consumer contract developers use the [FunctionsRequest library](https://github.com/smartcontractkit/chainlink/blob/master/contracts/src/v0.8/functions/v1_0_0/libraries/FunctionsRequest.sol) to build their [requests](#request). ## Types and Constants diff --git a/src/content/chainlink-functions/resources/architecture.mdx b/src/content/chainlink-functions/resources/architecture.mdx index bfcd7f3c94c..7a19168a76f 100644 --- a/src/content/chainlink-functions/resources/architecture.mdx +++ b/src/content/chainlink-functions/resources/architecture.mdx @@ -14,7 +14,7 @@ import { Aside, ClickToZoom } from "@components" ## Request and Receive Data -This model is similar to the [Basic Request Model](/architecture-overview/architecture-request-model): The consumer contract initiates the cycle by sending a request to the [FunctionsRouter contract](https://github.com/smartcontractkit/chainlink/blob/9f19654c086e8e92720d935d217536c8a5600c08/contracts/src/v0.8/functions/dev/v1_0_0/FunctionsRouter.sol). Oracle nodes watch for events emitted by the [FunctionsCoordinator contract](https://github.com/smartcontractkit/chainlink/blob/9f19654c086e8e92720d935d217536c8a5600c08/contracts/src/v0.8/functions/dev/v1_0_0/FunctionsCoordinator.sol) and run the computation offchain. Finally, oracle nodes use the [Chainlink OCR](/architecture-overview/off-chain-reporting) protocol to aggregate all the returned before passing the single aggregated response back to the consumer contract via a callback function. +This model is similar to the [Basic Request Model](/architecture-overview/architecture-request-model): The consumer contract initiates the cycle by sending a request to the [FunctionsRouter contract](https://github.com/smartcontractkit/chainlink/blob/master/contracts/src/v0.8/functions/v1_0_0/FunctionsRouter.sol). Oracle nodes watch for events emitted by the [FunctionsCoordinator contract](https://github.com/smartcontractkit/chainlink/blob/master/contracts/src/v0.8/functions/v1_1_0/FunctionsCoordinator.sol) and run the computation offchain. Finally, oracle nodes use the [Chainlink OCR](/architecture-overview/off-chain-reporting) protocol to aggregate all the returned before passing the single aggregated response back to the consumer contract via a callback function. -The acceptance process is initiated via the Chainlink Functions Subscription Manager. After a user accepts the ToS by generating the required signature with their externally owned account (EOA), they transmit proof of acceptance to the [TermsOfServiceAllowList contract](https://github.com/smartcontractkit/chainlink/blob/9f19654c086e8e92720d935d217536c8a5600c08/contracts/src/v0.8/functions/dev/v1_0_0/accessControl/TermsOfServiceAllowList.sol). Upon successful validation of the proof, the EOA is added to the `allowedSenders` registry, permitting it to manage subscriptions. +The acceptance process is initiated via the Chainlink Functions Subscription Manager. After a user accepts the ToS by generating the required signature with their externally owned account (EOA), they transmit proof of acceptance to the [TermsOfServiceAllowList contract](https://github.com/smartcontractkit/chainlink/blob/master/contracts/src/v0.8/functions/v1_0_0/accessControl/TermsOfServiceAllowList.sol). Upon successful validation of the proof, the EOA is added to the `allowedSenders` registry, permitting it to manage subscriptions. ### Create Subscription -After the ToS is accepted, EOAs can create subscriptions. Upon creation, the [FunctionsRouter](https://github.com/smartcontractkit/chainlink/blob/d0d1adc5c0a654f65f23ceb0c5a9a356d30f159c/contracts/src/v0.8/functions/dev/1_0_0/FunctionsRouter.sol) assigns a unique identifier, _Subscription ID_. +After the ToS is accepted, EOAs can create subscriptions. Upon creation, the [FunctionsRouter](https://github.com/smartcontractkit/chainlink/blob/master/contracts/src/v0.8/functions/v1_0_0/FunctionsRouter.sol) assigns a unique identifier, _Subscription ID_. **Note**: EOAs can directly interact with the FunctionsRouter contract using their preferred web3 library, such as web3.js or ethers.js. @@ -136,7 +136,7 @@ To cancel a subscription: Transferring ownership is currently only supported using the [Functions Hardhat Starter kit](https://github.com/smartcontractkit/functions-hardhat-starter-kit) or the [Functions Toolkit NPM package](https://github.com/smartcontractkit/functions-toolkit): 1. Use the `functions-sub-transfer` command to initiate the transfer of ownership by specifying the new owner's address. -1. As a prerequisite, the prospective owner must be part of the `allowedSenders` registry within the [TermsOfServiceAllowList contract](https://github.com/smartcontractkit/chainlink/blob/9f19654c086e8e92720d935d217536c8a5600c08/contracts/src/v0.8/functions/dev/v1_0_0/accessControl/TermsOfServiceAllowList.sol). This verifies their acceptance of the Chainlink Functions' Terms of Service (ToS). +1. As a prerequisite, the prospective owner must be part of the `allowedSenders` registry within the [TermsOfServiceAllowList contract](https://github.com/smartcontractkit/chainlink/blob/master/contracts/src/v0.8/functions/v1_0_0/accessControl/TermsOfServiceAllowList.sol). This verifies their acceptance of the Chainlink Functions' Terms of Service (ToS). 1. The prospective owner should use the [Functions Hardhat Starter kit](https://github.com/smartcontractkit/functions-hardhat-starter-kit) and run the `functions-sub-accept` command to confirm the ownership transfer. **Note**: This guide will be updated as soon as the Chainlink Functions Subscription Manager supports ownership transfers. From 0e4baac958ba3ced4f558e79dc06ea945cece6d9 Mon Sep 17 00:00:00 2001 From: Amine E Date: Wed, 14 Feb 2024 17:28:05 +0100 Subject: [PATCH 04/21] pin versions to solidity files at the end of the build (#1763) --- package.json | 3 +- src/scripts/helper/pin-solver-dist.ts | 86 +++++++++++++++++++++++++++ 2 files changed, 88 insertions(+), 1 deletion(-) create mode 100644 src/scripts/helper/pin-solver-dist.ts diff --git a/package.json b/package.json index 979c9865ad1..b4aee106fb2 100644 --- a/package.json +++ b/package.json @@ -5,9 +5,10 @@ "scripts": { "dev": "astro dev", "start": "astro dev", - "build": "astro build", + "build": "astro build && npm run pin-sol-version", "preview": "astro preview", "format": "prettier --write .", + "pin-sol-version": "npx ts-node -r tsconfig-paths/register src/scripts/helper/pin-solver-dist.ts", "linkcheckWrapper": "npx ts-node -r tsconfig-paths/register src/scripts/link-check/linkcheckWrapper.ts", "linkcheck-internal": "npx ts-node -r tsconfig-paths/register src/scripts/link-check/linkcheck.ts", "linkcheck-external": "npx ts-node -r tsconfig-paths/register src/scripts/link-check/linkcheck.ts --mode=external", diff --git a/src/scripts/helper/pin-solver-dist.ts b/src/scripts/helper/pin-solver-dist.ts new file mode 100644 index 00000000000..260c199fe00 --- /dev/null +++ b/src/scripts/helper/pin-solver-dist.ts @@ -0,0 +1,86 @@ +import fs from "fs" +import glob from "glob" +import crypto from "crypto" + +interface Dependencies { + [key: string]: string +} + +/** + * Retrieves the versions of specified packages from a package.json file. + * @param filePath - The path to the package.json file. + * @param packages - An array of package names. + * @returns An object containing the package names as keys and their corresponding versions as values. + */ +const getPackageVersions = (filePath: string, packages: string[]): Dependencies => { + const packageJson = JSON.parse(fs.readFileSync(filePath, "utf8")) + const versions: Dependencies = {} + + packages.forEach((packageName) => { + const version = packageJson.dependencies[packageName] + if (version) { + versions[packageName] = version.replace(/[\^~]/, "") + } + }) + + return versions +} + +/** + * Calculates the SHA256 hash of the given content. + * + * @param content - The content to calculate the hash for. + * @returns The SHA256 hash of the content. + */ +const getFileHash = (content: string): string => { + return crypto.createHash("sha256").update(content).digest("hex") +} + +/** + * Pins the versions of dependencies in Solidity files based on the provided glob pattern. + * @param globPattern - The glob pattern used to find Solidity files. + * @param versions - The object containing the dependencies and their corresponding versions. + * @throws {Error} - If there are errors during the version pinning process. + */ +const pinVersionsInSolidityFiles = (globPattern: string, versions: Dependencies) => { + glob(globPattern, (err, files) => { + if (err) { + console.error("Error finding Solidity files:", err) + throw err + } + + const errorMap: { [file: string]: Error } = {} + + files.forEach((file) => { + try { + const originalContent = fs.readFileSync(file, "utf8") + let content = originalContent + + Object.entries(versions).forEach(([packageName, version]) => { + const regex = new RegExp(`(import.*${packageName})(/)(?!@${version.replace(".", "\\.")})(.*?\\.sol)`, "g") + content = content.replace(regex, `$1@${version}/$3`) + }) + + if (getFileHash(originalContent) !== getFileHash(content)) { + fs.writeFileSync(file, content, "utf8") + } + } catch (fileError) { + errorMap[file] = fileError + } + }) + + if (Object.keys(errorMap).length > 0) { + console.error("There were errors during the processing of files:") + Object.entries(errorMap).forEach(([file, error]) => { + console.error(`${file}: ${error.message}`) + }) + throw new Error("Errors occurred during the version pinning process.") + } + + console.log(`Version pinning complete for ${files.length} files.`) + }) +} + +const packages = ["@chainlink/contracts", "@chainlink/contracts-ccip"] +const versions = getPackageVersions("package.json", packages) +pinVersionsInSolidityFiles("dist/samples/**/*.sol", versions) From de68c9577ec36a6661cda5eb31f8e43a7cefb97f Mon Sep 17 00:00:00 2001 From: Dwight Lyle Date: Fri, 1 Mar 2024 14:21:34 -0700 Subject: [PATCH 05/21] Update package-lock.json --- package-lock.json | 25 ------------------------- 1 file changed, 25 deletions(-) diff --git a/package-lock.json b/package-lock.json index 78f947c196f..69fb7162eab 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1812,19 +1812,6 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/@eth-optimism/contracts": { - "version": "0.5.40", - "resolved": "https://registry.npmjs.org/@eth-optimism/contracts/-/contracts-0.5.40.tgz", - "integrity": "sha512-MrzV0nvsymfO/fursTB7m/KunkPsCndltVgfdHaT1Aj5Vi6R/doKIGGkOofHX+8B6VMZpuZosKCMQ5lQuqjt8w==", - "dependencies": { - "@eth-optimism/core-utils": "0.12.0", - "@ethersproject/abstract-provider": "^5.7.0", - "@ethersproject/abstract-signer": "^5.7.0" - }, - "peerDependencies": { - "ethers": "^5" - } - }, "node_modules/@eth-optimism/core-utils": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/@eth-optimism/core-utils/-/core-utils-0.12.0.tgz", @@ -4424,18 +4411,6 @@ "resolved": "https://registry.npmjs.org/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-4.9.3.tgz", "integrity": "sha512-jjaHAVRMrE4UuZNfDwjlLGDxTHWIOwTJS2ldnc278a0gevfXfPr8hxKEVBGFBE96kl2G3VHDZhUimw/+G3TG2A==" }, - "node_modules/@openzeppelin/contracts-upgradeable-4.7.3": { - "name": "@openzeppelin/contracts-upgradeable", - "version": "4.7.3", - "resolved": "https://registry.npmjs.org/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-4.7.3.tgz", - "integrity": "sha512-+wuegAMaLcZnLCJIvrVUDzA9z/Wp93f0Dla/4jJvIhijRrPabjQbZe6fWiECLaJyfn5ci9fqf9vTw3xpQOad2A==" - }, - "node_modules/@openzeppelin/contracts-v0.7": { - "name": "@openzeppelin/contracts", - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-3.4.2.tgz", - "integrity": "sha512-z0zMCjyhhp4y7XKAcDAi3Vgms4T2PstwBdahiO0+9NaGICQKjynK3wduSRplTgk4LXmoO1yfDGO5RbjKYxtuxA==" - }, "node_modules/@openzeppelin/upgrades-core": { "version": "1.32.5", "resolved": "https://registry.npmjs.org/@openzeppelin/upgrades-core/-/upgrades-core-1.32.5.tgz", From 20fd4cd190283e76e3ab859f1927abe7d1942984 Mon Sep 17 00:00:00 2001 From: Dwight Lyle Date: Fri, 1 Mar 2024 14:33:16 -0700 Subject: [PATCH 06/21] Re-update paths --- .../Automation/tutorials/VRFSubscriptionBalanceMonitor.sol | 2 +- public/samples/DataFeeds/DataConsumerV3.sol | 2 +- public/samples/DataFeeds/DataConsumerWithSequencerCheck.sol | 2 +- public/samples/DataFeeds/HistoricalDataConsumer.sol | 2 +- public/samples/DataFeeds/NFTFloorPriceConsumerV3.sol | 2 +- public/samples/DataFeeds/PriceConverter.sol | 2 +- public/samples/DataFeeds/ReserveConsumerV3.sol | 2 +- public/samples/VRF/VRFD20.sol | 2 +- public/samples/VRF/VRFv2Consumer.sol | 2 +- public/samples/VRF/VRFv2MultiplePaths.sol | 2 +- public/samples/VRF/VRFv2SubscriptionManager.sol | 2 +- public/samples/VRF/mock/VRFv2Consumer.sol | 2 +- public/samples/events/avasummit/VRFv2SubscriptionManager.sol | 2 +- 13 files changed, 13 insertions(+), 13 deletions(-) diff --git a/public/samples/Automation/tutorials/VRFSubscriptionBalanceMonitor.sol b/public/samples/Automation/tutorials/VRFSubscriptionBalanceMonitor.sol index ce2903a1591..cccffbaac69 100644 --- a/public/samples/Automation/tutorials/VRFSubscriptionBalanceMonitor.sol +++ b/public/samples/Automation/tutorials/VRFSubscriptionBalanceMonitor.sol @@ -4,7 +4,7 @@ pragma solidity 0.8.6; import "@chainlink/contracts/src/v0.8/automation/interfaces/KeeperCompatibleInterface.sol"; import {ConfirmedOwner} from "@chainlink/contracts/src/v0.8/shared/access/ConfirmedOwner.sol"; -import {VRFCoordinatorV2Interface} from "@chainlink/contracts/src/v0.8/interfaces/VRFCoordinatorV2Interface.sol"; +import {VRFCoordinatorV2Interface} from "@chainlink/contracts/src/v0.8/vrf/interfaces/VRFCoordinatorV2Interface.sol"; import {LinkTokenInterface} from "@chainlink/contracts/src/v0.8/shared/interfaces/LinkTokenInterface.sol"; import {Pausable} from "@openzeppelin/contracts/security/Pausable.sol"; diff --git a/public/samples/DataFeeds/DataConsumerV3.sol b/public/samples/DataFeeds/DataConsumerV3.sol index d8aaf4d2cf5..48f8fc6dab6 100644 --- a/public/samples/DataFeeds/DataConsumerV3.sol +++ b/public/samples/DataFeeds/DataConsumerV3.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.7; -import {AggregatorV3Interface} from "@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol"; +import {AggregatorV3Interface} from "@chainlink/contracts/src/v0.8/shared/interfaces/AggregatorV3Interface.sol"; /** * THIS IS AN EXAMPLE CONTRACT THAT USES HARDCODED diff --git a/public/samples/DataFeeds/DataConsumerWithSequencerCheck.sol b/public/samples/DataFeeds/DataConsumerWithSequencerCheck.sol index 06c6c1a4718..16bc0d22941 100644 --- a/public/samples/DataFeeds/DataConsumerWithSequencerCheck.sol +++ b/public/samples/DataFeeds/DataConsumerWithSequencerCheck.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.7; -import {AggregatorV2V3Interface} from "@chainlink/contracts/src/v0.8/interfaces/AggregatorV2V3Interface.sol"; +import {AggregatorV2V3Interface} from "@chainlink/contracts/src/v0.8/shared/interfaces/AggregatorV2V3Interface.sol"; /** * THIS IS AN EXAMPLE CONTRACT THAT USES HARDCODED VALUES FOR CLARITY. diff --git a/public/samples/DataFeeds/HistoricalDataConsumer.sol b/public/samples/DataFeeds/HistoricalDataConsumer.sol index 4d52a867a58..dd584b35625 100644 --- a/public/samples/DataFeeds/HistoricalDataConsumer.sol +++ b/public/samples/DataFeeds/HistoricalDataConsumer.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.7; -import {AggregatorV3Interface} from "@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol"; +import {AggregatorV3Interface} from "@chainlink/contracts/src/v0.8/shared/interfaces/AggregatorV3Interface.sol"; /** * THIS IS AN EXAMPLE CONTRACT THAT USES HARDCODED VALUES FOR CLARITY. diff --git a/public/samples/DataFeeds/NFTFloorPriceConsumerV3.sol b/public/samples/DataFeeds/NFTFloorPriceConsumerV3.sol index 46de920ef6a..ec0ef7cebe0 100644 --- a/public/samples/DataFeeds/NFTFloorPriceConsumerV3.sol +++ b/public/samples/DataFeeds/NFTFloorPriceConsumerV3.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.7; -import {AggregatorV3Interface} from "@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol"; +import {AggregatorV3Interface} from "@chainlink/contracts/src/v0.8/shared/interfaces/AggregatorV3Interface.sol"; contract NFTFloorPriceConsumerV3 { AggregatorV3Interface internal nftFloorPriceFeed; diff --git a/public/samples/DataFeeds/PriceConverter.sol b/public/samples/DataFeeds/PriceConverter.sol index cc86b9f4dc2..7ef200b3bfb 100644 --- a/public/samples/DataFeeds/PriceConverter.sol +++ b/public/samples/DataFeeds/PriceConverter.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.7; -import {AggregatorV3Interface} from "@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol"; +import {AggregatorV3Interface} from "@chainlink/contracts/src/v0.8/shared/interfaces/AggregatorV3Interface.sol"; /** * Network: Sepolia diff --git a/public/samples/DataFeeds/ReserveConsumerV3.sol b/public/samples/DataFeeds/ReserveConsumerV3.sol index 01e03f63cdd..f7e87d71ffc 100644 --- a/public/samples/DataFeeds/ReserveConsumerV3.sol +++ b/public/samples/DataFeeds/ReserveConsumerV3.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.7; -import {AggregatorV3Interface} from "@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol"; +import {AggregatorV3Interface} from "@chainlink/contracts/src/v0.8/shared/interfaces/AggregatorV3Interface.sol"; contract ReserveConsumerV3 { AggregatorV3Interface internal reserveFeed; diff --git a/public/samples/VRF/VRFD20.sol b/public/samples/VRF/VRFD20.sol index 0f00841bf6e..cf02d0c3d36 100644 --- a/public/samples/VRF/VRFD20.sol +++ b/public/samples/VRF/VRFD20.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.7; -import {VRFCoordinatorV2Interface} from "@chainlink/contracts/src/v0.8/interfaces/VRFCoordinatorV2Interface.sol"; +import {VRFCoordinatorV2Interface} from "@chainlink/contracts/src/v0.8/vrf/interfaces/VRFCoordinatorV2Interface.sol"; import {VRFConsumerBaseV2} from "@chainlink/contracts/src/v0.8/vrf/VRFConsumerBaseV2.sol"; /** diff --git a/public/samples/VRF/VRFv2Consumer.sol b/public/samples/VRF/VRFv2Consumer.sol index e039d902ce5..39bbe4c6172 100644 --- a/public/samples/VRF/VRFv2Consumer.sol +++ b/public/samples/VRF/VRFv2Consumer.sol @@ -2,7 +2,7 @@ // An example of a consumer contract that relies on a subscription for funding. pragma solidity ^0.8.7; -import {VRFCoordinatorV2Interface} from "@chainlink/contracts/src/v0.8/interfaces/VRFCoordinatorV2Interface.sol"; +import {VRFCoordinatorV2Interface} from "@chainlink/contracts/src/v0.8/vrf/interfaces/VRFCoordinatorV2Interface.sol"; import {VRFConsumerBaseV2} from "@chainlink/contracts/src/v0.8/vrf/VRFConsumerBaseV2.sol"; import {ConfirmedOwner} from "@chainlink/contracts/src/v0.8/shared/access/ConfirmedOwner.sol"; diff --git a/public/samples/VRF/VRFv2MultiplePaths.sol b/public/samples/VRF/VRFv2MultiplePaths.sol index 54bf0b4d3db..84a2a2fe4a0 100644 --- a/public/samples/VRF/VRFv2MultiplePaths.sol +++ b/public/samples/VRF/VRFv2MultiplePaths.sol @@ -3,7 +3,7 @@ // It shows how to setup multiple execution paths for handling a response. pragma solidity ^0.8.7; -import {VRFCoordinatorV2Interface} from "@chainlink/contracts/src/v0.8/interfaces/VRFCoordinatorV2Interface.sol"; +import {VRFCoordinatorV2Interface} from "@chainlink/contracts/src/v0.8/vrf/interfaces/VRFCoordinatorV2Interface.sol"; import {VRFConsumerBaseV2} from "@chainlink/contracts/src/v0.8/vrf/VRFConsumerBaseV2.sol"; /** diff --git a/public/samples/VRF/VRFv2SubscriptionManager.sol b/public/samples/VRF/VRFv2SubscriptionManager.sol index 1763abdd6c4..39b98fb022b 100644 --- a/public/samples/VRF/VRFv2SubscriptionManager.sol +++ b/public/samples/VRF/VRFv2SubscriptionManager.sol @@ -3,7 +3,7 @@ pragma solidity ^0.8.7; import {LinkTokenInterface} from "@chainlink/contracts/src/v0.8/shared/interfaces/LinkTokenInterface.sol"; -import {VRFCoordinatorV2Interface} from "@chainlink/contracts/src/v0.8/interfaces/VRFCoordinatorV2Interface.sol"; +import {VRFCoordinatorV2Interface} from "@chainlink/contracts/src/v0.8/vrf/interfaces/VRFCoordinatorV2Interface.sol"; import {VRFConsumerBaseV2} from "@chainlink/contracts/src/v0.8/vrf/VRFConsumerBaseV2.sol"; /** diff --git a/public/samples/VRF/mock/VRFv2Consumer.sol b/public/samples/VRF/mock/VRFv2Consumer.sol index a27e13ef229..395fe1742e4 100644 --- a/public/samples/VRF/mock/VRFv2Consumer.sol +++ b/public/samples/VRF/mock/VRFv2Consumer.sol @@ -2,7 +2,7 @@ // An example of a consumer contract that relies on a subscription for funding. pragma solidity ^0.8.7; -import {VRFCoordinatorV2Interface} from "@chainlink/contracts/src/v0.8/interfaces/VRFCoordinatorV2Interface.sol"; +import {VRFCoordinatorV2Interface} from "@chainlink/contracts/src/v0.8/vrf/interfaces/VRFCoordinatorV2Interface.sol"; import {VRFConsumerBaseV2} from "@chainlink/contracts/src/v0.8/vrf/VRFConsumerBaseV2.sol"; /** diff --git a/public/samples/events/avasummit/VRFv2SubscriptionManager.sol b/public/samples/events/avasummit/VRFv2SubscriptionManager.sol index 74d198d25c4..8627e25e4e3 100644 --- a/public/samples/events/avasummit/VRFv2SubscriptionManager.sol +++ b/public/samples/events/avasummit/VRFv2SubscriptionManager.sol @@ -3,7 +3,7 @@ pragma solidity ^0.8.7; import {LinkTokenInterface} from "@chainlink/contracts/src/v0.8/shared/interfaces/LinkTokenInterface.sol"; -import {VRFCoordinatorV2Interface} from "@chainlink/contracts/src/v0.8/interfaces/VRFCoordinatorV2Interface.sol"; +import {VRFCoordinatorV2Interface} from "@chainlink/contracts/src/v0.8/vrf/interfaces/VRFCoordinatorV2Interface.sol"; import {VRFConsumerBaseV2} from "@chainlink/contracts/src/v0.8/vrf/VRFConsumerBaseV2.sol"; /** From c1047c45c54c62702cf330f2a75c24500e6f4b78 Mon Sep 17 00:00:00 2001 From: Dwight Lyle Date: Fri, 1 Mar 2024 14:37:03 -0700 Subject: [PATCH 07/21] Update Automation example import --- public/samples/Automation/example.sol | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/public/samples/Automation/example.sol b/public/samples/Automation/example.sol index 4ffd16fd44e..414fa64321f 100644 --- a/public/samples/Automation/example.sol +++ b/public/samples/Automation/example.sol @@ -1,9 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; -// KeeperCompatible.sol imports the functions from both ./KeeperBase.sol and -// ./interfaces/KeeperCompatibleInterface.sol -import "@chainlink/contracts/src/v0.8/automation/KeeperCompatible.sol"; +import "@chainlink/contracts/src/v0.8/automation/interfaces/AutomationCompatibleInterface.sol"; /** * THIS IS AN EXAMPLE CONTRACT THAT USES HARDCODED VALUES FOR CLARITY. @@ -11,7 +9,7 @@ import "@chainlink/contracts/src/v0.8/automation/KeeperCompatible.sol"; * DO NOT USE THIS CODE IN PRODUCTION. */ -contract Counter is KeeperCompatibleInterface { +contract Counter is AutomationCompatibleInterface { uint public counter; // counter counts the number of upkeeps performed uint public interval; // interval specifies the time between upkeeps uint public lastTimeStamp; // lastTimeStamp tracks the last upkeep performed From e50732a6df97a404ada9138a7e21e3bd61ba0e90 Mon Sep 17 00:00:00 2001 From: Dwight Lyle Date: Fri, 1 Mar 2024 14:53:14 -0700 Subject: [PATCH 08/21] Remove outdated Functions example --- .../FunctionsExample.sol.ignore | 92 ------------------- 1 file changed, 92 deletions(-) delete mode 100644 public/samples/Functions/adding-functions-to-projects/FunctionsExample.sol.ignore diff --git a/public/samples/Functions/adding-functions-to-projects/FunctionsExample.sol.ignore b/public/samples/Functions/adding-functions-to-projects/FunctionsExample.sol.ignore deleted file mode 100644 index e1a5b7bc1b7..00000000000 --- a/public/samples/Functions/adding-functions-to-projects/FunctionsExample.sol.ignore +++ /dev/null @@ -1,92 +0,0 @@ -pragma solidity =0.8.7; - -import "@chainlink/contracts/src/v0.8/shared/access/ConfirmedOwner.sol"; -import "./dev/functions/FunctionsClient.sol"; - -// import "@chainlink/contracts/src/v0.8/dev/functions/FunctionsClient.sol"; // Once published - -contract FunctionsExample is FunctionsClient, ConfirmedOwner { - using Functions for Functions.Request; - - bytes32 public latestRequestId; - bytes public latestResponse; - bytes public latestError; - - event OCRResponse(bytes32 indexed requestId, bytes result, bytes err); - - uint256 number; - - constructor( - address oracle - ) FunctionsClient(oracle) ConfirmedOwner(msg.sender) {} - - function setNumber(uint256 _num) public { - number = _num; - } - - function setNumber( - string calldata source, - bytes calldata secrets, - Functions.Location secretsLocation, - string[] calldata args, - uint64 subscriptionId, - uint32 gasLimit - ) public onlyOwner returns (bytes32) { - Functions.Request memory req; - req.initializeRequest( - Functions.Location.Inline, - Functions.CodeLanguage.JavaScript, - source - ); - if (secrets.length > 0) { - if (secretsLocation == Functions.Location.Inline) { - req.addInlineSecrets(secrets); - } else { - req.addRemoteSecrets(secrets); - } - } - if (args.length > 0) req.addArgs(args); - - bytes32 assignedReqID = sendRequest(req, subscriptionId, gasLimit); - latestRequestId = assignedReqID; - return assignedReqID; - } - - function fulfillRequest( - bytes32 requestId, - bytes memory response, - bytes memory err - ) internal override { - latestResponse = response; - //convert response to number - number = bytesToUint(response); - latestError = err; - emit OCRResponse(requestId, response, err); - } - - function bytesToUint(bytes memory b) internal pure returns (uint256) { - uint256 number; - for (uint256 i = 0; i < b.length; i++) { - number = - number + - uint256(uint8(b[i])) * - (2 ** (8 * (b.length - (i + 1)))); - } - return number; - } - - function getNumber() public view returns (uint256) { - return number; - } - - function updateOracleAddress(address oracle) public onlyOwner { - setOracle(oracle); - } - - function addSimulatedRequestId( - address oracleAddress, - bytes32 requestId - ) public onlyOwner { - addExternalRequest(oracleAddress, requestId); - } -} From 8c739f767b4134604ba6092da51517602e8b81a1 Mon Sep 17 00:00:00 2001 From: Karim <98668332+khadni@users.noreply.github.com> Date: Mon, 4 Mar 2024 10:16:39 +0100 Subject: [PATCH 09/21] Use OwnerIsCreator to align with project's OZ version --- public/samples/Automation/CounterwForwarder.sol | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/public/samples/Automation/CounterwForwarder.sol b/public/samples/Automation/CounterwForwarder.sol index d057832cd95..cdda8d9043f 100644 --- a/public/samples/Automation/CounterwForwarder.sol +++ b/public/samples/Automation/CounterwForwarder.sol @@ -14,9 +14,9 @@ pragma solidity ^0.8.7; */ import {AutomationCompatibleInterface} from "@chainlink/contracts/src/v0.8/automation/interfaces/AutomationCompatibleInterface.sol"; -import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol"; +import {OwnerIsCreator} from "@chainlink/contracts/src/v0.8/shared/access/OwnerIsCreator.sol"; -contract CounterwForwarder is AutomationCompatibleInterface, Ownable { +contract CounterwForwarder is AutomationCompatibleInterface, OwnerIsCreator { uint256 public counter; // counter counts the number of upkeeps performed uint256 public interval; // interval specifies the time between upkeeps uint256 public lastTimeStamp; // lastTimeStamp tracks the last upkeep performed From 2681a792cb4b9a46cbcb2c88aa076d4aebdbc7de Mon Sep 17 00:00:00 2001 From: Dwight Lyle Date: Wed, 13 Mar 2024 12:08:52 -0600 Subject: [PATCH 10/21] Update other packages --- package-lock.json | 565 ++++++++++++++++++++++------------------------ package.json | 16 +- 2 files changed, 272 insertions(+), 309 deletions(-) diff --git a/package-lock.json b/package-lock.json index f1944093c6c..79d465d9e71 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,13 +9,13 @@ "version": "1.0.1", "license": "ISC", "dependencies": { - "@11ty/eleventy-fetch": "^4.0.0", + "@11ty/eleventy-fetch": "^4.0.1", "@astro-community/astro-embed-youtube": "^0.4.4", - "@astrojs/mdx": "^2.1.1", + "@astrojs/mdx": "^2.2.0", "@astrojs/partytown": "^2.0.4", "@astrojs/preact": "^3.1.1", "@astrojs/prism": "^3.0.0", - "@astrojs/react": "^3.0.10", + "@astrojs/react": "^3.1.0", "@astrojs/sitemap": "^3.1.1", "@chainlink/components": "^0.4.14", "@chainlink/contracts": "^1.0.0-beta.0", @@ -27,7 +27,7 @@ "@nanostores/preact": "^0.5.1", "@nanostores/react": "^0.7.2", "@openzeppelin/contracts": "^4.9.6", - "astro": "^4.4.8", + "astro": "^4.5.2", "bignumber.js": "^9.1.2", "clipboard": "^2.0.11", "dotenv": "^16.4.5", @@ -47,8 +47,8 @@ "@nomicfoundation/hardhat-toolbox": "^2.0.2", "@nomiclabs/hardhat-ethers": "^2.2.3", "@project-serum/anchor": "^0.26.0", - "@types/node": "^20.11.24", - "@types/react": "^18.2.61", + "@types/node": "^20.11.27", + "@types/react": "^18.2.65", "@typescript-eslint/eslint-plugin": "^5.62.0", "@typescript-eslint/parser": "^5.62.0", "eslint": "^8.57.0", @@ -58,7 +58,7 @@ "eslint-plugin-n": "^15.7.0", "eslint-plugin-prettier": "^4.2.1", "eslint-plugin-promise": "^6.1.1", - "hardhat": "^2.20.1", + "hardhat": "^2.21.0", "husky": "^8.0.3", "lint-staged": "^13.3.0", "prettier": "^2.8.8", @@ -69,13 +69,13 @@ "solhint-plugin-prettier": "^0.0.5", "ts-jest": "^29.1.2", "tsconfig-paths": "^4.2.0", - "typescript": "^5.3.3" + "typescript": "^5.4.2" } }, "node_modules/@11ty/eleventy-fetch": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@11ty/eleventy-fetch/-/eleventy-fetch-4.0.0.tgz", - "integrity": "sha512-wGAd0r+8DUWr22fK5r07dOKuNY6ltA7hX+sJzngGZL1yJmuUVdM/xPQZ+iq0BFgf/ZeRdpVEzf2D0cpVZUuiTg==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@11ty/eleventy-fetch/-/eleventy-fetch-4.0.1.tgz", + "integrity": "sha512-yIiLM5ziBmg86i4TlXpBdcIygJHvh/GgPJyAiFOckO9H4y9cQDM8eIcJCUQ4Mum0NEVui/OjhEut2R08xw0vlQ==", "dependencies": { "debug": "^4.3.4", "flat-cache": "^3.0.4", @@ -303,22 +303,24 @@ } }, "node_modules/@astrojs/compiler": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/@astrojs/compiler/-/compiler-2.6.0.tgz", - "integrity": "sha512-c74k8iGHL3DzkosSJ0tGcHIEBEiIfBhr7eadSaPyvWlVKaieDVzVs8OW1tnRSQyBsfMc8DZQ4RcN2KAcESD8UQ==" + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/@astrojs/compiler/-/compiler-2.7.0.tgz", + "integrity": "sha512-XpC8MAaWjD1ff6/IfkRq/5k1EFj6zhCNqXRd5J43SVJEBj/Bsmizkm8N0xOYscGcDFQkRgEw6/eKnI5x/1l6aA==" }, "node_modules/@astrojs/internal-helpers": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@astrojs/internal-helpers/-/internal-helpers-0.2.1.tgz", - "integrity": "sha512-06DD2ZnItMwUnH81LBLco3tWjcZ1lGU9rLCCBaeUCGYe9cI0wKyY2W3kDyoW1I6GmcWgt1fu+D1CTvz+FIKf8A==" + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@astrojs/internal-helpers/-/internal-helpers-0.3.0.tgz", + "integrity": "sha512-tGmHvrhpzuz0JBHaJX8GywN9g4rldVNHtkoVDC3m/DdzBO70jGoVuc0uuNVglRYnsdwkbG0K02Iw3nOOR3/Y4g==" }, "node_modules/@astrojs/markdown-remark": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@astrojs/markdown-remark/-/markdown-remark-4.2.1.tgz", - "integrity": "sha512-2RQBIwrq+2qPYtp99bH+eL5hfbK0BoxXla85lHsRpIX/IsGqFrPX6pXI2cbWPihBwGbKCdxS6uZNX2QerZWwpQ==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@astrojs/markdown-remark/-/markdown-remark-4.3.0.tgz", + "integrity": "sha512-iZOgYj/yNDvBRfKqkGuAvjeONhjQPq8Uk3HjyIgcTK5valq03NiUgSc5Ovq00yUVBeYJ/5EDx23c8xqtkkBlPw==", "dependencies": { "@astrojs/prism": "^3.0.0", "github-slugger": "^2.0.0", + "hast-util-from-html": "^2.0.0", + "hast-util-to-text": "^4.0.0", "import-meta-resolve": "^4.0.0", "mdast-util-definitions": "^6.0.0", "rehype-raw": "^7.0.0", @@ -327,9 +329,11 @@ "remark-parse": "^11.0.0", "remark-rehype": "^11.0.0", "remark-smartypants": "^2.0.0", - "shikiji": "^0.9.18", + "shiki": "^1.1.2", "unified": "^11.0.4", + "unist-util-remove-position": "^5.0.0", "unist-util-visit": "^5.0.0", + "unist-util-visit-parents": "^6.0.0", "vfile": "^6.0.1" } }, @@ -422,11 +426,11 @@ } }, "node_modules/@astrojs/mdx": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@astrojs/mdx/-/mdx-2.1.1.tgz", - "integrity": "sha512-AgGFdE7HOGmoFooGvMSatkA9FiSKwyVW7ImHot/bXJ6uAbFfu6iG2ht18Cf1pT22Hda/6iSCGWusFvBv0/EnKQ==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@astrojs/mdx/-/mdx-2.2.0.tgz", + "integrity": "sha512-EkcCniYdGwsh9k5LknqRrz/UyOnMNXdRk7fgDAw/zUDKnm7zgQAG8hIx0FxG1L2IINxLfu7IcjgZb3f5TFpxKw==", "dependencies": { - "@astrojs/markdown-remark": "4.2.1", + "@astrojs/markdown-remark": "4.3.0", "@mdx-js/mdx": "^3.0.0", "acorn": "^8.11.2", "es-module-lexer": "^1.4.1", @@ -565,9 +569,9 @@ } }, "node_modules/@astrojs/react": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/@astrojs/react/-/react-3.0.10.tgz", - "integrity": "sha512-uGRIwKMAn7tva2vxXMyoVIGxWFr0rjZ8ZWIlkTG/vIpnAjD2nM8Cz6B8j7yzj176jvl6gZ6xTbTVPm09aeK0Yw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@astrojs/react/-/react-3.1.0.tgz", + "integrity": "sha512-KZhZyV+sUDZEjlrmPWNiPGeYowG9uq6/aMbCgVaeKEBlWT4Kg32TNwBOhZk6AcE4LY1l3mIwt3orUGE2JV96/g==", "dependencies": { "@vitejs/plugin-react": "^4.2.0", "ultrahtml": "^1.3.0" @@ -3732,11 +3736,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/@medv/finder": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@medv/finder/-/finder-3.2.0.tgz", - "integrity": "sha512-JmU7JIBwyL8RAzefvzALT4sP2M0biGk8i2invAgpQmma/QgfsaqoHIvJ7S0YC8n9hUVG8X3Leul2nGa06PvhbQ==" - }, "node_modules/@metamask/detect-provider": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@metamask/detect-provider/-/detect-provider-2.0.0.tgz", @@ -4068,180 +4067,189 @@ "node": ">= 8" } }, - "node_modules/@nomicfoundation/ethereumjs-block": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-block/-/ethereumjs-block-5.0.4.tgz", - "integrity": "sha512-AcyacJ9eX/uPEvqsPiB+WO1ymE+kyH48qGGiGV+YTojdtas8itUTW5dehDSOXEEItWGbbzEJ4PRqnQZlWaPvDw==", + "node_modules/@nomicfoundation/edr": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr/-/edr-0.2.1.tgz", + "integrity": "sha512-Dleau3ItHJh2n85G2J6AIPBoLgu/mOWkmrh26z3VsJE2tp/e00hUk/dqz85ncsVcBYEc6/YOn/DomWu0wSF9tQ==", "dev": true, - "dependencies": { - "@nomicfoundation/ethereumjs-common": "4.0.4", - "@nomicfoundation/ethereumjs-rlp": "5.0.4", - "@nomicfoundation/ethereumjs-trie": "6.0.4", - "@nomicfoundation/ethereumjs-tx": "5.0.4", - "@nomicfoundation/ethereumjs-util": "9.0.4", - "ethereum-cryptography": "0.1.3" - }, "engines": { - "node": ">=18" - } - }, - "node_modules/@nomicfoundation/ethereumjs-blockchain": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-blockchain/-/ethereumjs-blockchain-7.0.4.tgz", - "integrity": "sha512-jYsd/kwzbmpnxx86tXsYV8wZ5xGvFL+7/P0c6OlzpClHsbFzeF41KrYA9scON8Rg6bZu3ZTv6JOAgj3t7USUfg==", - "dev": true, - "dependencies": { - "@nomicfoundation/ethereumjs-block": "5.0.4", - "@nomicfoundation/ethereumjs-common": "4.0.4", - "@nomicfoundation/ethereumjs-ethash": "3.0.4", - "@nomicfoundation/ethereumjs-rlp": "5.0.4", - "@nomicfoundation/ethereumjs-trie": "6.0.4", - "@nomicfoundation/ethereumjs-tx": "5.0.4", - "@nomicfoundation/ethereumjs-util": "9.0.4", - "debug": "^4.3.3", - "ethereum-cryptography": "0.1.3", - "lru-cache": "^10.0.0" + "node": ">= 18" }, + "optionalDependencies": { + "@nomicfoundation/edr-darwin-arm64": "0.2.1", + "@nomicfoundation/edr-darwin-x64": "0.2.1", + "@nomicfoundation/edr-linux-arm64-gnu": "0.2.1", + "@nomicfoundation/edr-linux-arm64-musl": "0.2.1", + "@nomicfoundation/edr-linux-x64-gnu": "0.2.1", + "@nomicfoundation/edr-linux-x64-musl": "0.2.1", + "@nomicfoundation/edr-win32-arm64-msvc": "0.2.1", + "@nomicfoundation/edr-win32-ia32-msvc": "0.2.1", + "@nomicfoundation/edr-win32-x64-msvc": "0.2.1" + } + }, + "node_modules/@nomicfoundation/edr-darwin-arm64": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-darwin-arm64/-/edr-darwin-arm64-0.2.1.tgz", + "integrity": "sha512-aMYaRaZVQ/TmyNJIoXf1bU4k0zfinaL9Sy1day4yGlL6eiQPFfRGj9W6TZaZIoYG0XTx/mQWD7dkXJ7LdrleJA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=18" + "node": ">= 18" } }, - "node_modules/@nomicfoundation/ethereumjs-blockchain/node_modules/lru-cache": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", - "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", + "node_modules/@nomicfoundation/edr-darwin-x64": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-darwin-x64/-/edr-darwin-x64-0.2.1.tgz", + "integrity": "sha512-ma0SLcjHm5L3nPHcKFJB0jv/gKGSKaxr5Z65rurX/eaYUQJ7YGMsb8er9bSCo9rjzOtxf4FoPj3grL3zGpOj8A==", + "cpu": [ + "x64" + ], "dev": true, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": "14 || >=16.14" + "node": ">= 18" } }, - "node_modules/@nomicfoundation/ethereumjs-common": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-4.0.4.tgz", - "integrity": "sha512-9Rgb658lcWsjiicr5GzNCjI1llow/7r0k50dLL95OJ+6iZJcVbi15r3Y0xh2cIO+zgX0WIHcbzIu6FeQf9KPrg==", + "node_modules/@nomicfoundation/edr-linux-arm64-gnu": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-gnu/-/edr-linux-arm64-gnu-0.2.1.tgz", + "integrity": "sha512-NX3G4pBhRitWrjSGY3HTyCq3wKSm5YqrKVOCNQGl9/jcjSovqxlgzFMiTx4YZCzGntfJ/1om9AI84OWxYJjoDw==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "@nomicfoundation/ethereumjs-util": "9.0.4" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 18" } }, - "node_modules/@nomicfoundation/ethereumjs-ethash": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-ethash/-/ethereumjs-ethash-3.0.4.tgz", - "integrity": "sha512-xvIrwIMl9sSaiYKRem68+O7vYdj7Q2XWv5P7JXiIkn83918QzWHvqbswTRsH7+r6X1UEvdsURRnZbvZszEjAaQ==", + "node_modules/@nomicfoundation/edr-linux-arm64-musl": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-musl/-/edr-linux-arm64-musl-0.2.1.tgz", + "integrity": "sha512-gdQ3QHkt9XRkdtOGQ8fMwS11MXdjLeZgLrqoial4V4qtMaamIMMhVczK+VEvUhD8p7G4BVmp6kmkvcsthmndmw==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "@nomicfoundation/ethereumjs-block": "5.0.4", - "@nomicfoundation/ethereumjs-rlp": "5.0.4", - "@nomicfoundation/ethereumjs-util": "9.0.4", - "bigint-crypto-utils": "^3.2.2", - "ethereum-cryptography": "0.1.3" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=18" + "node": ">= 18" } }, - "node_modules/@nomicfoundation/ethereumjs-evm": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-evm/-/ethereumjs-evm-2.0.4.tgz", - "integrity": "sha512-lTyZZi1KpeMHzaO6cSVisR2tjiTTedjo7PcmhI/+GNFo9BmyY6QYzGeSti0sFttmjbEMioHgXxl5yrLNRg6+1w==", + "node_modules/@nomicfoundation/edr-linux-x64-gnu": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-gnu/-/edr-linux-x64-gnu-0.2.1.tgz", + "integrity": "sha512-OqabFY37vji6mYbLD9CvG28lja68czeVw58oWByIhFV3BpBu/cyP1oAbhzk3LieylujabS3Ekpvjw2Tkf0A9RQ==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "@nomicfoundation/ethereumjs-common": "4.0.4", - "@nomicfoundation/ethereumjs-statemanager": "2.0.4", - "@nomicfoundation/ethereumjs-tx": "5.0.4", - "@nomicfoundation/ethereumjs-util": "9.0.4", - "@types/debug": "^4.1.9", - "debug": "^4.3.3", - "ethereum-cryptography": "0.1.3", - "rustbn-wasm": "^0.2.0" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=18" + "node": ">= 18" } }, - "node_modules/@nomicfoundation/ethereumjs-rlp": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-5.0.4.tgz", - "integrity": "sha512-8H1S3s8F6QueOc/X92SdrA4RDenpiAEqMg5vJH99kcQaCy/a3Q6fgseo75mgWlbanGJXSlAPtnCeG9jvfTYXlw==", + "node_modules/@nomicfoundation/edr-linux-x64-musl": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-musl/-/edr-linux-x64-musl-0.2.1.tgz", + "integrity": "sha512-vHfFFK2EPISuQUQge+bdjXamb0EUjfl8srYSog1qfiwyLwLeuSbpyyFzDeITAgPpkkFuedTfJW553K0Hipspyg==", + "cpu": [ + "x64" + ], "dev": true, - "bin": { - "rlp": "bin/rlp.cjs" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=18" + "node": ">= 18" } }, - "node_modules/@nomicfoundation/ethereumjs-statemanager": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-statemanager/-/ethereumjs-statemanager-2.0.4.tgz", - "integrity": "sha512-HPDjeFrxw6llEi+BzqXkZ+KkvFnTOPczuHBtk21hRlDiuKuZz32dPzlhpRsDBGV1b5JTmRDUVqCS1lp3Gghw4Q==", + "node_modules/@nomicfoundation/edr-win32-arm64-msvc": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-win32-arm64-msvc/-/edr-win32-arm64-msvc-0.2.1.tgz", + "integrity": "sha512-K/mui67RCKxghbSyvhvW3rvyVN1pa9M1Q9APUx1PtWjSSdXDFpqEY1NYsv2syb47Ca8ObJwVMF+LvnB6GvhUOQ==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "@nomicfoundation/ethereumjs-common": "4.0.4", - "@nomicfoundation/ethereumjs-rlp": "5.0.4", - "@nomicfoundation/ethereumjs-trie": "6.0.4", - "@nomicfoundation/ethereumjs-util": "9.0.4", - "debug": "^4.3.3", - "ethereum-cryptography": "0.1.3", - "js-sdsl": "^4.1.4", - "lru-cache": "^10.0.0" - }, - "peerDependencies": { - "@nomicfoundation/ethereumjs-verkle": "0.0.2" - }, - "peerDependenciesMeta": { - "@nomicfoundation/ethereumjs-verkle": { - "optional": true - } + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" } }, - "node_modules/@nomicfoundation/ethereumjs-statemanager/node_modules/lru-cache": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", - "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", + "node_modules/@nomicfoundation/edr-win32-ia32-msvc": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-win32-ia32-msvc/-/edr-win32-ia32-msvc-0.2.1.tgz", + "integrity": "sha512-HHK0mXEtjvfjJrJlqcYgQCy3lZIXS1KNl2GaP8bwEIuEwx++XxXs/ThLjPepM1nhCGICij8IGy7p3KrkzRelsw==", + "cpu": [ + "ia32" + ], "dev": true, + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": "14 || >=16.14" + "node": ">= 18" } }, - "node_modules/@nomicfoundation/ethereumjs-trie": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-trie/-/ethereumjs-trie-6.0.4.tgz", - "integrity": "sha512-3nSwQiFMvr2VFe/aZUyinuohYvtytUqZCUCvIWcPJ/BwJH6oQdZRB42aNFBJ/8nAh2s3OcroWpBLskzW01mFKA==", + "node_modules/@nomicfoundation/edr-win32-x64-msvc": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-win32-x64-msvc/-/edr-win32-x64-msvc-0.2.1.tgz", + "integrity": "sha512-FY4eQJdj1/y8ST0RyQycx63yr+lvdYNnUkzgWf4X+vPH1lOhXae+L2NDcNCQlTDAfQcD6yz0bkBUkLrlJ8pTww==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "@nomicfoundation/ethereumjs-rlp": "5.0.4", - "@nomicfoundation/ethereumjs-util": "9.0.4", - "@types/readable-stream": "^2.3.13", - "ethereum-cryptography": "0.1.3", - "lru-cache": "^10.0.0", - "readable-stream": "^3.6.0" - }, + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=18" + "node": ">= 18" } }, - "node_modules/@nomicfoundation/ethereumjs-trie/node_modules/lru-cache": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", - "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", + "node_modules/@nomicfoundation/ethereumjs-common": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-4.0.4.tgz", + "integrity": "sha512-9Rgb658lcWsjiicr5GzNCjI1llow/7r0k50dLL95OJ+6iZJcVbi15r3Y0xh2cIO+zgX0WIHcbzIu6FeQf9KPrg==", "dev": true, - "engines": { - "node": "14 || >=16.14" + "dependencies": { + "@nomicfoundation/ethereumjs-util": "9.0.4" } }, - "node_modules/@nomicfoundation/ethereumjs-trie/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "node_modules/@nomicfoundation/ethereumjs-rlp": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-5.0.4.tgz", + "integrity": "sha512-8H1S3s8F6QueOc/X92SdrA4RDenpiAEqMg5vJH99kcQaCy/a3Q6fgseo75mgWlbanGJXSlAPtnCeG9jvfTYXlw==", "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "bin": { + "rlp": "bin/rlp.cjs" }, "engines": { - "node": ">= 6" + "node": ">=18" } }, "node_modules/@nomicfoundation/ethereumjs-tx": { @@ -4288,52 +4296,6 @@ } } }, - "node_modules/@nomicfoundation/ethereumjs-verkle": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-verkle/-/ethereumjs-verkle-0.0.2.tgz", - "integrity": "sha512-bjnfZElpYGK/XuuVRmLS3yDvr+cDs85D9oonZ0YUa5A3lgFgokWMp76zXrxX2jVQ0BfHaw12y860n1+iOi6yFQ==", - "dev": true, - "dependencies": { - "@nomicfoundation/ethereumjs-rlp": "5.0.4", - "@nomicfoundation/ethereumjs-util": "9.0.4", - "lru-cache": "^10.0.0", - "rust-verkle-wasm": "^0.0.1" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@nomicfoundation/ethereumjs-verkle/node_modules/lru-cache": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", - "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", - "dev": true, - "engines": { - "node": "14 || >=16.14" - } - }, - "node_modules/@nomicfoundation/ethereumjs-vm": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-vm/-/ethereumjs-vm-7.0.4.tgz", - "integrity": "sha512-gsA4IhmtWHI4BofKy3kio9W+dqZQs5Ji5mLjLYxHCkat+JQBUt5szjRKra2F9nGDJ2XcI/wWb0YWUFNgln4zRQ==", - "dev": true, - "dependencies": { - "@nomicfoundation/ethereumjs-block": "5.0.4", - "@nomicfoundation/ethereumjs-blockchain": "7.0.4", - "@nomicfoundation/ethereumjs-common": "4.0.4", - "@nomicfoundation/ethereumjs-evm": "2.0.4", - "@nomicfoundation/ethereumjs-rlp": "5.0.4", - "@nomicfoundation/ethereumjs-statemanager": "2.0.4", - "@nomicfoundation/ethereumjs-trie": "6.0.4", - "@nomicfoundation/ethereumjs-tx": "5.0.4", - "@nomicfoundation/ethereumjs-util": "9.0.4", - "debug": "^4.3.3", - "ethereum-cryptography": "0.1.3" - }, - "engines": { - "node": ">=18" - } - }, "node_modules/@nomicfoundation/hardhat-chai-matchers": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-chai-matchers/-/hardhat-chai-matchers-1.0.6.tgz", @@ -6019,6 +5981,11 @@ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true }, + "node_modules/@shikijs/core": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-1.1.7.tgz", + "integrity": "sha512-gTYLUIuD1UbZp/11qozD3fWpUTuMqPSf3svDMMrL0UmlGU7D9dPw/V1FonwAorCUJBltaaESxq90jrSjQyGixg==" + }, "node_modules/@sinclair/typebox": { "version": "0.27.8", "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", @@ -6502,9 +6469,9 @@ } }, "node_modules/@types/node": { - "version": "20.11.24", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.24.tgz", - "integrity": "sha512-Kza43ewS3xoLgCEpQrsT+xRo/EJej1y0kVYGiLFE1NEODXGzTfwiC6tXTLMQskn1X4/Rjlh0MQUvx9W+L9long==", + "version": "20.11.27", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.27.tgz", + "integrity": "sha512-qyUZfMnCg1KEz57r7pzFtSGt49f6RPkPBis3Vo4PbS7roQEDn22hiHzl/Lo1q4i4hDEgBJmBF/NTNg2XR0HbFg==", "dependencies": { "undici-types": "~5.26.4" } @@ -6536,9 +6503,9 @@ "integrity": "sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ==" }, "node_modules/@types/react": { - "version": "18.2.61", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.61.tgz", - "integrity": "sha512-NURTN0qNnJa7O/k4XUkEW2yfygA+NxS0V5h1+kp9jPwhzZy95q3ADoGMP0+JypMhrZBTTgjKAUlTctde1zzeQA==", + "version": "18.2.65", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.65.tgz", + "integrity": "sha512-98TsY0aW4jqx/3RqsUXwMDZSWR1Z4CUlJNue8ueS2/wcxZOsz4xmW1X8ieaWVRHcmmQM3R8xVA4XWB3dJnWwDQ==", "dependencies": { "@types/prop-types": "*", "@types/scheduler": "*", @@ -6554,22 +6521,6 @@ "@types/react": "*" } }, - "node_modules/@types/readable-stream": { - "version": "2.3.15", - "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-2.3.15.tgz", - "integrity": "sha512-oM5JSKQCcICF1wvGgmecmHldZ48OZamtMxcGGVICOJA8o8cahXC1zEVAif8iwoc5j8etxFaRFnf095+CDsuoFQ==", - "dev": true, - "dependencies": { - "@types/node": "*", - "safe-buffer": "~5.1.1" - } - }, - "node_modules/@types/readable-stream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, "node_modules/@types/sax": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/@types/sax/-/sax-1.2.7.tgz", @@ -7468,13 +7419,13 @@ } }, "node_modules/astro": { - "version": "4.4.8", - "resolved": "https://registry.npmjs.org/astro/-/astro-4.4.8.tgz", - "integrity": "sha512-jAAfzvgHOfuZmqJjnSDownVNuWKYmsGkrFqecEppHarMA/cZ5QIboW6GQHZ8eGZQdtYRCjON3h4i64XFZfuwSg==", + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/astro/-/astro-4.5.2.tgz", + "integrity": "sha512-Nq3GojlwXJ3XD047khraCWu/6aqGFfcyq7Q0blpTBSZnCz2s4Zri04PHvUkbKF7TK2UljkFuTXKP0CE4ZuJi9Q==", "dependencies": { - "@astrojs/compiler": "^2.5.3", - "@astrojs/internal-helpers": "0.2.1", - "@astrojs/markdown-remark": "4.2.1", + "@astrojs/compiler": "^2.7.0", + "@astrojs/internal-helpers": "0.3.0", + "@astrojs/markdown-remark": "4.3.0", "@astrojs/telemetry": "3.0.4", "@babel/core": "^7.23.3", "@babel/generator": "^7.23.3", @@ -7482,7 +7433,7 @@ "@babel/plugin-transform-react-jsx": "^7.22.5", "@babel/traverse": "^7.23.3", "@babel/types": "^7.23.3", - "@medv/finder": "^3.1.0", + "@shikijs/core": "^1.1.2", "@types/babel__core": "^7.20.4", "acorn": "^8.11.2", "aria-query": "^5.3.0", @@ -7524,8 +7475,7 @@ "rehype": "^13.0.1", "resolve": "^1.22.4", "semver": "^7.5.4", - "shikiji": "^0.9.19", - "shikiji-core": "^0.9.19", + "shiki": "^1.1.2", "string-width": "^7.0.0", "strip-ansi": "^7.1.0", "tsconfck": "^3.0.0", @@ -7535,7 +7485,8 @@ "vitefu": "^0.2.5", "which-pm": "^2.1.1", "yargs-parser": "^21.1.1", - "zod": "^3.22.4" + "zod": "^3.22.4", + "zod-to-json-schema": "^3.22.4" }, "bin": { "astro": "astro.js" @@ -8038,15 +7989,6 @@ "node": ">= 10.0.0" } }, - "node_modules/bigint-crypto-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/bigint-crypto-utils/-/bigint-crypto-utils-3.3.0.tgz", - "integrity": "sha512-jOTSb+drvEDxEq6OuUybOAv/xxoh3cuYRUIPyu8sSHQNKM303UQ2R1DAo45o1AkcIXw6fzbaFI1+xGGdaXs2lg==", - "dev": true, - "engines": { - "node": ">=14.0.0" - } - }, "node_modules/bignumber.js": { "version": "9.1.2", "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.2.tgz", @@ -12128,24 +12070,17 @@ } }, "node_modules/hardhat": { - "version": "2.20.1", - "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.20.1.tgz", - "integrity": "sha512-q75xDQiQtCZcTMBwjTovrXEU5ECr49baxr4/OBkIu/ULTPzlB20yk1dRWNmD2IFbAeAeXggaWvQAdpiScaHtPw==", + "version": "2.21.0", + "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.21.0.tgz", + "integrity": "sha512-8DlJAVJDEVHaV1sh9FLuKLLgCFv9EAJ+M+8IbjSIPgoeNo3ss5L1HgGBMfnI88c7OzMEZkdcuyGoobFeK3Orqw==", "dev": true, "dependencies": { "@ethersproject/abi": "^5.1.2", "@metamask/eth-sig-util": "^4.0.0", - "@nomicfoundation/ethereumjs-block": "5.0.4", - "@nomicfoundation/ethereumjs-blockchain": "7.0.4", + "@nomicfoundation/edr": "^0.2.0", "@nomicfoundation/ethereumjs-common": "4.0.4", - "@nomicfoundation/ethereumjs-evm": "2.0.4", - "@nomicfoundation/ethereumjs-rlp": "5.0.4", - "@nomicfoundation/ethereumjs-statemanager": "2.0.4", - "@nomicfoundation/ethereumjs-trie": "6.0.4", "@nomicfoundation/ethereumjs-tx": "5.0.4", "@nomicfoundation/ethereumjs-util": "9.0.4", - "@nomicfoundation/ethereumjs-verkle": "0.0.2", - "@nomicfoundation/ethereumjs-vm": "7.0.4", "@nomicfoundation/solidity-analyzer": "^0.1.0", "@sentry/node": "^5.18.1", "@types/bn.js": "^5.1.0", @@ -13221,6 +13156,26 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/hast-util-to-text": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/hast-util-to-text/-/hast-util-to-text-4.0.0.tgz", + "integrity": "sha512-EWiE1FSArNBPUo1cKWtzqgnuRQwEeQbQtnFJRYV1hb1BWDgrAlBU0ExptvZMM/KSA82cDpm2sFGf3Dmc5Mza3w==", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "hast-util-is-element": "^3.0.0", + "unist-util-find-after": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-text/node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==" + }, "node_modules/hast-util-whitespace": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", @@ -16127,16 +16082,6 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/js-sdsl": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.4.2.tgz", - "integrity": "sha512-dwXFwByc/ajSV6m5bcKAPwe4yDDF6D614pxmIi5odytzxRlwqF6nwoiCek80Ixc7Cvma5awClxrzFtxCQvcM8w==", - "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/js-sdsl" - } - }, "node_modules/js-sha256": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/js-sha256/-/js-sha256-0.9.0.tgz", @@ -22059,21 +22004,6 @@ "queue-microtask": "^1.2.2" } }, - "node_modules/rust-verkle-wasm": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/rust-verkle-wasm/-/rust-verkle-wasm-0.0.1.tgz", - "integrity": "sha512-BN6fiTsxcd2dCECz/cHtGTt9cdLJR925nh7iAuRcj8ymKw7OOaPmCneQZ7JePOJ/ia27TjEL91VdOi88Yf+mcA==", - "dev": true - }, - "node_modules/rustbn-wasm": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/rustbn-wasm/-/rustbn-wasm-0.2.0.tgz", - "integrity": "sha512-FThvYFNTqrEKGqXuseeg0zR7yROh/6U1617mCHF68OVqrN1tNKRN7Tdwy4WayPVsCmmK+eMxtIZX1qL6JxTkMg==", - "dev": true, - "dependencies": { - "@scure/base": "^1.1.1" - } - }, "node_modules/s.color": { "version": "0.0.15", "resolved": "https://registry.npmjs.org/s.color/-/s.color-0.0.15.tgz", @@ -22547,19 +22477,14 @@ "node": ">=4" } }, - "node_modules/shikiji": { - "version": "0.9.19", - "resolved": "https://registry.npmjs.org/shikiji/-/shikiji-0.9.19.tgz", - "integrity": "sha512-Kw2NHWktdcdypCj1GkKpXH4o6Vxz8B8TykPlPuLHOGSV8VkhoCLcFOH4k19K4LXAQYRQmxg+0X/eM+m2sLhAkg==", + "node_modules/shiki": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-1.1.7.tgz", + "integrity": "sha512-9kUTMjZtcPH3i7vHunA6EraTPpPOITYTdA5uMrvsJRexktqP0s7P3s9HVK80b4pP42FRVe03D7fT3NmJv2yYhw==", "dependencies": { - "shikiji-core": "0.9.19" + "@shikijs/core": "1.1.7" } }, - "node_modules/shikiji-core": { - "version": "0.9.19", - "resolved": "https://registry.npmjs.org/shikiji-core/-/shikiji-core-0.9.19.tgz", - "integrity": "sha512-AFJu/vcNT21t0e6YrfadZ+9q86gvPum6iywRyt1OtIPjPFe25RQnYJyxHQPMLKCCWA992TPxmEmbNcOZCAJclw==" - }, "node_modules/side-channel": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", @@ -24465,9 +24390,9 @@ "peer": true }, "node_modules/typescript": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", - "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", + "version": "5.4.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.2.tgz", + "integrity": "sha512-+2/g0Fds1ERlP6JsakQQDXjZdZMM+rqpamFZJEKh4kwTIn3iDkgKtby0CeNd5ATNZ4Ry1ax15TMx0W2V+miizQ==", "devOptional": true, "bin": { "tsc": "bin/tsc", @@ -24565,6 +24490,36 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/unist-util-find-after": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-find-after/-/unist-util-find-after-5.0.0.tgz", + "integrity": "sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-find-after/node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==" + }, + "node_modules/unist-util-find-after/node_modules/unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/unist-util-is": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz", @@ -25609,6 +25564,14 @@ "url": "https://github.com/sponsors/colinhacks" } }, + "node_modules/zod-to-json-schema": { + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.22.4.tgz", + "integrity": "sha512-2Ed5dJ+n/O3cU383xSY28cuVi0BCQhF8nYqWU5paEpl7fVdqdAmiLdqLyfblbNdfOFwFfi/mqU4O1pwc60iBhQ==", + "peerDependencies": { + "zod": "^3.22.4" + } + }, "node_modules/zwitch": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", diff --git a/package.json b/package.json index 7d1d8cd9f07..4aa3890f8a7 100644 --- a/package.json +++ b/package.json @@ -29,13 +29,13 @@ "typecheck": "tsc --noEmit" }, "dependencies": { - "@11ty/eleventy-fetch": "^4.0.0", + "@11ty/eleventy-fetch": "^4.0.1", "@astro-community/astro-embed-youtube": "^0.4.4", - "@astrojs/mdx": "^2.1.1", + "@astrojs/mdx": "^2.2.0", "@astrojs/partytown": "^2.0.4", "@astrojs/preact": "^3.1.1", "@astrojs/prism": "^3.0.0", - "@astrojs/react": "^3.0.10", + "@astrojs/react": "^3.1.0", "@astrojs/sitemap": "^3.1.1", "@chainlink/components": "^0.4.14", "@chainlink/contracts": "^1.0.0-beta.0", @@ -47,7 +47,7 @@ "@nanostores/preact": "^0.5.1", "@nanostores/react": "^0.7.2", "@openzeppelin/contracts": "^4.9.6", - "astro": "^4.4.8", + "astro": "^4.5.2", "bignumber.js": "^9.1.2", "clipboard": "^2.0.11", "dotenv": "^16.4.5", @@ -67,8 +67,8 @@ "@nomicfoundation/hardhat-toolbox": "^2.0.2", "@nomiclabs/hardhat-ethers": "^2.2.3", "@project-serum/anchor": "^0.26.0", - "@types/node": "^20.11.24", - "@types/react": "^18.2.61", + "@types/node": "^20.11.27", + "@types/react": "^18.2.65", "@typescript-eslint/eslint-plugin": "^5.62.0", "@typescript-eslint/parser": "^5.62.0", "eslint": "^8.57.0", @@ -78,7 +78,7 @@ "eslint-plugin-n": "^15.7.0", "eslint-plugin-prettier": "^4.2.1", "eslint-plugin-promise": "^6.1.1", - "hardhat": "^2.20.1", + "hardhat": "^2.21.0", "husky": "^8.0.3", "lint-staged": "^13.3.0", "prettier": "^2.8.8", @@ -89,7 +89,7 @@ "solhint-plugin-prettier": "^0.0.5", "ts-jest": "^29.1.2", "tsconfig-paths": "^4.2.0", - "typescript": "^5.3.3" + "typescript": "^5.4.2" }, "lint-staged": { "*.{css,md,mdx,yml,yaml,astro}": "prettier --write", From 0a51cd94ff4009f01f3c82a6fab3df78d3baa63f Mon Sep 17 00:00:00 2001 From: Dwight Lyle Date: Wed, 13 Mar 2024 12:17:51 -0600 Subject: [PATCH 11/21] Fix imports for new Data Streams contracts --- public/samples/Automation/StreamsWithError.sol | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/public/samples/Automation/StreamsWithError.sol b/public/samples/Automation/StreamsWithError.sol index 8c31b4ca4bd..d061e653b41 100644 --- a/public/samples/Automation/StreamsWithError.sol +++ b/public/samples/Automation/StreamsWithError.sol @@ -5,8 +5,8 @@ import {StreamsLookupCompatibleInterface} from "@chainlink/contracts/src/v0.8/au import {ILogAutomation, Log} from "@chainlink/contracts/src/v0.8/automation/interfaces/ILogAutomation.sol"; import {IRewardManager} from "@chainlink/contracts/src/v0.8/llo-feeds/interfaces/IRewardManager.sol"; import {IVerifierFeeManager} from "@chainlink/contracts/src/v0.8/llo-feeds/interfaces/IVerifierFeeManager.sol"; -import {IERC20} from "@chainlink/contracts/src/v0.8/vendor/openzeppelin-solidity/v4.8.0/contracts/interfaces/IERC20.sol"; -import {Common} from "@chainlink/contracts/src/v0.8/libraries/Common.sol"; +import {IERC20} from "@chainlink/contracts/src/v0.8/vendor/openzeppelin-solidity/v4.8.3/contracts/interfaces/IERC20.sol"; +import {Common} from "@chainlink/contracts/src/v0.8/llo-feeds/libraries/Common.sol"; /** * THIS IS AN EXAMPLE CONTRACT THAT USES UN-AUDITED CODE. From 8c2023c695c23558a601b0b38b3bd7c95b80f1a9 Mon Sep 17 00:00:00 2001 From: Dwight Lyle Date: Mon, 18 Mar 2024 17:59:56 -0600 Subject: [PATCH 12/21] Update contracts to beta.1 --- package-lock.json | 1880 ++++++++++++++++++++++++++++++++++++++++----- package.json | 2 +- 2 files changed, 1693 insertions(+), 189 deletions(-) diff --git a/package-lock.json b/package-lock.json index 79d465d9e71..2da6258dfbd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,7 +18,7 @@ "@astrojs/react": "^3.1.0", "@astrojs/sitemap": "^3.1.1", "@chainlink/components": "^0.4.14", - "@chainlink/contracts": "^1.0.0-beta.0", + "@chainlink/contracts": "^1.0.0-beta.1", "@chainlink/contracts-ccip": "^1.4.0", "@chainlink/design-system": "^0.1.50", "@chainlink/solana-sdk": "^0.2.2", @@ -1197,14 +1197,17 @@ } }, "node_modules/@chainlink/contracts": { - "version": "1.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@chainlink/contracts/-/contracts-1.0.0-beta.0.tgz", - "integrity": "sha512-YYd5ssgg9lZ8SvwTQtU07cEFkZulJWf+IZp5iG8tXswR0KmZ7VhD1xe44P1l1uCXMTujBSsoxED9GwL2xLXlGA==", + "version": "1.0.0-beta.1", + "resolved": "https://registry.npmjs.org/@chainlink/contracts/-/contracts-1.0.0-beta.1.tgz", + "integrity": "sha512-tlG3zJFaJ9SIfirE1g5ORHkKbEEeitC8CpGYTw9FgVwAC7ZOIKtH/EK1e0EqX4/pLyFZkltgB0AwHOOhowq9zA==", "dependencies": { + "@changesets/changelog-github": "^0.4.8", + "@changesets/cli": "~2.26.2", "@eth-optimism/contracts": "0.6.0", "@openzeppelin/contracts": "4.9.3", "@openzeppelin/contracts-upgradeable": "4.9.3", - "@scroll-tech/contracts": "0.1.0" + "@scroll-tech/contracts": "0.1.0", + "semver": "^7.5.4" } }, "node_modules/@chainlink/contracts-ccip": { @@ -1256,6 +1259,36 @@ "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.9.3.tgz", "integrity": "sha512-He3LieZ1pP2TNt5JbkPA4PNT9WC3gOTOlDcFGJW4Le4QKqwmiNJCRt44APfxMxvq7OugU/cqYuPcSBzOw38DAg==" }, + "node_modules/@chainlink/contracts/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@chainlink/contracts/node_modules/semver": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@chainlink/contracts/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, "node_modules/@chainlink/design-system": { "version": "0.1.50", "resolved": "https://registry.npmjs.org/@chainlink/design-system/-/design-system-0.1.50.tgz", @@ -1443,6 +1476,438 @@ "resolved": "https://registry.npmjs.org/superstruct/-/superstruct-0.14.2.tgz", "integrity": "sha512-nPewA6m9mR3d6k7WkZ8N8zpTWfenFH3q9pA2PkuiZxINr9DKB2+40wEQf0ixn8VaGuJ78AB6iWOtStI+/4FKZQ==" }, + "node_modules/@changesets/apply-release-plan": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/@changesets/apply-release-plan/-/apply-release-plan-6.1.4.tgz", + "integrity": "sha512-FMpKF1fRlJyCZVYHr3CbinpZZ+6MwvOtWUuO8uo+svcATEoc1zRDcj23pAurJ2TZ/uVz1wFHH6K3NlACy0PLew==", + "dependencies": { + "@babel/runtime": "^7.20.1", + "@changesets/config": "^2.3.1", + "@changesets/get-version-range-type": "^0.3.2", + "@changesets/git": "^2.0.0", + "@changesets/types": "^5.2.1", + "@manypkg/get-packages": "^1.1.3", + "detect-indent": "^6.0.0", + "fs-extra": "^7.0.1", + "lodash.startcase": "^4.4.0", + "outdent": "^0.5.0", + "prettier": "^2.7.1", + "resolve-from": "^5.0.0", + "semver": "^7.5.3" + } + }, + "node_modules/@changesets/apply-release-plan/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@changesets/apply-release-plan/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@changesets/apply-release-plan/node_modules/semver": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@changesets/apply-release-plan/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/@changesets/assemble-release-plan": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/@changesets/assemble-release-plan/-/assemble-release-plan-5.2.4.tgz", + "integrity": "sha512-xJkWX+1/CUaOUWTguXEbCDTyWJFECEhmdtbkjhn5GVBGxdP/JwaHBIU9sW3FR6gD07UwZ7ovpiPclQZs+j+mvg==", + "dependencies": { + "@babel/runtime": "^7.20.1", + "@changesets/errors": "^0.1.4", + "@changesets/get-dependents-graph": "^1.3.6", + "@changesets/types": "^5.2.1", + "@manypkg/get-packages": "^1.1.3", + "semver": "^7.5.3" + } + }, + "node_modules/@changesets/assemble-release-plan/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@changesets/assemble-release-plan/node_modules/semver": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@changesets/assemble-release-plan/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/@changesets/changelog-git": { + "version": "0.1.14", + "resolved": "https://registry.npmjs.org/@changesets/changelog-git/-/changelog-git-0.1.14.tgz", + "integrity": "sha512-+vRfnKtXVWsDDxGctOfzJsPhaCdXRYoe+KyWYoq5X/GqoISREiat0l3L8B0a453B2B4dfHGcZaGyowHbp9BSaA==", + "dependencies": { + "@changesets/types": "^5.2.1" + } + }, + "node_modules/@changesets/changelog-github": { + "version": "0.4.8", + "resolved": "https://registry.npmjs.org/@changesets/changelog-github/-/changelog-github-0.4.8.tgz", + "integrity": "sha512-jR1DHibkMAb5v/8ym77E4AMNWZKB5NPzw5a5Wtqm1JepAuIF+hrKp2u04NKM14oBZhHglkCfrla9uq8ORnK/dw==", + "dependencies": { + "@changesets/get-github-info": "^0.5.2", + "@changesets/types": "^5.2.1", + "dotenv": "^8.1.0" + } + }, + "node_modules/@changesets/changelog-github/node_modules/dotenv": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", + "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==", + "engines": { + "node": ">=10" + } + }, + "node_modules/@changesets/cli": { + "version": "2.26.2", + "resolved": "https://registry.npmjs.org/@changesets/cli/-/cli-2.26.2.tgz", + "integrity": "sha512-dnWrJTmRR8bCHikJHl9b9HW3gXACCehz4OasrXpMp7sx97ECuBGGNjJhjPhdZNCvMy9mn4BWdplI323IbqsRig==", + "dependencies": { + "@babel/runtime": "^7.20.1", + "@changesets/apply-release-plan": "^6.1.4", + "@changesets/assemble-release-plan": "^5.2.4", + "@changesets/changelog-git": "^0.1.14", + "@changesets/config": "^2.3.1", + "@changesets/errors": "^0.1.4", + "@changesets/get-dependents-graph": "^1.3.6", + "@changesets/get-release-plan": "^3.0.17", + "@changesets/git": "^2.0.0", + "@changesets/logger": "^0.0.5", + "@changesets/pre": "^1.0.14", + "@changesets/read": "^0.5.9", + "@changesets/types": "^5.2.1", + "@changesets/write": "^0.2.3", + "@manypkg/get-packages": "^1.1.3", + "@types/is-ci": "^3.0.0", + "@types/semver": "^7.5.0", + "ansi-colors": "^4.1.3", + "chalk": "^2.1.0", + "enquirer": "^2.3.0", + "external-editor": "^3.1.0", + "fs-extra": "^7.0.1", + "human-id": "^1.0.2", + "is-ci": "^3.0.1", + "meow": "^6.0.0", + "outdent": "^0.5.0", + "p-limit": "^2.2.0", + "preferred-pm": "^3.0.0", + "resolve-from": "^5.0.0", + "semver": "^7.5.3", + "spawndamnit": "^2.0.0", + "term-size": "^2.1.0", + "tty-table": "^4.1.5" + }, + "bin": { + "changeset": "bin.js" + } + }, + "node_modules/@changesets/cli/node_modules/is-ci": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", + "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", + "dependencies": { + "ci-info": "^3.2.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/@changesets/cli/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@changesets/cli/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@changesets/cli/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@changesets/cli/node_modules/semver": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@changesets/cli/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/@changesets/config": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@changesets/config/-/config-2.3.1.tgz", + "integrity": "sha512-PQXaJl82CfIXddUOppj4zWu+987GCw2M+eQcOepxN5s+kvnsZOwjEJO3DH9eVy+OP6Pg/KFEWdsECFEYTtbg6w==", + "dependencies": { + "@changesets/errors": "^0.1.4", + "@changesets/get-dependents-graph": "^1.3.6", + "@changesets/logger": "^0.0.5", + "@changesets/types": "^5.2.1", + "@manypkg/get-packages": "^1.1.3", + "fs-extra": "^7.0.1", + "micromatch": "^4.0.2" + } + }, + "node_modules/@changesets/errors": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@changesets/errors/-/errors-0.1.4.tgz", + "integrity": "sha512-HAcqPF7snsUJ/QzkWoKfRfXushHTu+K5KZLJWPb34s4eCZShIf8BFO3fwq6KU8+G7L5KdtN2BzQAXOSXEyiY9Q==", + "dependencies": { + "extendable-error": "^0.1.5" + } + }, + "node_modules/@changesets/get-dependents-graph": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/@changesets/get-dependents-graph/-/get-dependents-graph-1.3.6.tgz", + "integrity": "sha512-Q/sLgBANmkvUm09GgRsAvEtY3p1/5OCzgBE5vX3vgb5CvW0j7CEljocx5oPXeQSNph6FXulJlXV3Re/v3K3P3Q==", + "dependencies": { + "@changesets/types": "^5.2.1", + "@manypkg/get-packages": "^1.1.3", + "chalk": "^2.1.0", + "fs-extra": "^7.0.1", + "semver": "^7.5.3" + } + }, + "node_modules/@changesets/get-dependents-graph/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@changesets/get-dependents-graph/node_modules/semver": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@changesets/get-dependents-graph/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/@changesets/get-github-info": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/@changesets/get-github-info/-/get-github-info-0.5.2.tgz", + "integrity": "sha512-JppheLu7S114aEs157fOZDjFqUDpm7eHdq5E8SSR0gUBTEK0cNSHsrSR5a66xs0z3RWuo46QvA3vawp8BxDHvg==", + "dependencies": { + "dataloader": "^1.4.0", + "node-fetch": "^2.5.0" + } + }, + "node_modules/@changesets/get-release-plan": { + "version": "3.0.17", + "resolved": "https://registry.npmjs.org/@changesets/get-release-plan/-/get-release-plan-3.0.17.tgz", + "integrity": "sha512-6IwKTubNEgoOZwDontYc2x2cWXfr6IKxP3IhKeK+WjyD6y3M4Gl/jdQvBw+m/5zWILSOCAaGLu2ZF6Q+WiPniw==", + "dependencies": { + "@babel/runtime": "^7.20.1", + "@changesets/assemble-release-plan": "^5.2.4", + "@changesets/config": "^2.3.1", + "@changesets/pre": "^1.0.14", + "@changesets/read": "^0.5.9", + "@changesets/types": "^5.2.1", + "@manypkg/get-packages": "^1.1.3" + } + }, + "node_modules/@changesets/get-version-range-type": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@changesets/get-version-range-type/-/get-version-range-type-0.3.2.tgz", + "integrity": "sha512-SVqwYs5pULYjYT4op21F2pVbcrca4qA/bAA3FmFXKMN7Y+HcO8sbZUTx3TAy2VXulP2FACd1aC7f2nTuqSPbqg==" + }, + "node_modules/@changesets/git": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@changesets/git/-/git-2.0.0.tgz", + "integrity": "sha512-enUVEWbiqUTxqSnmesyJGWfzd51PY4H7mH9yUw0hPVpZBJ6tQZFMU3F3mT/t9OJ/GjyiM4770i+sehAn6ymx6A==", + "dependencies": { + "@babel/runtime": "^7.20.1", + "@changesets/errors": "^0.1.4", + "@changesets/types": "^5.2.1", + "@manypkg/get-packages": "^1.1.3", + "is-subdir": "^1.1.1", + "micromatch": "^4.0.2", + "spawndamnit": "^2.0.0" + } + }, + "node_modules/@changesets/logger": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/@changesets/logger/-/logger-0.0.5.tgz", + "integrity": "sha512-gJyZHomu8nASHpaANzc6bkQMO9gU/ib20lqew1rVx753FOxffnCrJlGIeQVxNWCqM+o6OOleCo/ivL8UAO5iFw==", + "dependencies": { + "chalk": "^2.1.0" + } + }, + "node_modules/@changesets/parse": { + "version": "0.3.16", + "resolved": "https://registry.npmjs.org/@changesets/parse/-/parse-0.3.16.tgz", + "integrity": "sha512-127JKNd167ayAuBjUggZBkmDS5fIKsthnr9jr6bdnuUljroiERW7FBTDNnNVyJ4l69PzR57pk6mXQdtJyBCJKg==", + "dependencies": { + "@changesets/types": "^5.2.1", + "js-yaml": "^3.13.1" + } + }, + "node_modules/@changesets/parse/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/@changesets/parse/node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@changesets/parse/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@changesets/pre": { + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/@changesets/pre/-/pre-1.0.14.tgz", + "integrity": "sha512-dTsHmxQWEQekHYHbg+M1mDVYFvegDh9j/kySNuDKdylwfMEevTeDouR7IfHNyVodxZXu17sXoJuf2D0vi55FHQ==", + "dependencies": { + "@babel/runtime": "^7.20.1", + "@changesets/errors": "^0.1.4", + "@changesets/types": "^5.2.1", + "@manypkg/get-packages": "^1.1.3", + "fs-extra": "^7.0.1" + } + }, + "node_modules/@changesets/read": { + "version": "0.5.9", + "resolved": "https://registry.npmjs.org/@changesets/read/-/read-0.5.9.tgz", + "integrity": "sha512-T8BJ6JS6j1gfO1HFq50kU3qawYxa4NTbI/ASNVVCBTsKquy2HYwM9r7ZnzkiMe8IEObAJtUVGSrePCOxAK2haQ==", + "dependencies": { + "@babel/runtime": "^7.20.1", + "@changesets/git": "^2.0.0", + "@changesets/logger": "^0.0.5", + "@changesets/parse": "^0.3.16", + "@changesets/types": "^5.2.1", + "chalk": "^2.1.0", + "fs-extra": "^7.0.1", + "p-filter": "^2.1.0" + } + }, + "node_modules/@changesets/types": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/@changesets/types/-/types-5.2.1.tgz", + "integrity": "sha512-myLfHbVOqaq9UtUKqR/nZA/OY7xFjQMdfgfqeZIBK4d0hA6pgxArvdv8M+6NUzzBsjWLOtvApv8YHr4qM+Kpfg==" + }, + "node_modules/@changesets/write": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@changesets/write/-/write-0.2.3.tgz", + "integrity": "sha512-Dbamr7AIMvslKnNYsLFafaVORx4H0pvCA2MHqgtNCySMe1blImEyAEOzDmcgKAkgz4+uwoLz7demIrX+JBr/Xw==", + "dependencies": { + "@babel/runtime": "^7.20.1", + "@changesets/types": "^5.2.1", + "fs-extra": "^7.0.1", + "human-id": "^1.0.2", + "prettier": "^2.7.1" + } + }, "node_modules/@cspotcode/source-map-support": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", @@ -3614,6 +4079,114 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, + "node_modules/@manypkg/find-root": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@manypkg/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==", + "dependencies": { + "@babel/runtime": "^7.5.5", + "@types/node": "^12.7.1", + "find-up": "^4.1.0", + "fs-extra": "^8.1.0" + } + }, + "node_modules/@manypkg/find-root/node_modules/@types/node": { + "version": "12.20.55", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", + "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==" + }, + "node_modules/@manypkg/find-root/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@manypkg/find-root/node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/@manypkg/find-root/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@manypkg/find-root/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@manypkg/find-root/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@manypkg/get-packages": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@manypkg/get-packages/-/get-packages-1.1.3.tgz", + "integrity": "sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==", + "dependencies": { + "@babel/runtime": "^7.5.5", + "@changesets/types": "^4.0.1", + "@manypkg/find-root": "^1.1.0", + "fs-extra": "^8.1.0", + "globby": "^11.0.0", + "read-yaml-file": "^1.1.0" + } + }, + "node_modules/@manypkg/get-packages/node_modules/@changesets/types": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@changesets/types/-/types-4.1.0.tgz", + "integrity": "sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==" + }, + "node_modules/@manypkg/get-packages/node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, "node_modules/@mdx-js/mdx": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-3.0.0.tgz", @@ -6386,6 +6959,14 @@ "resolved": "https://registry.npmjs.org/@types/hogan.js/-/hogan.js-3.0.5.tgz", "integrity": "sha512-/uRaY3HGPWyLqOyhgvW9Aa43BNnLZrNeQxl2p8wqId4UHMfPKolSB+U7BlZyO1ng7MkLnyEAItsBzCG0SDhqrA==" }, + "node_modules/@types/is-ci": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/is-ci/-/is-ci-3.0.4.tgz", + "integrity": "sha512-AkCYCmwlXeuH89DagDCzvCAyltI2v9lh3U3DqSg/GrBYoReAaWwxfXCqMx9UV5MajLZ4ZFwZzV4cABGIxk2XRw==", + "dependencies": { + "ci-info": "^3.1.0" + } + }, "node_modules/@types/istanbul-lib-coverage": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", @@ -6448,6 +7029,11 @@ "dev": true, "peer": true }, + "node_modules/@types/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==" + }, "node_modules/@types/mocha": { "version": "10.0.6", "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.6.tgz", @@ -6476,6 +7062,11 @@ "undici-types": "~5.26.4" } }, + "node_modules/@types/normalize-package-data": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", + "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==" + }, "node_modules/@types/pbkdf2": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.2.tgz", @@ -6546,8 +7137,7 @@ "node_modules/@types/semver": { "version": "7.5.6", "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.6.tgz", - "integrity": "sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==", - "dev": true + "integrity": "sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==" }, "node_modules/@types/stack-utils": { "version": "2.0.3", @@ -7105,7 +7695,6 @@ "version": "4.1.3", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", - "dev": true, "engines": { "node": ">=6" } @@ -7229,7 +7818,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", - "devOptional": true, "dependencies": { "call-bind": "^1.0.2", "is-array-buffer": "^3.0.1" @@ -7270,7 +7858,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, "engines": { "node": ">=8" } @@ -7327,7 +7914,6 @@ "version": "1.3.2", "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", - "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -7363,7 +7949,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz", "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==", - "devOptional": true, "dependencies": { "array-buffer-byte-length": "^1.0.0", "call-bind": "^1.0.2", @@ -7380,6 +7965,14 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/asap": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", @@ -7686,7 +8279,6 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", - "devOptional": true, "engines": { "node": ">= 0.4" }, @@ -7977,6 +8569,17 @@ "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==" }, + "node_modules/better-path-resolve": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/better-path-resolve/-/better-path-resolve-1.0.0.tgz", + "integrity": "sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==", + "dependencies": { + "is-windows": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/bigint-buffer": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/bigint-buffer/-/bigint-buffer-1.1.5.tgz", @@ -8170,6 +8773,14 @@ "node": ">=8" } }, + "node_modules/breakword": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/breakword/-/breakword-1.0.6.tgz", + "integrity": "sha512-yjxDAYyK/pBvws9H4xKYpLDpYKEH6CzrBPAuXq3x18I+c/2MkVtT3qAr7Oloi6Dss9qNhPVueAAVU1CSeNDIXw==", + "dependencies": { + "wcwidth": "^1.0.1" + } + }, "node_modules/brorand": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", @@ -8397,7 +9008,6 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", - "devOptional": true, "dependencies": { "function-bind": "^1.1.2", "get-intrinsic": "^1.2.1", @@ -8428,6 +9038,30 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/camelcase-keys": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", + "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", + "dependencies": { + "camelcase": "^5.3.1", + "map-obj": "^4.0.0", + "quick-lru": "^4.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/camelcase-keys/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "engines": { + "node": ">=6" + } + }, "node_modules/caniuse-lite": { "version": "1.0.30001591", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001591.tgz", @@ -8565,6 +9199,11 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" + }, "node_modules/charenc": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", @@ -8816,8 +9455,6 @@ "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dev": true, - "peer": true, "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", @@ -8831,8 +9468,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "peer": true, "engines": { "node": ">=8" } @@ -8841,8 +9476,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "peer": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -8857,8 +9490,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "peer": true, "dependencies": { "color-name": "~1.1.4" }, @@ -8869,23 +9500,17 @@ "node_modules/cliui/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "peer": true + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/cliui/node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "peer": true + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "node_modules/cliui/node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "peer": true, "engines": { "node": ">=8" } @@ -8894,8 +9519,6 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "peer": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -8909,8 +9532,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "peer": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -8922,8 +9543,6 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "peer": true, "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -8936,6 +9555,14 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "engines": { + "node": ">=0.8" + } + }, "node_modules/clsx": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.0.tgz", @@ -9423,6 +10050,40 @@ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" }, + "node_modules/csv": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/csv/-/csv-5.5.3.tgz", + "integrity": "sha512-QTaY0XjjhTQOdguARF0lGKm5/mEq9PD9/VhZZegHDIBq2tQwgNpHc3dneD4mGo2iJs+fTKv5Bp0fZ+BRuY3Z0g==", + "dependencies": { + "csv-generate": "^3.4.3", + "csv-parse": "^4.16.3", + "csv-stringify": "^5.6.5", + "stream-transform": "^2.1.3" + }, + "engines": { + "node": ">= 0.1.90" + } + }, + "node_modules/csv-generate": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/csv-generate/-/csv-generate-3.4.3.tgz", + "integrity": "sha512-w/T+rqR0vwvHqWs/1ZyMDWtHHSJaN06klRqJXBEpDJaM/+dZkso0OKh1VcuuYvK3XM53KysVNq8Ko/epCK8wOw==" + }, + "node_modules/csv-parse": { + "version": "4.16.3", + "resolved": "https://registry.npmjs.org/csv-parse/-/csv-parse-4.16.3.tgz", + "integrity": "sha512-cO1I/zmz4w2dcKHVvpCr7JVRu8/FymG5OEpmvsZYlccYolPBLoVGKUHgNoc4ZGkFeFlWGEDmMyBM+TTqRdW/wg==" + }, + "node_modules/csv-stringify": { + "version": "5.6.5", + "resolved": "https://registry.npmjs.org/csv-stringify/-/csv-stringify-5.6.5.tgz", + "integrity": "sha512-PjiQ659aQ+fUTQqSrd1XEDnOr52jh30RBurfzkscaE2tPaFsDH5wOAHJiw8XAHphRknCwMUE9KRayc4K/NbO8A==" + }, + "node_modules/dataloader": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/dataloader/-/dataloader-1.4.0.tgz", + "integrity": "sha512-68s5jYdlvasItOJnCuI2Q9s4q98g0pCyL3HrcKJu8KNugUl8ahgmZYg38ysLTgQjjXX3H8CJLkAvWrclWfcalw==" + }, "node_modules/death": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/death/-/death-1.1.0.tgz", @@ -9458,6 +10119,37 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/decamelize-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", + "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", + "dependencies": { + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/decamelize-keys/node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decamelize-keys/node_modules/map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/decode-named-character-reference": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz", @@ -9536,11 +10228,21 @@ "node": ">=0.10.0" } }, + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/define-data-property": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", - "devOptional": true, "dependencies": { "get-intrinsic": "^1.2.1", "gopd": "^1.0.1", @@ -9554,7 +10256,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", - "devOptional": true, "dependencies": { "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", @@ -9615,6 +10316,14 @@ "resolved": "https://registry.npmjs.org/detect-browser/-/detect-browser-5.3.0.tgz", "integrity": "sha512-53rsFbGdwMwlF7qvCt0ypLM5V5/Mbl0szB7GPN8y9NCcbknYOeVVXdrXEq+90IwAfrrzt6Hd+u2E2ntakICU8w==" }, + "node_modules/detect-indent": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", + "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", + "engines": { + "node": ">=8" + } + }, "node_modules/detect-libc": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.2.tgz", @@ -9717,7 +10426,6 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, "dependencies": { "path-type": "^4.0.0" }, @@ -9901,7 +10609,6 @@ "version": "2.4.1", "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", - "dev": true, "dependencies": { "ansi-colors": "^4.1.1", "strip-ansi": "^6.0.1" @@ -9914,7 +10621,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, "engines": { "node": ">=8" } @@ -9923,7 +10629,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -9955,7 +10660,6 @@ "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, "dependencies": { "is-arrayish": "^0.2.1" } @@ -9964,7 +10668,6 @@ "version": "1.22.3", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.3.tgz", "integrity": "sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==", - "devOptional": true, "dependencies": { "array-buffer-byte-length": "^1.0.0", "arraybuffer.prototype.slice": "^1.0.2", @@ -10031,7 +10734,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz", "integrity": "sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==", - "devOptional": true, "dependencies": { "get-intrinsic": "^1.2.2", "has-tostringtag": "^1.0.0", @@ -10045,7 +10747,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", - "devOptional": true, "dependencies": { "hasown": "^2.0.0" } @@ -10054,7 +10755,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "devOptional": true, "dependencies": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", @@ -11364,6 +12064,11 @@ "node": ">=0.10.0" } }, + "node_modules/extendable-error": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/extendable-error/-/extendable-error-0.1.7.tgz", + "integrity": "sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==" + }, "node_modules/extension-port-stream": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/extension-port-stream/-/extension-port-stream-2.1.1.tgz", @@ -11375,6 +12080,19 @@ "node": ">=12.0.0" } }, + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/eyes": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz", @@ -11609,7 +12327,6 @@ "version": "0.3.3", "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "devOptional": true, "dependencies": { "is-callable": "^1.1.3" } @@ -11645,7 +12362,6 @@ "version": "7.0.1", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "dev": true, "dependencies": { "graceful-fs": "^4.1.2", "jsonfile": "^4.0.0", @@ -11692,7 +12408,6 @@ "version": "1.1.6", "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", - "devOptional": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -11710,7 +12425,6 @@ "version": "1.2.3", "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "devOptional": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -11727,7 +12441,6 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, "engines": { "node": "6.* || 8.* || >= 10.*" } @@ -11755,7 +12468,6 @@ "version": "1.2.2", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", - "devOptional": true, "dependencies": { "function-bind": "^1.1.2", "has-proto": "^1.0.1", @@ -11809,7 +12521,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "devOptional": true, "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.1.1" @@ -11929,7 +12640,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", - "devOptional": true, "dependencies": { "define-properties": "^1.1.3" }, @@ -11944,7 +12654,6 @@ "version": "11.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, "dependencies": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", @@ -11972,7 +12681,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "devOptional": true, "dependencies": { "get-intrinsic": "^1.1.3" }, @@ -11985,6 +12693,11 @@ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" }, + "node_modules/grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==" + }, "node_modules/graphemer": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", @@ -12069,6 +12782,14 @@ "node": ">=0.10.0" } }, + "node_modules/hard-rejection": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", + "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", + "engines": { + "node": ">=6" + } + }, "node_modules/hardhat": { "version": "2.21.0", "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.21.0.tgz", @@ -12500,7 +13221,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "devOptional": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -12517,7 +13237,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", - "devOptional": true, "dependencies": { "get-intrinsic": "^1.2.2" }, @@ -12529,7 +13248,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", - "devOptional": true, "engines": { "node": ">= 0.4" }, @@ -12541,7 +13259,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "devOptional": true, "engines": { "node": ">= 0.4" }, @@ -12553,7 +13270,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "devOptional": true, "dependencies": { "has-symbols": "^1.0.2" }, @@ -13241,6 +13957,11 @@ "hulk": "bin/hulk" } }, + "node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==" + }, "node_modules/htm": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/htm/-/htm-3.1.1.tgz", @@ -13327,6 +14048,11 @@ "node": ">= 6" } }, + "node_modules/human-id": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/human-id/-/human-id-1.0.2.tgz", + "integrity": "sha512-UNopramDEhHJD+VR+ehk8rOslwSfByxPIZyJRfV739NDhN5LF1fa1MqnzKm2lGTQRjNrjK19Q5fhkgIfjlVUKw==" + }, "node_modules/human-signals": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", @@ -13362,7 +14088,6 @@ "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, "dependencies": { "safer-buffer": ">= 2.1.2 < 3" }, @@ -13393,7 +14118,6 @@ "version": "5.3.0", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", - "dev": true, "engines": { "node": ">= 4" } @@ -13462,7 +14186,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true, "engines": { "node": ">=8" } @@ -13504,7 +14227,6 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.6.tgz", "integrity": "sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==", - "devOptional": true, "dependencies": { "get-intrinsic": "^1.2.2", "hasown": "^2.0.0", @@ -13567,7 +14289,6 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", - "devOptional": true, "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.2.0", @@ -13580,14 +14301,12 @@ "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" }, "node_modules/is-bigint": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "devOptional": true, "dependencies": { "has-bigints": "^1.0.1" }, @@ -13610,7 +14329,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "devOptional": true, "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -13648,7 +14366,6 @@ "version": "1.2.7", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "devOptional": true, "engines": { "node": ">= 0.4" }, @@ -13687,7 +14404,6 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "devOptional": true, "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -13821,7 +14537,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", - "devOptional": true, "engines": { "node": ">= 0.4" }, @@ -13841,7 +14556,6 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "devOptional": true, "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -13884,7 +14598,6 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "devOptional": true, "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -13900,7 +14613,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "devOptional": true, "dependencies": { "call-bind": "^1.0.2" }, @@ -13923,7 +14635,6 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "devOptional": true, "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -13934,11 +14645,21 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-subdir": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-subdir/-/is-subdir-1.2.0.tgz", + "integrity": "sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==", + "dependencies": { + "better-path-resolve": "1.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/is-symbol": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "devOptional": true, "dependencies": { "has-symbols": "^1.0.2" }, @@ -13953,7 +14674,6 @@ "version": "1.1.12", "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", - "devOptional": true, "dependencies": { "which-typed-array": "^1.1.11" }, @@ -13980,7 +14700,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "devOptional": true, "dependencies": { "call-bind": "^1.0.2" }, @@ -13988,6 +14707,14 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-wsl": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", @@ -16127,8 +16854,7 @@ "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" }, "node_modules/json-rpc-engine": { "version": "6.1.0", @@ -16195,7 +16921,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, "optionalDependencies": { "graceful-fs": "^4.1.6" } @@ -16343,8 +17068,7 @@ "node_modules/lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" }, "node_modules/lint-staged": { "version": "13.3.0", @@ -16584,6 +17308,11 @@ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, + "node_modules/lodash.startcase": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.startcase/-/lodash.startcase-4.4.0.tgz", + "integrity": "sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==" + }, "node_modules/lodash.truncate": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", @@ -16851,6 +17580,17 @@ "tmpl": "1.0.5" } }, + "node_modules/map-obj": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", + "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/markdown-extensions": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/markdown-extensions/-/markdown-extensions-2.0.0.tgz", @@ -17391,6 +18131,69 @@ "node": ">= 0.10.0" } }, + "node_modules/meow": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/meow/-/meow-6.1.1.tgz", + "integrity": "sha512-3YffViIt2QWgTy6Pale5QpopX/IvU3LPL03jOTqp6pGj3VjesdO/U8CuHMKpnQr4shCNCM5fd5XFFvIIl6JBHg==", + "dependencies": { + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "^4.0.2", + "normalize-package-data": "^2.5.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.13.1", + "yargs-parser": "^18.1.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/meow/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/meow/node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/meow/node_modules/type-fest": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", + "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/meow/node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", @@ -18300,6 +19103,14 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "engines": { + "node": ">=4" + } + }, "node_modules/minimalistic-assert": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", @@ -18329,6 +19140,35 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/minimist-options": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", + "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", + "dependencies": { + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0", + "kind-of": "^6.0.3" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/minimist-options/node_modules/is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mixme": { + "version": "0.5.10", + "resolved": "https://registry.npmjs.org/mixme/-/mixme-0.5.10.tgz", + "integrity": "sha512-5H76ANWinB1H3twpJ6JY8uvAtpmFvHNArpilJAjXRKXSDDLPIMoZArw5SH0q9z+lLs8IrMw7Q2VWpWimFKFT1Q==", + "engines": { + "node": ">= 8.0.0" + } + }, "node_modules/mkdirp": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.0.tgz", @@ -18880,6 +19720,25 @@ "node": "*" } }, + "node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/normalize-package-data/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "bin": { + "semver": "bin/semver" + } + }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -18963,7 +19822,6 @@ "version": "1.13.1", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", - "devOptional": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -18972,7 +19830,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "devOptional": true, "engines": { "node": ">= 0.4" } @@ -18981,7 +19838,6 @@ "version": "4.1.5", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", - "devOptional": true, "dependencies": { "call-bind": "^1.0.5", "define-properties": "^1.2.1", @@ -19200,6 +20056,30 @@ "node": ">=0.10.0" } }, + "node_modules/outdent": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/outdent/-/outdent-0.5.0.tgz", + "integrity": "sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==" + }, + "node_modules/p-filter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-filter/-/p-filter-2.1.0.tgz", + "integrity": "sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==", + "dependencies": { + "p-map": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-filter/node_modules/p-map": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", + "engines": { + "node": ">=6" + } + }, "node_modules/p-finally": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", @@ -19357,7 +20237,6 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", @@ -19647,7 +20526,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, "engines": { "node": ">=8" } @@ -20019,7 +20897,6 @@ "version": "2.8.8", "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", - "dev": true, "bin": { "prettier": "bin-prettier.js" }, @@ -20239,6 +21116,11 @@ "dev": true, "peer": true }, + "node_modules/pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==" + }, "node_modules/pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", @@ -20310,6 +21192,14 @@ "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==", "optional": true }, + "node_modules/quick-lru": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", + "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", + "engines": { + "node": ">=8" + } + }, "node_modules/randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", @@ -20561,41 +21451,189 @@ } } }, - "node_modules/react-style-singleton": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.1.tgz", - "integrity": "sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==", + "node_modules/react-style-singleton": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.1.tgz", + "integrity": "sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==", + "dependencies": { + "get-nonce": "^1.0.0", + "invariant": "^2.2.4", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-transition-group": { + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", + "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", + "dependencies": { + "@babel/runtime": "^7.5.5", + "dom-helpers": "^5.0.1", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2" + }, + "peerDependencies": { + "react": ">=16.6.0", + "react-dom": ">=16.6.0" + } + }, + "node_modules/read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dependencies": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dependencies": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg/node_modules/type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/read-yaml-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-yaml-file/-/read-yaml-file-1.1.0.tgz", + "integrity": "sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==", + "dependencies": { + "graceful-fs": "^4.1.5", + "js-yaml": "^3.6.1", + "pify": "^4.0.1", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/read-yaml-file/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dependencies": { - "get-nonce": "^1.0.0", - "invariant": "^2.2.4", - "tslib": "^2.0.0" + "sprintf-js": "~1.0.2" + } + }, + "node_modules/read-yaml-file/node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" }, "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "node": ">=4" } }, - "node_modules/react-transition-group": { - "version": "4.4.5", - "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", - "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", + "node_modules/read-yaml-file/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dependencies": { - "@babel/runtime": "^7.5.5", - "dom-helpers": "^5.0.1", - "loose-envify": "^1.4.0", - "prop-types": "^15.6.2" + "argparse": "^1.0.7", + "esprima": "^4.0.0" }, - "peerDependencies": { - "react": ">=16.6.0", - "react-dom": ">=16.6.0" + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/read-yaml-file/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "engines": { + "node": ">=4" } }, "node_modules/readable-stream": { @@ -20654,6 +21692,18 @@ "node": ">=6.0.0" } }, + "node_modules/redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dependencies": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/reduce-flatten": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz", @@ -20673,7 +21723,6 @@ "version": "1.5.1", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==", - "devOptional": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -21679,7 +22728,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -21693,6 +22741,11 @@ "node": ">=0.10.0" } }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" + }, "node_modules/resolve": { "version": "1.22.8", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", @@ -22014,7 +23067,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz", "integrity": "sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==", - "devOptional": true, "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.2.1", @@ -22031,8 +23083,7 @@ "node_modules/safe-array-concat/node_modules/isarray": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "devOptional": true + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" }, "node_modules/safe-buffer": { "version": "5.2.1", @@ -22057,7 +23108,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", - "devOptional": true, "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.1.3", @@ -22070,8 +23120,7 @@ "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "node_modules/sass-formatter": { "version": "0.7.8", @@ -22310,11 +23359,15 @@ "randombytes": "^2.1.0" } }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" + }, "node_modules/set-function-length": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==", - "devOptional": true, "dependencies": { "define-data-property": "^1.1.1", "get-intrinsic": "^1.2.1", @@ -22329,7 +23382,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", - "devOptional": true, "dependencies": { "define-data-property": "^1.0.1", "functions-have-names": "^1.2.3", @@ -22489,7 +23541,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "devOptional": true, "dependencies": { "call-bind": "^1.0.0", "get-intrinsic": "^1.0.2", @@ -22589,50 +23640,268 @@ "sitemap": "dist/cli.js" }, "engines": { - "node": ">=12.0.0", - "npm": ">=5.6.0" + "node": ">=12.0.0", + "npm": ">=5.6.0" + } + }, + "node_modules/sitemap/node_modules/@types/node": { + "version": "17.0.45", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", + "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==" + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/slice-ansi": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", + "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.0.0", + "is-fullwidth-code-point": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/smartwrap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/smartwrap/-/smartwrap-2.0.2.tgz", + "integrity": "sha512-vCsKNQxb7PnCNd2wY1WClWifAc2lwqsG8OaswpJkVJsvMGcnEntdTCDajZCkk93Ay1U3t/9puJmb525Rg5MZBA==", + "dependencies": { + "array.prototype.flat": "^1.2.3", + "breakword": "^1.0.5", + "grapheme-splitter": "^1.0.4", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1", + "yargs": "^15.1.0" + }, + "bin": { + "smartwrap": "src/terminal-adapter.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/smartwrap/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/smartwrap/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/smartwrap/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/smartwrap/node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/smartwrap/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/smartwrap/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/smartwrap/node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/smartwrap/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/smartwrap/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/smartwrap/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/smartwrap/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/smartwrap/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/smartwrap/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/smartwrap/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/smartwrap/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" } }, - "node_modules/sitemap/node_modules/@types/node": { - "version": "17.0.45", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", - "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==" - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, + "node_modules/smartwrap/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, "engines": { "node": ">=8" } }, - "node_modules/slice-ansi": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", - "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", - "dev": true, + "node_modules/smartwrap/node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" + }, + "node_modules/smartwrap/node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", "dependencies": { - "ansi-styles": "^6.0.0", - "is-fullwidth-code-point": "^4.0.0" + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" + "node": ">=8" } }, - "node_modules/slice-ansi/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true, - "engines": { - "node": ">=12" + "node_modules/smartwrap/node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "engines": { + "node": ">=6" } }, "node_modules/snake-case": { @@ -23123,6 +24392,102 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/spawndamnit": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/spawndamnit/-/spawndamnit-2.0.0.tgz", + "integrity": "sha512-j4JKEcncSjFlqIwU5L/rp2N5SIPsdxaRsIv678+TZxZ0SRDJTm8JrxJMjE/XuiEZNEir3S8l0Fa3Ke339WI4qA==", + "dependencies": { + "cross-spawn": "^5.1.0", + "signal-exit": "^3.0.2" + } + }, + "node_modules/spawndamnit/node_modules/cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==", + "dependencies": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "node_modules/spawndamnit/node_modules/lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dependencies": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "node_modules/spawndamnit/node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/spawndamnit/node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/spawndamnit/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + }, + "node_modules/spawndamnit/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/spawndamnit/node_modules/yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==" + }, + "node_modules/spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==" + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.17", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.17.tgz", + "integrity": "sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg==" + }, "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", @@ -23195,6 +24560,14 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/stream-transform": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/stream-transform/-/stream-transform-2.1.3.tgz", + "integrity": "sha512-9GHUiM5hMiCi6Y03jD2ARC1ettBXkQBoQAe7nJsPknnI0ow10aXjTnew8QtYQmLjzn974BnmWEAJgCY6ZP1DeQ==", + "dependencies": { + "mixme": "^0.5.1" + } + }, "node_modules/streamsearch": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", @@ -23299,7 +24672,6 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", - "devOptional": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -23316,7 +24688,6 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", - "devOptional": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -23330,7 +24701,6 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", - "devOptional": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -23409,6 +24779,17 @@ "npm": ">=3" } }, + "node_modules/strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dependencies": { + "min-indent": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -23736,6 +25117,17 @@ "streamx": "^2.15.0" } }, + "node_modules/term-size": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz", + "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/test-exclude": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", @@ -23882,6 +25274,14 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/trim-newlines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", + "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", + "engines": { + "node": ">=8" + } + }, "node_modules/trough": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz", @@ -24204,6 +25604,109 @@ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true }, + "node_modules/tty-table": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/tty-table/-/tty-table-4.2.3.tgz", + "integrity": "sha512-Fs15mu0vGzCrj8fmJNP7Ynxt5J7praPXqFN0leZeZBXJwkMxv9cb2D454k1ltrtUSJbZ4yH4e0CynsHLxmUfFA==", + "dependencies": { + "chalk": "^4.1.2", + "csv": "^5.5.3", + "kleur": "^4.1.5", + "smartwrap": "^2.0.2", + "strip-ansi": "^6.0.1", + "wcwidth": "^1.0.1", + "yargs": "^17.7.1" + }, + "bin": { + "tty-table": "adapters/terminal-adapter.js" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/tty-table/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/tty-table/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/tty-table/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/tty-table/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/tty-table/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/tty-table/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/tty-table/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tty-table/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", @@ -24321,7 +25824,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", - "devOptional": true, "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.2.1", @@ -24335,7 +25837,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", - "devOptional": true, "dependencies": { "call-bind": "^1.0.2", "for-each": "^0.3.3", @@ -24353,7 +25854,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", - "devOptional": true, "dependencies": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", @@ -24372,7 +25872,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", - "devOptional": true, "dependencies": { "call-bind": "^1.0.2", "for-each": "^0.3.3", @@ -24435,7 +25934,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "devOptional": true, "dependencies": { "call-bind": "^1.0.2", "has-bigints": "^1.0.2", @@ -24708,7 +26206,6 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true, "engines": { "node": ">= 4.0.0" } @@ -24864,6 +26361,15 @@ "node": ">=10.12.0" } }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, "node_modules/vfile": { "version": "5.3.7", "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.7.tgz", @@ -25078,6 +26584,14 @@ "loose-envify": "^1.0.0" } }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dependencies": { + "defaults": "^1.0.3" + } + }, "node_modules/web-namespaces": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz", @@ -25171,7 +26685,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "devOptional": true, "dependencies": { "is-bigint": "^1.0.1", "is-boolean-object": "^1.1.0", @@ -25183,6 +26696,11 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/which-module": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", + "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==" + }, "node_modules/which-pm": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/which-pm/-/which-pm-2.1.1.tgz", @@ -25207,7 +26725,6 @@ "version": "1.1.13", "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz", "integrity": "sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==", - "devOptional": true, "dependencies": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.4", @@ -25410,7 +26927,6 @@ "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, "engines": { "node": ">=10" } @@ -25433,8 +26949,6 @@ "version": "17.7.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dev": true, - "peer": true, "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -25484,8 +26998,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "peer": true, "engines": { "node": ">=8" } @@ -25493,16 +27005,12 @@ "node_modules/yargs/node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "peer": true + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "node_modules/yargs/node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "peer": true, "engines": { "node": ">=8" } @@ -25511,8 +27019,6 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "peer": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -25526,8 +27032,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "peer": true, "dependencies": { "ansi-regex": "^5.0.1" }, diff --git a/package.json b/package.json index 4aa3890f8a7..dbaeb275379 100644 --- a/package.json +++ b/package.json @@ -38,7 +38,7 @@ "@astrojs/react": "^3.1.0", "@astrojs/sitemap": "^3.1.1", "@chainlink/components": "^0.4.14", - "@chainlink/contracts": "^1.0.0-beta.0", + "@chainlink/contracts": "^1.0.0-beta.1", "@chainlink/contracts-ccip": "^1.4.0", "@chainlink/design-system": "^0.1.50", "@chainlink/solana-sdk": "^0.2.2", From 364a0e7f84e9f4cf598158e802e18eb92f6aa20c Mon Sep 17 00:00:00 2001 From: Dwight Lyle Date: Mon, 18 Mar 2024 18:02:11 -0600 Subject: [PATCH 13/21] Update other packages --- package-lock.json | 122 +++++++++++++++++++++++----------------------- package.json | 10 ++-- 2 files changed, 65 insertions(+), 67 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2da6258dfbd..dbbe31a64ec 100644 --- a/package-lock.json +++ b/package-lock.json @@ -27,7 +27,7 @@ "@nanostores/preact": "^0.5.1", "@nanostores/react": "^0.7.2", "@openzeppelin/contracts": "^4.9.6", - "astro": "^4.5.2", + "astro": "^4.5.6", "bignumber.js": "^9.1.2", "clipboard": "^2.0.11", "dotenv": "^16.4.5", @@ -36,7 +36,7 @@ "github-slugger": "^2.0.0", "lodash": "^4.17.21", "nanostores": "^0.9.5", - "preact": "^10.19.6", + "preact": "^10.19.7", "react-instantsearch": "^7.7.0", "rehype-autolink-headings": "^7.1.0", "rehype-slug": "^6.0.0", @@ -47,8 +47,8 @@ "@nomicfoundation/hardhat-toolbox": "^2.0.2", "@nomiclabs/hardhat-ethers": "^2.2.3", "@project-serum/anchor": "^0.26.0", - "@types/node": "^20.11.27", - "@types/react": "^18.2.65", + "@types/node": "^20.11.29", + "@types/react": "^18.2.67", "@typescript-eslint/eslint-plugin": "^5.62.0", "@typescript-eslint/parser": "^5.62.0", "eslint": "^8.57.0", @@ -58,7 +58,7 @@ "eslint-plugin-n": "^15.7.0", "eslint-plugin-prettier": "^4.2.1", "eslint-plugin-promise": "^6.1.1", - "hardhat": "^2.21.0", + "hardhat": "^2.22.1", "husky": "^8.0.3", "lint-staged": "^13.3.0", "prettier": "^2.8.8", @@ -4641,29 +4641,29 @@ } }, "node_modules/@nomicfoundation/edr": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr/-/edr-0.2.1.tgz", - "integrity": "sha512-Dleau3ItHJh2n85G2J6AIPBoLgu/mOWkmrh26z3VsJE2tp/e00hUk/dqz85ncsVcBYEc6/YOn/DomWu0wSF9tQ==", + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr/-/edr-0.3.2.tgz", + "integrity": "sha512-HGWtjibAK1mo4I2A7nJ/fXqe/J9G54OrSPJnnkY2K8TiXotYLShGd9GvHkae3PuFjTJKm6ZgBy7tveJj5yrCfw==", "dev": true, "engines": { "node": ">= 18" }, "optionalDependencies": { - "@nomicfoundation/edr-darwin-arm64": "0.2.1", - "@nomicfoundation/edr-darwin-x64": "0.2.1", - "@nomicfoundation/edr-linux-arm64-gnu": "0.2.1", - "@nomicfoundation/edr-linux-arm64-musl": "0.2.1", - "@nomicfoundation/edr-linux-x64-gnu": "0.2.1", - "@nomicfoundation/edr-linux-x64-musl": "0.2.1", - "@nomicfoundation/edr-win32-arm64-msvc": "0.2.1", - "@nomicfoundation/edr-win32-ia32-msvc": "0.2.1", - "@nomicfoundation/edr-win32-x64-msvc": "0.2.1" + "@nomicfoundation/edr-darwin-arm64": "0.3.2", + "@nomicfoundation/edr-darwin-x64": "0.3.2", + "@nomicfoundation/edr-linux-arm64-gnu": "0.3.2", + "@nomicfoundation/edr-linux-arm64-musl": "0.3.2", + "@nomicfoundation/edr-linux-x64-gnu": "0.3.2", + "@nomicfoundation/edr-linux-x64-musl": "0.3.2", + "@nomicfoundation/edr-win32-arm64-msvc": "0.3.2", + "@nomicfoundation/edr-win32-ia32-msvc": "0.3.2", + "@nomicfoundation/edr-win32-x64-msvc": "0.3.2" } }, "node_modules/@nomicfoundation/edr-darwin-arm64": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-darwin-arm64/-/edr-darwin-arm64-0.2.1.tgz", - "integrity": "sha512-aMYaRaZVQ/TmyNJIoXf1bU4k0zfinaL9Sy1day4yGlL6eiQPFfRGj9W6TZaZIoYG0XTx/mQWD7dkXJ7LdrleJA==", + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-darwin-arm64/-/edr-darwin-arm64-0.3.2.tgz", + "integrity": "sha512-l6wfSBUUbGJiCENT6272CDI8yoMuf0sZH56H5qz3HnAyVzenkOvmzyF6/lar54m986kdAQqWls4cLvDxiOuLxg==", "cpu": [ "arm64" ], @@ -4677,9 +4677,9 @@ } }, "node_modules/@nomicfoundation/edr-darwin-x64": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-darwin-x64/-/edr-darwin-x64-0.2.1.tgz", - "integrity": "sha512-ma0SLcjHm5L3nPHcKFJB0jv/gKGSKaxr5Z65rurX/eaYUQJ7YGMsb8er9bSCo9rjzOtxf4FoPj3grL3zGpOj8A==", + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-darwin-x64/-/edr-darwin-x64-0.3.2.tgz", + "integrity": "sha512-OboExL7vEw+TRJQl3KkaEKU4K7PTdZPTInZ0fxMAtOpcWp7EKR+dQo68vc/iAOusB3xszHKxt7t+WpisItfdcg==", "cpu": [ "x64" ], @@ -4693,9 +4693,9 @@ } }, "node_modules/@nomicfoundation/edr-linux-arm64-gnu": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-gnu/-/edr-linux-arm64-gnu-0.2.1.tgz", - "integrity": "sha512-NX3G4pBhRitWrjSGY3HTyCq3wKSm5YqrKVOCNQGl9/jcjSovqxlgzFMiTx4YZCzGntfJ/1om9AI84OWxYJjoDw==", + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-gnu/-/edr-linux-arm64-gnu-0.3.2.tgz", + "integrity": "sha512-xtEK+1eg++3pHi6405NDXd80S3CGOFEGQIyVGCwjMGQFOLSzBGGCsrb/0GB4J19zd1o/8ftCd/HjZcbVAWWTLQ==", "cpu": [ "arm64" ], @@ -4709,9 +4709,9 @@ } }, "node_modules/@nomicfoundation/edr-linux-arm64-musl": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-musl/-/edr-linux-arm64-musl-0.2.1.tgz", - "integrity": "sha512-gdQ3QHkt9XRkdtOGQ8fMwS11MXdjLeZgLrqoial4V4qtMaamIMMhVczK+VEvUhD8p7G4BVmp6kmkvcsthmndmw==", + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-musl/-/edr-linux-arm64-musl-0.3.2.tgz", + "integrity": "sha512-3cIsskJOXQ1yEVsImmCacY7O03tUTiWrmd54F05PnPFrDLkjbzodQ3b2gUWzfbzUZWl67ZTJd1CvVSzpe7XGzw==", "cpu": [ "arm64" ], @@ -4725,9 +4725,9 @@ } }, "node_modules/@nomicfoundation/edr-linux-x64-gnu": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-gnu/-/edr-linux-x64-gnu-0.2.1.tgz", - "integrity": "sha512-OqabFY37vji6mYbLD9CvG28lja68czeVw58oWByIhFV3BpBu/cyP1oAbhzk3LieylujabS3Ekpvjw2Tkf0A9RQ==", + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-gnu/-/edr-linux-x64-gnu-0.3.2.tgz", + "integrity": "sha512-ouPdphHNsyO7wqwa4hwahC5WqBglK/fIvMmhR/SXNZ9qruIpsA8ZZKIURaHMOv/2h2BbNGcyTX9uEk6+5rK/MQ==", "cpu": [ "x64" ], @@ -4741,9 +4741,9 @@ } }, "node_modules/@nomicfoundation/edr-linux-x64-musl": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-musl/-/edr-linux-x64-musl-0.2.1.tgz", - "integrity": "sha512-vHfFFK2EPISuQUQge+bdjXamb0EUjfl8srYSog1qfiwyLwLeuSbpyyFzDeITAgPpkkFuedTfJW553K0Hipspyg==", + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-musl/-/edr-linux-x64-musl-0.3.2.tgz", + "integrity": "sha512-sRhwhiPbkpJMOUwXW1FZw9ks6xWyQhIhM0E8o3TXEXKSPKTE6whQLEk1R37iFITaI36vb6rSwLKTU1cb32gCoA==", "cpu": [ "x64" ], @@ -4757,9 +4757,9 @@ } }, "node_modules/@nomicfoundation/edr-win32-arm64-msvc": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-win32-arm64-msvc/-/edr-win32-arm64-msvc-0.2.1.tgz", - "integrity": "sha512-K/mui67RCKxghbSyvhvW3rvyVN1pa9M1Q9APUx1PtWjSSdXDFpqEY1NYsv2syb47Ca8ObJwVMF+LvnB6GvhUOQ==", + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-win32-arm64-msvc/-/edr-win32-arm64-msvc-0.3.2.tgz", + "integrity": "sha512-IEwVealKfumu1HSSnama26yPuQC/uthRPK5IWtFsQUOGwOXaS1r9Bu7cGYH2jBHl3IT/JbxD4xzPq/2pM9uK0A==", "cpu": [ "arm64" ], @@ -4773,9 +4773,9 @@ } }, "node_modules/@nomicfoundation/edr-win32-ia32-msvc": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-win32-ia32-msvc/-/edr-win32-ia32-msvc-0.2.1.tgz", - "integrity": "sha512-HHK0mXEtjvfjJrJlqcYgQCy3lZIXS1KNl2GaP8bwEIuEwx++XxXs/ThLjPepM1nhCGICij8IGy7p3KrkzRelsw==", + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-win32-ia32-msvc/-/edr-win32-ia32-msvc-0.3.2.tgz", + "integrity": "sha512-jYMnf6SFgguqROswwdsjJ1wvneD/5c16pVu9OD4DxNqhKNP5bHEw6L2N4DcJ89tpXMpJ6AlOpc0QuwzddiZ3tA==", "cpu": [ "ia32" ], @@ -4789,9 +4789,9 @@ } }, "node_modules/@nomicfoundation/edr-win32-x64-msvc": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-win32-x64-msvc/-/edr-win32-x64-msvc-0.2.1.tgz", - "integrity": "sha512-FY4eQJdj1/y8ST0RyQycx63yr+lvdYNnUkzgWf4X+vPH1lOhXae+L2NDcNCQlTDAfQcD6yz0bkBUkLrlJ8pTww==", + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-win32-x64-msvc/-/edr-win32-x64-msvc-0.3.2.tgz", + "integrity": "sha512-Byn4QuWczRy/DUUQM3WjglgX/jGVUURVFaUsmIhnGg//MPlCLawubBGRqsrMuvaYedlIIJ4I2rgKvZlxdgHrqg==", "cpu": [ "x64" ], @@ -7055,9 +7055,9 @@ } }, "node_modules/@types/node": { - "version": "20.11.27", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.27.tgz", - "integrity": "sha512-qyUZfMnCg1KEz57r7pzFtSGt49f6RPkPBis3Vo4PbS7roQEDn22hiHzl/Lo1q4i4hDEgBJmBF/NTNg2XR0HbFg==", + "version": "20.11.29", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.29.tgz", + "integrity": "sha512-P99thMkD/1YkCvAtOd6/zGedKNA0p2fj4ZpjCzcNiSCBWgm3cNRTBfa/qjFnsKkkojxu4vVLtWpesnZ9+ap+gA==", "dependencies": { "undici-types": "~5.26.4" } @@ -7094,9 +7094,9 @@ "integrity": "sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ==" }, "node_modules/@types/react": { - "version": "18.2.65", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.65.tgz", - "integrity": "sha512-98TsY0aW4jqx/3RqsUXwMDZSWR1Z4CUlJNue8ueS2/wcxZOsz4xmW1X8ieaWVRHcmmQM3R8xVA4XWB3dJnWwDQ==", + "version": "18.2.67", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.67.tgz", + "integrity": "sha512-vkIE2vTIMHQ/xL0rgmuoECBCkZFZeHr49HeWSc24AptMbNRo7pwSBvj73rlJJs9fGKj0koS+V7kQB1jHS0uCgw==", "dependencies": { "@types/prop-types": "*", "@types/scheduler": "*", @@ -8012,9 +8012,9 @@ } }, "node_modules/astro": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/astro/-/astro-4.5.2.tgz", - "integrity": "sha512-Nq3GojlwXJ3XD047khraCWu/6aqGFfcyq7Q0blpTBSZnCz2s4Zri04PHvUkbKF7TK2UljkFuTXKP0CE4ZuJi9Q==", + "version": "4.5.6", + "resolved": "https://registry.npmjs.org/astro/-/astro-4.5.6.tgz", + "integrity": "sha512-/pXr+tDvgps1x3w+9i48XzfNPDr4NrT89EJPeCTL57IjaTpitSQ8Oy10Fv6zAqXNLIUJ5j3P1c+fJx+taKIg0g==", "dependencies": { "@astrojs/compiler": "^2.7.0", "@astrojs/internal-helpers": "0.3.0", @@ -8026,7 +8026,6 @@ "@babel/plugin-transform-react-jsx": "^7.22.5", "@babel/traverse": "^7.23.3", "@babel/types": "^7.23.3", - "@shikijs/core": "^1.1.2", "@types/babel__core": "^7.20.4", "acorn": "^8.11.2", "aria-query": "^5.3.0", @@ -8057,7 +8056,6 @@ "js-yaml": "^4.1.0", "kleur": "^4.1.4", "magic-string": "^0.30.3", - "mdast-util-to-hast": "13.0.2", "mime": "^3.0.0", "ora": "^7.0.1", "p-limit": "^5.0.0", @@ -12791,14 +12789,14 @@ } }, "node_modules/hardhat": { - "version": "2.21.0", - "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.21.0.tgz", - "integrity": "sha512-8DlJAVJDEVHaV1sh9FLuKLLgCFv9EAJ+M+8IbjSIPgoeNo3ss5L1HgGBMfnI88c7OzMEZkdcuyGoobFeK3Orqw==", + "version": "2.22.1", + "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.22.1.tgz", + "integrity": "sha512-cTWYIJc5jQ132XUI8oRI/TO9L6oavPoJRCTRU9sIjkVxvkxz0Axz0K83Z3BEdJTqBQ2W84ZRoTekti84kBwCjg==", "dev": true, "dependencies": { "@ethersproject/abi": "^5.1.2", "@metamask/eth-sig-util": "^4.0.0", - "@nomicfoundation/edr": "^0.2.0", + "@nomicfoundation/edr": "^0.3.1", "@nomicfoundation/ethereumjs-common": "4.0.4", "@nomicfoundation/ethereumjs-tx": "5.0.4", "@nomicfoundation/ethereumjs-util": "9.0.4", @@ -20723,9 +20721,9 @@ } }, "node_modules/preact": { - "version": "10.19.6", - "resolved": "https://registry.npmjs.org/preact/-/preact-10.19.6.tgz", - "integrity": "sha512-gympg+T2Z1fG1unB8NH29yHJwnEaCH37Z32diPDku316OTnRPeMbiRV9kTrfZpocXjdfnWuFUl/Mj4BHaf6gnw==", + "version": "10.19.7", + "resolved": "https://registry.npmjs.org/preact/-/preact-10.19.7.tgz", + "integrity": "sha512-IJOW6cQN1fwfC17HfNOqUtAGyB8wAYshuC+jG1JiL/1+sC4yVyuA3IcF0N9vdodMJjW/lbuEF5qFsJqGNcbHbw==", "funding": { "type": "opencollective", "url": "https://opencollective.com/preact" diff --git a/package.json b/package.json index dbaeb275379..90679547bd5 100644 --- a/package.json +++ b/package.json @@ -47,7 +47,7 @@ "@nanostores/preact": "^0.5.1", "@nanostores/react": "^0.7.2", "@openzeppelin/contracts": "^4.9.6", - "astro": "^4.5.2", + "astro": "^4.5.6", "bignumber.js": "^9.1.2", "clipboard": "^2.0.11", "dotenv": "^16.4.5", @@ -56,7 +56,7 @@ "github-slugger": "^2.0.0", "lodash": "^4.17.21", "nanostores": "^0.9.5", - "preact": "^10.19.6", + "preact": "^10.19.7", "react-instantsearch": "^7.7.0", "rehype-autolink-headings": "^7.1.0", "rehype-slug": "^6.0.0", @@ -67,8 +67,8 @@ "@nomicfoundation/hardhat-toolbox": "^2.0.2", "@nomiclabs/hardhat-ethers": "^2.2.3", "@project-serum/anchor": "^0.26.0", - "@types/node": "^20.11.27", - "@types/react": "^18.2.65", + "@types/node": "^20.11.29", + "@types/react": "^18.2.67", "@typescript-eslint/eslint-plugin": "^5.62.0", "@typescript-eslint/parser": "^5.62.0", "eslint": "^8.57.0", @@ -78,7 +78,7 @@ "eslint-plugin-n": "^15.7.0", "eslint-plugin-prettier": "^4.2.1", "eslint-plugin-promise": "^6.1.1", - "hardhat": "^2.21.0", + "hardhat": "^2.22.1", "husky": "^8.0.3", "lint-staged": "^13.3.0", "prettier": "^2.8.8", From 71d5c757281acde2dd257c2ca1a0bd3f26656a10 Mon Sep 17 00:00:00 2001 From: Dwight Lyle Date: Mon, 18 Mar 2024 18:03:44 -0600 Subject: [PATCH 14/21] Restore LinkToken.json import --- src/scripts/link-to-wallet.ts | 2 +- src/scripts/reference/LinkToken.json | 323 --------------------------- 2 files changed, 1 insertion(+), 324 deletions(-) delete mode 100644 src/scripts/reference/LinkToken.json diff --git a/src/scripts/link-to-wallet.ts b/src/scripts/link-to-wallet.ts index 0f9cd1a27b4..b798eb5e355 100644 --- a/src/scripts/link-to-wallet.ts +++ b/src/scripts/link-to-wallet.ts @@ -2,7 +2,7 @@ import { MetaMaskInpageProvider } from "@metamask/providers" import detectEthereumProvider from "@metamask/detect-provider" import { BigNumberish, ethers } from "ethers" import { Web3Provider } from "@ethersproject/providers" -import LinkToken from "./reference/LinkToken.json" +import LinkToken from "@chainlink/contracts/abi/v0.8/LinkToken.json" import chains from "./reference/chains.json" import linkNameSymbol from "./reference/linkNameSymbol.json" import buttonStyles from "@chainlink/design-system/button.module.css" diff --git a/src/scripts/reference/LinkToken.json b/src/scripts/reference/LinkToken.json deleted file mode 100644 index 89851794553..00000000000 --- a/src/scripts/reference/LinkToken.json +++ /dev/null @@ -1,323 +0,0 @@ -[ - { - "constant": true, - "inputs": [], - "name": "name", - "outputs": [ - { - "name": "", - "type": "string" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_spender", - "type": "address" - }, - { - "name": "_value", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_from", - "type": "address" - }, - { - "name": "_to", - "type": "address" - }, - { - "name": "_value", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "decimals", - "outputs": [ - { - "name": "", - "type": "uint8" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_to", - "type": "address" - }, - { - "name": "_value", - "type": "uint256" - }, - { - "name": "_data", - "type": "bytes" - } - ], - "name": "transferAndCall", - "outputs": [ - { - "name": "success", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_spender", - "type": "address" - }, - { - "name": "_subtractedValue", - "type": "uint256" - } - ], - "name": "decreaseApproval", - "outputs": [ - { - "name": "success", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "_owner", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "name": "balance", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "symbol", - "outputs": [ - { - "name": "", - "type": "string" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_to", - "type": "address" - }, - { - "name": "_value", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "name": "success", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_spender", - "type": "address" - }, - { - "name": "_addedValue", - "type": "uint256" - } - ], - "name": "increaseApproval", - "outputs": [ - { - "name": "success", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "_owner", - "type": "address" - }, - { - "name": "_spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "name": "remaining", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "from", - "type": "address" - }, - { - "indexed": true, - "name": "to", - "type": "address" - }, - { - "indexed": false, - "name": "value", - "type": "uint256" - }, - { - "indexed": false, - "name": "data", - "type": "bytes" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "from", - "type": "address" - }, - { - "indexed": true, - "name": "to", - "type": "address" - }, - { - "indexed": false, - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - } -] From 0475ea4974bf5175a8bb065d8a5791b7459a6041 Mon Sep 17 00:00:00 2001 From: Dwight Lyle Date: Mon, 18 Mar 2024 18:11:27 -0600 Subject: [PATCH 15/21] Resolve compile issue? --- public/samples/DataStreams/StreamsUpkeep.sol | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/public/samples/DataStreams/StreamsUpkeep.sol b/public/samples/DataStreams/StreamsUpkeep.sol index 6e3f6dee5a1..ab68587e771 100644 --- a/public/samples/DataStreams/StreamsUpkeep.sol +++ b/public/samples/DataStreams/StreamsUpkeep.sol @@ -37,7 +37,10 @@ interface IFeeManager { function i_rewardManager() external view returns (address); } -contract StreamsUpkeep is ILogAutomation, StreamsLookupCompatibleInterface { +abstract contract StreamsUpkeep is + ILogAutomation, + StreamsLookupCompatibleInterface +{ struct BasicReport { bytes32 feedId; // The feed ID the report has data for uint32 validFromTimestamp; // Earliest timestamp for which price is applicable From b73afab9f2c2141a9847f8044b5c63e7b822f746 Mon Sep 17 00:00:00 2001 From: Karim <98668332+khadni@users.noreply.github.com> Date: Tue, 19 Mar 2024 09:03:28 +0100 Subject: [PATCH 16/21] StreamsUpkeep update --- public/samples/DataStreams/StreamsUpkeep.sol | 23 +++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/public/samples/DataStreams/StreamsUpkeep.sol b/public/samples/DataStreams/StreamsUpkeep.sol index ab68587e771..55ede136df8 100644 --- a/public/samples/DataStreams/StreamsUpkeep.sol +++ b/public/samples/DataStreams/StreamsUpkeep.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.16; +pragma solidity 0.8.16; import {Common} from "@chainlink/contracts/src/v0.8/llo-feeds/libraries/Common.sol"; import {StreamsLookupCompatibleInterface} from "@chainlink/contracts/src/v0.8/automation/interfaces/StreamsLookupCompatibleInterface.sol"; @@ -37,10 +37,7 @@ interface IFeeManager { function i_rewardManager() external view returns (address); } -abstract contract StreamsUpkeep is - ILogAutomation, - StreamsLookupCompatibleInterface -{ +contract StreamsUpkeep is ILogAutomation, StreamsLookupCompatibleInterface { struct BasicReport { bytes32 feedId; // The feed ID the report has data for uint32 validFromTimestamp; // Earliest timestamp for which price is applicable @@ -101,6 +98,22 @@ abstract contract StreamsUpkeep is ); } + /** + * @notice this is a new, optional function in streams lookup. It is meant to surface streams lookup errors. + * @return upkeepNeeded boolean to indicate whether the keeper should call performUpkeep or not. + * @return performData bytes that the keeper should call performUpkeep with, if + * upkeep is needed. If you would like to encode data to decode later, try `abi.encode`. + */ + function checkErrorHandler( + uint256 /*errCode*/, + bytes memory /*extraData*/ + ) external pure returns (bool upkeepNeeded, bytes memory performData) { + return (true, "0"); + // Hardcoded to always perform upkeep. + // Read the StreamsLookup error handler guide for more information. + // https://docs.chain.link/chainlink-automation/guides/streams-lookup-error-handler + } + // The Data Streams report bytes is passed here. // extraData is context data from feed lookup process. // Your contract may include logic to further process this data. From 6be65afd61cb2d4fd4f4076605aa641c68fc2d83 Mon Sep 17 00:00:00 2001 From: Karim <98668332+khadni@users.noreply.github.com> Date: Tue, 19 Mar 2024 09:07:14 +0100 Subject: [PATCH 17/21] StreamsUpkeep update --- public/samples/DataStreams/StreamsUpkeep.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/samples/DataStreams/StreamsUpkeep.sol b/public/samples/DataStreams/StreamsUpkeep.sol index 55ede136df8..8cd0e0d782a 100644 --- a/public/samples/DataStreams/StreamsUpkeep.sol +++ b/public/samples/DataStreams/StreamsUpkeep.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.16; +pragma solidity ^0.8.16; import {Common} from "@chainlink/contracts/src/v0.8/llo-feeds/libraries/Common.sol"; import {StreamsLookupCompatibleInterface} from "@chainlink/contracts/src/v0.8/automation/interfaces/StreamsLookupCompatibleInterface.sol"; From a1d073fa2c4d6157161c10f7e07812849cdf6eab Mon Sep 17 00:00:00 2001 From: Dwight Lyle Date: Wed, 20 Mar 2024 10:38:57 -0600 Subject: [PATCH 18/21] General package updates --- package-lock.json | 181 +++++++++++++++++++++++----------------------- package.json | 8 +- 2 files changed, 95 insertions(+), 94 deletions(-) diff --git a/package-lock.json b/package-lock.json index dbbe31a64ec..13bfaf77bfb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,7 @@ "dependencies": { "@11ty/eleventy-fetch": "^4.0.1", "@astro-community/astro-embed-youtube": "^0.4.4", - "@astrojs/mdx": "^2.2.0", + "@astrojs/mdx": "^2.2.1", "@astrojs/partytown": "^2.0.4", "@astrojs/preact": "^3.1.1", "@astrojs/prism": "^3.0.0", @@ -27,7 +27,7 @@ "@nanostores/preact": "^0.5.1", "@nanostores/react": "^0.7.2", "@openzeppelin/contracts": "^4.9.6", - "astro": "^4.5.6", + "astro": "^4.5.8", "bignumber.js": "^9.1.2", "clipboard": "^2.0.11", "dotenv": "^16.4.5", @@ -36,7 +36,7 @@ "github-slugger": "^2.0.0", "lodash": "^4.17.21", "nanostores": "^0.9.5", - "preact": "^10.19.7", + "preact": "^10.20.0", "react-instantsearch": "^7.7.0", "rehype-autolink-headings": "^7.1.0", "rehype-slug": "^6.0.0", @@ -47,7 +47,7 @@ "@nomicfoundation/hardhat-toolbox": "^2.0.2", "@nomiclabs/hardhat-ethers": "^2.2.3", "@project-serum/anchor": "^0.26.0", - "@types/node": "^20.11.29", + "@types/node": "^20.11.30", "@types/react": "^18.2.67", "@typescript-eslint/eslint-plugin": "^5.62.0", "@typescript-eslint/parser": "^5.62.0", @@ -313,9 +313,9 @@ "integrity": "sha512-tGmHvrhpzuz0JBHaJX8GywN9g4rldVNHtkoVDC3m/DdzBO70jGoVuc0uuNVglRYnsdwkbG0K02Iw3nOOR3/Y4g==" }, "node_modules/@astrojs/markdown-remark": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@astrojs/markdown-remark/-/markdown-remark-4.3.0.tgz", - "integrity": "sha512-iZOgYj/yNDvBRfKqkGuAvjeONhjQPq8Uk3HjyIgcTK5valq03NiUgSc5Ovq00yUVBeYJ/5EDx23c8xqtkkBlPw==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@astrojs/markdown-remark/-/markdown-remark-4.3.1.tgz", + "integrity": "sha512-eJFi600tkRjTFiwzY9oD8AgCgB7gFqyWCKWuZ33dATVBgLiROD+zlMZ8STZzU7+ZALvmiUAun/K7umTmP5YfVQ==", "dependencies": { "@astrojs/prism": "^3.0.0", "github-slugger": "^2.0.0", @@ -426,11 +426,11 @@ } }, "node_modules/@astrojs/mdx": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@astrojs/mdx/-/mdx-2.2.0.tgz", - "integrity": "sha512-EkcCniYdGwsh9k5LknqRrz/UyOnMNXdRk7fgDAw/zUDKnm7zgQAG8hIx0FxG1L2IINxLfu7IcjgZb3f5TFpxKw==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@astrojs/mdx/-/mdx-2.2.1.tgz", + "integrity": "sha512-bSr/AkvGieD9Pc5ZzMnAk7IHnw0vyt/aOujuYUmYT+NHiWahAUy/+ywNNMhTMmea0irdMYnBVC1AEKMQ/oXxow==", "dependencies": { - "@astrojs/markdown-remark": "4.3.0", + "@astrojs/markdown-remark": "4.3.1", "@mdx-js/mdx": "^3.0.0", "acorn": "^8.11.2", "es-module-lexer": "^1.4.1", @@ -613,12 +613,12 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", - "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", + "version": "7.24.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz", + "integrity": "sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==", "dependencies": { - "@babel/highlight": "^7.23.4", - "chalk": "^2.4.2" + "@babel/highlight": "^7.24.2", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" @@ -633,20 +633,20 @@ } }, "node_modules/@babel/core": { - "version": "7.23.7", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.7.tgz", - "integrity": "sha512-+UpDgowcmqe36d4NwqvKsyPMlOLNGMsfMmQ5WGCu+siCe3t3dfe9njrzGfdN4qq+bcNUt0+Vw6haRxBOycs4dw==", + "version": "7.24.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.3.tgz", + "integrity": "sha512-5FcvN1JHw2sHJChotgx8Ek0lyuh4kCKelgMTTqhYJJtloNvUfpAFMeNQUtdlIaktwrSV9LtCdqwk48wL2wBacQ==", "dependencies": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.23.5", - "@babel/generator": "^7.23.6", + "@babel/code-frame": "^7.24.2", + "@babel/generator": "^7.24.1", "@babel/helper-compilation-targets": "^7.23.6", "@babel/helper-module-transforms": "^7.23.3", - "@babel/helpers": "^7.23.7", - "@babel/parser": "^7.23.6", - "@babel/template": "^7.22.15", - "@babel/traverse": "^7.23.7", - "@babel/types": "^7.23.6", + "@babel/helpers": "^7.24.1", + "@babel/parser": "^7.24.1", + "@babel/template": "^7.24.0", + "@babel/traverse": "^7.24.1", + "@babel/types": "^7.24.0", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -662,13 +662,13 @@ } }, "node_modules/@babel/generator": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz", - "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.1.tgz", + "integrity": "sha512-DfCRfZsBcrPEHUfuBMgbJ1Ut01Y/itOs+hY2nFLgqsqXd52/iSiVq5TITtUasIUgm+IIKdY2/1I7auiQOEeC9A==", "dependencies": { - "@babel/types": "^7.23.6", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", + "@babel/types": "^7.24.0", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^2.5.1" }, "engines": { @@ -816,35 +816,36 @@ } }, "node_modules/@babel/helpers": { - "version": "7.23.7", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.7.tgz", - "integrity": "sha512-6AMnjCoC8wjqBzDHkuqpa7jAKwvMo4dC+lr/TFBz+ucfulO1XMpDnwWPGBNwClOKZ8h6xn5N81W/R5OrcKtCbQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.1.tgz", + "integrity": "sha512-BpU09QqEe6ZCHuIHFphEFgvNSrubve1FtyMton26ekZ85gRGi6LrTF7zArARp2YvyFxloeiRmtSCq5sjh1WqIg==", "dependencies": { - "@babel/template": "^7.22.15", - "@babel/traverse": "^7.23.7", - "@babel/types": "^7.23.6" + "@babel/template": "^7.24.0", + "@babel/traverse": "^7.24.1", + "@babel/types": "^7.24.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", - "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", + "version": "7.24.2", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.2.tgz", + "integrity": "sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==", "dependencies": { "@babel/helper-validator-identifier": "^7.22.20", "chalk": "^2.4.2", - "js-tokens": "^4.0.0" + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.6.tgz", - "integrity": "sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.1.tgz", + "integrity": "sha512-Zo9c7N3xdOIQrNip7Lc9wvRPzlRtovHVE4lkz8WEDr7uYh/GMQhSiIgFxGIArRHYdJE5kxtZjAf8rT0xhdLCzg==", "bin": { "parser": "bin/babel-parser.js" }, @@ -1113,31 +1114,31 @@ } }, "node_modules/@babel/template": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", - "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.0.tgz", + "integrity": "sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==", "dependencies": { - "@babel/code-frame": "^7.22.13", - "@babel/parser": "^7.22.15", - "@babel/types": "^7.22.15" + "@babel/code-frame": "^7.23.5", + "@babel/parser": "^7.24.0", + "@babel/types": "^7.24.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.23.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.7.tgz", - "integrity": "sha512-tY3mM8rH9jM0YHFGyfC0/xf+SB5eKUu7HPj7/k3fpi9dAlsMc5YbQvDi0Sh2QTPXqMhyaAtzAr807TIyfQrmyg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.1.tgz", + "integrity": "sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==", "dependencies": { - "@babel/code-frame": "^7.23.5", - "@babel/generator": "^7.23.6", + "@babel/code-frame": "^7.24.1", + "@babel/generator": "^7.24.1", "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-function-name": "^7.23.0", "@babel/helper-hoist-variables": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.23.6", - "@babel/types": "^7.23.6", + "@babel/parser": "^7.24.1", + "@babel/types": "^7.24.0", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -1146,9 +1147,9 @@ } }, "node_modules/@babel/types": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.6.tgz", - "integrity": "sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==", + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.0.tgz", + "integrity": "sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==", "dependencies": { "@babel/helper-string-parser": "^7.23.4", "@babel/helper-validator-identifier": "^7.22.20", @@ -4037,13 +4038,13 @@ } }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", "dependencies": { - "@jridgewell/set-array": "^1.0.1", + "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/trace-mapping": "^0.3.24" }, "engines": { "node": ">=6.0.0" @@ -4058,9 +4059,9 @@ } }, "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", "engines": { "node": ">=6.0.0" } @@ -4071,9 +4072,9 @@ "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.20", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", - "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" @@ -6555,9 +6556,9 @@ "dev": true }, "node_modules/@shikijs/core": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-1.1.7.tgz", - "integrity": "sha512-gTYLUIuD1UbZp/11qozD3fWpUTuMqPSf3svDMMrL0UmlGU7D9dPw/V1FonwAorCUJBltaaESxq90jrSjQyGixg==" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-1.2.0.tgz", + "integrity": "sha512-OlFvx+nyr5C8zpcMBnSGir0YPD6K11uYhouqhNmm1qLiis4GA7SsGtu07r9gKS9omks8RtQqHrJL4S+lqWK01A==" }, "node_modules/@sinclair/typebox": { "version": "0.27.8", @@ -7055,9 +7056,9 @@ } }, "node_modules/@types/node": { - "version": "20.11.29", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.29.tgz", - "integrity": "sha512-P99thMkD/1YkCvAtOd6/zGedKNA0p2fj4ZpjCzcNiSCBWgm3cNRTBfa/qjFnsKkkojxu4vVLtWpesnZ9+ap+gA==", + "version": "20.11.30", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.30.tgz", + "integrity": "sha512-dHM6ZxwlmuZaRmUPfv1p+KrdD1Dci04FbdEm/9wEMouFqxYoFl5aMkt0VMAUtYRQDyYvD41WJLukhq/ha3YuTw==", "dependencies": { "undici-types": "~5.26.4" } @@ -8012,15 +8013,15 @@ } }, "node_modules/astro": { - "version": "4.5.6", - "resolved": "https://registry.npmjs.org/astro/-/astro-4.5.6.tgz", - "integrity": "sha512-/pXr+tDvgps1x3w+9i48XzfNPDr4NrT89EJPeCTL57IjaTpitSQ8Oy10Fv6zAqXNLIUJ5j3P1c+fJx+taKIg0g==", + "version": "4.5.8", + "resolved": "https://registry.npmjs.org/astro/-/astro-4.5.8.tgz", + "integrity": "sha512-bhKsoZQWT6LW8aYMvTGglZTPa3rYRbcdc2buiJyFPCvSWOOyZmxqpp6vtQ+x6fXxD8P1NecM/c4g5GaPi+MokQ==", "dependencies": { "@astrojs/compiler": "^2.7.0", "@astrojs/internal-helpers": "0.3.0", - "@astrojs/markdown-remark": "4.3.0", + "@astrojs/markdown-remark": "4.3.1", "@astrojs/telemetry": "3.0.4", - "@babel/core": "^7.23.3", + "@babel/core": "^7.24.3", "@babel/generator": "^7.23.3", "@babel/parser": "^7.23.3", "@babel/plugin-transform-react-jsx": "^7.22.5", @@ -20721,9 +20722,9 @@ } }, "node_modules/preact": { - "version": "10.19.7", - "resolved": "https://registry.npmjs.org/preact/-/preact-10.19.7.tgz", - "integrity": "sha512-IJOW6cQN1fwfC17HfNOqUtAGyB8wAYshuC+jG1JiL/1+sC4yVyuA3IcF0N9vdodMJjW/lbuEF5qFsJqGNcbHbw==", + "version": "10.20.0", + "resolved": "https://registry.npmjs.org/preact/-/preact-10.20.0.tgz", + "integrity": "sha512-wU7iZw2BjsaKDal3pDRDy/HpPB6cuFOnVUCcw9aIPKG98+ZrXx3F+szkos8BVME5bquyKDKvRlOJFG8kMkcAbg==", "funding": { "type": "opencollective", "url": "https://opencollective.com/preact" @@ -23528,11 +23529,11 @@ } }, "node_modules/shiki": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/shiki/-/shiki-1.1.7.tgz", - "integrity": "sha512-9kUTMjZtcPH3i7vHunA6EraTPpPOITYTdA5uMrvsJRexktqP0s7P3s9HVK80b4pP42FRVe03D7fT3NmJv2yYhw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-1.2.0.tgz", + "integrity": "sha512-xLhiTMOIUXCv5DqJ4I70GgQCtdlzsTqFLZWcMHHG3TAieBUbvEGthdrlPDlX4mL/Wszx9C6rEcxU6kMlg4YlxA==", "dependencies": { - "@shikijs/core": "1.1.7" + "@shikijs/core": "1.2.0" } }, "node_modules/side-channel": { diff --git a/package.json b/package.json index 90679547bd5..074c5d36af1 100644 --- a/package.json +++ b/package.json @@ -31,7 +31,7 @@ "dependencies": { "@11ty/eleventy-fetch": "^4.0.1", "@astro-community/astro-embed-youtube": "^0.4.4", - "@astrojs/mdx": "^2.2.0", + "@astrojs/mdx": "^2.2.1", "@astrojs/partytown": "^2.0.4", "@astrojs/preact": "^3.1.1", "@astrojs/prism": "^3.0.0", @@ -47,7 +47,7 @@ "@nanostores/preact": "^0.5.1", "@nanostores/react": "^0.7.2", "@openzeppelin/contracts": "^4.9.6", - "astro": "^4.5.6", + "astro": "^4.5.8", "bignumber.js": "^9.1.2", "clipboard": "^2.0.11", "dotenv": "^16.4.5", @@ -56,7 +56,7 @@ "github-slugger": "^2.0.0", "lodash": "^4.17.21", "nanostores": "^0.9.5", - "preact": "^10.19.7", + "preact": "^10.20.0", "react-instantsearch": "^7.7.0", "rehype-autolink-headings": "^7.1.0", "rehype-slug": "^6.0.0", @@ -67,7 +67,7 @@ "@nomicfoundation/hardhat-toolbox": "^2.0.2", "@nomiclabs/hardhat-ethers": "^2.2.3", "@project-serum/anchor": "^0.26.0", - "@types/node": "^20.11.29", + "@types/node": "^20.11.30", "@types/react": "^18.2.67", "@typescript-eslint/eslint-plugin": "^5.62.0", "@typescript-eslint/parser": "^5.62.0", From 834841c32894280bf4d015dde6636bc99c3016fe Mon Sep 17 00:00:00 2001 From: Karim H <98668332+khadni@users.noreply.github.com> Date: Thu, 21 Mar 2024 16:45:31 +0100 Subject: [PATCH 19/21] Update Streams for beta.1 contracts (#1829) --- .../getting-started/solidity-compiler.webp | Bin 37106 -> 63176 bytes public/samples/DataStreams/StreamsUpkeep.sol | 2 +- .../DataStreams/StreamsUpkeepRegistrar.sol | 22 +++++++-- .../data-streams/common/gettingStarted.mdx | 46 ++++++++++++++---- .../common/gettingStartedHardhat.mdx | 12 +++-- 5 files changed, 64 insertions(+), 18 deletions(-) diff --git a/public/images/data-streams/getting-started/solidity-compiler.webp b/public/images/data-streams/getting-started/solidity-compiler.webp index 25c0fd9ed8505165b83402c92cc59a857146e94b..1c29cc4a57fb6f4a7067852b3516d778677bfcfa 100644 GIT binary patch literal 63176 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 diff --git a/public/samples/DataStreams/StreamsUpkeep.sol b/public/samples/DataStreams/StreamsUpkeep.sol index 8cd0e0d782a..0b9b698136f 100644 --- a/public/samples/DataStreams/StreamsUpkeep.sol +++ b/public/samples/DataStreams/StreamsUpkeep.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.16; +pragma solidity 0.8.19; import {Common} from "@chainlink/contracts/src/v0.8/llo-feeds/libraries/Common.sol"; import {StreamsLookupCompatibleInterface} from "@chainlink/contracts/src/v0.8/automation/interfaces/StreamsLookupCompatibleInterface.sol"; diff --git a/public/samples/DataStreams/StreamsUpkeepRegistrar.sol b/public/samples/DataStreams/StreamsUpkeepRegistrar.sol index 33ea55feb88..8e36542a7f8 100644 --- a/public/samples/DataStreams/StreamsUpkeepRegistrar.sol +++ b/public/samples/DataStreams/StreamsUpkeepRegistrar.sol @@ -1,12 +1,12 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.16; +pragma solidity 0.8.19; -import {Common} from "@chainlink/contracts/src/v0.8/libraries/Common.sol"; +import {Common} from "@chainlink/contracts/src/v0.8/llo-feeds/libraries/Common.sol"; import {StreamsLookupCompatibleInterface} from "@chainlink/contracts/src/v0.8/automation/interfaces/StreamsLookupCompatibleInterface.sol"; import {ILogAutomation, Log} from "@chainlink/contracts/src/v0.8/automation/interfaces/ILogAutomation.sol"; import {IRewardManager} from "@chainlink/contracts/src/v0.8/llo-feeds/interfaces/IRewardManager.sol"; import {IVerifierFeeManager} from "@chainlink/contracts/src/v0.8/llo-feeds/interfaces/IVerifierFeeManager.sol"; -import {IERC20} from "@chainlink/contracts/src/v0.8/vendor/openzeppelin-solidity/v4.8.0/contracts/interfaces/IERC20.sol"; +import {IERC20} from "@chainlink/contracts/src/v0.8/vendor/openzeppelin-solidity/v4.8.3/contracts/interfaces/IERC20.sol"; import {LinkTokenInterface} from "@chainlink/contracts/src/v0.8/shared/interfaces/LinkTokenInterface.sol"; /** @@ -154,6 +154,22 @@ contract StreamsUpkeepRegistrar is } } + /** + * @notice this is a new, optional function in streams lookup. It is meant to surface streams lookup errors. + * @return upkeepNeeded boolean to indicate whether the keeper should call performUpkeep or not. + * @return performData bytes that the keeper should call performUpkeep with, if + * upkeep is needed. If you would like to encode data to decode later, try `abi.encode`. + */ + function checkErrorHandler( + uint256 /*errCode*/, + bytes memory /*extraData*/ + ) external pure returns (bool upkeepNeeded, bytes memory performData) { + return (true, "0"); + // Hardcoded to always perform upkeep. + // Read the StreamsLookup error handler guide for more information. + // https://docs.chain.link/chainlink-automation/guides/streams-lookup-error-handler + } + // This function uses revert to convey call information. // See https://eips.ethereum.org/EIPS/eip-3668#rationale for details. function checkLog( diff --git a/src/features/data-streams/common/gettingStarted.mdx b/src/features/data-streams/common/gettingStarted.mdx index 8b9e951fcbe..1b0047dd453 100644 --- a/src/features/data-streams/common/gettingStarted.mdx +++ b/src/features/data-streams/common/gettingStarted.mdx @@ -25,7 +25,9 @@ This example uses a [Chainlink Automation Log Trigger](/chainlink-automation/gui - Testnet LINK is available for Arbitrum Sepolia at [faucets.chain.link](https://faucets.chain.link/arbitrum-sepolia). - Learn how to [Fund your contract with LINK](/resources/fund-your-contract). -## Deploy the Chainlink Automation upkeep contract +## Tutorial + +### Deploy the Chainlink Automation upkeep contract Deploy an upkeep contract that is enabled to retrieve data from Data Streams. For this example, you will read from the ETH/USD stream with ID `0x00027bbaff688c906a3e20a34fe951715d1018d262a5b66e38eda027a674cd1b` on Arbitrum Sepolia. See the [Stream Identifiers](/data-streams/stream-ids) page for a complete list of available assets, IDs, and verifier proxy addresses. @@ -33,7 +35,7 @@ Deploy an upkeep contract that is enabled to retrieve data from Data Streams. Fo -1. Select the `0.8.16` Solidity compiler and the `StreamsUpkeep.sol` contract in the **Solidity Compiler** tab. +1. Select the `StreamsUpkeep.sol` contract in the **Solidity Compiler** tab. -## Deploy the emitter contract +### Deploy the emitter contract This contract emits logs that trigger the upkeep. This code can be part of your dApp. For example, you might emit log triggers when your users initiate a trade or other action requiring data retrieval. For this Getting Started guide, use a very simple emitter so you can test the upkeep and data retrieval. @@ -121,7 +123,7 @@ This contract emits logs that trigger the upkeep. This code can be part of your style="max-width: 70%;" /> -## Register the upkeep +### Register the upkeep Register a new **Log trigger** upkeep. See [Automation Log Triggers](/chainlink-automation/guides/log-trigger) to learn more about how to register Log Trigger upkeeps. @@ -151,7 +153,7 @@ Register a new **Log trigger** upkeep. See [Automation Log Triggers](/chainlink- 1. Leave the **Check data** value and other fields blank for now, and click **Register Upkeep**. MetaMask prompts you to confirm the transaction. Wait for the transaction to complete. -## Fund the upkeep contract +### Fund the upkeep contract In this example, the upkeep contract pays for onchain verification of reports from Data Streams. The Automation subscription does not cover the cost. @@ -163,7 +165,7 @@ Open MetaMask and send 1 testnet LINK on _Arbitrum Sepolia_ to the upkeep contra style="max-width: 70%;" /> -## Emit a log +### Emit a log Now, you can use your emitter contract to emit a log and initiate the upkeep, which retrieves data for the specified Data Streams asset ID. @@ -181,7 +183,7 @@ After the transaction is complete, the log is emitted, and the upkeep is trigger -## View the retrieved price +### View the retrieved price The retrieved price is stored as a variable in the contract and emitted in the logs. @@ -199,8 +201,32 @@ Alternatively, you can view the price emitted in the logs for your upkeep transa ## Examine the code -The example code you deployed has all the interfaces and functions required to work with Chainlink Automation as an upkeep contract. It follows a similar flow to the trading flow in the [Architecture](/data-streams#example-trading-flow) documentation but uses a basic log emitter to simulate the client contract that would initiate a `StreamsLookup`. After the contract receives and verifies the report, `performUpkeep` stores the price from the report in the `last_retrieved_price` and emits a `PriceUpdate` log message with the price. You could modify this to use the data in a way that works for your specific use case and application. - -The code example uses `revert` with `StreamsLookup` to convey call information about what streams to retrieve. See the [EIP-3668 rationale](https://eips.ethereum.org/EIPS/eip-3668#rationale) for more information about how to use `revert` in this way. +The example code you deployed has all the interfaces and functions required to work with Chainlink Automation as an upkeep contract. It follows a similar flow to the trading flow in the [Architecture](/data-streams#example-trading-flow) documentation but uses a basic log emitter to simulate the client contract that would initiate a `StreamsLookup`. The code example uses `revert` with `StreamsLookup` to convey call information about what streams to retrieve. See the [EIP-3668 rationale](https://eips.ethereum.org/EIPS/eip-3668#rationale) for more information about how to use `revert` in this way. + +### Initializing the upkeep contract + +When deploying the contract, you define the verifier proxy address for the Data Streams feed you want to read from. You can find this address on the [Data Streams Feed IDs](/data-streams/stream-ids) page. The verifier proxy address provides functions that are required for this example: + +- The `s_feeManager` function to estimate the verification fees. +- The `verify` function to verify the report onchain. + +### Emitting a log, retrieving, and verifying the report + +After registering your upkeep contract with Chainlink Automation with a log trigger, you can emit a log with the `emitLog` function from your emitter contract. + + 1. The emitted log triggers the Chainlink Automation upkeep. + 2. Chainlink Automation then uses `StreamsLookup` to retrieve a signed report from the Data Streams Engine, returns the data in a callback (`checkCallback`), and runs the `performUpkeep` function on your registered upkeep contract. + 3. The `performUpkeep` function calls the `verify` function on the verifier contract to verify the report onchain. + 4. In this example, the `performUpkeep` function also stores the price from the report in the `last_retrieved_price` state variable and emits a `PriceUpdate` log message with the price. + +### Viewing the retrieved price + +The `last_retrieved_price` getter function of your upkeep contract retrieves the last price stored by the `performUpkeep` function in the `last_retrieved_price` state variable of the `StreamsUpkeep` contract. Additionally, the `performUpkeep` function emits a `PriceUpdate` log message with the retrieved price. + +### Optional: Handle Data Streams fetching errors offchain with `checkErrorHandler` + +When Automation detects the triggering event, it runs the `checkLog` function of your upkeep contract, which includes a `StreamsLookup` revert custom error. The `StreamsLookup` revert enables your upkeep to fetch a report from Data Streams. If the report is fetched successfully, the `checkCallback` function is evaluated offchain. Otherwise, the `checkErrorHandler` function is evaluated offchain to determine what Automation should do next. + +In this example, the `checkErrorHandler` is set to always return `true` for `upkeepNeeded`. This implies that the upkeep is always triggered, even if the report fetching fails. You can modify the `checkErrorHandler` function to handle errors offchain in a way that works for your specific use case. Read more about [using the StreamsLookup error handler](/chainlink-automation/guides/streams-lookup-error-handler). diff --git a/src/features/data-streams/common/gettingStartedHardhat.mdx b/src/features/data-streams/common/gettingStartedHardhat.mdx index 6418d318dfd..daa91e61f8e 100644 --- a/src/features/data-streams/common/gettingStartedHardhat.mdx +++ b/src/features/data-streams/common/gettingStartedHardhat.mdx @@ -166,9 +166,7 @@ You can find the upkeep transaction hash at [Chainlink Automation UI](https://au ## Examine the code -The example code you deployed has all the interfaces and functions required to work with Chainlink Automation as an upkeep contract. It follows a similar flow to the trading flow in the [Architecture](/data-streams#example-trading-flow) documentation but uses a basic log emitter to simulate the client contract that would initiate a `StreamsLookup`. After the contract receives and verifies the report, `performUpkeep` stores the price from the report in the `s_last_retrieved_price` and emits a `PriceUpdate` log message with the price. You could modify this to use the data in a way that works for your specific use case and application. - -The code example uses `revert` with `StreamsLookup` to convey call information about what streams to retrieve. See the [EIP-3668 rationale](https://eips.ethereum.org/EIPS/eip-3668#rationale) for more information about how to use `revert` in this way. +The example code you deployed has all the interfaces and functions required to work with Chainlink Automation as an upkeep contract. It follows a similar flow to the trading flow in the [Architecture](/data-streams#example-trading-flow) documentation but uses a basic log emitter to simulate the client contract that would initiate a `StreamsLookup`. The code example uses `revert` with `StreamsLookup` to convey call information about what streams to retrieve. See the [EIP-3668 rationale](https://eips.ethereum.org/EIPS/eip-3668#rationale) for more information about how to use `revert` in this way. @@ -212,4 +210,10 @@ You can use the [`emitLog` task](https://github.com/smartcontractkit/smart-contr ### Viewing the retrieved price -The [`getLastRetrievedPrice`](https://github.com/smartcontractkit/smart-contract-examples/blob/main/data-streams/getting-started/hardhat/tasks/getLastRetrievedPrice.js) Hardhat task retrieves the last price updated by the `performUpkeep` function in the `s_last_retrieved_price` state variable of the `StreamsUpkeep` contract. +The [`getLastRetrievedPrice`](https://github.com/smartcontractkit/smart-contract-examples/blob/main/data-streams/getting-started/hardhat/tasks/getLastRetrievedPrice.js) Hardhat task retrieves the last price updated by the `performUpkeep` function in the `s_last_retrieved_price` state variable of the `StreamsUpkeepRegistrar` contract. + +### Optional: Handle Data Streams fetching errors offchain with `checkErrorHandler` + +When Automation detects the triggering event, it runs the `checkLog` function of your upkeep contract, which includes a `StreamsLookup` revert custom error. The `StreamsLookup` revert enables your upkeep to fetch a report from Data Streams. If the report is fetched successfully, the `checkCallback` function is evaluated offchain. Otherwise, the `checkErrorHandler` function is evaluated offchain to determine what Automation should do next. + +In this example, the `checkErrorHandler` is set to always return `true` for `upkeepNeeded`. This implies that the upkeep is always triggered, even if the report fetching fails. You can modify the `checkErrorHandler` function to handle errors offchain in a way that works for your specific use case. Read more about [using the StreamsLookup error handler](/chainlink-automation/guides/streams-lookup-error-handler). From 71c3112a7ebfe89383b6e726805669926fd9990d Mon Sep 17 00:00:00 2001 From: Dwight Lyle Date: Mon, 25 Mar 2024 15:20:16 -0600 Subject: [PATCH 20/21] Update @chainlink/contracts to 1.0.0 latest version --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 13bfaf77bfb..6eb9bb9fd4c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,7 +18,7 @@ "@astrojs/react": "^3.1.0", "@astrojs/sitemap": "^3.1.1", "@chainlink/components": "^0.4.14", - "@chainlink/contracts": "^1.0.0-beta.1", + "@chainlink/contracts": "^1.0.0", "@chainlink/contracts-ccip": "^1.4.0", "@chainlink/design-system": "^0.1.50", "@chainlink/solana-sdk": "^0.2.2", @@ -1198,9 +1198,9 @@ } }, "node_modules/@chainlink/contracts": { - "version": "1.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@chainlink/contracts/-/contracts-1.0.0-beta.1.tgz", - "integrity": "sha512-tlG3zJFaJ9SIfirE1g5ORHkKbEEeitC8CpGYTw9FgVwAC7ZOIKtH/EK1e0EqX4/pLyFZkltgB0AwHOOhowq9zA==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@chainlink/contracts/-/contracts-1.0.0.tgz", + "integrity": "sha512-d7VEOewoZRR0U7SQq7837g77b0tLwNjIJo5FZ5ZFi9yJp03x73tqXpvdFZvb8sTod7OqV5wC72CDts+uHKKrYg==", "dependencies": { "@changesets/changelog-github": "^0.4.8", "@changesets/cli": "~2.26.2", diff --git a/package.json b/package.json index 074c5d36af1..2e16aee9689 100644 --- a/package.json +++ b/package.json @@ -38,7 +38,7 @@ "@astrojs/react": "^3.1.0", "@astrojs/sitemap": "^3.1.1", "@chainlink/components": "^0.4.14", - "@chainlink/contracts": "^1.0.0-beta.1", + "@chainlink/contracts": "^1.0.0", "@chainlink/contracts-ccip": "^1.4.0", "@chainlink/design-system": "^0.1.50", "@chainlink/solana-sdk": "^0.2.2", From f86f1e617dee6e6ef9713bc22fa047481c630ccc Mon Sep 17 00:00:00 2001 From: Dwight Lyle Date: Mon, 25 Mar 2024 15:21:49 -0600 Subject: [PATCH 21/21] Update all --- package-lock.json | 48 +++++++++++++++++++++++------------------------ package.json | 12 ++++++------ 2 files changed, 30 insertions(+), 30 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6eb9bb9fd4c..bc86d1ba8da 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,7 +17,7 @@ "@astrojs/prism": "^3.0.0", "@astrojs/react": "^3.1.0", "@astrojs/sitemap": "^3.1.1", - "@chainlink/components": "^0.4.14", + "@chainlink/components": "^0.4.15", "@chainlink/contracts": "^1.0.0", "@chainlink/contracts-ccip": "^1.4.0", "@chainlink/design-system": "^0.1.50", @@ -27,7 +27,7 @@ "@nanostores/preact": "^0.5.1", "@nanostores/react": "^0.7.2", "@openzeppelin/contracts": "^4.9.6", - "astro": "^4.5.8", + "astro": "^4.5.9", "bignumber.js": "^9.1.2", "clipboard": "^2.0.11", "dotenv": "^16.4.5", @@ -36,7 +36,7 @@ "github-slugger": "^2.0.0", "lodash": "^4.17.21", "nanostores": "^0.9.5", - "preact": "^10.20.0", + "preact": "^10.20.1", "react-instantsearch": "^7.7.0", "rehype-autolink-headings": "^7.1.0", "rehype-slug": "^6.0.0", @@ -48,7 +48,7 @@ "@nomiclabs/hardhat-ethers": "^2.2.3", "@project-serum/anchor": "^0.26.0", "@types/node": "^20.11.30", - "@types/react": "^18.2.67", + "@types/react": "^18.2.70", "@typescript-eslint/eslint-plugin": "^5.62.0", "@typescript-eslint/parser": "^5.62.0", "eslint": "^8.57.0", @@ -58,7 +58,7 @@ "eslint-plugin-n": "^15.7.0", "eslint-plugin-prettier": "^4.2.1", "eslint-plugin-promise": "^6.1.1", - "hardhat": "^2.22.1", + "hardhat": "^2.22.2", "husky": "^8.0.3", "lint-staged": "^13.3.0", "prettier": "^2.8.8", @@ -69,7 +69,7 @@ "solhint-plugin-prettier": "^0.0.5", "ts-jest": "^29.1.2", "tsconfig-paths": "^4.2.0", - "typescript": "^5.4.2" + "typescript": "^5.4.3" } }, "node_modules/@11ty/eleventy-fetch": { @@ -1178,9 +1178,9 @@ } }, "node_modules/@chainlink/components": { - "version": "0.4.14", - "resolved": "https://registry.npmjs.org/@chainlink/components/-/components-0.4.14.tgz", - "integrity": "sha512-ezmXCp7YAaceIZC/dUWvUcIM8DyF2D58SZwqTj8lq46ZqGkT8/yGj39hXFL3N56MaMA/wMM0/Y8SkIx/y3tiiA==", + "version": "0.4.15", + "resolved": "https://registry.npmjs.org/@chainlink/components/-/components-0.4.15.tgz", + "integrity": "sha512-1EmD5FQngo1fS1ko6zAM1MF89tWAok1HpAO6m7t5Ech2x43baI69eycO1PgtDIgXH73WI/y8wNGmMxMd37iqDQ==", "dependencies": { "@chainlink/design-system": "*", "@floating-ui/react": "0.22.2", @@ -7095,9 +7095,9 @@ "integrity": "sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ==" }, "node_modules/@types/react": { - "version": "18.2.67", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.67.tgz", - "integrity": "sha512-vkIE2vTIMHQ/xL0rgmuoECBCkZFZeHr49HeWSc24AptMbNRo7pwSBvj73rlJJs9fGKj0koS+V7kQB1jHS0uCgw==", + "version": "18.2.70", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.70.tgz", + "integrity": "sha512-hjlM2hho2vqklPhopNkXkdkeq6Lv8WSZTpr7956zY+3WS5cfYUewtCzsJLsbW5dEv3lfSeQ4W14ZFeKC437JRQ==", "dependencies": { "@types/prop-types": "*", "@types/scheduler": "*", @@ -8013,9 +8013,9 @@ } }, "node_modules/astro": { - "version": "4.5.8", - "resolved": "https://registry.npmjs.org/astro/-/astro-4.5.8.tgz", - "integrity": "sha512-bhKsoZQWT6LW8aYMvTGglZTPa3rYRbcdc2buiJyFPCvSWOOyZmxqpp6vtQ+x6fXxD8P1NecM/c4g5GaPi+MokQ==", + "version": "4.5.9", + "resolved": "https://registry.npmjs.org/astro/-/astro-4.5.9.tgz", + "integrity": "sha512-GheU72Goz7dYQNKaqTxB2H49cNvHfahGSbNkTvMXk+gyHf/g633qadqlO2ZQbTUacoUWmDzvS5fhMZt2/w4naQ==", "dependencies": { "@astrojs/compiler": "^2.7.0", "@astrojs/internal-helpers": "0.3.0", @@ -12790,9 +12790,9 @@ } }, "node_modules/hardhat": { - "version": "2.22.1", - "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.22.1.tgz", - "integrity": "sha512-cTWYIJc5jQ132XUI8oRI/TO9L6oavPoJRCTRU9sIjkVxvkxz0Axz0K83Z3BEdJTqBQ2W84ZRoTekti84kBwCjg==", + "version": "2.22.2", + "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.22.2.tgz", + "integrity": "sha512-0xZ7MdCZ5sJem4MrvpQWLR3R3zGDoHw5lsR+pBFimqwagimIOn3bWuZv69KA+veXClwI1s/zpqgwPwiFrd4Dxw==", "dev": true, "dependencies": { "@ethersproject/abi": "^5.1.2", @@ -20722,9 +20722,9 @@ } }, "node_modules/preact": { - "version": "10.20.0", - "resolved": "https://registry.npmjs.org/preact/-/preact-10.20.0.tgz", - "integrity": "sha512-wU7iZw2BjsaKDal3pDRDy/HpPB6cuFOnVUCcw9aIPKG98+ZrXx3F+szkos8BVME5bquyKDKvRlOJFG8kMkcAbg==", + "version": "10.20.1", + "resolved": "https://registry.npmjs.org/preact/-/preact-10.20.1.tgz", + "integrity": "sha512-JIFjgFg9B2qnOoGiYMVBtrcFxHqn+dNXbq76bVmcaHYJFYR4lW67AOcXgAYQQTDYXDOg/kTZrKPNCdRgJ2UJmw==", "funding": { "type": "opencollective", "url": "https://opencollective.com/preact" @@ -25888,9 +25888,9 @@ "peer": true }, "node_modules/typescript": { - "version": "5.4.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.2.tgz", - "integrity": "sha512-+2/g0Fds1ERlP6JsakQQDXjZdZMM+rqpamFZJEKh4kwTIn3iDkgKtby0CeNd5ATNZ4Ry1ax15TMx0W2V+miizQ==", + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.3.tgz", + "integrity": "sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg==", "devOptional": true, "bin": { "tsc": "bin/tsc", diff --git a/package.json b/package.json index 2e16aee9689..4bb21952b25 100644 --- a/package.json +++ b/package.json @@ -37,7 +37,7 @@ "@astrojs/prism": "^3.0.0", "@astrojs/react": "^3.1.0", "@astrojs/sitemap": "^3.1.1", - "@chainlink/components": "^0.4.14", + "@chainlink/components": "^0.4.15", "@chainlink/contracts": "^1.0.0", "@chainlink/contracts-ccip": "^1.4.0", "@chainlink/design-system": "^0.1.50", @@ -47,7 +47,7 @@ "@nanostores/preact": "^0.5.1", "@nanostores/react": "^0.7.2", "@openzeppelin/contracts": "^4.9.6", - "astro": "^4.5.8", + "astro": "^4.5.9", "bignumber.js": "^9.1.2", "clipboard": "^2.0.11", "dotenv": "^16.4.5", @@ -56,7 +56,7 @@ "github-slugger": "^2.0.0", "lodash": "^4.17.21", "nanostores": "^0.9.5", - "preact": "^10.20.0", + "preact": "^10.20.1", "react-instantsearch": "^7.7.0", "rehype-autolink-headings": "^7.1.0", "rehype-slug": "^6.0.0", @@ -68,7 +68,7 @@ "@nomiclabs/hardhat-ethers": "^2.2.3", "@project-serum/anchor": "^0.26.0", "@types/node": "^20.11.30", - "@types/react": "^18.2.67", + "@types/react": "^18.2.70", "@typescript-eslint/eslint-plugin": "^5.62.0", "@typescript-eslint/parser": "^5.62.0", "eslint": "^8.57.0", @@ -78,7 +78,7 @@ "eslint-plugin-n": "^15.7.0", "eslint-plugin-prettier": "^4.2.1", "eslint-plugin-promise": "^6.1.1", - "hardhat": "^2.22.1", + "hardhat": "^2.22.2", "husky": "^8.0.3", "lint-staged": "^13.3.0", "prettier": "^2.8.8", @@ -89,7 +89,7 @@ "solhint-plugin-prettier": "^0.0.5", "ts-jest": "^29.1.2", "tsconfig-paths": "^4.2.0", - "typescript": "^5.4.2" + "typescript": "^5.4.3" }, "lint-staged": { "*.{css,md,mdx,yml,yaml,astro}": "prettier --write",