From 09962828d7e259966cd9dec1903540aa0b0d0b11 Mon Sep 17 00:00:00 2001 From: GregDixonMXN Date: Tue, 27 Aug 2024 19:42:29 -0500 Subject: [PATCH] feat: create SecurityMonitorFacet and add associated mock and tests --- packages/contracts/package.json | 1 + .../dollar/facets/SecurityMonitorFacet.sol | 163 ++++ .../dollar/interfaces/ITelegramNotifier.sol | 15 + .../src/dollar/mocks/MockTelegramNotifier.sol | 27 + .../dollar/core/SecurityMonitorTest.t.sol | 255 ++++++ yarn.lock | 768 +++++++++++++++++- 6 files changed, 1216 insertions(+), 13 deletions(-) create mode 100644 packages/contracts/src/dollar/facets/SecurityMonitorFacet.sol create mode 100644 packages/contracts/src/dollar/interfaces/ITelegramNotifier.sol create mode 100644 packages/contracts/src/dollar/mocks/MockTelegramNotifier.sol create mode 100644 packages/contracts/test/dollar/core/SecurityMonitorTest.t.sol diff --git a/packages/contracts/package.json b/packages/contracts/package.json index 1b066e7ad..e7576c1b5 100644 --- a/packages/contracts/package.json +++ b/packages/contracts/package.json @@ -14,6 +14,7 @@ "url": "https://github.com/ubiquity/ubiquity-dollar.git" }, "dependencies": { + "@chainlink/contracts": "^1.2.0", "@types/command-line-args": "5.2.0", "command-line-args": "5.2.1", "dotenv": "^16.0.3", diff --git a/packages/contracts/src/dollar/facets/SecurityMonitorFacet.sol b/packages/contracts/src/dollar/facets/SecurityMonitorFacet.sol new file mode 100644 index 000000000..39f0b1b2d --- /dev/null +++ b/packages/contracts/src/dollar/facets/SecurityMonitorFacet.sol @@ -0,0 +1,163 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity ^0.8.19; + +import "@openzeppelin/contracts/security/ReentrancyGuard.sol"; +import "@openzeppelin/contracts/utils/math/SafeMath.sol"; +import "../../../src/dollar/libraries/LibDiamond.sol"; +import "../../../src/dollar/libraries/LibAccessControl.sol"; +import "../../../lib/chainlink-brownie-contracts/contracts/src/v0.8/AutomationCompatible.sol"; +import "../../../src/dollar/interfaces/IUbiquityPool.sol"; +import "../../../src/dollar/interfaces/IUbiquityDollarToken.sol"; +import "../../../src/dollar/interfaces/ITelegramNotifier.sol"; + +contract SecurityMonitorFacet is + ReentrancyGuard, + AutomationCompatibleInterface +{ + using SafeMath for uint256; + + bytes32 public constant SECURITY_MONITOR_ROLE = + keccak256("SECURITY_MONITOR_ROLE"); + bytes32 public constant PAUSER_ROLE = keccak256("PAUSER_ROLE"); + + uint256 public constant LIQUIDITY_THRESHOLD = 70; // 70% of initial liquidity + uint256 public constant COLLATERAL_RATIO_THRESHOLD = 900000; // 90% (using 1e6 precision) + uint256 public constant LARGE_TRANSFER_THRESHOLD = 1000000e18; // 1 million dollars + + struct SecurityMonitorStorage { + uint256 lastCheckTimestamp; + uint256 checkInterval; + } + + bytes32 constant SECURITY_MONITOR_STORAGE_POSITION = + keccak256("security.monitor.storage"); + + function securityMonitorStorage() + internal + pure + returns (SecurityMonitorStorage storage s) + { + bytes32 position = SECURITY_MONITOR_STORAGE_POSITION; + assembly { + s.slot := position + } + } + + event SecurityIncident(string message); + + function initialize(uint256 _checkInterval) external { + LibDiamond.enforceIsContractOwner(); + SecurityMonitorStorage storage s = securityMonitorStorage(); + s.checkInterval = _checkInterval; + s.lastCheckTimestamp = block.timestamp; + } + + function checkUpkeep( + bytes calldata /* checkData */ + ) + external + view + override + returns (bool upkeepNeeded, bytes memory performData) + { + SecurityMonitorStorage storage s = securityMonitorStorage(); + + upkeepNeeded = + (block.timestamp - s.lastCheckTimestamp) >= s.checkInterval; + + performData = ""; // Return an empty bytes array + } + + function performUpkeep(bytes calldata /* performData */) external override { + SecurityMonitorStorage storage s = securityMonitorStorage(); + + if ((block.timestamp - s.lastCheckTimestamp) >= s.checkInterval) { + s.lastCheckTimestamp = block.timestamp; + + checkSecurityConditions(); + } + } + + function checkSecurityConditions() internal { + if (checkLiquidity()) { + handleSecurityIncident("Liquidity below threshold"); + } + + if (checkCollateralRatio()) { + handleSecurityIncident("Collateral ratio below threshold"); + } + + // Add more security checks as needed + } + + function handleSecurityIncident( + string memory message + ) internal nonReentrant { + require( + LibAccessControl.hasRole(SECURITY_MONITOR_ROLE, address(this)), + "SecurityMonitor: not authorized" + ); + + // Pause the UbiquityDollarToken and UbiquityPoolFacet + + if (LibAccessControl.hasRole(PAUSER_ROLE, address(this))) { + // Instead of directly calling pause(), we'll use a more generic approach + + // that should work regardless of how pausing is implemented in UbiquityDollarToken + + (bool success, ) = address(LibDiamond.contractOwner()).call( + abi.encodeWithSignature("pauseDollarToken()") + ); + + require(success, "Failed to pause UbiquityDollarToken"); + + IUbiquityPool(LibDiamond.contractOwner()).toggleMintRedeemBorrow( + 0, + 0 + ); // Pause minting + + IUbiquityPool(LibDiamond.contractOwner()).toggleMintRedeemBorrow( + 0, + 1 + ); // Pause redeeming + + emit SecurityIncident(message); + + ITelegramNotifier(LibDiamond.contractOwner()).notify(message); + } else { + emit SecurityIncident( + "Failed to pause: SecurityMonitor lacks PAUSER_ROLE" + ); + + ITelegramNotifier(LibDiamond.contractOwner()).notify( + "Failed to pause: SecurityMonitor lacks PAUSER_ROLE" + ); + } + } + + function checkLiquidity() internal view returns (bool) { + uint256 poolLiquidity = IUbiquityPool(LibDiamond.contractOwner()) + .collateralUsdBalance(); + + uint256 thresholdLiquidity = poolLiquidity.mul(LIQUIDITY_THRESHOLD).div( + 100 + ); + + return poolLiquidity < thresholdLiquidity; + } + + function checkCollateralRatio() internal view returns (bool) { + uint256 currentRatio = IUbiquityPool(LibDiamond.contractOwner()) + .collateralRatio(); + + return currentRatio < COLLATERAL_RATIO_THRESHOLD; + } + + function setCheckInterval(uint256 _newInterval) external { + LibDiamond.enforceIsContractOwner(); + + SecurityMonitorStorage storage s = securityMonitorStorage(); + + s.checkInterval = _newInterval; + } +} diff --git a/packages/contracts/src/dollar/interfaces/ITelegramNotifier.sol b/packages/contracts/src/dollar/interfaces/ITelegramNotifier.sol new file mode 100644 index 000000000..e5b0dd5e5 --- /dev/null +++ b/packages/contracts/src/dollar/interfaces/ITelegramNotifier.sol @@ -0,0 +1,15 @@ +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8.19; + +interface ITelegramNotifier { + /** + + * @notice Sends a notification message via Telegram + + * @param message The message to be sent + + */ + + function notify(string memory message) external; +} diff --git a/packages/contracts/src/dollar/mocks/MockTelegramNotifier.sol b/packages/contracts/src/dollar/mocks/MockTelegramNotifier.sol new file mode 100644 index 000000000..285fcd1c1 --- /dev/null +++ b/packages/contracts/src/dollar/mocks/MockTelegramNotifier.sol @@ -0,0 +1,27 @@ +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8.19; + +import "../interfaces/ITelegramNotifier.sol"; + +contract MockTelegramNotifier is ITelegramNotifier { + event NotificationSent(string message); + + bool public lastNotificationSent; + + string public lastNotificationMessage; + + function notify(string memory message) external override { + lastNotificationSent = true; + + lastNotificationMessage = message; + + emit NotificationSent(message); + } + + function resetNotification() external { + lastNotificationSent = false; + + lastNotificationMessage = ""; + } +} diff --git a/packages/contracts/test/dollar/core/SecurityMonitorTest.t.sol b/packages/contracts/test/dollar/core/SecurityMonitorTest.t.sol new file mode 100644 index 000000000..32f49c870 --- /dev/null +++ b/packages/contracts/test/dollar/core/SecurityMonitorTest.t.sol @@ -0,0 +1,255 @@ +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8.19; + +import "forge-std/Test.sol"; + +import "../../../src/dollar/facets/SecurityMonitorFacet.sol"; + +import "../../../src/dollar/libraries/LibDiamond.sol"; + +import "../../../src/dollar/Diamond.sol"; + +import "../../../src/dollar/facets/DiamondCutFacet.sol"; + +import "../../../src/dollar/facets/DiamondLoupeFacet.sol"; + +import "../../../src/dollar/facets/OwnershipFacet.sol"; + +import "../../../src/dollar/mocks/MockFacet.sol"; + +import "../../../src/dollar/mocks/MockTelegramNotifier.sol"; + +contract SecurityMonitorFacetTest is Test { + Diamond public diamond; + + SecurityMonitorFacet public securityMonitor; + + MockFacetWithStorageWriteFunctions public mockFacet; + + MockTelegramNotifier public mockTelegramNotifier; + + address public owner; + + uint256 public constant CHECK_INTERVAL = 1 hours; + + event SecurityIncident(string message); + + function setUp() public { + owner = address(this); + + // Deploy facets + + DiamondCutFacet diamondCutFacet = new DiamondCutFacet(); + + DiamondLoupeFacet diamondLoupeFacet = new DiamondLoupeFacet(); + + OwnershipFacet ownershipFacet = new OwnershipFacet(); + + securityMonitor = new SecurityMonitorFacet(); + + // Prepare initial facet cuts + + IDiamondCut.FacetCut[] + memory diamondCutFacets = new IDiamondCut.FacetCut[](3); + + diamondCutFacets[0] = IDiamondCut.FacetCut({ + facetAddress: address(diamondCutFacet), + action: IDiamondCut.FacetCutAction.Add, + functionSelectors: getDiamondCutFacetSelectors() + }); + + diamondCutFacets[1] = IDiamondCut.FacetCut({ + facetAddress: address(diamondLoupeFacet), + action: IDiamondCut.FacetCutAction.Add, + functionSelectors: getDiamondLoupeFacetSelectors() + }); + + diamondCutFacets[2] = IDiamondCut.FacetCut({ + facetAddress: address(ownershipFacet), + action: IDiamondCut.FacetCutAction.Add, + functionSelectors: getOwnershipFacetSelectors() + }); + + // Deploy Diamond + + DiamondArgs memory args = DiamondArgs({ + owner: owner, + init: address(0), + initCalldata: "" + }); + + diamond = new Diamond(args, diamondCutFacets); + + // Add SecurityMonitorFacet to Diamond + + IDiamondCut.FacetCut[] + memory securityMonitorCut = new IDiamondCut.FacetCut[](1); + + securityMonitorCut[0] = IDiamondCut.FacetCut({ + facetAddress: address(securityMonitor), + action: IDiamondCut.FacetCutAction.Add, + functionSelectors: getSecurityMonitorFacetSelectors() + }); + + DiamondCutFacet(address(diamond)).diamondCut( + securityMonitorCut, + address(0), + "" + ); + + // Initialize SecurityMonitorFacet + + SecurityMonitorFacet(address(diamond)).initialize(CHECK_INTERVAL); + + // Deploy mocks + + mockFacet = new MockFacetWithStorageWriteFunctions(); + + mockTelegramNotifier = new MockTelegramNotifier(); + + // Setup mock calls + + vm.mockCall( + address(diamond), + abi.encodeWithSignature("hasRole(bytes32,address)"), + abi.encode(true) + ); + + vm.mockCall( + address(diamond), + abi.encodeWithSignature("pauseDollarToken()"), + abi.encode() + ); + } + + function testInitialization() public { + (bool upkeepNeeded, ) = SecurityMonitorFacet(address(diamond)) + .checkUpkeep(""); + + assertFalse(upkeepNeeded); + + vm.warp(block.timestamp + CHECK_INTERVAL - 1); + + (upkeepNeeded, ) = SecurityMonitorFacet(address(diamond)).checkUpkeep( + "" + ); + + assertFalse(upkeepNeeded); + + vm.warp(block.timestamp + 1); + + (upkeepNeeded, ) = SecurityMonitorFacet(address(diamond)).checkUpkeep( + "" + ); + + assertTrue(upkeepNeeded); + } + + function testSetCheckInterval() public { + uint256 newInterval = 2 hours; + + SecurityMonitorFacet(address(diamond)).setCheckInterval(newInterval); + + (bool upkeepNeeded, ) = SecurityMonitorFacet(address(diamond)) + .checkUpkeep(""); + + assertFalse(upkeepNeeded); + + vm.warp(block.timestamp + newInterval - 1); + + (upkeepNeeded, ) = SecurityMonitorFacet(address(diamond)).checkUpkeep( + "" + ); + + assertFalse(upkeepNeeded); + + vm.warp(block.timestamp + 1); + + (upkeepNeeded, ) = SecurityMonitorFacet(address(diamond)).checkUpkeep( + "" + ); + + assertTrue(upkeepNeeded); + } + + function testSetCheckInterval_OnlyOwner() public { + uint256 newInterval = 2 hours; + + // This should succeed + + SecurityMonitorFacet(address(diamond)).setCheckInterval(newInterval); + + // This should fail + + vm.prank(address(0x123)); // Random address + + vm.expectRevert("LibDiamond: Must be contract owner"); + + SecurityMonitorFacet(address(diamond)).setCheckInterval(newInterval); + } + + function getDiamondCutFacetSelectors() + internal + pure + returns (bytes4[] memory selectors) + { + selectors = new bytes4[](1); // Initialize array with 1 element + + selectors[0] = DiamondCutFacet.diamondCut.selector; + + return selectors; + } + + function getDiamondLoupeFacetSelectors() + internal + pure + returns (bytes4[] memory selectors) + { + selectors = new bytes4[](5); // Initialize array with 5 elements + + selectors[0] = DiamondLoupeFacet.facets.selector; + + selectors[1] = DiamondLoupeFacet.facetFunctionSelectors.selector; + + selectors[2] = DiamondLoupeFacet.facetAddresses.selector; + + selectors[3] = DiamondLoupeFacet.facetAddress.selector; + + selectors[4] = DiamondLoupeFacet.supportsInterface.selector; + + return selectors; + } + + function getOwnershipFacetSelectors() + internal + pure + returns (bytes4[] memory selectors) + { + selectors = new bytes4[](2); // Initialize array with 2 elements + + selectors[0] = OwnershipFacet.owner.selector; + + selectors[1] = OwnershipFacet.transferOwnership.selector; + + return selectors; + } + + function getSecurityMonitorFacetSelectors() + internal + pure + returns (bytes4[] memory selectors) + { + selectors = new bytes4[](4); // Initialize array with 4 elements + + selectors[0] = SecurityMonitorFacet.checkUpkeep.selector; + + selectors[1] = SecurityMonitorFacet.performUpkeep.selector; + + selectors[2] = SecurityMonitorFacet.setCheckInterval.selector; + + selectors[3] = SecurityMonitorFacet.initialize.selector; + + return selectors; + } +} diff --git a/yarn.lock b/yarn.lock index 12f48175f..72cf0e4d5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -230,6 +230,15 @@ __metadata: languageName: node linkType: hard +"@babel/runtime@npm:^7.20.1": + version: 7.25.4 + resolution: "@babel/runtime@npm:7.25.4" + dependencies: + regenerator-runtime: ^0.14.0 + checksum: 5c2aab03788e77f1f959d7e6ce714c299adfc9b14fb6295c2a17eb7cad0dd9c2ebfb2d25265f507f68c43d5055c5cd6f71df02feb6502cea44b68432d78bcbbe + languageName: node + linkType: hard + "@babel/template@npm:^7.20.7, @babel/template@npm:^7.4.0": version: 7.20.7 resolution: "@babel/template@npm:7.20.7" @@ -270,6 +279,290 @@ __metadata: languageName: node linkType: hard +"@chainlink/contracts@npm:^1.2.0": + version: 1.2.0 + resolution: "@chainlink/contracts@npm:1.2.0" + dependencies: + "@changesets/changelog-github": ^0.5.0 + "@changesets/cli": ~2.27.3 + "@eth-optimism/contracts": 0.6.0 + "@openzeppelin/contracts": 4.9.3 + "@openzeppelin/contracts-upgradeable": 4.9.3 + "@scroll-tech/contracts": 0.1.0 + semver: ^7.6.2 + checksum: 7dbd7db3f82fd543d5f67ce9541367f863f55745f3445df3948669360eefc894ce096228b5419476aabeeadfd05ce860ba2bf257acc58710cbd11230977d6490 + languageName: node + linkType: hard + +"@changesets/apply-release-plan@npm:^7.0.4": + version: 7.0.4 + resolution: "@changesets/apply-release-plan@npm:7.0.4" + dependencies: + "@babel/runtime": ^7.20.1 + "@changesets/config": ^3.0.2 + "@changesets/get-version-range-type": ^0.4.0 + "@changesets/git": ^3.0.0 + "@changesets/should-skip-package": ^0.1.0 + "@changesets/types": ^6.0.0 + "@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 + checksum: 5a61a8794fd4762e9270ffec474dc7c5d420c1d0479c5316a12e5264589882ccfb3ec08af6c0ebd07de2bf26ae880ad2f65e8f16d5886745aecf48cb11f625f5 + languageName: node + linkType: hard + +"@changesets/assemble-release-plan@npm:^6.0.3": + version: 6.0.3 + resolution: "@changesets/assemble-release-plan@npm:6.0.3" + dependencies: + "@babel/runtime": ^7.20.1 + "@changesets/errors": ^0.2.0 + "@changesets/get-dependents-graph": ^2.1.1 + "@changesets/should-skip-package": ^0.1.0 + "@changesets/types": ^6.0.0 + "@manypkg/get-packages": ^1.1.3 + semver: ^7.5.3 + checksum: ae0ac29a44640fc6c0d3782c134adad3f0af80903ecb8bf663f0bf5f569586c9620980100737a05639f1a7252f145942ae62fa25d0757e89b5d6311abf899cd5 + languageName: node + linkType: hard + +"@changesets/changelog-git@npm:^0.2.0": + version: 0.2.0 + resolution: "@changesets/changelog-git@npm:0.2.0" + dependencies: + "@changesets/types": ^6.0.0 + checksum: 132660f7fdabbdda00ac803cc822d6427a1a38a17a5f414e87ad32f6dc4cbef5280a147ecdc087a28dc06c8bd0762f8d6e7132d01b8a4142b59fbe1bc2177034 + languageName: node + linkType: hard + +"@changesets/changelog-github@npm:^0.5.0": + version: 0.5.0 + resolution: "@changesets/changelog-github@npm:0.5.0" + dependencies: + "@changesets/get-github-info": ^0.6.0 + "@changesets/types": ^6.0.0 + dotenv: ^8.1.0 + checksum: 4ab43d8104693f970d878f2b1657ff67b4d4dcb7452ddf118575153bab74286cdfd125381c2ab92b205bce4b2c653c36552138bf2900f7165ac39a868b7fe22c + languageName: node + linkType: hard + +"@changesets/cli@npm:~2.27.3": + version: 2.27.7 + resolution: "@changesets/cli@npm:2.27.7" + dependencies: + "@babel/runtime": ^7.20.1 + "@changesets/apply-release-plan": ^7.0.4 + "@changesets/assemble-release-plan": ^6.0.3 + "@changesets/changelog-git": ^0.2.0 + "@changesets/config": ^3.0.2 + "@changesets/errors": ^0.2.0 + "@changesets/get-dependents-graph": ^2.1.1 + "@changesets/get-release-plan": ^4.0.3 + "@changesets/git": ^3.0.0 + "@changesets/logger": ^0.1.0 + "@changesets/pre": ^2.0.0 + "@changesets/read": ^0.6.0 + "@changesets/should-skip-package": ^0.1.0 + "@changesets/types": ^6.0.0 + "@changesets/write": ^0.3.1 + "@manypkg/get-packages": ^1.1.3 + "@types/semver": ^7.5.0 + ansi-colors: ^4.1.3 + chalk: ^2.1.0 + ci-info: ^3.7.0 + enquirer: ^2.3.0 + external-editor: ^3.1.0 + fs-extra: ^7.0.1 + human-id: ^1.0.2 + mri: ^1.2.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 + bin: + changeset: bin.js + checksum: f518121a516ce8186dfc71dcca2f4be5fea28fe29a54b038aa787964bb4d4f1e866840d6d765776db33f7723d1a850ee4a38ed726f302a26e2e56a5e2b9422e8 + languageName: node + linkType: hard + +"@changesets/config@npm:^3.0.2": + version: 3.0.2 + resolution: "@changesets/config@npm:3.0.2" + dependencies: + "@changesets/errors": ^0.2.0 + "@changesets/get-dependents-graph": ^2.1.1 + "@changesets/logger": ^0.1.0 + "@changesets/types": ^6.0.0 + "@manypkg/get-packages": ^1.1.3 + fs-extra: ^7.0.1 + micromatch: ^4.0.2 + checksum: 4160e59f74c1f36a2d3d011868f83c46410553f9fc164a83dde46ec7e37f13ba983526b9c299de3cd3f317e5e42808a991959931c9d34f2913f3e8d4c515cd12 + languageName: node + linkType: hard + +"@changesets/errors@npm:^0.2.0": + version: 0.2.0 + resolution: "@changesets/errors@npm:0.2.0" + dependencies: + extendable-error: ^0.1.5 + checksum: 4b79373f92287af4f723e8dbbccaf0299aa8735fc043243d0ad587f04a7614615ea50180be575d4438b9f00aa82d1cf85e902b77a55bdd3e0a8dd97e77b18c60 + languageName: node + linkType: hard + +"@changesets/get-dependents-graph@npm:^2.1.1": + version: 2.1.1 + resolution: "@changesets/get-dependents-graph@npm:2.1.1" + dependencies: + "@changesets/types": ^6.0.0 + "@manypkg/get-packages": ^1.1.3 + chalk: ^2.1.0 + fs-extra: ^7.0.1 + semver: ^7.5.3 + checksum: e427603a3cad3690deec86a5831f15766dc32dc0819532e3ad70fbda027317bb46bb207c6a3bc947daf00e5e8229a01dd67aa3ec7248aa11f87611a7ecd74097 + languageName: node + linkType: hard + +"@changesets/get-github-info@npm:^0.6.0": + version: 0.6.0 + resolution: "@changesets/get-github-info@npm:0.6.0" + dependencies: + dataloader: ^1.4.0 + node-fetch: ^2.5.0 + checksum: 753173bda536aa79cb0502f59ce13889b23ae8463d04893d43ff22966818060837d9db4052b6cbfbd95dfb242fbfd38890a38c56832948e83bf358a47812b708 + languageName: node + linkType: hard + +"@changesets/get-release-plan@npm:^4.0.3": + version: 4.0.3 + resolution: "@changesets/get-release-plan@npm:4.0.3" + dependencies: + "@babel/runtime": ^7.20.1 + "@changesets/assemble-release-plan": ^6.0.3 + "@changesets/config": ^3.0.2 + "@changesets/pre": ^2.0.0 + "@changesets/read": ^0.6.0 + "@changesets/types": ^6.0.0 + "@manypkg/get-packages": ^1.1.3 + checksum: baf01eb124f95df729e1798c23e4ac1996acd74e0d22336492e4a0fd68f3a19c97197337fdcb58d47d0b580ca38e0b0888cbacaa1c99d7c173c3cecb859ab4cc + languageName: node + linkType: hard + +"@changesets/get-version-range-type@npm:^0.4.0": + version: 0.4.0 + resolution: "@changesets/get-version-range-type@npm:0.4.0" + checksum: 2e8c511e658e193f48de7f09522649c4cf072932f0cbe0f252a7f2703d7775b0b90b632254526338795d0658e340be9dff3879cfc8eba4534b8cd6071efff8c9 + languageName: node + linkType: hard + +"@changesets/git@npm:^3.0.0": + version: 3.0.0 + resolution: "@changesets/git@npm:3.0.0" + dependencies: + "@babel/runtime": ^7.20.1 + "@changesets/errors": ^0.2.0 + "@changesets/types": ^6.0.0 + "@manypkg/get-packages": ^1.1.3 + is-subdir: ^1.1.1 + micromatch: ^4.0.2 + spawndamnit: ^2.0.0 + checksum: a8fa66d77302b50d5e604aca898ee813247537d23a05004637ecee4aa1579d6a2859283c099bdcf3e2b232258c93ff81dd57aa867858788e457df40118c64c2b + languageName: node + linkType: hard + +"@changesets/logger@npm:^0.1.0": + version: 0.1.0 + resolution: "@changesets/logger@npm:0.1.0" + dependencies: + chalk: ^2.1.0 + checksum: d8ef1b7caf3d2c15a9e7743b7a9462e0c2e61c76d9a5bbed5eff805afa8226117505309c6e9095001136b4f6d9ae0aba61377e53af8aa0809f1febd1b5f787f1 + languageName: node + linkType: hard + +"@changesets/parse@npm:^0.4.0": + version: 0.4.0 + resolution: "@changesets/parse@npm:0.4.0" + dependencies: + "@changesets/types": ^6.0.0 + js-yaml: ^3.13.1 + checksum: 3dd970b244479746233ebd357cfff3816cf9f344ebf2cf0c7c55ce8579adfd3f506978e86ad61222dc3acf1548a2105ffdd8b3e940b3f82b225741315cee2bf0 + languageName: node + linkType: hard + +"@changesets/pre@npm:^2.0.0": + version: 2.0.0 + resolution: "@changesets/pre@npm:2.0.0" + dependencies: + "@babel/runtime": ^7.20.1 + "@changesets/errors": ^0.2.0 + "@changesets/types": ^6.0.0 + "@manypkg/get-packages": ^1.1.3 + fs-extra: ^7.0.1 + checksum: 6a01086405f4e4ce63abb8f222de39b69a5762c9c8c8f19c0d3c72f7798248d7a152937028f1be24be1f8a4a5e47e4cb23c54bc36f979539b24a728c893caf4e + languageName: node + linkType: hard + +"@changesets/read@npm:^0.6.0": + version: 0.6.0 + resolution: "@changesets/read@npm:0.6.0" + dependencies: + "@babel/runtime": ^7.20.1 + "@changesets/git": ^3.0.0 + "@changesets/logger": ^0.1.0 + "@changesets/parse": ^0.4.0 + "@changesets/types": ^6.0.0 + chalk: ^2.1.0 + fs-extra: ^7.0.1 + p-filter: ^2.1.0 + checksum: 3da6428124b4983f6ccbdae324c73044cd6a84269bfdbaff545331042e3d6845c647613b5d8f4ffdd48bad5b791623eca2be1b507652ea47b77e136cd2e26c70 + languageName: node + linkType: hard + +"@changesets/should-skip-package@npm:^0.1.0": + version: 0.1.0 + resolution: "@changesets/should-skip-package@npm:0.1.0" + dependencies: + "@babel/runtime": ^7.20.1 + "@changesets/types": ^6.0.0 + "@manypkg/get-packages": ^1.1.3 + checksum: 3c966feae085a41d4ce10a46a1b525f980cec59951f7cf23ea805866b370de5c75fdd45af326e1a5ef502fa4846f821d9df15550c2b606b96e99ed4b967f01c0 + languageName: node + linkType: hard + +"@changesets/types@npm:^4.0.1": + version: 4.1.0 + resolution: "@changesets/types@npm:4.1.0" + checksum: 72c1f58044178ca867dd9349ecc4b7c233ce3781bb03b5b72a70c3166fbbab54a2f2cb19a81f96b4649ba004442c8734569fba238be4dd737fb4624a135c6098 + languageName: node + linkType: hard + +"@changesets/types@npm:^6.0.0": + version: 6.0.0 + resolution: "@changesets/types@npm:6.0.0" + checksum: d528b5d712f62c26ea422c7d34ccf6eac57a353c0733d96716db3c796ecd9bba5d496d48b37d5d46b784dc45b69c06ce3345fa3515df981bb68456cad68e6465 + languageName: node + linkType: hard + +"@changesets/write@npm:^0.3.1": + version: 0.3.1 + resolution: "@changesets/write@npm:0.3.1" + dependencies: + "@babel/runtime": ^7.20.1 + "@changesets/types": ^6.0.0 + fs-extra: ^7.0.1 + human-id: ^1.0.2 + prettier: ^2.7.1 + checksum: 6df0447e05ededbab71f36e6ad23aa77cf06eb6adda7a8b8e7fb9d6bd5bc93acceb916d55b2a37cb7e93fb05d39a236a0dd7ade5243aae4772885081101d4784 + languageName: node + linkType: hard + "@coinbase/wallet-sdk@npm:^3.5.4": version: 3.6.5 resolution: "@coinbase/wallet-sdk@npm:3.6.5" @@ -1301,6 +1594,43 @@ __metadata: languageName: node linkType: hard +"@eth-optimism/contracts@npm:0.6.0": + version: 0.6.0 + resolution: "@eth-optimism/contracts@npm:0.6.0" + dependencies: + "@eth-optimism/core-utils": 0.12.0 + "@ethersproject/abstract-provider": ^5.7.0 + "@ethersproject/abstract-signer": ^5.7.0 + peerDependencies: + ethers: ^5 + checksum: 52e9a6cc6ad9bf3ab085d3be501fa4c89e48865baa8aee01aff39c2b007b69600304c7e8f8f4e00d67396e48a0dbfe3a260437efd3a4d7216424cece52639870 + languageName: node + linkType: hard + +"@eth-optimism/core-utils@npm:0.12.0": + version: 0.12.0 + resolution: "@eth-optimism/core-utils@npm:0.12.0" + dependencies: + "@ethersproject/abi": ^5.7.0 + "@ethersproject/abstract-provider": ^5.7.0 + "@ethersproject/address": ^5.7.0 + "@ethersproject/bignumber": ^5.7.0 + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/constants": ^5.7.0 + "@ethersproject/contracts": ^5.7.0 + "@ethersproject/hash": ^5.7.0 + "@ethersproject/keccak256": ^5.7.0 + "@ethersproject/properties": ^5.7.0 + "@ethersproject/providers": ^5.7.0 + "@ethersproject/rlp": ^5.7.0 + "@ethersproject/transactions": ^5.7.0 + "@ethersproject/web": ^5.7.0 + bufio: ^1.0.7 + chai: ^4.3.4 + checksum: 1c820107c44bdbb46becb1b00fd0dabb44f3ac8f54e6da7872a5a134411fad26f53b193225da55e79d6a8d7f0d01cc16a123db5d41ebaf02ca78360249a4b52a + languageName: node + linkType: hard + "@ethersproject/abi@npm:5, @ethersproject/abi@npm:5.7.0, @ethersproject/abi@npm:^5.0.0, @ethersproject/abi@npm:^5.0.12, @ethersproject/abi@npm:^5.1.2, @ethersproject/abi@npm:^5.5.0, @ethersproject/abi@npm:^5.7.0": version: 5.7.0 resolution: "@ethersproject/abi@npm:5.7.0" @@ -1407,7 +1737,7 @@ __metadata: languageName: node linkType: hard -"@ethersproject/contracts@npm:5.7.0": +"@ethersproject/contracts@npm:5.7.0, @ethersproject/contracts@npm:^5.7.0": version: 5.7.0 resolution: "@ethersproject/contracts@npm:5.7.0" dependencies: @@ -1528,7 +1858,7 @@ __metadata: languageName: node linkType: hard -"@ethersproject/providers@npm:5.7.2, @ethersproject/providers@npm:^5, @ethersproject/providers@npm:^5.6.8": +"@ethersproject/providers@npm:5.7.2, @ethersproject/providers@npm:^5, @ethersproject/providers@npm:^5.6.8, @ethersproject/providers@npm:^5.7.0": version: 5.7.2 resolution: "@ethersproject/providers@npm:5.7.2" dependencies: @@ -2028,6 +2358,32 @@ __metadata: languageName: node linkType: hard +"@manypkg/find-root@npm:^1.1.0": + version: 1.1.0 + resolution: "@manypkg/find-root@npm:1.1.0" + dependencies: + "@babel/runtime": ^7.5.5 + "@types/node": ^12.7.1 + find-up: ^4.1.0 + fs-extra: ^8.1.0 + checksum: f0fd881a5a81a351cb6561cd24117e8ee9481bbf3b6d1c7d9d10bef1f4744ca2ba3d064713e83c0a0574416d1e5b4a4c6c414aad91913c4a1c6040d87283ac50 + languageName: node + linkType: hard + +"@manypkg/get-packages@npm:^1.1.3": + version: 1.1.3 + resolution: "@manypkg/get-packages@npm:1.1.3" + 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 + checksum: f5a756e5a659e0e1c33f48852d56826d170d5b10a3cdea89ce4fcaa77678d8799aa4004b30e1985c87b73dbc390b95bb6411b78336dd1e0db87c08c74b5c0e74 + languageName: node + linkType: hard + "@metamask/detect-provider@npm:^1.2.0": version: 1.2.0 resolution: "@metamask/detect-provider@npm:1.2.0" @@ -2662,6 +3018,13 @@ __metadata: languageName: node linkType: hard +"@openzeppelin/contracts-upgradeable@npm:4.9.3": + version: 4.9.3 + resolution: "@openzeppelin/contracts-upgradeable@npm:4.9.3" + checksum: bda0240b1d44c913ec5a4e109c622f216c2bbd7b468d210822f75782a5f7fe0609d08bf03b78b253333625e99e507cf2f75212f1de3b274bd9fc64ae967aeec3 + languageName: node + linkType: hard + "@openzeppelin/contracts@npm:3.4.1-solc-0.7-2": version: 3.4.1-solc-0.7-2 resolution: "@openzeppelin/contracts@npm:3.4.1-solc-0.7-2" @@ -2676,6 +3039,13 @@ __metadata: languageName: node linkType: hard +"@openzeppelin/contracts@npm:4.9.3": + version: 4.9.3 + resolution: "@openzeppelin/contracts@npm:4.9.3" + checksum: 4932063e733b35fa7669b9fe2053f69b062366c5c208b0c6cfa1ac451712100c78acff98120c3a4b88d94154c802be05d160d71f37e7d74cadbe150964458838 + languageName: node + linkType: hard + "@pedrouid/environment@npm:^1.0.1": version: 1.0.1 resolution: "@pedrouid/environment@npm:1.0.1" @@ -2783,6 +3153,13 @@ __metadata: languageName: node linkType: hard +"@scroll-tech/contracts@npm:0.1.0": + version: 0.1.0 + resolution: "@scroll-tech/contracts@npm:0.1.0" + checksum: 61aa3ca76043276dd38dfb2ed67c019fcd1bf42c8b5d33726e6addfa95cad96ba057988cc00572159c47fcdbbad6fbd1da4821c82f512f5a8704f7807820a04b + languageName: node + linkType: hard + "@scure/base@npm:~1.1.0": version: 1.1.1 resolution: "@scure/base@npm:1.1.1" @@ -3541,7 +3918,7 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:^12.12.54": +"@types/node@npm:^12.12.54, @types/node@npm:^12.7.1": version: 12.20.55 resolution: "@types/node@npm:12.20.55" checksum: e4f86785f4092706e0d3b0edff8dca5a13b45627e4b36700acd8dfe6ad53db71928c8dee914d4276c7fd3b6ccd829aa919811c9eb708a2c8e4c6eb3701178c37 @@ -3644,6 +4021,13 @@ __metadata: languageName: node linkType: hard +"@types/semver@npm:^7.5.0": + version: 7.5.8 + resolution: "@types/semver@npm:7.5.8" + checksum: ea6f5276f5b84c55921785a3a27a3cd37afee0111dfe2bcb3e03c31819c197c782598f17f0b150a69d453c9584cd14c4c4d7b9a55d2c5e6cacd4d66fdb3b3663 + languageName: node + linkType: hard + "@types/trusted-types@npm:^2.0.2": version: 2.0.3 resolution: "@types/trusted-types@npm:2.0.3" @@ -3799,6 +4183,7 @@ __metadata: version: 0.0.0-use.local resolution: "@ubiquity/contracts@workspace:packages/contracts" dependencies: + "@chainlink/contracts": ^1.2.0 "@types/command-line-args": 5.2.0 "@types/node": ^18.11.18 "@types/react-transition-group": ^4 @@ -5430,7 +5815,7 @@ __metadata: languageName: node linkType: hard -"ansi-colors@npm:^4.1.1": +"ansi-colors@npm:^4.1.1, ansi-colors@npm:^4.1.3": version: 4.1.3 resolution: "ansi-colors@npm:4.1.3" checksum: a9c2ec842038a1fabc7db9ece7d3177e2fe1c5dc6f0c51ecfbf5f39911427b89c00b5dc6b8bd95f82a26e9b16aaae2e83d45f060e98070ce4d1333038edceb0e @@ -5573,6 +5958,15 @@ __metadata: languageName: node linkType: hard +"argparse@npm:^1.0.7": + version: 1.0.10 + resolution: "argparse@npm:1.0.10" + dependencies: + sprintf-js: ~1.0.2 + checksum: 7ca6e45583a28de7258e39e13d81e925cfa25d7d4aacbf806a382d3c02fcb13403a07fb8aeef949f10a7cfe4a62da0e2e807b348a5980554cc28ee573ef95945 + languageName: node + linkType: hard + "argparse@npm:^2.0.1": version: 2.0.1 resolution: "argparse@npm:2.0.1" @@ -5939,6 +6333,15 @@ __metadata: languageName: node linkType: hard +"better-path-resolve@npm:1.0.0": + version: 1.0.0 + resolution: "better-path-resolve@npm:1.0.0" + dependencies: + is-windows: ^1.0.0 + checksum: 5392dbe04e7fe68b944eb37961d9dfa147aaac3ee9ee3f6e13d42e2c9fbe949e68d16e896c14ee9016fa5f8e6e53ec7fd8b5f01b50a32067a7d94ac9cfb9a050 + languageName: node + linkType: hard + "big.js@npm:^5.2.2": version: 5.2.2 resolution: "big.js@npm:5.2.2" @@ -6081,6 +6484,15 @@ __metadata: languageName: node linkType: hard +"braces@npm:^3.0.3": + version: 3.0.3 + resolution: "braces@npm:3.0.3" + dependencies: + fill-range: ^7.1.1 + checksum: b95aa0b3bd909f6cd1720ffcf031aeaf46154dd88b4da01f9a1d3f7ea866a79eba76a6d01cbc3c422b2ee5cdc39a4f02491058d5df0d7bf6e6a162a832df1f69 + languageName: node + linkType: hard + "brorand@npm:^1.1.0": version: 1.1.0 resolution: "brorand@npm:1.1.0" @@ -6239,6 +6651,13 @@ __metadata: languageName: node linkType: hard +"bufio@npm:^1.0.7": + version: 1.2.1 + resolution: "bufio@npm:1.2.1" + checksum: b6e1216f4a5877617a3580b83807d8b96c794c015bc2d5eb9e70e152dc79fe923517472bd96df3d5b8feb59a0e25e2aa3cd8a70b8f90905b92d86f2e5719ed68 + languageName: node + linkType: hard + "bunyan-blackhole@npm:^1.1.1": version: 1.1.1 resolution: "bunyan-blackhole@npm:1.1.1" @@ -6407,6 +6826,21 @@ __metadata: languageName: node linkType: hard +"chai@npm:^4.3.4": + version: 4.5.0 + resolution: "chai@npm:4.5.0" + dependencies: + assertion-error: ^1.1.0 + check-error: ^1.0.3 + deep-eql: ^4.1.3 + get-func-name: ^2.0.2 + loupe: ^2.3.6 + pathval: ^1.1.1 + type-detect: ^4.1.0 + checksum: 70e5a8418a39e577e66a441cc0ce4f71fd551a650a71de30dd4e3e31e75ed1f5aa7119cf4baf4a2cb5e85c0c6befdb4d8a05811fad8738c1a6f3aa6a23803821 + languageName: node + linkType: hard + "chai@npm:^4.3.7": version: 4.3.7 resolution: "chai@npm:4.3.7" @@ -6429,7 +6863,7 @@ __metadata: languageName: node linkType: hard -"chalk@npm:^2.0.0, chalk@npm:^2.4.1, chalk@npm:^2.4.2": +"chalk@npm:^2.0.0, chalk@npm:^2.1.0, chalk@npm:^2.4.1, chalk@npm:^2.4.2": version: 2.4.2 resolution: "chalk@npm:2.4.2" dependencies: @@ -6450,6 +6884,13 @@ __metadata: languageName: node linkType: hard +"chardet@npm:^0.7.0": + version: 0.7.0 + resolution: "chardet@npm:0.7.0" + checksum: 6fd5da1f5d18ff5712c1e0aed41da200d7c51c28f11b36ee3c7b483f3696dabc08927fc6b227735eb8f0e1215c9a8abd8154637f3eff8cada5959df7f58b024d + languageName: node + linkType: hard + "check-error@npm:^1.0.2": version: 1.0.2 resolution: "check-error@npm:1.0.2" @@ -6457,6 +6898,15 @@ __metadata: languageName: node linkType: hard +"check-error@npm:^1.0.3": + version: 1.0.3 + resolution: "check-error@npm:1.0.3" + dependencies: + get-func-name: ^2.0.2 + checksum: e2131025cf059b21080f4813e55b3c480419256914601750b0fee3bd9b2b8315b531e551ef12560419b8b6d92a3636511322752b1ce905703239e7cc451b6399 + languageName: node + linkType: hard + "chokidar@npm:3.5.3, chokidar@npm:^3.4.0, chokidar@npm:^3.5.2, chokidar@npm:^3.5.3": version: 3.5.3 resolution: "chokidar@npm:3.5.3" @@ -6490,6 +6940,13 @@ __metadata: languageName: node linkType: hard +"ci-info@npm:^3.7.0": + version: 3.9.0 + resolution: "ci-info@npm:3.9.0" + checksum: 6b19dc9b2966d1f8c2041a838217299718f15d6c4b63ae36e4674edd2bee48f780e94761286a56aa59eb305a85fbea4ddffb7630ec063e7ec7e7e5ad42549a87 + languageName: node + linkType: hard + "cids@npm:^1.0.0": version: 1.1.9 resolution: "cids@npm:1.1.9" @@ -7274,6 +7731,13 @@ __metadata: languageName: node linkType: hard +"dataloader@npm:^1.4.0": + version: 1.4.0 + resolution: "dataloader@npm:1.4.0" + checksum: e2c93d43afde68980efc0cd9ff48e9851116e27a9687f863e02b56d46f7e7868cc762cd6dcbaf4197e1ca850a03651510c165c2ae24b8e9843fd894002ad0e20 + languageName: node + linkType: hard + "debounce@npm:^1.2.1": version: 1.2.1 resolution: "debounce@npm:1.2.1" @@ -7358,6 +7822,15 @@ __metadata: languageName: node linkType: hard +"deep-eql@npm:^4.1.3": + version: 4.1.4 + resolution: "deep-eql@npm:4.1.4" + dependencies: + type-detect: ^4.0.0 + checksum: 01c3ca78ff40d79003621b157054871411f94228ceb9b2cab78da913c606631c46e8aa79efc4aa0faf3ace3092acd5221255aab3ef0e8e7b438834f0ca9a16c7 + languageName: node + linkType: hard + "deep-extend@npm:^0.6.0, deep-extend@npm:~0.6.0": version: 0.6.0 resolution: "deep-extend@npm:0.6.0" @@ -7431,6 +7904,13 @@ __metadata: languageName: node linkType: hard +"detect-indent@npm:^6.0.0": + version: 6.1.0 + resolution: "detect-indent@npm:6.1.0" + checksum: ab953a73c72dbd4e8fc68e4ed4bfd92c97eb6c43734af3900add963fd3a9316f3bc0578b018b24198d4c31a358571eff5f0656e81a1f3b9ad5c547d58b2d093d + languageName: node + linkType: hard + "diff@npm:5.0.0": version: 5.0.0 resolution: "diff@npm:5.0.0" @@ -7517,6 +7997,13 @@ __metadata: languageName: node linkType: hard +"dotenv@npm:^8.1.0": + version: 8.6.0 + resolution: "dotenv@npm:8.6.0" + checksum: 38e902c80b0666ab59e9310a3d24ed237029a7ce34d976796349765ac96b8d769f6df19090f1f471b77a25ca391971efde8a1ea63bb83111bd8bec8e5cc9b2cd + languageName: node + linkType: hard + "dtrace-provider@npm:~0.8": version: 0.8.8 resolution: "dtrace-provider@npm:0.8.8" @@ -7987,7 +8474,7 @@ __metadata: languageName: node linkType: hard -"esprima@npm:^4.0.1": +"esprima@npm:^4.0.0, esprima@npm:^4.0.1": version: 4.0.1 resolution: "esprima@npm:4.0.1" bin: @@ -8303,6 +8790,24 @@ __metadata: languageName: node linkType: hard +"extendable-error@npm:^0.1.5": + version: 0.1.7 + resolution: "extendable-error@npm:0.1.7" + checksum: 80478be7429a1675d2085f701239796bab3230ed6f2fb1b138fbabec24bea6516b7c5ceb6e9c209efcc9c089948d93715703845653535f8e8a49655066a9255e + languageName: node + linkType: hard + +"external-editor@npm:^3.1.0": + version: 3.1.0 + resolution: "external-editor@npm:3.1.0" + dependencies: + chardet: ^0.7.0 + iconv-lite: ^0.4.24 + tmp: ^0.0.33 + checksum: 1c2a616a73f1b3435ce04030261bed0e22d4737e14b090bb48e58865da92529c9f2b05b893de650738d55e692d071819b45e1669259b2b354bc3154d27a698c7 + languageName: node + linkType: hard + "extract-files@npm:^9.0.0": version: 9.0.0 resolution: "extract-files@npm:9.0.0" @@ -8452,6 +8957,15 @@ __metadata: languageName: node linkType: hard +"fill-range@npm:^7.1.1": + version: 7.1.1 + resolution: "fill-range@npm:7.1.1" + dependencies: + to-regex-range: ^5.0.1 + checksum: b4abfbca3839a3d55e4ae5ec62e131e2e356bf4859ce8480c64c4876100f4df292a63e5bb1618e1d7460282ca2b305653064f01654474aa35c68000980f17798 + languageName: node + linkType: hard + "filter-obj@npm:^1.1.0": version: 1.1.0 resolution: "filter-obj@npm:1.1.0" @@ -8513,7 +9027,7 @@ __metadata: languageName: node linkType: hard -"find-up@npm:^4.1.0": +"find-up@npm:^4.0.0, find-up@npm:^4.1.0": version: 4.1.0 resolution: "find-up@npm:4.1.0" dependencies: @@ -8533,6 +9047,16 @@ __metadata: languageName: node linkType: hard +"find-yarn-workspace-root2@npm:1.2.16": + version: 1.2.16 + resolution: "find-yarn-workspace-root2@npm:1.2.16" + dependencies: + micromatch: ^4.0.2 + pkg-dir: ^4.2.0 + checksum: b4abdd37ab87c2172e2abab69ecbfed365d63232742cd1f0a165020fba1b200478e944ec2035c6aaf0ae142ac4c523cbf08670f45e59b242bcc295731b017825 + languageName: node + linkType: hard + "flat-cache@npm:^3.0.4": version: 3.0.4 resolution: "flat-cache@npm:3.0.4" @@ -8721,6 +9245,17 @@ __metadata: languageName: node linkType: hard +"fs-extra@npm:^8.1.0": + version: 8.1.0 + resolution: "fs-extra@npm:8.1.0" + dependencies: + graceful-fs: ^4.2.0 + jsonfile: ^4.0.0 + universalify: ^0.1.0 + checksum: bf44f0e6cea59d5ce071bba4c43ca76d216f89e402dc6285c128abc0902e9b8525135aa808adad72c9d5d218e9f4bcc63962815529ff2f684ad532172a284880 + languageName: node + linkType: hard + "fs-minipass@npm:^2.0.0, fs-minipass@npm:^2.1.0": version: 2.1.0 resolution: "fs-minipass@npm:2.1.0" @@ -8842,6 +9377,13 @@ __metadata: languageName: node linkType: hard +"get-func-name@npm:^2.0.1, get-func-name@npm:^2.0.2": + version: 2.0.2 + resolution: "get-func-name@npm:2.0.2" + checksum: 3f62f4c23647de9d46e6f76d2b3eafe58933a9b3830c60669e4180d6c601ce1b4aa310ba8366143f55e52b139f992087a9f0647274e8745621fa2af7e0acf13b + languageName: node + linkType: hard + "get-intrinsic@npm:^1.0.2, get-intrinsic@npm:^1.1.1, get-intrinsic@npm:^1.1.3, get-intrinsic@npm:^1.2.0": version: 1.2.0 resolution: "get-intrinsic@npm:1.2.0" @@ -9063,7 +9605,7 @@ __metadata: languageName: node linkType: hard -"globby@npm:^11.1.0": +"globby@npm:^11.0.0, globby@npm:^11.1.0": version: 11.1.0 resolution: "globby@npm:11.1.0" dependencies: @@ -9125,7 +9667,7 @@ __metadata: languageName: node linkType: hard -"graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.1.9, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.3, graceful-fs@npm:^4.2.6": +"graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.5, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.1.9, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.3, graceful-fs@npm:^4.2.6": version: 4.2.11 resolution: "graceful-fs@npm:4.2.11" checksum: ac85f94da92d8eb6b7f5a8b20ce65e43d66761c55ce85ac96df6865308390da45a8d3f0296dd3a663de65d30ba497bd46c696cc1e248c72b13d6d567138a4fc7 @@ -9473,6 +10015,13 @@ __metadata: languageName: node linkType: hard +"human-id@npm:^1.0.2": + version: 1.0.2 + resolution: "human-id@npm:1.0.2" + checksum: 95ee57ffae849f008e2ef3fe6e437be8c999861b4256f18c3b194c8928670a8a149e0576917105d5fd77e5edbb621c5a4736fade20bb7bf130113c1ebc95cb74 + languageName: node + linkType: hard + "human-signals@npm:^2.1.0": version: 2.1.0 resolution: "human-signals@npm:2.1.0" @@ -9505,7 +10054,7 @@ __metadata: languageName: node linkType: hard -"iconv-lite@npm:0.4.24": +"iconv-lite@npm:0.4.24, iconv-lite@npm:^0.4.24": version: 0.4.24 resolution: "iconv-lite@npm:0.4.24" dependencies: @@ -9927,6 +10476,15 @@ __metadata: languageName: node linkType: hard +"is-subdir@npm:^1.1.1": + version: 1.2.0 + resolution: "is-subdir@npm:1.2.0" + dependencies: + better-path-resolve: 1.0.0 + checksum: 31029a383972bff4cc4f1bd1463fd04dde017e0a04ae3a6f6e08124a90c6c4656312d593101b0f38805fa3f3c8f6bc4583524bbf72c50784fa5ca0d3e5a76279 + languageName: node + linkType: hard + "is-symbol@npm:^1.0.2, is-symbol@npm:^1.0.3": version: 1.0.4 resolution: "is-symbol@npm:1.0.4" @@ -9981,7 +10539,7 @@ __metadata: languageName: node linkType: hard -"is-windows@npm:^1.0.1": +"is-windows@npm:^1.0.0, is-windows@npm:^1.0.1": version: 1.0.2 resolution: "is-windows@npm:1.0.2" checksum: 438b7e52656fe3b9b293b180defb4e448088e7023a523ec21a91a80b9ff8cdb3377ddb5b6e60f7c7de4fa8b63ab56e121b6705fe081b3cf1b828b0a380009ad7 @@ -10161,6 +10719,18 @@ __metadata: languageName: node linkType: hard +"js-yaml@npm:^3.13.0, js-yaml@npm:^3.13.1, js-yaml@npm:^3.6.1": + version: 3.14.1 + resolution: "js-yaml@npm:3.14.1" + dependencies: + argparse: ^1.0.7 + esprima: ^4.0.0 + bin: + js-yaml: bin/js-yaml.js + checksum: bef146085f472d44dee30ec34e5cf36bf89164f5d585435a3d3da89e52622dff0b188a580e4ad091c3341889e14cb88cac6e4deb16dc5b1e9623bb0601fc255c + languageName: node + linkType: hard + "jsbi@npm:^3.1.4, jsbi@npm:^3.2.0": version: 3.2.5 resolution: "jsbi@npm:3.2.5" @@ -10532,6 +11102,18 @@ __metadata: languageName: node linkType: hard +"load-yaml-file@npm:^0.2.0": + version: 0.2.0 + resolution: "load-yaml-file@npm:0.2.0" + dependencies: + graceful-fs: ^4.1.5 + js-yaml: ^3.13.0 + pify: ^4.0.1 + strip-bom: ^3.0.0 + checksum: d86d7ec7b15a1c35b40fb0d8abe710a7de83e0c1186c1d35a7eaaf8581611828089a3e706f64560c2939762bc73f18a7b85aed9335058c640e033933cf317f11 + languageName: node + linkType: hard + "locate-path@npm:^2.0.0": version: 2.0.0 resolution: "locate-path@npm:2.0.0" @@ -10726,6 +11308,15 @@ __metadata: languageName: node linkType: hard +"loupe@npm:^2.3.6": + version: 2.3.7 + resolution: "loupe@npm:2.3.7" + dependencies: + get-func-name: ^2.0.1 + checksum: 96c058ec7167598e238bb7fb9def2f9339215e97d6685d9c1e3e4bdb33d14600e11fe7a812cf0c003dfb73ca2df374f146280b2287cae9e8d989e9d7a69a203b + languageName: node + linkType: hard + "lowercase-keys@npm:^3.0.0": version: 3.0.0 resolution: "lowercase-keys@npm:3.0.0" @@ -10919,6 +11510,16 @@ __metadata: languageName: node linkType: hard +"micromatch@npm:^4.0.2": + version: 4.0.8 + resolution: "micromatch@npm:4.0.8" + dependencies: + braces: ^3.0.3 + picomatch: ^2.3.1 + checksum: 79920eb634e6f400b464a954fcfa589c4e7c7143209488e44baf627f9affc8b1e306f41f4f0deedde97e69cb725920879462d3e750ab3bd3c1aed675bb3a8966 + languageName: node + linkType: hard + "micromatch@npm:^4.0.4, micromatch@npm:^4.0.5": version: 4.0.5 resolution: "micromatch@npm:4.0.5" @@ -11239,6 +11840,13 @@ __metadata: languageName: node linkType: hard +"mri@npm:^1.2.0": + version: 1.2.0 + resolution: "mri@npm:1.2.0" + checksum: 83f515abbcff60150873e424894a2f65d68037e5a7fcde8a9e2b285ee9c13ac581b63cfc1e6826c4732de3aeb84902f7c1e16b7aff46cd3f897a0f757a894e85 + languageName: node + linkType: hard + "ms.macro@npm:^2.0.0": version: 2.0.0 resolution: "ms.macro@npm:2.0.0" @@ -11496,6 +12104,20 @@ __metadata: languageName: node linkType: hard +"node-fetch@npm:^2.5.0": + version: 2.7.0 + resolution: "node-fetch@npm:2.7.0" + dependencies: + whatwg-url: ^5.0.0 + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + checksum: d76d2f5edb451a3f05b15115ec89fc6be39de37c6089f1b6368df03b91e1633fd379a7e01b7ab05089a25034b2023d959b47e59759cb38d88341b2459e89d6e5 + languageName: node + linkType: hard + "node-fetch@npm:^2.6.7, node-fetch@npm:^2.6.9": version: 2.6.9 resolution: "node-fetch@npm:2.6.9" @@ -11874,6 +12496,13 @@ __metadata: languageName: node linkType: hard +"outdent@npm:^0.5.0": + version: 0.5.0 + resolution: "outdent@npm:0.5.0" + checksum: 6e6c63dd09e9890e67ef9a0b4d35df0b0b850b2059ce3f7e19e4cc1a146b26dc5d8c45df238dbf187dfffc8bd82cd07d37c697544015680bcb9f07f29a36c678 + languageName: node + linkType: hard + "p-cancelable@npm:^3.0.0": version: 3.0.0 resolution: "p-cancelable@npm:3.0.0" @@ -11881,6 +12510,15 @@ __metadata: languageName: node linkType: hard +"p-filter@npm:^2.1.0": + version: 2.1.0 + resolution: "p-filter@npm:2.1.0" + dependencies: + p-map: ^2.0.0 + checksum: 76e552ca624ce2233448d68b19eec9de42b695208121998f7e011edce71d1079a83096ee6a2078fb2a59cfa8a5c999f046edf00ebf16a8e780022010b4693234 + languageName: node + linkType: hard + "p-limit@npm:^1.1.0": version: 1.3.0 resolution: "p-limit@npm:1.3.0" @@ -11962,6 +12600,13 @@ __metadata: languageName: node linkType: hard +"p-map@npm:^2.0.0": + version: 2.1.0 + resolution: "p-map@npm:2.1.0" + checksum: 9e3ad3c9f6d75a5b5661bcad78c91f3a63849189737cd75e4f1225bf9ac205194e5c44aac2ef6f09562b1facdb9bd1425584d7ac375bfaa17b3f1a142dab936d + languageName: node + linkType: hard + "p-map@npm:^4.0.0": version: 4.0.0 resolution: "p-map@npm:4.0.0" @@ -12237,6 +12882,13 @@ __metadata: languageName: node linkType: hard +"pify@npm:^4.0.1": + version: 4.0.1 + resolution: "pify@npm:4.0.1" + checksum: 9c4e34278cb09987685fa5ef81499c82546c033713518f6441778fbec623fc708777fe8ac633097c72d88470d5963094076c7305cafc7ad340aae27cfacd856b + languageName: node + linkType: hard + "pify@npm:^5.0.0": version: 5.0.0 resolution: "pify@npm:5.0.0" @@ -12293,6 +12945,15 @@ __metadata: languageName: node linkType: hard +"pkg-dir@npm:^4.2.0": + version: 4.2.0 + resolution: "pkg-dir@npm:4.2.0" + dependencies: + find-up: ^4.0.0 + checksum: 9863e3f35132bf99ae1636d31ff1e1e3501251d480336edb1c211133c8d58906bed80f154a1d723652df1fda91e01c7442c2eeaf9dc83157c7ae89087e43c8d6 + languageName: node + linkType: hard + "pkg-dir@npm:^7.0.0": version: 7.0.0 resolution: "pkg-dir@npm:7.0.0" @@ -12396,6 +13057,18 @@ __metadata: languageName: node linkType: hard +"preferred-pm@npm:^3.0.0": + version: 3.1.4 + resolution: "preferred-pm@npm:3.1.4" + dependencies: + find-up: ^5.0.0 + find-yarn-workspace-root2: 1.2.16 + path-exists: ^4.0.0 + which-pm: ^2.2.0 + checksum: bde91a492cc2662a5229cdc7a0fe35584674d4200227cf2db4ea9fc726874d2ec469f83ac27f0fb13cf215a6ac0eeabd5d6ac0f6995ea29af4e63ae5fb71b65c + languageName: node + linkType: hard + "prelude-ls@npm:^1.2.1": version: 1.2.1 resolution: "prelude-ls@npm:1.2.1" @@ -12434,7 +13107,7 @@ __metadata: languageName: node linkType: hard -"prettier@npm:2.8.8, prettier@npm:^2.8.3": +"prettier@npm:2.8.8, prettier@npm:^2.7.1, prettier@npm:^2.8.3": version: 2.8.8 resolution: "prettier@npm:2.8.8" bin: @@ -12958,6 +13631,18 @@ __metadata: languageName: node linkType: hard +"read-yaml-file@npm:^1.1.0": + version: 1.1.0 + resolution: "read-yaml-file@npm:1.1.0" + dependencies: + graceful-fs: ^4.1.5 + js-yaml: ^3.6.1 + pify: ^4.0.1 + strip-bom: ^3.0.0 + checksum: 41ee5f075507ef0403328dd54e225a61c3149f915675ce7fd0fd791ddcce2e6c30a9fe0f76ffa7a465c1c157b9b4ad8ded1dcf47dc3b396103eeb013490bbc2e + languageName: node + linkType: hard + "readable-stream@npm:3, readable-stream@npm:^3.0.0, readable-stream@npm:^3.1.1, readable-stream@npm:^3.5.0, readable-stream@npm:^3.6.0": version: 3.6.2 resolution: "readable-stream@npm:3.6.2" @@ -13075,6 +13760,13 @@ __metadata: languageName: node linkType: hard +"regenerator-runtime@npm:^0.14.0": + version: 0.14.1 + resolution: "regenerator-runtime@npm:0.14.1" + checksum: 9f57c93277b5585d3c83b0cf76be47b473ae8c6d9142a46ce8b0291a04bb2cf902059f0f8445dcabb3fb7378e5fe4bb4ea1e008876343d42e46d3b484534ce38 + languageName: node + linkType: hard + "regexp.prototype.flags@npm:^1.4.3": version: 1.4.3 resolution: "regexp.prototype.flags@npm:1.4.3" @@ -13557,6 +14249,15 @@ __metadata: languageName: node linkType: hard +"semver@npm:^7.5.3, semver@npm:^7.6.2": + version: 7.6.3 + resolution: "semver@npm:7.6.3" + bin: + semver: bin/semver.js + checksum: 4110ec5d015c9438f322257b1c51fe30276e5f766a3f64c09edd1d7ea7118ecbc3f379f3b69032bacf13116dc7abc4ad8ce0d7e2bd642e26b0d271b56b61a7d8 + languageName: node + linkType: hard + "semver@npm:~7.0.0": version: 7.0.0 resolution: "semver@npm:7.0.0" @@ -13867,6 +14568,16 @@ __metadata: languageName: node linkType: hard +"spawndamnit@npm:^2.0.0": + version: 2.0.0 + resolution: "spawndamnit@npm:2.0.0" + dependencies: + cross-spawn: ^5.1.0 + signal-exit: ^3.0.2 + checksum: c74b5e264ee5bc13d55692fd422d74c282e4607eb04ac64d19d06796718d89b14921620fa4237ec5635e7acdff21461670ff19850f210225410a353cad0d7fed + languageName: node + linkType: hard + "spdx-correct@npm:^3.0.0": version: 3.2.0 resolution: "spdx-correct@npm:3.2.0" @@ -13924,6 +14635,13 @@ __metadata: languageName: node linkType: hard +"sprintf-js@npm:~1.0.2": + version: 1.0.3 + resolution: "sprintf-js@npm:1.0.3" + checksum: 19d79aec211f09b99ec3099b5b2ae2f6e9cdefe50bc91ac4c69144b6d3928a640bb6ae5b3def70c2e85a2c3d9f5ec2719921e3a59d3ca3ef4b2fd1a4656a0df3 + languageName: node + linkType: hard + "sshpk@npm:^1.7.0": version: 1.17.0 resolution: "sshpk@npm:1.17.0" @@ -14404,6 +15122,13 @@ __metadata: languageName: node linkType: hard +"term-size@npm:^2.1.0": + version: 2.2.1 + resolution: "term-size@npm:2.2.1" + checksum: 1ed981335483babc1e8206f843e06bd2bf89b85f0bf5a9a9d928033a0fcacdba183c03ba7d91814643015543ba002f1339f7112402a21da8f24b6c56b062a5a9 + languageName: node + linkType: hard + "text-encoding-utf-8@npm:^1.0.2": version: 1.0.2 resolution: "text-encoding-utf-8@npm:1.0.2" @@ -14487,7 +15212,7 @@ __metadata: languageName: node linkType: hard -"tmp@npm:0.0.33": +"tmp@npm:0.0.33, tmp@npm:^0.0.33": version: 0.0.33 resolution: "tmp@npm:0.0.33" dependencies: @@ -14742,6 +15467,13 @@ __metadata: languageName: node linkType: hard +"type-detect@npm:^4.1.0": + version: 4.1.0 + resolution: "type-detect@npm:4.1.0" + checksum: 3b32f873cd02bc7001b00a61502b7ddc4b49278aabe68d652f732e1b5d768c072de0bc734b427abf59d0520a5f19a2e07309ab921ef02018fa1cb4af155cdb37 + languageName: node + linkType: hard + "type-fest@npm:^0.18.0": version: 0.18.1 resolution: "type-fest@npm:0.18.1" @@ -15251,6 +15983,16 @@ __metadata: languageName: node linkType: hard +"which-pm@npm:^2.2.0": + version: 2.2.0 + resolution: "which-pm@npm:2.2.0" + dependencies: + load-yaml-file: ^0.2.0 + path-exists: ^4.0.0 + checksum: 1562c8fc84c5bc623d5ff9796f0bce5403b5119e79822bb3d5d3b43ad47ae5db0130060d45ae91d432d8993ef6d7529a06de97e0674ac57b0674eb6079c07cf2 + languageName: node + linkType: hard + "which-typed-array@npm:^1.1.2, which-typed-array@npm:^1.1.9": version: 1.1.9 resolution: "which-typed-array@npm:1.1.9"