From 04dcd62827bd695caca6e5db883ba044c2e20318 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8r=E2=88=82=C2=A1?= <4456749@users.noreply.github.com> Date: Fri, 17 Nov 2023 16:20:26 +0000 Subject: [PATCH 01/29] Handling feedback, round 1 --- packages/contracts/src/GovernancePluginsSetup.sol | 11 +++++------ .../contracts/src/MemberAccessExecuteCondition.sol | 6 ++---- packages/contracts/src/SpacePluginSetup.sol | 9 ++++----- 3 files changed, 11 insertions(+), 15 deletions(-) diff --git a/packages/contracts/src/GovernancePluginsSetup.sol b/packages/contracts/src/GovernancePluginsSetup.sol index 5945b05..399f6ef 100644 --- a/packages/contracts/src/GovernancePluginsSetup.sol +++ b/packages/contracts/src/GovernancePluginsSetup.sol @@ -4,6 +4,7 @@ pragma solidity ^0.8.8; import {PermissionLib} from "@aragon/osx/core/permission/PermissionLib.sol"; import {DAO} from "@aragon/osx/core/dao/DAO.sol"; +import {IDAO} from "@aragon/osx/core/dao/IDAO.sol"; import {PluginSetup, IPluginSetup} from "@aragon/osx/framework/plugin/setup/PluginSetup.sol"; import {MemberAccessPlugin} from "./MemberAccessPlugin.sol"; import {MemberAccessExecuteCondition} from "./MemberAccessExecuteCondition.sol"; @@ -41,11 +42,9 @@ contract GovernancePluginsSetup is PluginSetup { // Deploy the main voting plugin mainVotingPlugin = createERC1967Proxy( mainVotingPluginImplementation, - abi.encodeWithSelector( - MainVotingPlugin.initialize.selector, - _dao, - _votingSettings, - _initialEditors + abi.encodeCall( + MainVotingPlugin.initialize, + (IDAO(_dao), _votingSettings, _initialEditors) ) ); @@ -56,7 +55,7 @@ contract GovernancePluginsSetup is PluginSetup { address _memberAccessPlugin = createERC1967Proxy( memberAccessPluginImplementation, - abi.encodeWithSelector(MemberAccessPlugin.initialize.selector, _dao, _multisigSettings) + abi.encodeCall(MemberAccessPlugin.initialize, (IDAO(_dao), _multisigSettings)) ); // Condition contract (member access plugin execute) diff --git a/packages/contracts/src/MemberAccessExecuteCondition.sol b/packages/contracts/src/MemberAccessExecuteCondition.sol index 37063ac..5d6d84c 100644 --- a/packages/contracts/src/MemberAccessExecuteCondition.sol +++ b/packages/contracts/src/MemberAccessExecuteCondition.sol @@ -17,10 +17,8 @@ contract MemberAccessExecuteCondition is PermissionCondition { targetContract = _targetContract; } - function getSelector(bytes memory _data) public pure returns (bytes4 sig) { - assembly { - sig := mload(add(_data, 32)) - } + function getSelector(bytes calldata _data) public pure returns (bytes4 selector) { + selector = bytes4(_data[:4]); } /// @notice Checks whether the current action wants to grant membership on the predefined address diff --git a/packages/contracts/src/SpacePluginSetup.sol b/packages/contracts/src/SpacePluginSetup.sol index 06d8e8a..21e033e 100644 --- a/packages/contracts/src/SpacePluginSetup.sol +++ b/packages/contracts/src/SpacePluginSetup.sol @@ -2,6 +2,7 @@ pragma solidity ^0.8.8; +import {IDAO} from "@aragon/osx/core/dao/IDAO.sol"; import {PermissionLib} from "@aragon/osx/core/permission/PermissionLib.sol"; import {PluginSetup, IPluginSetup} from "@aragon/osx/framework/plugin/setup/PluginSetup.sol"; import {SpacePlugin} from "./SpacePlugin.sol"; @@ -31,11 +32,9 @@ contract SpacePluginSetup is PluginSetup { // Deploy new plugin instance plugin = createERC1967Proxy( pluginImplementation, - abi.encodeWithSelector( - SpacePlugin.initialize.selector, - _dao, - _firstBlockContentUri, - _predecessorAddress + abi.encodeCall( + SpacePlugin.initialize, + (IDAO(_dao), _firstBlockContentUri, _predecessorAddress) ) ); From 20898c5e4f38c7720f84a2c7393ede0e690655a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8r=E2=88=82=C2=A1?= <4456749@users.noreply.github.com> Date: Fri, 17 Nov 2023 17:42:05 +0000 Subject: [PATCH 02/29] Addressing internal feedback, round 2 --- README.md | 6 ++-- package.json | 1 - packages/contracts/package.json | 5 ++-- packages/contracts/src/MainVotingPlugin.sol | 4 +-- packages/contracts/src/MemberAccessPlugin.sol | 28 +++++++++++-------- .../src/PersonalSpaceAdminPlugin.sol | 2 +- .../src/PersonalSpaceAdminPluginSetup.sol | 2 +- 7 files changed, 25 insertions(+), 23 deletions(-) diff --git a/README.md b/README.md index 96503ed..b0c1542 100644 --- a/README.md +++ b/README.md @@ -47,11 +47,11 @@ The current repository provides the plugins necessary to cover two use cases: - Calling `approve()` makes the proposal succeed - Calling `reject()` cancels the proposal 3. A succeeded proposal is executed automatically - - This makes the DAO call `grant()` on itself to grant the `MEMBERSHIP_PERMISSION` to the intended address + - This makes the DAO call `grant()` on itself to grant the `MEMBER_PERMISSION_ID` to the intended address ### Creating proposals for a space -1. An editor or a wallet with the `MEMBERSHIP_PERMISSION` granted, creates a proposal +1. An editor or a wallet with the `MEMBER_PERMISSION_ID` granted, creates a proposal 2. Editors can vote on it for a predefined amount of time 3. If the proposal exceeds the required quorum and support, the proposal succeeds 4. Succeeded proposals can be executed by anyone @@ -243,7 +243,7 @@ Inherited: ### Member Access plugin -Provides a simple way for any address to request membership on a space. It is a adapted version of Aragon's [Multisig plugin](https://github.com/aragon/osx/blob/develop/packages/contracts/src/plugins/governance/multisig/Multisig.sol). It creates a proposal to grant `MEMBERSHIP_PERMISSION` to an address on the main voting plugin and Editors can approve or reject it. Once approved, the permission allows to create proposals on the other plugin. +Provides a simple way for any address to request membership on a space. It is a adapted version of Aragon's [Multisig plugin](https://github.com/aragon/osx/blob/develop/packages/contracts/src/plugins/governance/multisig/Multisig.sol). It creates a proposal to grant `MEMBER_PERMISSION_ID` to an address on the main voting plugin and Editors can approve or reject it. Once approved, the permission allows to create proposals on the other plugin. #### Methods diff --git a/package.json b/package.json index c4be9d7..7034c6e 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,4 @@ { - "name": "@aragon/osx-plugin-template-hardhat", "license": "AGPL-3.0-or-later", "private": true, "workspaces": { diff --git a/packages/contracts/package.json b/packages/contracts/package.json index ccdc35c..b28e3f1 100644 --- a/packages/contracts/package.json +++ b/packages/contracts/package.json @@ -38,9 +38,8 @@ "dependencies": { "@aragon/osx": "^1.3.0-rc0.1", "@aragon/osx-ethers": "^1.3.0-rc0.1", - "@ensdomains/ens-contracts": "0.0.20", - "@openzeppelin/contracts": "^4.8.2", - "@openzeppelin/contracts-upgradeable": "^4.8.2", + "@openzeppelin/contracts": "^4.9.3", + "@openzeppelin/contracts-upgradeable": "^4.9.3", "@openzeppelin/hardhat-upgrades": "^1.27.0" }, "files": [ diff --git a/packages/contracts/src/MainVotingPlugin.sol b/packages/contracts/src/MainVotingPlugin.sol index ba0e63c..1e6e739 100644 --- a/packages/contracts/src/MainVotingPlugin.sol +++ b/packages/contracts/src/MainVotingPlugin.sol @@ -19,7 +19,7 @@ bytes4 constant MAIN_SPACE_VOTING_INTERFACE_ID = MainVotingPlugin.initialize.sel MainVotingPlugin.isEditor.selector; /// @title MainVotingPlugin -/// @author Aragon Association - 2021-2023. +/// @author Aragon - 2023 /// @notice The majority voting implementation using a list of member addresses. /// @dev This contract inherits from `MajorityVotingBase` and implements the `IMajorityVoting` interface. contract MainVotingPlugin is IMembership, Addresslist, MajorityVotingBase { @@ -274,5 +274,5 @@ contract MainVotingPlugin is IMembership, Addresslist, MajorityVotingBase { /// @dev This empty reserved space is put in place to allow future versions to add new /// variables without shifting down storage in the inheritance chain. /// https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps - uint256[50] private __gap; + uint256[49] private __gap; } diff --git a/packages/contracts/src/MemberAccessPlugin.sol b/packages/contracts/src/MemberAccessPlugin.sol index d2d779a..bd22e29 100644 --- a/packages/contracts/src/MemberAccessPlugin.sol +++ b/packages/contracts/src/MemberAccessPlugin.sol @@ -19,7 +19,7 @@ bytes4 constant MEMBER_ACCESS_INTERFACE_ID = MemberAccessPlugin.initialize.selec MemberAccessPlugin.getProposal.selector; /// @title Multisig - Release 1, Build 1 -/// @author Aragon Association - 2022-2023 +/// @author Aragon - 2023 /// @notice The on-chain multisig governance plugin in which a proposal passes if X out of Y approvals are met. contract MemberAccessPlugin is IMultisig, PluginUUPSUpgradeable, ProposalUpgradeable { using SafeCastUpgradeable for uint256; @@ -253,11 +253,13 @@ contract MemberAccessPlugin is IMultisig, PluginUUPSUpgradeable, ProposalUpgrade _actions[0] = IDAO.Action({ to: address(dao()), value: 0, - data: abi.encodeWithSelector( - PermissionManager.grant.selector, // grant() - address(multisigSettings.mainVotingPlugin), // where - _proposedMember, // who - MEMBER_PERMISSION_ID // permission ID + data: abi.encodeCall( + PermissionManager.grant, + ( + address(multisigSettings.mainVotingPlugin), // where + _proposedMember, // who + MEMBER_PERMISSION_ID // permission ID + ) ) }); @@ -282,11 +284,13 @@ contract MemberAccessPlugin is IMultisig, PluginUUPSUpgradeable, ProposalUpgrade _actions[0] = IDAO.Action({ to: address(dao()), value: 0, - data: abi.encodeWithSelector( - PermissionManager.revoke.selector, // revoke() - address(multisigSettings.mainVotingPlugin), // where - _proposedMember, // who - MEMBER_PERMISSION_ID // permission ID + data: abi.encodeCall( + PermissionManager.revoke, + ( + address(multisigSettings.mainVotingPlugin), // where + _proposedMember, // who + MEMBER_PERMISSION_ID // permission ID + ) ) }); @@ -489,5 +493,5 @@ contract MemberAccessPlugin is IMultisig, PluginUUPSUpgradeable, ProposalUpgrade /// @dev This empty reserved space is put in place to allow future versions to add new /// variables without shifting down storage in the inheritance chain. /// https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps - uint256[50] private __gap; + uint256[47] private __gap; } diff --git a/packages/contracts/src/PersonalSpaceAdminPlugin.sol b/packages/contracts/src/PersonalSpaceAdminPlugin.sol index 239db95..a0acd10 100644 --- a/packages/contracts/src/PersonalSpaceAdminPlugin.sol +++ b/packages/contracts/src/PersonalSpaceAdminPlugin.sol @@ -8,7 +8,7 @@ import {IDAO} from "@aragon/osx/core/dao/IDAO.sol"; import {EDITOR_PERMISSION_ID, MEMBER_PERMISSION_ID} from "./constants.sol"; /// @title PersonalSpaceAdminPlugin -/// @author Aragon Association - 2022-2023 +/// @author Aragon - 2023 /// @notice The admin governance plugin giving execution permission on the DAO to a single address. contract PersonalSpaceAdminPlugin is PluginCloneable, ProposalUpgradeable { using SafeCastUpgradeable for uint256; diff --git a/packages/contracts/src/PersonalSpaceAdminPluginSetup.sol b/packages/contracts/src/PersonalSpaceAdminPluginSetup.sol index cbe3302..640519e 100644 --- a/packages/contracts/src/PersonalSpaceAdminPluginSetup.sol +++ b/packages/contracts/src/PersonalSpaceAdminPluginSetup.sol @@ -12,7 +12,7 @@ import {PersonalSpaceAdminPlugin} from "./PersonalSpaceAdminPlugin.sol"; import {EDITOR_PERMISSION_ID} from "./constants.sol"; /// @title PersonalSpaceAdminPluginSetup -/// @author Aragon Association - 2022-2023 +/// @author Aragon - 2023 /// @notice The setup contract of the `PersonalSpaceAdminPlugin` plugin. contract PersonalSpaceAdminPluginSetup is PluginSetup { using Clones for address; From b048e9de39c34f7e3fdd21eab28ee9f51c2aba05 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8r=E2=88=82=C2=A1?= <4456749@users.noreply.github.com> Date: Wed, 22 Nov 2023 00:34:08 +0000 Subject: [PATCH 03/29] New plugin update approach (WIP) --- .../contracts/src/GovernancePluginsSetup.sol | 85 +++++------ .../src/OnlyPluginUpgraderCondition.sol | 137 ++++++++++++++++++ 2 files changed, 174 insertions(+), 48 deletions(-) create mode 100644 packages/contracts/src/OnlyPluginUpgraderCondition.sol diff --git a/packages/contracts/src/GovernancePluginsSetup.sol b/packages/contracts/src/GovernancePluginsSetup.sol index 399f6ef..9ce9fd2 100644 --- a/packages/contracts/src/GovernancePluginsSetup.sol +++ b/packages/contracts/src/GovernancePluginsSetup.sol @@ -6,8 +6,10 @@ import {PermissionLib} from "@aragon/osx/core/permission/PermissionLib.sol"; import {DAO} from "@aragon/osx/core/dao/DAO.sol"; import {IDAO} from "@aragon/osx/core/dao/IDAO.sol"; import {PluginSetup, IPluginSetup} from "@aragon/osx/framework/plugin/setup/PluginSetup.sol"; +import {PluginSetupProcessor} from "@aragon/osx/framework/plugin/setup/PluginSetupProcessor.sol"; import {MemberAccessPlugin} from "./MemberAccessPlugin.sol"; import {MemberAccessExecuteCondition} from "./MemberAccessExecuteCondition.sol"; +import {OnlyPluginUpgraderCondition} from "./OnlyPluginUpgraderCondition.sol"; import {MainVotingPlugin} from "./MainVotingPlugin.sol"; import {MajorityVotingBase} from "@aragon/osx/plugins/governance/majority-voting/MajorityVotingBase.sol"; @@ -16,11 +18,13 @@ import {MajorityVotingBase} from "@aragon/osx/plugins/governance/majority-voting contract GovernancePluginsSetup is PluginSetup { address private immutable mainVotingPluginImplementation; address public immutable memberAccessPluginImplementation; + address private immutable pluginSetupProcessor; /// @notice Thrown when the array of helpers does not have the correct size error InvalidHelpers(uint256 actualLength); - constructor() { + constructor(PluginSetupProcessor _pluginSetupProcessor) { + pluginSetupProcessor = address(_pluginSetupProcessor); mainVotingPluginImplementation = address(new MainVotingPlugin()); memberAccessPluginImplementation = address(new MemberAccessPlugin()); } @@ -30,7 +34,7 @@ contract GovernancePluginsSetup is PluginSetup { function prepareInstallation( address _dao, bytes memory _data - ) external returns (address mainVotingPlugin, PreparedSetupData memory preparedSetupData) { + ) external returns (address _mainVotingPlugin, PreparedSetupData memory _preparedSetupData) { // Decode the custom installation parameters ( MajorityVotingBase.VotingSettings memory _votingSettings, @@ -40,7 +44,7 @@ contract GovernancePluginsSetup is PluginSetup { ) = decodeInstallationParams(_data); // Deploy the main voting plugin - mainVotingPlugin = createERC1967Proxy( + _mainVotingPlugin = createERC1967Proxy( mainVotingPluginImplementation, abi.encodeCall( MainVotingPlugin.initialize, @@ -51,7 +55,7 @@ contract GovernancePluginsSetup is PluginSetup { // Deploy the member access plugin MemberAccessPlugin.MultisigSettings memory _multisigSettings; _multisigSettings.proposalDuration = _memberAccessProposalDuration; - _multisigSettings.mainVotingPlugin = MainVotingPlugin(mainVotingPlugin); + _multisigSettings.mainVotingPlugin = MainVotingPlugin(_mainVotingPlugin); address _memberAccessPlugin = createERC1967Proxy( memberAccessPluginImplementation, @@ -59,26 +63,28 @@ contract GovernancePluginsSetup is PluginSetup { ); // Condition contract (member access plugin execute) - address conditionContract = address(new MemberAccessExecuteCondition(mainVotingPlugin)); + address _memberAccessExecuteCondition = address( + new MemberAccessExecuteCondition(_mainVotingPlugin) + ); // List the requested permissions PermissionLib.MultiTargetPermission[] memory permissions = new PermissionLib.MultiTargetPermission[]( - _pluginUpgrader == address(0x0) ? 7 : 9 + _pluginUpgrader == address(0x0) ? 5 : 6 ); // The main voting plugin can execute on the DAO permissions[0] = PermissionLib.MultiTargetPermission({ operation: PermissionLib.Operation.Grant, where: _dao, - who: mainVotingPlugin, + who: _mainVotingPlugin, condition: PermissionLib.NO_CONDITION, permissionId: DAO(payable(_dao)).EXECUTE_PERMISSION_ID() }); // The DAO can update the main voting plugin settings permissions[1] = PermissionLib.MultiTargetPermission({ operation: PermissionLib.Operation.Grant, - where: mainVotingPlugin, + where: _mainVotingPlugin, who: _dao, condition: PermissionLib.NO_CONDITION, permissionId: MainVotingPlugin(mainVotingPluginImplementation) @@ -87,33 +93,23 @@ contract GovernancePluginsSetup is PluginSetup { // The DAO can manage the list of addresses permissions[2] = PermissionLib.MultiTargetPermission({ operation: PermissionLib.Operation.Grant, - where: mainVotingPlugin, + where: _mainVotingPlugin, who: _dao, condition: PermissionLib.NO_CONDITION, permissionId: MainVotingPlugin(mainVotingPluginImplementation) .UPDATE_ADDRESSES_PERMISSION_ID() }); - // The DAO can upgrade the main voting plugin - permissions[3] = PermissionLib.MultiTargetPermission({ - operation: PermissionLib.Operation.Grant, - where: mainVotingPlugin, - who: _dao, - condition: PermissionLib.NO_CONDITION, - permissionId: MainVotingPlugin(mainVotingPluginImplementation) - .UPGRADE_PLUGIN_PERMISSION_ID() - }); // The member access plugin needs to execute on the DAO - permissions[4] = PermissionLib.MultiTargetPermission({ + permissions[3] = PermissionLib.MultiTargetPermission({ operation: PermissionLib.Operation.Grant, where: _dao, who: _memberAccessPlugin, - condition: conditionContract, + condition: _memberAccessExecuteCondition, permissionId: DAO(payable(_dao)).EXECUTE_PERMISSION_ID() }); - // The DAO needs to be able to update the member access plugin settings - permissions[5] = PermissionLib.MultiTargetPermission({ + permissions[4] = PermissionLib.MultiTargetPermission({ operation: PermissionLib.Operation.Grant, where: _memberAccessPlugin, who: _dao, @@ -122,39 +118,32 @@ contract GovernancePluginsSetup is PluginSetup { .UPDATE_MULTISIG_SETTINGS_PERMISSION_ID() }); - // The DAO needs to be able to upgrade the member access plugin - permissions[6] = PermissionLib.MultiTargetPermission({ - operation: PermissionLib.Operation.Grant, - where: _memberAccessPlugin, - who: _dao, - condition: PermissionLib.NO_CONDITION, - permissionId: MemberAccessPlugin(memberAccessPluginImplementation) - .UPGRADE_PLUGIN_PERMISSION_ID() - }); + // The DAO doesn't need APPLY_UPDATE_PERMISSION_ID on the PSP - // pluginUpgrader needs to be able to upgrade the plugins + // pluginUpgrader permissions if (_pluginUpgrader != address(0x0)) { - permissions[7] = PermissionLib.MultiTargetPermission({ - operation: PermissionLib.Operation.Grant, - where: mainVotingPlugin, - who: _pluginUpgrader, - condition: PermissionLib.NO_CONDITION, - permissionId: MainVotingPlugin(mainVotingPluginImplementation) - .UPGRADE_PLUGIN_PERMISSION_ID() - }); - permissions[8] = PermissionLib.MultiTargetPermission({ + // pluginUpgrader can make the DAO execute applyUpdate + // pluginUpgrader can make the DAO execute grant/revoke + address[] memory _targetPluginAddresses = new address[](2); + _targetPluginAddresses[0] = _mainVotingPlugin; + _targetPluginAddresses[1] = _memberAccessPlugin; + OnlyPluginUpgraderCondition _onlyPluginUpgraderCondition = new OnlyPluginUpgraderCondition( + DAO(payable(_dao)), + PluginSetupProcessor(pluginSetupProcessor), + _targetPluginAddresses + ); + permissions[5] = PermissionLib.MultiTargetPermission({ operation: PermissionLib.Operation.Grant, - where: _memberAccessPlugin, + where: _dao, who: _pluginUpgrader, - condition: PermissionLib.NO_CONDITION, - permissionId: MemberAccessPlugin(memberAccessPluginImplementation) - .UPGRADE_PLUGIN_PERMISSION_ID() + condition: address(_onlyPluginUpgraderCondition), + permissionId: DAO(payable(_dao)).EXECUTE_PERMISSION_ID() }); } - preparedSetupData.permissions = permissions; - preparedSetupData.helpers = new address[](1); - preparedSetupData.helpers[0] = _memberAccessPlugin; + _preparedSetupData.permissions = permissions; + _preparedSetupData.helpers = new address[](1); + _preparedSetupData.helpers[0] = _memberAccessPlugin; } /// @inheritdoc IPluginSetup diff --git a/packages/contracts/src/OnlyPluginUpgraderCondition.sol b/packages/contracts/src/OnlyPluginUpgraderCondition.sol new file mode 100644 index 0000000..9aa5235 --- /dev/null +++ b/packages/contracts/src/OnlyPluginUpgraderCondition.sol @@ -0,0 +1,137 @@ +// SPDX-License-Identifier: AGPL-3.0-or-later + +pragma solidity 0.8.17; + +import {PermissionCondition} from "@aragon/osx/core/permission/PermissionCondition.sol"; +import {PermissionManager} from "@aragon/osx/core/permission/PermissionManager.sol"; +import {PluginSetupProcessor} from "@aragon/osx/framework/plugin/setup/PluginSetupProcessor.sol"; +import {DAO} from "@aragon/osx/core/dao/DAO.sol"; +import {IDAO} from "@aragon/osx/core/dao/IDAO.sol"; +import {MEMBER_PERMISSION_ID} from "./constants.sol"; + +/// @notice The condition associated with the `pluginUpgrader` +contract OnlyPluginUpgraderCondition is PermissionCondition { + bytes32 private constant UPGRADE_PLUGIN_PERMISSION_ID = keccak256("UPGRADE_PLUGIN_PERMISSION"); + + /// @notice The address of the DAO contract + address private dao; + /// @notice The address of the PluginSetupProcessor contract + address private psp; + /// @notice The address of the contract where the permission can be granted + address[] private targetPluginAddresses; + + /// @notice Thrown when the constructor receives empty parameters + error InvalidParameters(); + + /// @notice The constructor of the condition + /// @param _targetPluginAddresses The addresses of the contracts where upgradeTo and upgradeToAndCall can be called + constructor(DAO _dao, PluginSetupProcessor _psp, address[] memory _targetPluginAddresses) { + if ( + address(_dao) == address(0) || + address(_psp) == address(0) || + _targetPluginAddresses.length == 0 + ) { + revert InvalidParameters(); + } + targetPluginAddresses = _targetPluginAddresses; + psp = address(_psp); + dao = address(_dao); + } + + function getSelector(bytes memory _data) public pure returns (bytes4 selector) { + // Slices are only supported for bytes calldata + assembly { + selector := mload(add(_data, 32)) + } + } + + /// @notice Checks whether the current action wants to grant membership on the predefined address + function isGranted( + address _where, + address _who, + bytes32 _permissionId, + bytes calldata _data + ) external view returns (bool) { + (_where, _who, _permissionId); + + bytes4 _requestedFuncSig = getSelector(_data); + if (_requestedFuncSig != IDAO.execute.selector) { + return false; + } + + (, IDAO.Action[] memory _actions, ) = abi.decode( + _data[4:], + (bytes32, IDAO.Action[], uint256) + ); + + // Check all actions + for (uint256 i; i < _actions.length; ) { + _requestedFuncSig = getSelector(_actions[i].data); + + // Can only grant/revoke UPGRADE_PLUGIN_PERMISSION_ID to the PSP on the plugins + if ( + _requestedFuncSig == PermissionManager.grant.selector || + _requestedFuncSig == PermissionManager.revoke.selector + ) { + if (!isValidExecuteGrantRevokeCalldata(_actions[i].data)) return false; + else if (_actions[i].to != dao) return false; + } + // Can only make the DAO execute applyUpdate() on the PSP + else if (_requestedFuncSig == PluginSetupProcessor.applyUpdate.selector) { + if (!isValidExecuteApplyUpdateCalldata(_actions[i].data)) return false; + else if (_actions[i].to != psp) return false; + } + // Not allowed + else { + return false; + } + + unchecked { + i++; + } + } + + return true; + } + + // Internal helpers + + function isValidExecuteGrantRevokeCalldata(bytes memory _data) private view returns (bool) { + // Decode the call being requested + (, address _requestedWhere, address _requestedWho, bytes32 _requestedPermission) = abi + .decode(_data, (bytes4, address, address, bytes32)); + + if (_requestedPermission != UPGRADE_PLUGIN_PERMISSION_ID) return false; + else if (_requestedWho != psp) return false; + + // Search the first match + for (uint256 j = 0; j < targetPluginAddresses.length; ) { + if (_requestedWhere == targetPluginAddresses[j]) return true; + + unchecked { + j++; + } + } + return false; + } + + function isValidExecuteApplyUpdateCalldata(bytes memory _data) private view returns (bool) { + // + (, address _dao, PluginSetupProcessor.ApplyUpdateParams memory _applyParams) = abi.decode( + _data, + (bytes4, address, PluginSetupProcessor.ApplyUpdateParams) + ); + + if (_dao != dao) return false; + + // Search the first match + for (uint256 j = 0; j < targetPluginAddresses.length; ) { + if (_applyParams.plugin != targetPluginAddresses[j]) return false; + + unchecked { + j++; + } + } + return true; + } +} From 90c647180df08730a74243289fdf9b3971373fbb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8r=E2=88=82=C2=A1?= Date: Wed, 29 Nov 2023 15:36:49 +0100 Subject: [PATCH 04/29] Updated plugin setup's and conditions --- README.md | 28 ++++++++- .../contracts/src/GovernancePluginsSetup.sol | 60 ++++++------------- .../src/MemberAccessExecuteCondition.sol | 30 ++++++++-- .../src/OnlyPluginUpgraderCondition.sol | 50 ++++++++-------- packages/contracts/src/SpacePluginSetup.sol | 59 +++++++++--------- 5 files changed, 123 insertions(+), 104 deletions(-) diff --git a/README.md b/README.md index b0c1542..4f47f03 100644 --- a/README.md +++ b/README.md @@ -440,6 +440,10 @@ See `SpacePluginSetup`, `PersonalSpaceAdminPluginSetup`, `MemberAccessPluginSetu [Learn more about plugin setup's](https://devs.aragon.org/docs/osx/how-it-works/framework/plugin-management/plugin-setup/) and [preparing installations](https://devs.aragon.org/docs/sdk/examples/client/prepare-installation). +### PluginSetup contracts + +(They need to receive the PSP Address) + ### Plugin Setup install parameters In both of the cases described above, a call to `prepareInstallation()` will be made by the `PluginSetupProcessor` from OSx. @@ -561,9 +565,29 @@ The format of these settings is defined in the `packages/contracts/src/*-build.m ## Plugin upgradeability -By default, only the DAO can upgrade plugins to newer versions. This requires passing a proposal. For the 3 upgradeable plugins, their plugin setup allows to pass an optional parameter to define a plugin upgrader address. +The first step to upgrade a plugin is calling `ThePluginSetup.prepareUpdate()`, which will register an update request on the `PluginSetupProcessor`. See [Plugin Setup install parameters](#plugin-setup-install-parameters) above. + +By default, only the DAO can upgrade plugins to newer versions. This requires passing a proposal with these 3 actions: + +Action 1: + +- Grant `UPGRADE_PLUGIN_PERMISSION_ID` to the PSP on the target plugin + +Action 2: + +- Make the DAO call `PSP.applyUpdate()` with the ID generated during `prepareUpdate()` + +Action 3: + +- Revoke `UPGRADE_PLUGIN_PERMISSION_ID` to the PSP on the target plugin + +The address of the `PluginSetupProcessor` depends on the chain. The existing deployments [can be checked here](https://github.com/aragon/osx/blob/develop/active_contracts.json). + +### Plugin Upgrader + +For the 3 upgradeable plugins, their plugin setup allows to pass an optional parameter to define a plugin upgrader address. -When a zero address is passed, only the DAO can call `upgradeTo()` and `upgradeToAndCall()`. When a non-zero address is passed, the desired address will be able to upgrade to whatever newer version the developer has published. +When a zero address is passed, only a passed proposal can make the DAO call `PSP.applyUpdate()`. When a non-zero address is passed, the desired address will be able to execute the 3 actions abover to upgrade to whatever newer version the developer has published. Every new version needs to be published to the plugin's repository. diff --git a/packages/contracts/src/GovernancePluginsSetup.sol b/packages/contracts/src/GovernancePluginsSetup.sol index 9ce9fd2..9a91165 100644 --- a/packages/contracts/src/GovernancePluginsSetup.sol +++ b/packages/contracts/src/GovernancePluginsSetup.sol @@ -23,8 +23,10 @@ contract GovernancePluginsSetup is PluginSetup { /// @notice Thrown when the array of helpers does not have the correct size error InvalidHelpers(uint256 actualLength); - constructor(PluginSetupProcessor _pluginSetupProcessor) { - pluginSetupProcessor = address(_pluginSetupProcessor); + /// @notice Initializes the setup contract + /// @param pluginSetupProcessorAddress The address of the PluginSetupProcessor contract deployed by Aragon on that chain + constructor(PluginSetupProcessor pluginSetupProcessorAddress) { + pluginSetupProcessor = address(pluginSetupProcessorAddress); mainVotingPluginImplementation = address(new MainVotingPlugin()); memberAccessPluginImplementation = address(new MemberAccessPlugin()); } @@ -160,7 +162,7 @@ contract GovernancePluginsSetup is PluginSetup { address _memberAccessPlugin = _payload.currentHelpers[0]; permissionChanges = new PermissionLib.MultiTargetPermission[]( - _pluginUpgrader == address(0x0) ? 7 : 9 + _pluginUpgrader == address(0x0) ? 5 : 6 ); // Main voting plugin permissions @@ -170,7 +172,7 @@ contract GovernancePluginsSetup is PluginSetup { operation: PermissionLib.Operation.Revoke, where: _dao, who: _payload.plugin, - condition: PermissionLib.NO_CONDITION, + condition: address(0), permissionId: DAO(payable(_dao)).EXECUTE_PERMISSION_ID() }); // The DAO can no longer update the plugin settings @@ -178,7 +180,7 @@ contract GovernancePluginsSetup is PluginSetup { operation: PermissionLib.Operation.Revoke, where: _payload.plugin, who: _dao, - condition: PermissionLib.NO_CONDITION, + condition: address(0), permissionId: MainVotingPlugin(mainVotingPluginImplementation) .UPDATE_VOTING_SETTINGS_PERMISSION_ID() }); @@ -187,66 +189,40 @@ contract GovernancePluginsSetup is PluginSetup { operation: PermissionLib.Operation.Revoke, where: _payload.plugin, who: _dao, - condition: PermissionLib.NO_CONDITION, + condition: address(0), permissionId: MainVotingPlugin(mainVotingPluginImplementation) .UPDATE_ADDRESSES_PERMISSION_ID() }); - // The DAO can no longer upgrade the plugin - permissionChanges[3] = PermissionLib.MultiTargetPermission({ - operation: PermissionLib.Operation.Revoke, - where: _payload.plugin, - who: _dao, - condition: PermissionLib.NO_CONDITION, - permissionId: MainVotingPlugin(mainVotingPluginImplementation) - .UPGRADE_PLUGIN_PERMISSION_ID() - }); // Member access plugin permissions // The plugin can no longer execute on the DAO - permissionChanges[4] = PermissionLib.MultiTargetPermission({ + permissionChanges[3] = PermissionLib.MultiTargetPermission({ operation: PermissionLib.Operation.Revoke, where: _dao, who: _memberAccessPlugin, - condition: PermissionLib.NO_CONDITION, + condition: address(0), permissionId: DAO(payable(_dao)).EXECUTE_PERMISSION_ID() }); // The DAO can no longer update the plugin settings - permissionChanges[5] = PermissionLib.MultiTargetPermission({ + permissionChanges[4] = PermissionLib.MultiTargetPermission({ operation: PermissionLib.Operation.Revoke, where: _memberAccessPlugin, who: _dao, - condition: PermissionLib.NO_CONDITION, + condition: address(0), permissionId: MemberAccessPlugin(memberAccessPluginImplementation) .UPDATE_MULTISIG_SETTINGS_PERMISSION_ID() }); - // The DAO can no longer upgrade the plugin - permissionChanges[6] = PermissionLib.MultiTargetPermission({ - operation: PermissionLib.Operation.Revoke, - where: _memberAccessPlugin, - who: _dao, - condition: PermissionLib.NO_CONDITION, - permissionId: MemberAccessPlugin(memberAccessPluginImplementation) - .UPGRADE_PLUGIN_PERMISSION_ID() - }); if (_pluginUpgrader != address(0x0)) { - // pluginUpgrader can no longer upgrade the plugins - permissionChanges[7] = PermissionLib.MultiTargetPermission({ - operation: PermissionLib.Operation.Revoke, - where: _payload.plugin, - who: _pluginUpgrader, - condition: PermissionLib.NO_CONDITION, - permissionId: MainVotingPlugin(mainVotingPluginImplementation) - .UPGRADE_PLUGIN_PERMISSION_ID() - }); - permissionChanges[8] = PermissionLib.MultiTargetPermission({ + // pluginUpgrader can no longer make the DAO execute applyUpdate + // pluginUpgrader can no longer make the DAO execute grant/revoke + permissionChanges[5] = PermissionLib.MultiTargetPermission({ operation: PermissionLib.Operation.Revoke, - where: _memberAccessPlugin, + where: _dao, who: _pluginUpgrader, - condition: PermissionLib.NO_CONDITION, - permissionId: MemberAccessPlugin(memberAccessPluginImplementation) - .UPGRADE_PLUGIN_PERMISSION_ID() + condition: address(0), + permissionId: DAO(payable(_dao)).EXECUTE_PERMISSION_ID() }); } } diff --git a/packages/contracts/src/MemberAccessExecuteCondition.sol b/packages/contracts/src/MemberAccessExecuteCondition.sol index 5d6d84c..d3ebdae 100644 --- a/packages/contracts/src/MemberAccessExecuteCondition.sol +++ b/packages/contracts/src/MemberAccessExecuteCondition.sol @@ -2,6 +2,7 @@ pragma solidity 0.8.17; +import {IDAO} from "@aragon/osx/core/dao/IDAO.sol"; import {PermissionCondition} from "@aragon/osx/core/permission/PermissionCondition.sol"; import {PermissionManager} from "@aragon/osx/core/permission/PermissionManager.sol"; import {MEMBER_PERMISSION_ID} from "./constants.sol"; @@ -17,8 +18,12 @@ contract MemberAccessExecuteCondition is PermissionCondition { targetContract = _targetContract; } - function getSelector(bytes calldata _data) public pure returns (bytes4 selector) { - selector = bytes4(_data[:4]); + function getSelector(bytes memory _data) public pure returns (bytes4 selector) { + // Slices are only supported for bytes calldata + // Bytes memory requires an assembly block + assembly { + selector := mload(add(_data, 32)) + } } /// @notice Checks whether the current action wants to grant membership on the predefined address @@ -31,15 +36,28 @@ contract MemberAccessExecuteCondition is PermissionCondition { (_where, _who, _permissionId); bytes4 _requestedFuncSig = getSelector(_data); + if (_requestedFuncSig != IDAO.execute.selector) { + return false; + } + + (, IDAO.Action[] memory _actions, ) = abi.decode( + _data[4:], + (bytes32, IDAO.Action[], uint256) + ); + + // Check actions + if (_actions.length != 1) return false; + _requestedFuncSig = getSelector(_actions[0].data); + if ( _requestedFuncSig != PermissionManager.grant.selector && _requestedFuncSig != PermissionManager.revoke.selector ) return false; - // Decode the call being requested - (address _requestedWhere, , bytes32 _requestedPermission) = abi.decode( - _data[4:], - (address, address, bytes32) + // Decode the call being requested (both have the same parameters) + (, address _requestedWhere, , bytes32 _requestedPermission) = abi.decode( + _actions[0].data, + (bytes4 /*funcSig*/, address /*where*/, address /*who*/, bytes32 /*perm*/) ); if (_requestedWhere != targetContract) return false; diff --git a/packages/contracts/src/OnlyPluginUpgraderCondition.sol b/packages/contracts/src/OnlyPluginUpgraderCondition.sol index 9aa5235..4b3b2c6 100644 --- a/packages/contracts/src/OnlyPluginUpgraderCondition.sol +++ b/packages/contracts/src/OnlyPluginUpgraderCondition.sol @@ -40,6 +40,7 @@ contract OnlyPluginUpgraderCondition is PermissionCondition { function getSelector(bytes memory _data) public pure returns (bytes4 selector) { // Slices are only supported for bytes calldata + // Bytes memory requires an assembly block assembly { selector := mload(add(_data, 32)) } @@ -65,31 +66,25 @@ contract OnlyPluginUpgraderCondition is PermissionCondition { ); // Check all actions - for (uint256 i; i < _actions.length; ) { - _requestedFuncSig = getSelector(_actions[i].data); - - // Can only grant/revoke UPGRADE_PLUGIN_PERMISSION_ID to the PSP on the plugins - if ( - _requestedFuncSig == PermissionManager.grant.selector || - _requestedFuncSig == PermissionManager.revoke.selector - ) { - if (!isValidExecuteGrantRevokeCalldata(_actions[i].data)) return false; - else if (_actions[i].to != dao) return false; - } - // Can only make the DAO execute applyUpdate() on the PSP - else if (_requestedFuncSig == PluginSetupProcessor.applyUpdate.selector) { - if (!isValidExecuteApplyUpdateCalldata(_actions[i].data)) return false; - else if (_actions[i].to != psp) return false; - } - // Not allowed - else { - return false; - } - - unchecked { - i++; - } - } + if (_actions.length != 3) return false; + + // Action 1: GRANT UPGRADE_PLUGIN_PERMISSION_ID to the PSP on targetPlugis[] + _requestedFuncSig = getSelector(_actions[0].data); + if (_requestedFuncSig != PermissionManager.grant.selector) return false; + else if (_actions[0].to != dao) return false; + else if (!isValidExecuteGrantRevokeCalldata(_actions[0].data)) return false; + + // Action 2: CALL PSP.applyUpdate() onto targetPlugins[] + _requestedFuncSig = getSelector(_actions[1].data); + if (_requestedFuncSig != PluginSetupProcessor.applyUpdate.selector) return false; + else if (_actions[1].to != psp) return false; + else if (!isValidExecuteApplyUpdateCalldata(_actions[1].data)) return false; + + // Action 3: REVOKE UPGRADE_PLUGIN_PERMISSION_ID to the PSP on targetPlugis[] + _requestedFuncSig = getSelector(_actions[2].data); + if (_requestedFuncSig != PermissionManager.revoke.selector) return false; + else if (_actions[2].to != dao) return false; + else if (!isValidExecuteGrantRevokeCalldata(_actions[2].data)) return false; return true; } @@ -99,7 +94,10 @@ contract OnlyPluginUpgraderCondition is PermissionCondition { function isValidExecuteGrantRevokeCalldata(bytes memory _data) private view returns (bool) { // Decode the call being requested (, address _requestedWhere, address _requestedWho, bytes32 _requestedPermission) = abi - .decode(_data, (bytes4, address, address, bytes32)); + .decode( + _data, + (bytes4 /*funcSig*/, address /*where*/, address /*who*/, bytes32 /*perm*/) + ); if (_requestedPermission != UPGRADE_PLUGIN_PERMISSION_ID) return false; else if (_requestedWho != psp) return false; diff --git a/packages/contracts/src/SpacePluginSetup.sol b/packages/contracts/src/SpacePluginSetup.sol index 21e033e..2a92e08 100644 --- a/packages/contracts/src/SpacePluginSetup.sol +++ b/packages/contracts/src/SpacePluginSetup.sol @@ -2,18 +2,25 @@ pragma solidity ^0.8.8; +import {DAO} from "@aragon/osx/core/dao/DAO.sol"; import {IDAO} from "@aragon/osx/core/dao/IDAO.sol"; import {PermissionLib} from "@aragon/osx/core/permission/PermissionLib.sol"; import {PluginSetup, IPluginSetup} from "@aragon/osx/framework/plugin/setup/PluginSetup.sol"; +import {PluginSetupProcessor} from "@aragon/osx/framework/plugin/setup/PluginSetupProcessor.sol"; import {SpacePlugin} from "./SpacePlugin.sol"; +import {OnlyPluginUpgraderCondition} from "./OnlyPluginUpgraderCondition.sol"; import {CONTENT_PERMISSION_ID, SUBSPACE_PERMISSION_ID} from "./constants.sol"; /// @title SpacePluginSetup /// @dev Release 1, Build 1 contract SpacePluginSetup is PluginSetup { address private immutable pluginImplementation; + address private immutable pluginSetupProcessor; - constructor() { + /// @notice Initializes the setup contract + /// @param pluginSetupProcessorAddress The address of the PluginSetupProcessor contract deployed by Aragon on that chain + constructor(PluginSetupProcessor pluginSetupProcessorAddress) { + pluginSetupProcessor = address(pluginSetupProcessorAddress); pluginImplementation = address(new SpacePlugin()); } @@ -40,7 +47,7 @@ contract SpacePluginSetup is PluginSetup { PermissionLib.MultiTargetPermission[] memory permissions = new PermissionLib.MultiTargetPermission[]( - _pluginUpgrader == address(0x0) ? 3 : 4 + _pluginUpgrader == address(0x0) ? 2 : 3 ); // The DAO can emit content @@ -60,23 +67,23 @@ contract SpacePluginSetup is PluginSetup { permissionId: SUBSPACE_PERMISSION_ID }); - // The DAO needs to be able to upgrade the plugin - permissions[2] = PermissionLib.MultiTargetPermission({ - operation: PermissionLib.Operation.Grant, - where: plugin, - who: _dao, - condition: PermissionLib.NO_CONDITION, - permissionId: SpacePlugin(pluginImplementation).UPGRADE_PLUGIN_PERMISSION_ID() - }); - - // pluginUpgrader needs to be able to upgrade the plugin + // pluginUpgrader permissions if (_pluginUpgrader != address(0x0)) { - permissions[3] = PermissionLib.MultiTargetPermission({ + // pluginUpgrader can make the DAO execute applyUpdate + // pluginUpgrader can make the DAO execute grant/revoke + address[] memory _targetPluginAddresses = new address[](2); + _targetPluginAddresses[0] = plugin; + OnlyPluginUpgraderCondition _onlyPluginUpgraderCondition = new OnlyPluginUpgraderCondition( + DAO(payable(_dao)), + PluginSetupProcessor(pluginSetupProcessor), + _targetPluginAddresses + ); + permissions[2] = PermissionLib.MultiTargetPermission({ operation: PermissionLib.Operation.Grant, - where: plugin, + where: _dao, who: _pluginUpgrader, - condition: PermissionLib.NO_CONDITION, - permissionId: SpacePlugin(pluginImplementation).UPGRADE_PLUGIN_PERMISSION_ID() + condition: address(_onlyPluginUpgraderCondition), + permissionId: DAO(payable(_dao)).EXECUTE_PERMISSION_ID() }); } @@ -92,7 +99,7 @@ contract SpacePluginSetup is PluginSetup { address _pluginUpgrader = decodeUninstallationParams(_payload.data); permissionChanges = new PermissionLib.MultiTargetPermission[]( - _pluginUpgrader == address(0x0) ? 3 : 4 + _pluginUpgrader == address(0x0) ? 2 : 3 ); // The DAO can make it emit content @@ -111,20 +118,16 @@ contract SpacePluginSetup is PluginSetup { condition: PermissionLib.NO_CONDITION, permissionId: SUBSPACE_PERMISSION_ID }); - permissionChanges[2] = PermissionLib.MultiTargetPermission({ - operation: PermissionLib.Operation.Revoke, - where: _payload.plugin, - who: _dao, - condition: PermissionLib.NO_CONDITION, - permissionId: SpacePlugin(_payload.plugin).UPGRADE_PLUGIN_PERMISSION_ID() - }); + if (_pluginUpgrader != address(0x0)) { - permissionChanges[3] = PermissionLib.MultiTargetPermission({ + // pluginUpgrader can no longer make the DAO execute applyUpdate + // pluginUpgrader can no longer make the DAO execute grant/revoke + permissionChanges[2] = PermissionLib.MultiTargetPermission({ operation: PermissionLib.Operation.Revoke, - where: _payload.plugin, + where: _dao, who: _pluginUpgrader, - condition: PermissionLib.NO_CONDITION, - permissionId: SpacePlugin(_payload.plugin).UPGRADE_PLUGIN_PERMISSION_ID() + condition: address(0), + permissionId: DAO(payable(_dao)).EXECUTE_PERMISSION_ID() }); } } From 27786aeebae5f76e59025b1c3fe5cb9e80eee5dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8r=E2=88=82=C2=A1?= Date: Wed, 29 Nov 2023 19:46:54 +0100 Subject: [PATCH 05/29] Testing work in progress --- .../contracts/deploy/02_setup/10_setup.ts | 21 +++- .../contracts/src/GovernancePluginsSetup.sol | 22 ++-- .../unit-testing/governance-plugins-setup.ts | 115 ++++-------------- .../test/unit-testing/space-plugin-setup.ts | 57 +++------ 4 files changed, 73 insertions(+), 142 deletions(-) diff --git a/packages/contracts/deploy/02_setup/10_setup.ts b/packages/contracts/deploy/02_setup/10_setup.ts index 54873fd..d633d47 100644 --- a/packages/contracts/deploy/02_setup/10_setup.ts +++ b/packages/contracts/deploy/02_setup/10_setup.ts @@ -3,26 +3,35 @@ import { PersonalSpaceAdminPluginSetupParams, SpacePluginSetupParams, } from '../../plugin-setup-params'; +import {activeContractsList} from '@aragon/osx-ethers'; import {DeployFunction} from 'hardhat-deploy/types'; import {HardhatRuntimeEnvironment} from 'hardhat/types'; const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) { - const {deployments, getNamedAccounts} = hre; + const {deployments, getNamedAccounts, network} = hre; const {deploy} = deployments; const {deployer} = await getNamedAccounts(); - // Space + const pspAddress = + activeContractsList[network.name as keyof typeof activeContractsList] + .PluginSetupProcessor; + + console.log( + `\nUsing the PluginSetupProcessor address ${pspAddress} on ${network.name}` + ); + + // Space Setup console.log( `\nDeploying ${SpacePluginSetupParams.PLUGIN_SETUP_CONTRACT_NAME}` ); await deploy(SpacePluginSetupParams.PLUGIN_SETUP_CONTRACT_NAME, { from: deployer, - args: [], + args: [pspAddress], log: true, }); - // Personal Space + // Personal Space Setup console.log( `\nDeploying ${PersonalSpaceAdminPluginSetupParams.PLUGIN_SETUP_CONTRACT_NAME}` ); @@ -33,14 +42,14 @@ const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) { log: true, }); - // Governance + // Governance Setup console.log( `\nDeploying ${GovernancePluginsSetupParams.PLUGIN_SETUP_CONTRACT_NAME}` ); await deploy(GovernancePluginsSetupParams.PLUGIN_SETUP_CONTRACT_NAME, { from: deployer, - args: [], + args: [pspAddress], log: true, }); }; diff --git a/packages/contracts/src/GovernancePluginsSetup.sol b/packages/contracts/src/GovernancePluginsSetup.sol index 9a91165..025ca59 100644 --- a/packages/contracts/src/GovernancePluginsSetup.sol +++ b/packages/contracts/src/GovernancePluginsSetup.sol @@ -36,7 +36,7 @@ contract GovernancePluginsSetup is PluginSetup { function prepareInstallation( address _dao, bytes memory _data - ) external returns (address _mainVotingPlugin, PreparedSetupData memory _preparedSetupData) { + ) external returns (address mainVotingPlugin, PreparedSetupData memory preparedSetupData) { // Decode the custom installation parameters ( MajorityVotingBase.VotingSettings memory _votingSettings, @@ -46,7 +46,7 @@ contract GovernancePluginsSetup is PluginSetup { ) = decodeInstallationParams(_data); // Deploy the main voting plugin - _mainVotingPlugin = createERC1967Proxy( + mainVotingPlugin = createERC1967Proxy( mainVotingPluginImplementation, abi.encodeCall( MainVotingPlugin.initialize, @@ -57,7 +57,7 @@ contract GovernancePluginsSetup is PluginSetup { // Deploy the member access plugin MemberAccessPlugin.MultisigSettings memory _multisigSettings; _multisigSettings.proposalDuration = _memberAccessProposalDuration; - _multisigSettings.mainVotingPlugin = MainVotingPlugin(_mainVotingPlugin); + _multisigSettings.mainVotingPlugin = MainVotingPlugin(mainVotingPlugin); address _memberAccessPlugin = createERC1967Proxy( memberAccessPluginImplementation, @@ -66,7 +66,7 @@ contract GovernancePluginsSetup is PluginSetup { // Condition contract (member access plugin execute) address _memberAccessExecuteCondition = address( - new MemberAccessExecuteCondition(_mainVotingPlugin) + new MemberAccessExecuteCondition(mainVotingPlugin) ); // List the requested permissions @@ -79,14 +79,14 @@ contract GovernancePluginsSetup is PluginSetup { permissions[0] = PermissionLib.MultiTargetPermission({ operation: PermissionLib.Operation.Grant, where: _dao, - who: _mainVotingPlugin, + who: mainVotingPlugin, condition: PermissionLib.NO_CONDITION, permissionId: DAO(payable(_dao)).EXECUTE_PERMISSION_ID() }); // The DAO can update the main voting plugin settings permissions[1] = PermissionLib.MultiTargetPermission({ operation: PermissionLib.Operation.Grant, - where: _mainVotingPlugin, + where: mainVotingPlugin, who: _dao, condition: PermissionLib.NO_CONDITION, permissionId: MainVotingPlugin(mainVotingPluginImplementation) @@ -95,7 +95,7 @@ contract GovernancePluginsSetup is PluginSetup { // The DAO can manage the list of addresses permissions[2] = PermissionLib.MultiTargetPermission({ operation: PermissionLib.Operation.Grant, - where: _mainVotingPlugin, + where: mainVotingPlugin, who: _dao, condition: PermissionLib.NO_CONDITION, permissionId: MainVotingPlugin(mainVotingPluginImplementation) @@ -127,7 +127,7 @@ contract GovernancePluginsSetup is PluginSetup { // pluginUpgrader can make the DAO execute applyUpdate // pluginUpgrader can make the DAO execute grant/revoke address[] memory _targetPluginAddresses = new address[](2); - _targetPluginAddresses[0] = _mainVotingPlugin; + _targetPluginAddresses[0] = mainVotingPlugin; _targetPluginAddresses[1] = _memberAccessPlugin; OnlyPluginUpgraderCondition _onlyPluginUpgraderCondition = new OnlyPluginUpgraderCondition( DAO(payable(_dao)), @@ -143,9 +143,9 @@ contract GovernancePluginsSetup is PluginSetup { }); } - _preparedSetupData.permissions = permissions; - _preparedSetupData.helpers = new address[](1); - _preparedSetupData.helpers[0] = _memberAccessPlugin; + preparedSetupData.permissions = permissions; + preparedSetupData.helpers = new address[](1); + preparedSetupData.helpers[0] = _memberAccessPlugin; } /// @inheritdoc IPluginSetup diff --git a/packages/contracts/test/unit-testing/governance-plugins-setup.ts b/packages/contracts/test/unit-testing/governance-plugins-setup.ts index 1a1eb7e..79c6100 100644 --- a/packages/contracts/test/unit-testing/governance-plugins-setup.ts +++ b/packages/contracts/test/unit-testing/governance-plugins-setup.ts @@ -20,6 +20,7 @@ import { UPGRADE_PLUGIN_PERMISSION_ID, VotingMode, } from './common'; +import {activeContractsList} from '@aragon/osx-ethers'; import {SignerWithAddress} from '@nomiclabs/hardhat-ethers/signers'; import {expect} from 'chai'; import {ethers} from 'hardhat'; @@ -34,9 +35,14 @@ describe('Governance Plugins Setup', function () { [alice, bob] = await ethers.getSigners(); dao = await deployTestDao(alice); + const hardhatForkNetwork = (process.env.NETWORK_NAME ?? + 'mainnet') as keyof typeof activeContractsList; + const pspAddress = + activeContractsList[hardhatForkNetwork].PluginSetupProcessor; + governancePluginsSetup = await new GovernancePluginsSetup__factory( alice - ).deploy(); + ).deploy(pspAddress); }); describe('prepareInstallation', async () => { @@ -74,12 +80,11 @@ describe('Governance Plugins Setup', function () { from: governancePluginsSetup.address, nonce: nonce + 1, }); - const anticipatedConditionPluginAddress = ethers.utils.getContractAddress( - { + const anticipatedMemberAccessConditionAddress = + ethers.utils.getContractAddress({ from: governancePluginsSetup.address, nonce: nonce + 2, - } - ); + }); const { mainVotingPlugin, @@ -93,7 +98,7 @@ describe('Governance Plugins Setup', function () { const [memberAccessPlugin] = helpers; expect(memberAccessPlugin).to.eq(anticipatedMemberAccessPluginAddress); - expect(permissions.length).to.be.equal(7); + expect(permissions.length).to.be.equal(5); expect(permissions).to.deep.equal([ [ Operation.Grant, @@ -116,18 +121,11 @@ describe('Governance Plugins Setup', function () { NO_CONDITION, UPDATE_ADDRESSES_PERMISSION_ID, ], - [ - Operation.Grant, - mainVotingPlugin, - dao.address, - NO_CONDITION, - UPGRADE_PLUGIN_PERMISSION_ID, - ], [ Operation.Grant, dao.address, memberAccessPlugin, - anticipatedConditionPluginAddress, + anticipatedMemberAccessConditionAddress, EXECUTE_PERMISSION_ID, ], [ @@ -137,13 +135,6 @@ describe('Governance Plugins Setup', function () { NO_CONDITION, UPDATE_MULTISIG_SETTINGS_PERMISSION_ID, ], - [ - Operation.Grant, - memberAccessPlugin, - dao.address, - NO_CONDITION, - UPGRADE_PLUGIN_PERMISSION_ID, - ], ]); await governancePluginsSetup.prepareInstallation(dao.address, initData); @@ -190,12 +181,16 @@ describe('Governance Plugins Setup', function () { from: governancePluginsSetup.address, nonce: nonce + 1, }); - const anticipatedConditionPluginAddress = ethers.utils.getContractAddress( - { + const anticipatedMemberAccessConditionAddress = + ethers.utils.getContractAddress({ from: governancePluginsSetup.address, nonce: nonce + 2, - } - ); + }); + const anticipatedOnlyPluginUpgraderConditionAddress = + ethers.utils.getContractAddress({ + from: governancePluginsSetup.address, + nonce: nonce + 3, + }); const { mainVotingPlugin, @@ -209,7 +204,7 @@ describe('Governance Plugins Setup', function () { const [memberAccessPlugin] = helpers; expect(memberAccessPlugin).to.eq(anticipatedMemberAccessPluginAddress); - expect(permissions.length).to.be.equal(9); + expect(permissions.length).to.be.equal(6); expect(permissions).to.deep.equal([ [ Operation.Grant, @@ -232,18 +227,11 @@ describe('Governance Plugins Setup', function () { NO_CONDITION, UPDATE_ADDRESSES_PERMISSION_ID, ], - [ - Operation.Grant, - mainVotingPlugin, - dao.address, - NO_CONDITION, - UPGRADE_PLUGIN_PERMISSION_ID, - ], [ Operation.Grant, dao.address, memberAccessPlugin, - anticipatedConditionPluginAddress, + anticipatedMemberAccessConditionAddress, EXECUTE_PERMISSION_ID, ], [ @@ -255,24 +243,10 @@ describe('Governance Plugins Setup', function () { ], [ Operation.Grant, - memberAccessPlugin, dao.address, - NO_CONDITION, - UPGRADE_PLUGIN_PERMISSION_ID, - ], - [ - Operation.Grant, - mainVotingPlugin, pluginUpgrader, - NO_CONDITION, - UPGRADE_PLUGIN_PERMISSION_ID, - ], - [ - Operation.Grant, - memberAccessPlugin, - pluginUpgrader, - NO_CONDITION, - UPGRADE_PLUGIN_PERMISSION_ID, + anticipatedOnlyPluginUpgraderConditionAddress, + EXECUTE_PERMISSION_ID, ], ]); @@ -313,7 +287,7 @@ describe('Governance Plugins Setup', function () { } ); - expect(permissions.length).to.be.equal(7); + expect(permissions.length).to.be.equal(5); expect(permissions).to.deep.equal([ [ Operation.Revoke, @@ -336,13 +310,6 @@ describe('Governance Plugins Setup', function () { NO_CONDITION, UPDATE_ADDRESSES_PERMISSION_ID, ], - [ - Operation.Revoke, - mainVotingPlugin.address, - dao.address, - NO_CONDITION, - UPGRADE_PLUGIN_PERMISSION_ID, - ], [ Operation.Revoke, dao.address, @@ -357,13 +324,6 @@ describe('Governance Plugins Setup', function () { NO_CONDITION, UPDATE_MULTISIG_SETTINGS_PERMISSION_ID, ], - [ - Operation.Revoke, - memberAccessPlugin.address, - dao.address, - NO_CONDITION, - UPGRADE_PLUGIN_PERMISSION_ID, - ], ]); }); @@ -392,7 +352,7 @@ describe('Governance Plugins Setup', function () { } ); - expect(permissions.length).to.be.equal(9); + expect(permissions.length).to.be.equal(6); expect(permissions).to.deep.equal([ [ Operation.Revoke, @@ -415,13 +375,6 @@ describe('Governance Plugins Setup', function () { NO_CONDITION, UPDATE_ADDRESSES_PERMISSION_ID, ], - [ - Operation.Revoke, - mainVotingPlugin.address, - dao.address, - NO_CONDITION, - UPGRADE_PLUGIN_PERMISSION_ID, - ], [ Operation.Revoke, dao.address, @@ -438,24 +391,10 @@ describe('Governance Plugins Setup', function () { ], [ Operation.Revoke, - memberAccessPlugin.address, dao.address, - NO_CONDITION, - UPGRADE_PLUGIN_PERMISSION_ID, - ], - [ - Operation.Revoke, - mainVotingPlugin.address, pluginUpgrader, NO_CONDITION, - UPGRADE_PLUGIN_PERMISSION_ID, - ], - [ - Operation.Revoke, - memberAccessPlugin.address, - pluginUpgrader, - NO_CONDITION, - UPGRADE_PLUGIN_PERMISSION_ID, + EXECUTE_PERMISSION_ID, ], ]); }); diff --git a/packages/contracts/test/unit-testing/space-plugin-setup.ts b/packages/contracts/test/unit-testing/space-plugin-setup.ts index e4d5b0d..4739a5a 100644 --- a/packages/contracts/test/unit-testing/space-plugin-setup.ts +++ b/packages/contracts/test/unit-testing/space-plugin-setup.ts @@ -12,10 +12,11 @@ import { ADDRESS_ONE, ADDRESS_ZERO, CONTENT_PERMISSION_ID, + EXECUTE_PERMISSION_ID, NO_CONDITION, SUBSPACE_PERMISSION_ID, - UPGRADE_PLUGIN_PERMISSION_ID, } from './common'; +import {activeContractsList} from '@aragon/osx-ethers'; import {SignerWithAddress} from '@nomiclabs/hardhat-ethers/signers'; import {expect} from 'chai'; import {ethers} from 'hardhat'; @@ -32,8 +33,14 @@ describe('Space Plugin Setup', function () { [alice, bob] = await ethers.getSigners(); dao = await deployTestDao(alice); + const hardhatForkNetwork = (process.env.NETWORK_NAME ?? + 'mainnet') as keyof typeof activeContractsList; + + const pspAddress = + activeContractsList[hardhatForkNetwork].PluginSetupProcessor; + SpacePluginSetup = new SpacePluginSetup__factory(alice); - spacePluginSetup = await SpacePluginSetup.deploy(); + spacePluginSetup = await SpacePluginSetup.deploy(pspAddress); }); describe('prepareInstallation', async () => { @@ -62,7 +69,7 @@ describe('Space Plugin Setup', function () { expect(plugin).to.be.equal(anticipatedPluginAddress); expect(helpers.length).to.be.equal(0); - expect(permissions.length).to.be.equal(3); + expect(permissions.length).to.be.equal(2); expect(permissions).to.deep.equal([ [ Operation.Grant, @@ -78,13 +85,6 @@ describe('Space Plugin Setup', function () { NO_CONDITION, SUBSPACE_PERMISSION_ID, ], - [ - Operation.Grant, - plugin, - dao.address, - NO_CONDITION, - UPGRADE_PLUGIN_PERMISSION_ID, - ], ]); await spacePluginSetup.prepareInstallation(dao.address, initData); @@ -109,6 +109,10 @@ describe('Space Plugin Setup', function () { from: spacePluginSetup.address, nonce, }); + const anticipatedConditionAddress = ethers.utils.getContractAddress({ + from: spacePluginSetup.address, + nonce: nonce + 1, + }); const { plugin, @@ -120,7 +124,7 @@ describe('Space Plugin Setup', function () { expect(plugin).to.be.equal(anticipatedPluginAddress); expect(helpers.length).to.be.equal(0); - expect(permissions.length).to.be.equal(4); + expect(permissions.length).to.be.equal(3); expect(permissions).to.deep.equal([ [ Operation.Grant, @@ -138,17 +142,10 @@ describe('Space Plugin Setup', function () { ], [ Operation.Grant, - plugin, dao.address, - NO_CONDITION, - UPGRADE_PLUGIN_PERMISSION_ID, - ], - [ - Operation.Grant, - plugin, pluginUpgrader, - NO_CONDITION, - UPGRADE_PLUGIN_PERMISSION_ID, + anticipatedConditionAddress, + EXECUTE_PERMISSION_ID, ], ]); @@ -178,7 +175,7 @@ describe('Space Plugin Setup', function () { data: uninstallData, }); - expect(permissions.length).to.be.equal(3); + expect(permissions.length).to.be.equal(2); expect(permissions).to.deep.equal([ [ Operation.Revoke, @@ -194,13 +191,6 @@ describe('Space Plugin Setup', function () { NO_CONDITION, SUBSPACE_PERMISSION_ID, ], - [ - Operation.Revoke, - plugin.address, - dao.address, - NO_CONDITION, - UPGRADE_PLUGIN_PERMISSION_ID, - ], ]); }); @@ -222,7 +212,7 @@ describe('Space Plugin Setup', function () { data: uninstallData, }); - expect(permissions.length).to.be.equal(4); + expect(permissions.length).to.be.equal(3); expect(permissions).to.deep.equal([ [ Operation.Revoke, @@ -240,17 +230,10 @@ describe('Space Plugin Setup', function () { ], [ Operation.Revoke, - plugin.address, dao.address, - NO_CONDITION, - UPGRADE_PLUGIN_PERMISSION_ID, - ], - [ - Operation.Revoke, - plugin.address, pluginUpgrader, NO_CONDITION, - UPGRADE_PLUGIN_PERMISSION_ID, + EXECUTE_PERMISSION_ID, ], ]); }); From 805bf2f746e38f678f18e4f0b41f1d829ebdc2ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8r=E2=88=82=C2=A1?= Date: Wed, 29 Nov 2023 20:47:48 +0100 Subject: [PATCH 06/29] Updates member access condition tests --- .../src/MemberAccessExecuteCondition.sol | 38 +- .../member-access-execute-condition.ts | 724 +++++++++--------- 2 files changed, 391 insertions(+), 371 deletions(-) diff --git a/packages/contracts/src/MemberAccessExecuteCondition.sol b/packages/contracts/src/MemberAccessExecuteCondition.sol index d3ebdae..417cb2a 100644 --- a/packages/contracts/src/MemberAccessExecuteCondition.sol +++ b/packages/contracts/src/MemberAccessExecuteCondition.sol @@ -19,13 +19,26 @@ contract MemberAccessExecuteCondition is PermissionCondition { } function getSelector(bytes memory _data) public pure returns (bytes4 selector) { - // Slices are only supported for bytes calldata + // Slices are only supported for bytes calldata, not bytes memory // Bytes memory requires an assembly block assembly { selector := mload(add(_data, 32)) } } + function decodeGrantRevokeCalldata( + bytes memory _data + ) public pure returns (bytes4 sig, address who, address where, bytes32 permissionId) { + // Slicing is only supported for bytes calldata, not bytes memory + // Bytes memory requires an assembly block + assembly { + sig := mload(add(_data, 32)) + who := mload(add(_data, 36)) + where := mload(add(_data, 68)) + permissionId := mload(add(_data, 100)) + } + } + /// @notice Checks whether the current action wants to grant membership on the predefined address function isGranted( address _where, @@ -35,8 +48,8 @@ contract MemberAccessExecuteCondition is PermissionCondition { ) external view returns (bool) { (_where, _who, _permissionId); - bytes4 _requestedFuncSig = getSelector(_data); - if (_requestedFuncSig != IDAO.execute.selector) { + // Is execute()? + if (getSelector(_data) != IDAO.execute.selector) { return false; } @@ -47,19 +60,20 @@ contract MemberAccessExecuteCondition is PermissionCondition { // Check actions if (_actions.length != 1) return false; - _requestedFuncSig = getSelector(_actions[0].data); + + // Decode the call being requested (both have the same parameters) + ( + bytes4 _requestedSelector, + address _requestedWhere, + , + bytes32 _requestedPermission + ) = decodeGrantRevokeCalldata(_actions[0].data); if ( - _requestedFuncSig != PermissionManager.grant.selector && - _requestedFuncSig != PermissionManager.revoke.selector + _requestedSelector != PermissionManager.grant.selector && + _requestedSelector != PermissionManager.revoke.selector ) return false; - // Decode the call being requested (both have the same parameters) - (, address _requestedWhere, , bytes32 _requestedPermission) = abi.decode( - _actions[0].data, - (bytes4 /*funcSig*/, address /*where*/, address /*who*/, bytes32 /*perm*/) - ); - if (_requestedWhere != targetContract) return false; else if (_requestedPermission != MEMBER_PERMISSION_ID) return false; diff --git a/packages/contracts/test/unit-testing/member-access-execute-condition.ts b/packages/contracts/test/unit-testing/member-access-execute-condition.ts index 9dd5fcb..6fb9a8b 100644 --- a/packages/contracts/test/unit-testing/member-access-execute-condition.ts +++ b/packages/contracts/test/unit-testing/member-access-execute-condition.ts @@ -1,6 +1,7 @@ import { DAO, DAO__factory, + IDAO, MemberAccessExecuteCondition, MemberAccessExecuteCondition__factory, } from '../../typechain'; @@ -22,6 +23,8 @@ import {toUtf8Bytes} from 'ethers/lib/utils'; import {ethers} from 'hardhat'; const SOME_CONTRACT_ADDRESS = '0x' + '1234567890'.repeat(4); +const ONE_BYTES32 = + '0x0000000000000000000000000000000000000000000000000000000000000001'; describe('Member Access Condition', function () { let alice: SignerWithAddress; @@ -40,380 +43,383 @@ describe('Member Access Condition', function () { memberAccessExecuteCondition = await factory.deploy(SOME_CONTRACT_ADDRESS); }); - it('Should only accept granting and revoking', async () => { - // Valid - expect( - await memberAccessExecuteCondition.isGranted( - ADDRESS_ONE, // where (used) - ADDRESS_TWO, // who (used) - EXECUTE_PERMISSION_ID, // permission (used) - DAO__factory.createInterface().encodeFunctionData('grant', [ - // call - SOME_CONTRACT_ADDRESS, - carol.address, - MEMBER_PERMISSION_ID, - ]) - ) - ).to.eq(true); + describe('Executing grant/revoke MEMBER_PERMISSION_ID on a certain contract', () => { + const daoInterface = DAO__factory.createInterface(); - expect( - await memberAccessExecuteCondition.isGranted( - ADDRESS_ONE, // where (used) - ADDRESS_TWO, // who (used) - EXECUTE_PERMISSION_ID, // permission (used) - DAO__factory.createInterface().encodeFunctionData('revoke', [ - // call - SOME_CONTRACT_ADDRESS, - carol.address, - MEMBER_PERMISSION_ID, - ]) - ) - ).to.eq(true); + it('Should only allow executing grant and revoke', async () => { + const actions: IDAO.ActionStruct[] = [ + {to: dao.address, value: 0, data: '0x'}, + ]; - // Invalid - expect( - await memberAccessExecuteCondition.isGranted( - ADDRESS_ONE, // where (used) - ADDRESS_TWO, // who (used) - EXECUTE_PERMISSION_ID, // permission (used) - DAO__factory.createInterface().encodeFunctionData('setDaoURI', [ - // call - hexlify(toUtf8Bytes('ipfs://')), - ]) - ) - ).to.eq(false); - expect( - await memberAccessExecuteCondition.isGranted( - ADDRESS_ONE, // where (used) - ADDRESS_TWO, // who (used) - EXECUTE_PERMISSION_ID, // permission (used) - DAO__factory.createInterface().encodeFunctionData('setMetadata', [ - // call - hexlify(toUtf8Bytes('ipfs://')), - ]) - ) - ).to.eq(false); - expect( - await memberAccessExecuteCondition.isGranted( - ADDRESS_ONE, // where (used) - ADDRESS_TWO, // who (used) - EXECUTE_PERMISSION_ID, // permission (used) - DAO__factory.createInterface().encodeFunctionData( - 'setSignatureValidator', - [ - // call - ADDRESS_ONE, - ] + // Valid grant + actions[0].data = daoInterface.encodeFunctionData('grant', [ + SOME_CONTRACT_ADDRESS, + carol.address, + MEMBER_PERMISSION_ID, + ]); + expect( + await memberAccessExecuteCondition.isGranted( + ADDRESS_ONE, // where (used) + ADDRESS_TWO, // who (used) + EXECUTE_PERMISSION_ID, // permission (used) + daoInterface.encodeFunctionData('execute', [ONE_BYTES32, actions, 0]) ) - ) - ).to.eq(false); - }); + ).to.eq(true); - it('Should only allow MEMBER_PERMISSION_ID', async () => { - // Valid - expect( - await memberAccessExecuteCondition.isGranted( - ADDRESS_ONE, // where (used) - ADDRESS_TWO, // who (used) - EXECUTE_PERMISSION_ID, // permission (used) - DAO__factory.createInterface().encodeFunctionData('grant', [ - // call - SOME_CONTRACT_ADDRESS, - carol.address, - MEMBER_PERMISSION_ID, - ]) - ) - ).to.eq(true); - expect( - await memberAccessExecuteCondition.isGranted( - ADDRESS_ONE, // where (used) - ADDRESS_TWO, // who (used) - EXECUTE_PERMISSION_ID, // permission (used) - DAO__factory.createInterface().encodeFunctionData('revoke', [ - // call - SOME_CONTRACT_ADDRESS, - carol.address, - MEMBER_PERMISSION_ID, - ]) - ) - ).to.eq(true); + // Valid revoke + actions[0].data = daoInterface.encodeFunctionData('revoke', [ + SOME_CONTRACT_ADDRESS, + carol.address, + MEMBER_PERMISSION_ID, + ]); + expect( + await memberAccessExecuteCondition.isGranted( + ADDRESS_ONE, // where (used) + ADDRESS_TWO, // who (used) + EXECUTE_PERMISSION_ID, // permission (used) + daoInterface.encodeFunctionData('execute', [ONE_BYTES32, actions, 0]) + ) + ).to.eq(true); - // Invalid - expect( - await memberAccessExecuteCondition.isGranted( - ADDRESS_ONE, // where (used) - ADDRESS_TWO, // who (used) - EXECUTE_PERMISSION_ID, // permission (used) - DAO__factory.createInterface().encodeFunctionData('grant', [ - // call - SOME_CONTRACT_ADDRESS, - carol.address, - EDITOR_PERMISSION_ID, - ]) - ) - ).to.eq(false); - expect( - await memberAccessExecuteCondition.isGranted( - ADDRESS_ONE, // where (used) - ADDRESS_TWO, // who (used) - EXECUTE_PERMISSION_ID, // permission (used) - DAO__factory.createInterface().encodeFunctionData('revoke', [ - // call - SOME_CONTRACT_ADDRESS, - carol.address, - EDITOR_PERMISSION_ID, - ]) - ) - ).to.eq(false); - expect( - await memberAccessExecuteCondition.isGranted( - ADDRESS_ONE, // where (used) - ADDRESS_TWO, // who (used) - EXECUTE_PERMISSION_ID, // permission (used) - DAO__factory.createInterface().encodeFunctionData('grant', [ - // call - SOME_CONTRACT_ADDRESS, - carol.address, - ROOT_PERMISSION_ID, - ]) - ) - ).to.eq(false); - expect( - await memberAccessExecuteCondition.isGranted( - ADDRESS_ONE, // where (used) - ADDRESS_TWO, // who (used) - EXECUTE_PERMISSION_ID, // permission (used) - DAO__factory.createInterface().encodeFunctionData('revoke', [ - // call - SOME_CONTRACT_ADDRESS, - carol.address, - ROOT_PERMISSION_ID, - ]) - ) - ).to.eq(false); - expect( - await memberAccessExecuteCondition.isGranted( - ADDRESS_ONE, // where (used) - ADDRESS_TWO, // who (used) - EXECUTE_PERMISSION_ID, // permission (used) - DAO__factory.createInterface().encodeFunctionData('grant', [ - // call - SOME_CONTRACT_ADDRESS, - carol.address, - DEPLOYER_PERMISSION_ID, - ]) - ) - ).to.eq(false); - expect( - await memberAccessExecuteCondition.isGranted( - ADDRESS_ONE, // where (used) - ADDRESS_TWO, // who (used) - EXECUTE_PERMISSION_ID, // permission (used) - DAO__factory.createInterface().encodeFunctionData('revoke', [ - // call - SOME_CONTRACT_ADDRESS, - carol.address, - DEPLOYER_PERMISSION_ID, - ]) - ) - ).to.eq(false); - }); + // Invalid + actions[0].data = daoInterface.encodeFunctionData('setDaoURI', [ + hexlify(toUtf8Bytes('ipfs://')), + ]); + expect( + await memberAccessExecuteCondition.isGranted( + ADDRESS_ONE, // where (used) + ADDRESS_TWO, // who (used) + EXECUTE_PERMISSION_ID, // permission (used) + daoInterface.encodeFunctionData('execute', [ONE_BYTES32, actions, 0]) + ) + ).to.eq(false); - it('Should only allow to target the intended plugin contract', async () => { - // Valid - expect( - await memberAccessExecuteCondition.isGranted( - ADDRESS_ONE, // where (used) - ADDRESS_TWO, // who (used) - EXECUTE_PERMISSION_ID, // permission (used) - DAO__factory.createInterface().encodeFunctionData('grant', [ - // call - SOME_CONTRACT_ADDRESS, - carol.address, - MEMBER_PERMISSION_ID, - ]) - ) - ).to.eq(true); - expect( - await memberAccessExecuteCondition.isGranted( - ADDRESS_ONE, // where (used) - ADDRESS_TWO, // who (used) - EXECUTE_PERMISSION_ID, // permission (used) - DAO__factory.createInterface().encodeFunctionData('revoke', [ - // call - SOME_CONTRACT_ADDRESS, - carol.address, - MEMBER_PERMISSION_ID, - ]) - ) - ).to.eq(true); + // Invalid + actions[0].data = daoInterface.encodeFunctionData('setMetadata', [ + hexlify(toUtf8Bytes('ipfs://')), + ]); + expect( + await memberAccessExecuteCondition.isGranted( + ADDRESS_ONE, // where (used) + ADDRESS_TWO, // who (used) + EXECUTE_PERMISSION_ID, // permission (used) + daoInterface.encodeFunctionData('execute', [ONE_BYTES32, actions, 0]) + ) + ).to.eq(false); - // Invalid - expect( - await memberAccessExecuteCondition.isGranted( - ADDRESS_ONE, // where (used) - ADDRESS_TWO, // who (used) - EXECUTE_PERMISSION_ID, // permission (used) - DAO__factory.createInterface().encodeFunctionData('grant', [ - // call - ADDRESS_TWO, - carol.address, - MEMBER_PERMISSION_ID, - ]) - ) - ).to.eq(false); - expect( - await memberAccessExecuteCondition.isGranted( - ADDRESS_ONE, // where (used) - ADDRESS_TWO, // who (used) - EXECUTE_PERMISSION_ID, // permission (used) - DAO__factory.createInterface().encodeFunctionData('revoke', [ - // call - ADDRESS_TWO, - carol.address, - MEMBER_PERMISSION_ID, - ]) - ) - ).to.eq(false); + // Invalid + actions[0].data = daoInterface.encodeFunctionData( + 'setSignatureValidator', + [ADDRESS_ONE] + ); + expect( + await memberAccessExecuteCondition.isGranted( + ADDRESS_ONE, // where (used) + ADDRESS_TWO, // who (used) + EXECUTE_PERMISSION_ID, // permission (used) + daoInterface.encodeFunctionData('execute', [ONE_BYTES32, actions, 0]) + ) + ).to.eq(false); + }); - expect( - await memberAccessExecuteCondition.isGranted( - ADDRESS_ONE, // where (used) - ADDRESS_TWO, // who (used) - EXECUTE_PERMISSION_ID, // permission (used) - DAO__factory.createInterface().encodeFunctionData('grant', [ - // call - dao.address, - carol.address, - MEMBER_PERMISSION_ID, - ]) - ) - ).to.eq(false); - expect( - await memberAccessExecuteCondition.isGranted( - ADDRESS_ONE, // where (used) - ADDRESS_TWO, // who (used) - EXECUTE_PERMISSION_ID, // permission (used) - DAO__factory.createInterface().encodeFunctionData('revoke', [ - // call - dao.address, - carol.address, - MEMBER_PERMISSION_ID, - ]) - ) - ).to.eq(false); - }); + it('Should only allow MEMBER_PERMISSION_ID', async () => { + const actions: IDAO.ActionStruct[] = [ + {to: dao.address, value: 0, data: '0x'}, + ]; - it("Should allow granting to whatever 'who' address", async () => { - expect( - await memberAccessExecuteCondition.isGranted( - ADDRESS_ONE, // where (used) - ADDRESS_TWO, // who (used) - EXECUTE_PERMISSION_ID, // permission (used) - DAO__factory.createInterface().encodeFunctionData('grant', [ - // call - SOME_CONTRACT_ADDRESS, - alice.address, - MEMBER_PERMISSION_ID, - ]) - ) - ).to.eq(true); - expect( - await memberAccessExecuteCondition.isGranted( - ADDRESS_ONE, // where (used) - ADDRESS_TWO, // who (used) - EXECUTE_PERMISSION_ID, // permission (used) - DAO__factory.createInterface().encodeFunctionData('revoke', [ - // call - SOME_CONTRACT_ADDRESS, - alice.address, - MEMBER_PERMISSION_ID, - ]) - ) - ).to.eq(true); + // Valid grant + actions[0].data = daoInterface.encodeFunctionData('grant', [ + SOME_CONTRACT_ADDRESS, + carol.address, + MEMBER_PERMISSION_ID, + ]); + expect( + await memberAccessExecuteCondition.isGranted( + ADDRESS_ONE, // where (used) + ADDRESS_TWO, // who (used) + EXECUTE_PERMISSION_ID, // permission (used) + daoInterface.encodeFunctionData('execute', [ONE_BYTES32, actions, 0]) + ) + ).to.eq(true); - // Bob - expect( - await memberAccessExecuteCondition.isGranted( - ADDRESS_ONE, // where (used) - ADDRESS_TWO, // who (used) - EXECUTE_PERMISSION_ID, // permission (used) - DAO__factory.createInterface().encodeFunctionData('grant', [ - // call - SOME_CONTRACT_ADDRESS, - bob.address, - MEMBER_PERMISSION_ID, - ]) - ) - ).to.eq(true); - expect( - await memberAccessExecuteCondition.isGranted( - ADDRESS_ONE, // where (used) - ADDRESS_TWO, // who (used) - EXECUTE_PERMISSION_ID, // permission (used) - DAO__factory.createInterface().encodeFunctionData('revoke', [ - // call - SOME_CONTRACT_ADDRESS, - bob.address, - MEMBER_PERMISSION_ID, - ]) - ) - ).to.eq(true); + // Valid revoke + actions[0].data = daoInterface.encodeFunctionData('revoke', [ + SOME_CONTRACT_ADDRESS, + carol.address, + MEMBER_PERMISSION_ID, + ]); + expect( + await memberAccessExecuteCondition.isGranted( + ADDRESS_ONE, // where (used) + ADDRESS_TWO, // who (used) + EXECUTE_PERMISSION_ID, // permission (used) + daoInterface.encodeFunctionData('execute', [ONE_BYTES32, actions, 0]) + ) + ).to.eq(true); - // Carol - expect( - await memberAccessExecuteCondition.isGranted( - ADDRESS_ONE, // where (used) - ADDRESS_TWO, // who (used) - EXECUTE_PERMISSION_ID, // permission (used) - DAO__factory.createInterface().encodeFunctionData('grant', [ - // call - SOME_CONTRACT_ADDRESS, - carol.address, - MEMBER_PERMISSION_ID, - ]) - ) - ).to.eq(true); - expect( - await memberAccessExecuteCondition.isGranted( - ADDRESS_ONE, // where (used) - ADDRESS_TWO, // who (used) - EXECUTE_PERMISSION_ID, // permission (used) - DAO__factory.createInterface().encodeFunctionData('revoke', [ - // call - SOME_CONTRACT_ADDRESS, - carol.address, - MEMBER_PERMISSION_ID, - ]) - ) - ).to.eq(true); + // Invalid + actions[0].data = daoInterface.encodeFunctionData('grant', [ + SOME_CONTRACT_ADDRESS, + carol.address, + EDITOR_PERMISSION_ID, + ]); + expect( + await memberAccessExecuteCondition.isGranted( + ADDRESS_ONE, // where (used) + ADDRESS_TWO, // who (used) + EXECUTE_PERMISSION_ID, // permission (used) + daoInterface.encodeFunctionData('execute', [ONE_BYTES32, actions, 0]) + ) + ).to.eq(false); + + actions[0].data = daoInterface.encodeFunctionData('revoke', [ + SOME_CONTRACT_ADDRESS, + carol.address, + EDITOR_PERMISSION_ID, + ]); + expect( + await memberAccessExecuteCondition.isGranted( + ADDRESS_ONE, // where (used) + ADDRESS_TWO, // who (used) + EXECUTE_PERMISSION_ID, // permission (used) + daoInterface.encodeFunctionData('execute', [ONE_BYTES32, actions, 0]) + ) + ).to.eq(false); + + // Invalid + actions[0].data = daoInterface.encodeFunctionData('grant', [ + SOME_CONTRACT_ADDRESS, + carol.address, + ROOT_PERMISSION_ID, + ]); + expect( + await memberAccessExecuteCondition.isGranted( + ADDRESS_ONE, // where (used) + ADDRESS_TWO, // who (used) + EXECUTE_PERMISSION_ID, // permission (used) + daoInterface.encodeFunctionData('execute', [ONE_BYTES32, actions, 0]) + ) + ).to.eq(false); + + actions[0].data = daoInterface.encodeFunctionData('revoke', [ + SOME_CONTRACT_ADDRESS, + carol.address, + ROOT_PERMISSION_ID, + ]); + expect( + await memberAccessExecuteCondition.isGranted( + ADDRESS_ONE, // where (used) + ADDRESS_TWO, // who (used) + EXECUTE_PERMISSION_ID, // permission (used) + daoInterface.encodeFunctionData('execute', [ONE_BYTES32, actions, 0]) + ) + ).to.eq(false); + + // Invalid + actions[0].data = daoInterface.encodeFunctionData('grant', [ + SOME_CONTRACT_ADDRESS, + carol.address, + DEPLOYER_PERMISSION_ID, + ]); + expect( + await memberAccessExecuteCondition.isGranted( + ADDRESS_ONE, // where (used) + ADDRESS_TWO, // who (used) + EXECUTE_PERMISSION_ID, // permission (used) + daoInterface.encodeFunctionData('execute', [ONE_BYTES32, actions, 0]) + ) + ).to.eq(false); + + actions[0].data = daoInterface.encodeFunctionData('revoke', [ + SOME_CONTRACT_ADDRESS, + carol.address, + DEPLOYER_PERMISSION_ID, + ]); + expect( + await memberAccessExecuteCondition.isGranted( + ADDRESS_ONE, // where (used) + ADDRESS_TWO, // who (used) + EXECUTE_PERMISSION_ID, // permission (used) + daoInterface.encodeFunctionData('execute', [ONE_BYTES32, actions, 0]) + ) + ).to.eq(false); + }); + + it('Should only allow to target the intended plugin contract', async () => { + const actions: IDAO.ActionStruct[] = [ + {to: dao.address, value: 0, data: '0x'}, + ]; + + // Valid grant + actions[0].data = daoInterface.encodeFunctionData('grant', [ + SOME_CONTRACT_ADDRESS, + carol.address, + MEMBER_PERMISSION_ID, + ]); + expect( + await memberAccessExecuteCondition.isGranted( + ADDRESS_ONE, // where (used) + ADDRESS_TWO, // who (used) + EXECUTE_PERMISSION_ID, // permission (used) + daoInterface.encodeFunctionData('execute', [ONE_BYTES32, actions, 0]) + ) + ).to.eq(true); + + // Valid revoke + actions[0].data = daoInterface.encodeFunctionData('revoke', [ + SOME_CONTRACT_ADDRESS, + carol.address, + MEMBER_PERMISSION_ID, + ]); + expect( + await memberAccessExecuteCondition.isGranted( + ADDRESS_ONE, // where (used) + ADDRESS_TWO, // who (used) + EXECUTE_PERMISSION_ID, // permission (used) + daoInterface.encodeFunctionData('execute', [ONE_BYTES32, actions, 0]) + ) + ).to.eq(true); + + // Invalid + actions[0].data = daoInterface.encodeFunctionData('grant', [ + ADDRESS_TWO, + carol.address, + MEMBER_PERMISSION_ID, + ]); + expect( + await memberAccessExecuteCondition.isGranted( + ADDRESS_ONE, // where (used) + ADDRESS_TWO, // who (used) + EXECUTE_PERMISSION_ID, // permission (used) + daoInterface.encodeFunctionData('execute', [ONE_BYTES32, actions, 0]) + ) + ).to.eq(false); - // Any - expect( - await memberAccessExecuteCondition.isGranted( - ADDRESS_ONE, // where (used) - ADDRESS_TWO, // who (used) - EXECUTE_PERMISSION_ID, // permission (used) - DAO__factory.createInterface().encodeFunctionData('grant', [ - // call + actions[0].data = daoInterface.encodeFunctionData('revoke', [ + ADDRESS_TWO, + carol.address, + MEMBER_PERMISSION_ID, + ]); + expect( + await memberAccessExecuteCondition.isGranted( + ADDRESS_ONE, // where (used) + ADDRESS_TWO, // who (used) + EXECUTE_PERMISSION_ID, // permission (used) + daoInterface.encodeFunctionData('execute', [ONE_BYTES32, actions, 0]) + ) + ).to.eq(false); + + // Invalid + actions[0].data = daoInterface.encodeFunctionData('grant', [ + dao.address, + carol.address, + MEMBER_PERMISSION_ID, + ]); + expect( + await memberAccessExecuteCondition.isGranted( + ADDRESS_ONE, // where (used) + ADDRESS_TWO, // who (used) + EXECUTE_PERMISSION_ID, // permission (used) + daoInterface.encodeFunctionData('execute', [ONE_BYTES32, actions, 0]) + ) + ).to.eq(false); + + actions[0].data = daoInterface.encodeFunctionData('revoke', [ + dao.address, + carol.address, + MEMBER_PERMISSION_ID, + ]); + expect( + await memberAccessExecuteCondition.isGranted( + ADDRESS_ONE, // where (used) + ADDRESS_TWO, // who (used) + EXECUTE_PERMISSION_ID, // permission (used) + daoInterface.encodeFunctionData('execute', [ONE_BYTES32, actions, 0]) + ) + ).to.eq(false); + }); + + it("Should allow granting to whatever 'who' address", async () => { + const actions: IDAO.ActionStruct[] = [ + {to: dao.address, value: 0, data: '0x'}, + ]; + for (const grantedToAddress of [ + SOME_CONTRACT_ADDRESS, + bob.address, + dao.address, + ADDRESS_ONE, + ]) { + // Valid grant + actions[0].data = daoInterface.encodeFunctionData('grant', [ SOME_CONTRACT_ADDRESS, - ADDRESS_ZERO, + grantedToAddress, MEMBER_PERMISSION_ID, - ]) - ) - ).to.eq(true); - expect( - await memberAccessExecuteCondition.isGranted( - ADDRESS_ONE, // where (used) - ADDRESS_TWO, // who (used) - EXECUTE_PERMISSION_ID, // permission (used) - DAO__factory.createInterface().encodeFunctionData('revoke', [ - // call + ]); + expect( + await memberAccessExecuteCondition.isGranted( + ADDRESS_ONE, // where (used) + ADDRESS_TWO, // who (used) + EXECUTE_PERMISSION_ID, // permission (used) + daoInterface.encodeFunctionData('execute', [ + ONE_BYTES32, + actions, + 0, + ]) + ) + ).to.eq(true); + + // Valid revoke + actions[0].data = daoInterface.encodeFunctionData('revoke', [ SOME_CONTRACT_ADDRESS, - ADDRESS_ZERO, + grantedToAddress, MEMBER_PERMISSION_ID, - ]) - ) - ).to.eq(true); + ]); + expect( + await memberAccessExecuteCondition.isGranted( + ADDRESS_ONE, // where (used) + ADDRESS_TWO, // who (used) + EXECUTE_PERMISSION_ID, // permission (used) + daoInterface.encodeFunctionData('execute', [ + ONE_BYTES32, + actions, + 0, + ]) + ) + ).to.eq(true); + } + }); + }); + + describe('Direct grant and revoke are not allowed', () => { + it('Should reject granting and revoking directly', async () => { + // Valid + expect( + await memberAccessExecuteCondition.isGranted( + ADDRESS_ONE, // where (used) + ADDRESS_TWO, // who (used) + EXECUTE_PERMISSION_ID, // permission (used) + DAO__factory.createInterface().encodeFunctionData('grant', [ + // call + SOME_CONTRACT_ADDRESS, + carol.address, + MEMBER_PERMISSION_ID, + ]) + ) + ).to.eq(false); + + expect( + await memberAccessExecuteCondition.isGranted( + ADDRESS_ONE, // where (used) + ADDRESS_TWO, // who (used) + EXECUTE_PERMISSION_ID, // permission (used) + DAO__factory.createInterface().encodeFunctionData('revoke', [ + // call + SOME_CONTRACT_ADDRESS, + carol.address, + MEMBER_PERMISSION_ID, + ]) + ) + ).to.eq(false); + }); }); }); From c7cff26a640c552efc3dfdd488c6d40e65d97fbe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8r=E2=88=82=C2=A1?= Date: Thu, 30 Nov 2023 13:53:15 +0100 Subject: [PATCH 07/29] Updating the tests WIP --- .../contracts/deploy/02_setup/10_setup.ts | 10 +- .../src/MemberAccessExecuteCondition.sol | 42 +- .../src/OnlyPluginUpgraderCondition.sol | 160 ++++--- .../contracts/test/unit-testing/common.ts | 1 + .../test/unit-testing/member-access-plugin.ts | 17 +- .../only-plugin-upgrader-condition.ts | 419 ++++++++++++++++++ .../test/unit-testing/space-plugin-setup.ts | 10 +- packages/contracts/utils/helpers.ts | 28 +- 8 files changed, 583 insertions(+), 104 deletions(-) create mode 100644 packages/contracts/test/unit-testing/only-plugin-upgrader-condition.ts diff --git a/packages/contracts/deploy/02_setup/10_setup.ts b/packages/contracts/deploy/02_setup/10_setup.ts index d633d47..9f3b18d 100644 --- a/packages/contracts/deploy/02_setup/10_setup.ts +++ b/packages/contracts/deploy/02_setup/10_setup.ts @@ -3,7 +3,7 @@ import { PersonalSpaceAdminPluginSetupParams, SpacePluginSetupParams, } from '../../plugin-setup-params'; -import {activeContractsList} from '@aragon/osx-ethers'; +import {getPluginSetupProcessorAddress} from '../../utils/helpers'; import {DeployFunction} from 'hardhat-deploy/types'; import {HardhatRuntimeEnvironment} from 'hardhat/types'; @@ -12,13 +12,7 @@ const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) { const {deploy} = deployments; const {deployer} = await getNamedAccounts(); - const pspAddress = - activeContractsList[network.name as keyof typeof activeContractsList] - .PluginSetupProcessor; - - console.log( - `\nUsing the PluginSetupProcessor address ${pspAddress} on ${network.name}` - ); + const pspAddress = getPluginSetupProcessorAddress(network.name); // Space Setup console.log( diff --git a/packages/contracts/src/MemberAccessExecuteCondition.sol b/packages/contracts/src/MemberAccessExecuteCondition.sol index 417cb2a..a886246 100644 --- a/packages/contracts/src/MemberAccessExecuteCondition.sol +++ b/packages/contracts/src/MemberAccessExecuteCondition.sol @@ -18,27 +18,6 @@ contract MemberAccessExecuteCondition is PermissionCondition { targetContract = _targetContract; } - function getSelector(bytes memory _data) public pure returns (bytes4 selector) { - // Slices are only supported for bytes calldata, not bytes memory - // Bytes memory requires an assembly block - assembly { - selector := mload(add(_data, 32)) - } - } - - function decodeGrantRevokeCalldata( - bytes memory _data - ) public pure returns (bytes4 sig, address who, address where, bytes32 permissionId) { - // Slicing is only supported for bytes calldata, not bytes memory - // Bytes memory requires an assembly block - assembly { - sig := mload(add(_data, 32)) - who := mload(add(_data, 36)) - where := mload(add(_data, 68)) - permissionId := mload(add(_data, 100)) - } - } - /// @notice Checks whether the current action wants to grant membership on the predefined address function isGranted( address _where, @@ -79,4 +58,25 @@ contract MemberAccessExecuteCondition is PermissionCondition { return true; } + + function getSelector(bytes memory _data) public pure returns (bytes4 selector) { + // Slices are only supported for bytes calldata, not bytes memory + // Bytes memory requires an assembly block + assembly { + selector := mload(add(_data, 32)) + } + } + + function decodeGrantRevokeCalldata( + bytes memory _data + ) public pure returns (bytes4 sig, address who, address where, bytes32 permissionId) { + // Slicing is only supported for bytes calldata, not bytes memory + // Bytes memory requires an assembly block + assembly { + sig := mload(add(_data, 32)) + who := mload(add(_data, 36)) + where := mload(add(_data, 68)) + permissionId := mload(add(_data, 100)) + } + } } diff --git a/packages/contracts/src/OnlyPluginUpgraderCondition.sol b/packages/contracts/src/OnlyPluginUpgraderCondition.sol index 4b3b2c6..a59a846 100644 --- a/packages/contracts/src/OnlyPluginUpgraderCondition.sol +++ b/packages/contracts/src/OnlyPluginUpgraderCondition.sol @@ -7,7 +7,6 @@ import {PermissionManager} from "@aragon/osx/core/permission/PermissionManager.s import {PluginSetupProcessor} from "@aragon/osx/framework/plugin/setup/PluginSetupProcessor.sol"; import {DAO} from "@aragon/osx/core/dao/DAO.sol"; import {IDAO} from "@aragon/osx/core/dao/IDAO.sol"; -import {MEMBER_PERMISSION_ID} from "./constants.sol"; /// @notice The condition associated with the `pluginUpgrader` contract OnlyPluginUpgraderCondition is PermissionCondition { @@ -17,8 +16,8 @@ contract OnlyPluginUpgraderCondition is PermissionCondition { address private dao; /// @notice The address of the PluginSetupProcessor contract address private psp; - /// @notice The address of the contract where the permission can be granted - address[] private targetPluginAddresses; + /// @notice Contracts where the permission can be granted + mapping(address => bool) private allowedPluginAddresses; /// @notice Thrown when the constructor receives empty parameters error InvalidParameters(); @@ -33,20 +32,19 @@ contract OnlyPluginUpgraderCondition is PermissionCondition { ) { revert InvalidParameters(); } - targetPluginAddresses = _targetPluginAddresses; - psp = address(_psp); - dao = address(_dao); - } - function getSelector(bytes memory _data) public pure returns (bytes4 selector) { - // Slices are only supported for bytes calldata - // Bytes memory requires an assembly block - assembly { - selector := mload(add(_data, 32)) + for (uint256 i = 0; i < _targetPluginAddresses.length; ) { + allowedPluginAddresses[_targetPluginAddresses[i]] = true; + + unchecked { + i++; + } } + psp = address(_psp); + dao = address(_dao); } - /// @notice Checks whether the current action wants to grant membership on the predefined address + /// @notice Checks whether the current action grants update to the PSP, updates a predefined plugin and revokes the update permission function isGranted( address _where, address _who, @@ -60,6 +58,7 @@ contract OnlyPluginUpgraderCondition is PermissionCondition { return false; } + // Unwrap the execute actions (, IDAO.Action[] memory _actions, ) = abi.decode( _data[4:], (bytes32, IDAO.Action[], uint256) @@ -68,68 +67,107 @@ contract OnlyPluginUpgraderCondition is PermissionCondition { // Check all actions if (_actions.length != 3) return false; - // Action 1: GRANT UPGRADE_PLUGIN_PERMISSION_ID to the PSP on targetPlugis[] - _requestedFuncSig = getSelector(_actions[0].data); - if (_requestedFuncSig != PermissionManager.grant.selector) return false; - else if (_actions[0].to != dao) return false; - else if (!isValidExecuteGrantRevokeCalldata(_actions[0].data)) return false; + // Action 1/3: GRANT/REVOKE UPGRADE_PLUGIN_PERMISSION_ID to the PSP on targetPlugis[] + if (_actions[0].to != dao || _actions[2].to != dao) return false; + else if (!isValidGrantRevokeCalldata(_actions[0].data, _actions[2].data)) return false; // Action 2: CALL PSP.applyUpdate() onto targetPlugins[] - _requestedFuncSig = getSelector(_actions[1].data); - if (_requestedFuncSig != PluginSetupProcessor.applyUpdate.selector) return false; - else if (_actions[1].to != psp) return false; - else if (!isValidExecuteApplyUpdateCalldata(_actions[1].data)) return false; - - // Action 3: REVOKE UPGRADE_PLUGIN_PERMISSION_ID to the PSP on targetPlugis[] - _requestedFuncSig = getSelector(_actions[2].data); - if (_requestedFuncSig != PermissionManager.revoke.selector) return false; - else if (_actions[2].to != dao) return false; - else if (!isValidExecuteGrantRevokeCalldata(_actions[2].data)) return false; + if (_actions[1].to != psp) return false; + else if (!isValidApplyUpdateCalldata(_actions[1].data)) return false; return true; } - // Internal helpers - - function isValidExecuteGrantRevokeCalldata(bytes memory _data) private view returns (bool) { - // Decode the call being requested - (, address _requestedWhere, address _requestedWho, bytes32 _requestedPermission) = abi - .decode( - _data, - (bytes4 /*funcSig*/, address /*where*/, address /*who*/, bytes32 /*perm*/) - ); - - if (_requestedPermission != UPGRADE_PLUGIN_PERMISSION_ID) return false; - else if (_requestedWho != psp) return false; + function getSelector(bytes memory _data) public pure returns (bytes4 selector) { + // Slices are only supported for bytes calldata + // Bytes memory requires an assembly block + assembly { + selector := mload(add(_data, 32)) + } + } - // Search the first match - for (uint256 j = 0; j < targetPluginAddresses.length; ) { - if (_requestedWhere == targetPluginAddresses[j]) return true; + function decodeGrantRevokeCalldata( + bytes memory _data + ) public pure returns (bytes4 selector, address who, address where, bytes32 permissionId) { + // Slicing is only supported for bytes calldata, not bytes memory + // Bytes memory requires an assembly block + assembly { + selector := mload(add(_data, 32)) + who := mload(add(_data, 36)) + where := mload(add(_data, 68)) + permissionId := mload(add(_data, 100)) + } + } - unchecked { - j++; - } + function decodeApplyUpdateCalldata( + bytes memory _data + ) + public + pure + returns ( + bytes4 selector, + address daoAddress, + PluginSetupProcessor.ApplyUpdateParams memory applyUpdateParams + ) + { + // Slicing is only supported for bytes calldata, not bytes memory + // Bytes memory requires an assembly block + assembly { + selector := mload(add(_data, 32)) + daoAddress := mload(add(_data, 36)) + applyUpdateParams := mload(add(_data, 68)) } - return false; } - function isValidExecuteApplyUpdateCalldata(bytes memory _data) private view returns (bool) { - // - (, address _dao, PluginSetupProcessor.ApplyUpdateParams memory _applyParams) = abi.decode( - _data, - (bytes4, address, PluginSetupProcessor.ApplyUpdateParams) - ); + // Internal helpers + + function isValidGrantRevokeCalldata( + bytes memory _grantData, + bytes memory _revokeData + ) private view returns (bool) { + // Grant checks + ( + bytes4 _grantSelector, + address _grantWhere, + address _grantWho, + bytes32 _grantPermission + ) = decodeGrantRevokeCalldata(_grantData); + + if (_grantSelector != PermissionManager.grant.selector) return false; + else if (_grantWho != psp) return false; + else if (_grantPermission != UPGRADE_PLUGIN_PERMISSION_ID) return false; + else if (!allowedPluginAddresses[_grantWhere]) return false; + + // Revoke checks + ( + bytes4 _revokeSelector, + address _revokeWhere, + address _revokeWho, + bytes32 _revokePermission + ) = decodeGrantRevokeCalldata(_revokeData); + + if (_revokeSelector != PermissionManager.revoke.selector) return false; + else if (_revokeWho != psp) return false; + else if (_revokePermission != UPGRADE_PLUGIN_PERMISSION_ID) return false; + else if (!allowedPluginAddresses[_revokeWhere]) return false; + + // Combined checks + if (_grantWhere != _revokeWhere) return false; + + return true; + } - if (_dao != dao) return false; + function isValidApplyUpdateCalldata(bytes memory _data) private view returns (bool) { + ( + bytes4 _selector, + address _dao, + PluginSetupProcessor.ApplyUpdateParams memory _applyParams + ) = decodeApplyUpdateCalldata(_data); - // Search the first match - for (uint256 j = 0; j < targetPluginAddresses.length; ) { - if (_applyParams.plugin != targetPluginAddresses[j]) return false; + if (_selector != PluginSetupProcessor.applyUpdate.selector) return false; + else if (_dao != dao) return false; + else if (!allowedPluginAddresses[_applyParams.plugin]) return false; - unchecked { - j++; - } - } return true; } } diff --git a/packages/contracts/test/unit-testing/common.ts b/packages/contracts/test/unit-testing/common.ts index 1afa932..e292e7c 100644 --- a/packages/contracts/test/unit-testing/common.ts +++ b/packages/contracts/test/unit-testing/common.ts @@ -33,6 +33,7 @@ export const MAX_UINT64 = ethers.BigNumber.from(2).pow(64).sub(1); export const ADDRESS_ZERO = ethers.constants.AddressZero; export const ADDRESS_ONE = `0x${'0'.repeat(39)}1`; export const ADDRESS_TWO = `0x${'0'.repeat(39)}2`; +export const ADDRESS_THREE = `0x${'0'.repeat(39)}3`; export const NO_CONDITION = ADDRESS_ZERO; export async function getTime(): Promise { diff --git a/packages/contracts/test/unit-testing/member-access-plugin.ts b/packages/contracts/test/unit-testing/member-access-plugin.ts index 5a51d4e..7461d8d 100644 --- a/packages/contracts/test/unit-testing/member-access-plugin.ts +++ b/packages/contracts/test/unit-testing/member-access-plugin.ts @@ -9,6 +9,8 @@ import { MainVotingPlugin__factory, MemberAccessPlugin, MemberAccessPlugin__factory, + MemberAccessExecuteCondition, + MemberAccessExecuteCondition__factory, SpacePlugin, SpacePlugin__factory, } from '../../typechain'; @@ -62,6 +64,7 @@ describe('Member Access Plugin', function () { let dave: SignerWithAddress; let dao: DAO; let memberAccessPlugin: MemberAccessPlugin; + let memberAccessExecuteCondition: MemberAccessExecuteCondition; let mainVotingPlugin: MainVotingPlugin; let spacePlugin: SpacePlugin; let defaultInput: InitData; @@ -85,6 +88,11 @@ describe('Member Access Plugin', function () { new SpacePlugin__factory(alice) ); + memberAccessExecuteCondition = + await new MemberAccessExecuteCondition__factory(alice).deploy( + mainVotingPlugin.address + ); + // inits await memberAccessPlugin.initialize(dao.address, { proposalDuration: 60 * 60 * 24 * 5, @@ -108,10 +116,11 @@ describe('Member Access Plugin', function () { MEMBER_PERMISSION_ID ); // The plugin can execute on the DAO - await dao.grant( + await dao.grantWithCondition( dao.address, memberAccessPlugin.address, - EXECUTE_PERMISSION_ID + EXECUTE_PERMISSION_ID, + memberAccessExecuteCondition.address ); // The main voting plugin can also execute on the DAO await dao.grant( @@ -1143,20 +1152,16 @@ describe('Member Access Plugin', function () { await expect(dao.execute(ZERO_BYTES32, actionsWith(ADDRESS_ZERO), 0)).to .be.reverted; - await expect(dao.execute(ZERO_BYTES32, actionsWith(ADDRESS_ONE), 0)).to.be .reverted; - await expect(dao.execute(ZERO_BYTES32, actionsWith(ADDRESS_TWO), 0)).to.be .reverted; - await expect(dao.execute(ZERO_BYTES32, actionsWith(bob.address), 0)).to.be .reverted; await expect( dao.execute(ZERO_BYTES32, actionsWith(memberAccessPlugin.address), 0) ).to.be.reverted; - await expect( dao.execute(ZERO_BYTES32, actionsWith(mainVotingPlugin.address), 0) ).to.not.be.reverted; diff --git a/packages/contracts/test/unit-testing/only-plugin-upgrader-condition.ts b/packages/contracts/test/unit-testing/only-plugin-upgrader-condition.ts new file mode 100644 index 0000000..39d8797 --- /dev/null +++ b/packages/contracts/test/unit-testing/only-plugin-upgrader-condition.ts @@ -0,0 +1,419 @@ +import { + DAO, + DAO__factory, + MemberAccessExecuteCondition, + MemberAccessExecuteCondition__factory, +} from '../../typechain'; +import {deployTestDao} from '../helpers/test-dao'; +import { + ADDRESS_ONE, + ADDRESS_TWO, + ADDRESS_ZERO, + DEPLOYER_PERMISSION_ID, + EDITOR_PERMISSION_ID, + EXECUTE_PERMISSION_ID, + MEMBER_PERMISSION_ID, + ROOT_PERMISSION_ID, +} from './common'; +import {hexlify} from '@ethersproject/bytes'; +import {SignerWithAddress} from '@nomiclabs/hardhat-ethers/signers'; +import {expect} from 'chai'; +import {toUtf8Bytes} from 'ethers/lib/utils'; +import {ethers} from 'hardhat'; + +const SOME_CONTRACT_ADDRESS = '0x' + '1234567890'.repeat(4); + +describe('Only Plugin Upgrader Condition', function () { + let alice: SignerWithAddress; + let bob: SignerWithAddress; + let carol: SignerWithAddress; + let dao: DAO; + let memberAccessExecuteCondition: MemberAccessExecuteCondition; + + before(async () => { + [alice, bob, carol] = await ethers.getSigners(); + dao = await deployTestDao(alice); + }); + + beforeEach(async () => { + const factory = new MemberAccessExecuteCondition__factory(alice); + memberAccessExecuteCondition = await factory.deploy(SOME_CONTRACT_ADDRESS); + }); + + it('Should only accept executing grant and revoke', async () => { + // Valid + expect( + await memberAccessExecuteCondition.isGranted( + ADDRESS_ONE, // where (used) + ADDRESS_TWO, // who (used) + EXECUTE_PERMISSION_ID, // permission (used) + DAO__factory.createInterface().encodeFunctionData('grant', [ + // call + SOME_CONTRACT_ADDRESS, + carol.address, + MEMBER_PERMISSION_ID, + ]) + ) + ).to.eq(true); + + expect( + await memberAccessExecuteCondition.isGranted( + ADDRESS_ONE, // where (used) + ADDRESS_TWO, // who (used) + EXECUTE_PERMISSION_ID, // permission (used) + DAO__factory.createInterface().encodeFunctionData('revoke', [ + // call + SOME_CONTRACT_ADDRESS, + carol.address, + MEMBER_PERMISSION_ID, + ]) + ) + ).to.eq(true); + + // Invalid + expect( + await memberAccessExecuteCondition.isGranted( + ADDRESS_ONE, // where (used) + ADDRESS_TWO, // who (used) + EXECUTE_PERMISSION_ID, // permission (used) + DAO__factory.createInterface().encodeFunctionData('setDaoURI', [ + // call + hexlify(toUtf8Bytes('ipfs://')), + ]) + ) + ).to.eq(false); + expect( + await memberAccessExecuteCondition.isGranted( + ADDRESS_ONE, // where (used) + ADDRESS_TWO, // who (used) + EXECUTE_PERMISSION_ID, // permission (used) + DAO__factory.createInterface().encodeFunctionData('setMetadata', [ + // call + hexlify(toUtf8Bytes('ipfs://')), + ]) + ) + ).to.eq(false); + expect( + await memberAccessExecuteCondition.isGranted( + ADDRESS_ONE, // where (used) + ADDRESS_TWO, // who (used) + EXECUTE_PERMISSION_ID, // permission (used) + DAO__factory.createInterface().encodeFunctionData( + 'setSignatureValidator', + [ + // call + ADDRESS_ONE, + ] + ) + ) + ).to.eq(false); + }); + + it('Should only allow MEMBER_PERMISSION_ID', async () => { + // Valid + expect( + await memberAccessExecuteCondition.isGranted( + ADDRESS_ONE, // where (used) + ADDRESS_TWO, // who (used) + EXECUTE_PERMISSION_ID, // permission (used) + DAO__factory.createInterface().encodeFunctionData('grant', [ + // call + SOME_CONTRACT_ADDRESS, + carol.address, + MEMBER_PERMISSION_ID, + ]) + ) + ).to.eq(true); + expect( + await memberAccessExecuteCondition.isGranted( + ADDRESS_ONE, // where (used) + ADDRESS_TWO, // who (used) + EXECUTE_PERMISSION_ID, // permission (used) + DAO__factory.createInterface().encodeFunctionData('revoke', [ + // call + SOME_CONTRACT_ADDRESS, + carol.address, + MEMBER_PERMISSION_ID, + ]) + ) + ).to.eq(true); + + // Invalid + expect( + await memberAccessExecuteCondition.isGranted( + ADDRESS_ONE, // where (used) + ADDRESS_TWO, // who (used) + EXECUTE_PERMISSION_ID, // permission (used) + DAO__factory.createInterface().encodeFunctionData('grant', [ + // call + SOME_CONTRACT_ADDRESS, + carol.address, + EDITOR_PERMISSION_ID, + ]) + ) + ).to.eq(false); + expect( + await memberAccessExecuteCondition.isGranted( + ADDRESS_ONE, // where (used) + ADDRESS_TWO, // who (used) + EXECUTE_PERMISSION_ID, // permission (used) + DAO__factory.createInterface().encodeFunctionData('revoke', [ + // call + SOME_CONTRACT_ADDRESS, + carol.address, + EDITOR_PERMISSION_ID, + ]) + ) + ).to.eq(false); + expect( + await memberAccessExecuteCondition.isGranted( + ADDRESS_ONE, // where (used) + ADDRESS_TWO, // who (used) + EXECUTE_PERMISSION_ID, // permission (used) + DAO__factory.createInterface().encodeFunctionData('grant', [ + // call + SOME_CONTRACT_ADDRESS, + carol.address, + ROOT_PERMISSION_ID, + ]) + ) + ).to.eq(false); + expect( + await memberAccessExecuteCondition.isGranted( + ADDRESS_ONE, // where (used) + ADDRESS_TWO, // who (used) + EXECUTE_PERMISSION_ID, // permission (used) + DAO__factory.createInterface().encodeFunctionData('revoke', [ + // call + SOME_CONTRACT_ADDRESS, + carol.address, + ROOT_PERMISSION_ID, + ]) + ) + ).to.eq(false); + expect( + await memberAccessExecuteCondition.isGranted( + ADDRESS_ONE, // where (used) + ADDRESS_TWO, // who (used) + EXECUTE_PERMISSION_ID, // permission (used) + DAO__factory.createInterface().encodeFunctionData('grant', [ + // call + SOME_CONTRACT_ADDRESS, + carol.address, + DEPLOYER_PERMISSION_ID, + ]) + ) + ).to.eq(false); + expect( + await memberAccessExecuteCondition.isGranted( + ADDRESS_ONE, // where (used) + ADDRESS_TWO, // who (used) + EXECUTE_PERMISSION_ID, // permission (used) + DAO__factory.createInterface().encodeFunctionData('revoke', [ + // call + SOME_CONTRACT_ADDRESS, + carol.address, + DEPLOYER_PERMISSION_ID, + ]) + ) + ).to.eq(false); + }); + + it('Should only allow to target the intended plugin contract', async () => { + // Valid + expect( + await memberAccessExecuteCondition.isGranted( + ADDRESS_ONE, // where (used) + ADDRESS_TWO, // who (used) + EXECUTE_PERMISSION_ID, // permission (used) + DAO__factory.createInterface().encodeFunctionData('grant', [ + // call + SOME_CONTRACT_ADDRESS, + carol.address, + MEMBER_PERMISSION_ID, + ]) + ) + ).to.eq(true); + expect( + await memberAccessExecuteCondition.isGranted( + ADDRESS_ONE, // where (used) + ADDRESS_TWO, // who (used) + EXECUTE_PERMISSION_ID, // permission (used) + DAO__factory.createInterface().encodeFunctionData('revoke', [ + // call + SOME_CONTRACT_ADDRESS, + carol.address, + MEMBER_PERMISSION_ID, + ]) + ) + ).to.eq(true); + + // Invalid + expect( + await memberAccessExecuteCondition.isGranted( + ADDRESS_ONE, // where (used) + ADDRESS_TWO, // who (used) + EXECUTE_PERMISSION_ID, // permission (used) + DAO__factory.createInterface().encodeFunctionData('grant', [ + // call + ADDRESS_TWO, + carol.address, + MEMBER_PERMISSION_ID, + ]) + ) + ).to.eq(false); + expect( + await memberAccessExecuteCondition.isGranted( + ADDRESS_ONE, // where (used) + ADDRESS_TWO, // who (used) + EXECUTE_PERMISSION_ID, // permission (used) + DAO__factory.createInterface().encodeFunctionData('revoke', [ + // call + ADDRESS_TWO, + carol.address, + MEMBER_PERMISSION_ID, + ]) + ) + ).to.eq(false); + + expect( + await memberAccessExecuteCondition.isGranted( + ADDRESS_ONE, // where (used) + ADDRESS_TWO, // who (used) + EXECUTE_PERMISSION_ID, // permission (used) + DAO__factory.createInterface().encodeFunctionData('grant', [ + // call + dao.address, + carol.address, + MEMBER_PERMISSION_ID, + ]) + ) + ).to.eq(false); + expect( + await memberAccessExecuteCondition.isGranted( + ADDRESS_ONE, // where (used) + ADDRESS_TWO, // who (used) + EXECUTE_PERMISSION_ID, // permission (used) + DAO__factory.createInterface().encodeFunctionData('revoke', [ + // call + dao.address, + carol.address, + MEMBER_PERMISSION_ID, + ]) + ) + ).to.eq(false); + }); + + it("Should allow granting to whatever 'who' address", async () => { + expect( + await memberAccessExecuteCondition.isGranted( + ADDRESS_ONE, // where (used) + ADDRESS_TWO, // who (used) + EXECUTE_PERMISSION_ID, // permission (used) + DAO__factory.createInterface().encodeFunctionData('grant', [ + // call + SOME_CONTRACT_ADDRESS, + alice.address, + MEMBER_PERMISSION_ID, + ]) + ) + ).to.eq(true); + expect( + await memberAccessExecuteCondition.isGranted( + ADDRESS_ONE, // where (used) + ADDRESS_TWO, // who (used) + EXECUTE_PERMISSION_ID, // permission (used) + DAO__factory.createInterface().encodeFunctionData('revoke', [ + // call + SOME_CONTRACT_ADDRESS, + alice.address, + MEMBER_PERMISSION_ID, + ]) + ) + ).to.eq(true); + + // Bob + expect( + await memberAccessExecuteCondition.isGranted( + ADDRESS_ONE, // where (used) + ADDRESS_TWO, // who (used) + EXECUTE_PERMISSION_ID, // permission (used) + DAO__factory.createInterface().encodeFunctionData('grant', [ + // call + SOME_CONTRACT_ADDRESS, + bob.address, + MEMBER_PERMISSION_ID, + ]) + ) + ).to.eq(true); + expect( + await memberAccessExecuteCondition.isGranted( + ADDRESS_ONE, // where (used) + ADDRESS_TWO, // who (used) + EXECUTE_PERMISSION_ID, // permission (used) + DAO__factory.createInterface().encodeFunctionData('revoke', [ + // call + SOME_CONTRACT_ADDRESS, + bob.address, + MEMBER_PERMISSION_ID, + ]) + ) + ).to.eq(true); + + // Carol + expect( + await memberAccessExecuteCondition.isGranted( + ADDRESS_ONE, // where (used) + ADDRESS_TWO, // who (used) + EXECUTE_PERMISSION_ID, // permission (used) + DAO__factory.createInterface().encodeFunctionData('grant', [ + // call + SOME_CONTRACT_ADDRESS, + carol.address, + MEMBER_PERMISSION_ID, + ]) + ) + ).to.eq(true); + expect( + await memberAccessExecuteCondition.isGranted( + ADDRESS_ONE, // where (used) + ADDRESS_TWO, // who (used) + EXECUTE_PERMISSION_ID, // permission (used) + DAO__factory.createInterface().encodeFunctionData('revoke', [ + // call + SOME_CONTRACT_ADDRESS, + carol.address, + MEMBER_PERMISSION_ID, + ]) + ) + ).to.eq(true); + + // Any + expect( + await memberAccessExecuteCondition.isGranted( + ADDRESS_ONE, // where (used) + ADDRESS_TWO, // who (used) + EXECUTE_PERMISSION_ID, // permission (used) + DAO__factory.createInterface().encodeFunctionData('grant', [ + // call + SOME_CONTRACT_ADDRESS, + ADDRESS_ZERO, + MEMBER_PERMISSION_ID, + ]) + ) + ).to.eq(true); + expect( + await memberAccessExecuteCondition.isGranted( + ADDRESS_ONE, // where (used) + ADDRESS_TWO, // who (used) + EXECUTE_PERMISSION_ID, // permission (used) + DAO__factory.createInterface().encodeFunctionData('revoke', [ + // call + SOME_CONTRACT_ADDRESS, + ADDRESS_ZERO, + MEMBER_PERMISSION_ID, + ]) + ) + ).to.eq(true); + }); +}); diff --git a/packages/contracts/test/unit-testing/space-plugin-setup.ts b/packages/contracts/test/unit-testing/space-plugin-setup.ts index 4739a5a..a7ffcce 100644 --- a/packages/contracts/test/unit-testing/space-plugin-setup.ts +++ b/packages/contracts/test/unit-testing/space-plugin-setup.ts @@ -5,6 +5,7 @@ import { SpacePluginSetup, SpacePluginSetup__factory, } from '../../typechain'; +import {getPluginSetupProcessorAddress} from '../../utils/helpers'; import {deployTestDao} from '../helpers/test-dao'; import {getNamedTypesFromMetadata, Operation} from '../helpers/types'; import { @@ -16,10 +17,9 @@ import { NO_CONDITION, SUBSPACE_PERMISSION_ID, } from './common'; -import {activeContractsList} from '@aragon/osx-ethers'; import {SignerWithAddress} from '@nomiclabs/hardhat-ethers/signers'; import {expect} from 'chai'; -import {ethers} from 'hardhat'; +import {ethers, network} from 'hardhat'; describe('Space Plugin Setup', function () { let alice: SignerWithAddress; @@ -33,11 +33,7 @@ describe('Space Plugin Setup', function () { [alice, bob] = await ethers.getSigners(); dao = await deployTestDao(alice); - const hardhatForkNetwork = (process.env.NETWORK_NAME ?? - 'mainnet') as keyof typeof activeContractsList; - - const pspAddress = - activeContractsList[hardhatForkNetwork].PluginSetupProcessor; + const pspAddress = getPluginSetupProcessorAddress(network.name); SpacePluginSetup = new SpacePluginSetup__factory(alice); spacePluginSetup = await SpacePluginSetup.deploy(pspAddress); diff --git a/packages/contracts/utils/helpers.ts b/packages/contracts/utils/helpers.ts index 93971a9..dd05bf1 100644 --- a/packages/contracts/utils/helpers.ts +++ b/packages/contracts/utils/helpers.ts @@ -34,7 +34,7 @@ export const ERRORS = { ALREADY_INITIALIZED: 'Initializable: contract is already initialized', }; -export function getPluginRepoFactoryAddress(networkName: string) { +export function getPluginRepoFactoryAddress(networkName: string): string { let pluginRepoFactoryAddr: string; if ( @@ -59,6 +59,32 @@ export function getPluginRepoFactoryAddress(networkName: string) { return pluginRepoFactoryAddr; } +export function getPluginSetupProcessorAddress(networkName: string): string { + let pluginSetupProcessorAddr: string; + + if ( + networkName === 'localhost' || + networkName === 'hardhat' || + networkName === 'coverage' + ) { + const hardhatForkNetwork = process.env.NETWORK_NAME ?? 'mainnet'; + + pluginSetupProcessorAddr = + osxContracts[hardhatForkNetwork].PluginSetupProcessor; + console.log( + `Using the "${hardhatForkNetwork}" PluginSetupProcessor address (${pluginSetupProcessorAddr}) for deployment testing on network "${networkName}"` + ); + } else { + pluginSetupProcessorAddr = + osxContracts[networkNameMapping[networkName]].PluginSetupProcessor; + + console.log( + `Using the ${networkNameMapping[networkName]} PluginSetupProcessor address (${pluginSetupProcessorAddr}) for deployment...` + ); + } + return pluginSetupProcessorAddr; +} + export async function findEvent(tx: ContractTransaction, eventName: string) { const receipt = await tx.wait(); From 842f7f64721d72e652325e06a130589c1e7af59d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8r=E2=88=82=C2=A1?= Date: Thu, 30 Nov 2023 16:10:24 +0100 Subject: [PATCH 08/29] Conditions testing adapted --- .../src/MemberAccessExecuteCondition.sol | 6 +- .../src/OnlyPluginUpgraderCondition.sol | 6 +- .../member-access-execute-condition.ts | 78 +- .../only-plugin-upgrader-condition.ts | 1647 +++++++++++++---- packages/contracts/utils/helpers.ts | 21 +- 5 files changed, 1362 insertions(+), 396 deletions(-) diff --git a/packages/contracts/src/MemberAccessExecuteCondition.sol b/packages/contracts/src/MemberAccessExecuteCondition.sol index a886246..b1d7815 100644 --- a/packages/contracts/src/MemberAccessExecuteCondition.sol +++ b/packages/contracts/src/MemberAccessExecuteCondition.sol @@ -69,13 +69,13 @@ contract MemberAccessExecuteCondition is PermissionCondition { function decodeGrantRevokeCalldata( bytes memory _data - ) public pure returns (bytes4 sig, address who, address where, bytes32 permissionId) { + ) public pure returns (bytes4 sig, address where, address who, bytes32 permissionId) { // Slicing is only supported for bytes calldata, not bytes memory // Bytes memory requires an assembly block assembly { sig := mload(add(_data, 32)) - who := mload(add(_data, 36)) - where := mload(add(_data, 68)) + where := mload(add(_data, 36)) + who := mload(add(_data, 68)) permissionId := mload(add(_data, 100)) } } diff --git a/packages/contracts/src/OnlyPluginUpgraderCondition.sol b/packages/contracts/src/OnlyPluginUpgraderCondition.sol index a59a846..b4f252d 100644 --- a/packages/contracts/src/OnlyPluginUpgraderCondition.sol +++ b/packages/contracts/src/OnlyPluginUpgraderCondition.sol @@ -88,13 +88,13 @@ contract OnlyPluginUpgraderCondition is PermissionCondition { function decodeGrantRevokeCalldata( bytes memory _data - ) public pure returns (bytes4 selector, address who, address where, bytes32 permissionId) { + ) public pure returns (bytes4 selector, address where, address who, bytes32 permissionId) { // Slicing is only supported for bytes calldata, not bytes memory // Bytes memory requires an assembly block assembly { selector := mload(add(_data, 32)) - who := mload(add(_data, 36)) - where := mload(add(_data, 68)) + where := mload(add(_data, 36)) + who := mload(add(_data, 68)) permissionId := mload(add(_data, 100)) } } diff --git a/packages/contracts/test/unit-testing/member-access-execute-condition.ts b/packages/contracts/test/unit-testing/member-access-execute-condition.ts index 6fb9a8b..33a7825 100644 --- a/packages/contracts/test/unit-testing/member-access-execute-condition.ts +++ b/packages/contracts/test/unit-testing/member-access-execute-condition.ts @@ -5,6 +5,7 @@ import { MemberAccessExecuteCondition, MemberAccessExecuteCondition__factory, } from '../../typechain'; +import {getPluginSetupProcessorAddress} from '../../utils/helpers'; import {deployTestDao} from '../helpers/test-dao'; import { ADDRESS_ONE, @@ -20,13 +21,18 @@ import {hexlify} from '@ethersproject/bytes'; import {SignerWithAddress} from '@nomiclabs/hardhat-ethers/signers'; import {expect} from 'chai'; import {toUtf8Bytes} from 'ethers/lib/utils'; -import {ethers} from 'hardhat'; +import {ethers, network} from 'hardhat'; const SOME_CONTRACT_ADDRESS = '0x' + '1234567890'.repeat(4); const ONE_BYTES32 = '0x0000000000000000000000000000000000000000000000000000000000000001'; +const PLUGIN_ADDR_1 = ADDRESS_ONE; +const PLUGIN_ADDR_2 = ADDRESS_TWO; +const daoInterface = DAO__factory.createInterface(); describe('Member Access Condition', function () { + const pspAddress = getPluginSetupProcessorAddress(network.name, true); + let alice: SignerWithAddress; let bob: SignerWithAddress; let carol: SignerWithAddress; @@ -44,8 +50,6 @@ describe('Member Access Condition', function () { }); describe('Executing grant/revoke MEMBER_PERMISSION_ID on a certain contract', () => { - const daoInterface = DAO__factory.createInterface(); - it('Should only allow executing grant and revoke', async () => { const actions: IDAO.ActionStruct[] = [ {to: dao.address, value: 0, data: '0x'}, @@ -422,4 +426,72 @@ describe('Member Access Condition', function () { ).to.eq(false); }); }); + + describe('Decoders', () => { + it('Should decode getSelector properly', async () => { + const actions: IDAO.ActionStruct[] = [ + { + to: dao.address, + value: 0, + data: daoInterface.encodeFunctionData('grant', [ + PLUGIN_ADDR_1, + pspAddress, + MEMBER_PERMISSION_ID, + ]), + }, + { + to: dao.address, + value: 0, + data: daoInterface.encodeFunctionData('revoke', [ + PLUGIN_ADDR_1, + pspAddress, + MEMBER_PERMISSION_ID, + ]), + }, + ]; + + expect( + await memberAccessExecuteCondition.getSelector(actions[0].data) + ).to.eq((actions[0].data as string).slice(0, 10)); + + expect( + await memberAccessExecuteCondition.getSelector(actions[1].data) + ).to.eq((actions[1].data as string).slice(0, 10)); + }); + + it('Should decode decodeGrantRevokeCalldata properly', async () => { + const calldataList = [ + daoInterface.encodeFunctionData('grant', [ + PLUGIN_ADDR_1, + pspAddress, + MEMBER_PERMISSION_ID, + ]), + daoInterface.encodeFunctionData('revoke', [ + PLUGIN_ADDR_2, + bob.address, + ROOT_PERMISSION_ID, + ]), + ]; + + // 1 + let [selector, where, who, permissionId] = + await memberAccessExecuteCondition.decodeGrantRevokeCalldata( + calldataList[0] + ); + expect(selector).to.eq(calldataList[0].slice(0, 10)); + expect(where).to.eq(PLUGIN_ADDR_1); + expect(who).to.eq(pspAddress); + expect(permissionId).to.eq(MEMBER_PERMISSION_ID); + + // 2 + [selector, where, who, permissionId] = + await memberAccessExecuteCondition.decodeGrantRevokeCalldata( + calldataList[2] + ); + expect(selector).to.eq(calldataList[2].slice(0, 10)); + expect(where).to.eq(PLUGIN_ADDR_2); + expect(who).to.eq(bob.address); + expect(permissionId).to.eq(ROOT_PERMISSION_ID); + }); + }); }); diff --git a/packages/contracts/test/unit-testing/only-plugin-upgrader-condition.ts b/packages/contracts/test/unit-testing/only-plugin-upgrader-condition.ts index 39d8797..97830e1 100644 --- a/packages/contracts/test/unit-testing/only-plugin-upgrader-condition.ts +++ b/packages/contracts/test/unit-testing/only-plugin-upgrader-condition.ts @@ -1,34 +1,44 @@ import { DAO, DAO__factory, - MemberAccessExecuteCondition, - MemberAccessExecuteCondition__factory, + PluginSetupProcessor, + PluginSetupProcessor__factory, + IDAO, + OnlyPluginUpgraderCondition, + OnlyPluginUpgraderCondition__factory, } from '../../typechain'; +import {getPluginSetupProcessorAddress} from '../../utils/helpers'; import {deployTestDao} from '../helpers/test-dao'; import { ADDRESS_ONE, + ADDRESS_THREE, ADDRESS_TWO, ADDRESS_ZERO, - DEPLOYER_PERMISSION_ID, EDITOR_PERMISSION_ID, EXECUTE_PERMISSION_ID, - MEMBER_PERMISSION_ID, ROOT_PERMISSION_ID, + UPGRADE_PLUGIN_PERMISSION_ID, } from './common'; -import {hexlify} from '@ethersproject/bytes'; import {SignerWithAddress} from '@nomiclabs/hardhat-ethers/signers'; import {expect} from 'chai'; -import {toUtf8Bytes} from 'ethers/lib/utils'; -import {ethers} from 'hardhat'; +import {ethers, network} from 'hardhat'; -const SOME_CONTRACT_ADDRESS = '0x' + '1234567890'.repeat(4); +const ONE_BYTES32 = '0x' + '0'.repeat(63) + '1'; +const PLUGIN_ADDR_1 = ADDRESS_ONE; +const PLUGIN_ADDR_2 = ADDRESS_TWO; + +const daoInterface = DAO__factory.createInterface(); +const pspInterface = PluginSetupProcessor__factory.createInterface(); describe('Only Plugin Upgrader Condition', function () { + const pspAddress = getPluginSetupProcessorAddress(network.name, true); + let alice: SignerWithAddress; let bob: SignerWithAddress; let carol: SignerWithAddress; let dao: DAO; - let memberAccessExecuteCondition: MemberAccessExecuteCondition; + let onlyPluginUpgraderCondition: OnlyPluginUpgraderCondition; + let applyUpdateParams: PluginSetupProcessor.ApplyUpdateParamsStruct; before(async () => { [alice, bob, carol] = await ethers.getSigners(); @@ -36,384 +46,1261 @@ describe('Only Plugin Upgrader Condition', function () { }); beforeEach(async () => { - const factory = new MemberAccessExecuteCondition__factory(alice); - memberAccessExecuteCondition = await factory.deploy(SOME_CONTRACT_ADDRESS); - }); + const factory = new OnlyPluginUpgraderCondition__factory(alice); + onlyPluginUpgraderCondition = await factory.deploy( + dao.address, + pspAddress, + [PLUGIN_ADDR_1, PLUGIN_ADDR_2] + ); - it('Should only accept executing grant and revoke', async () => { - // Valid - expect( - await memberAccessExecuteCondition.isGranted( - ADDRESS_ONE, // where (used) - ADDRESS_TWO, // who (used) - EXECUTE_PERMISSION_ID, // permission (used) - DAO__factory.createInterface().encodeFunctionData('grant', [ - // call - SOME_CONTRACT_ADDRESS, - carol.address, - MEMBER_PERMISSION_ID, - ]) - ) - ).to.eq(true); - - expect( - await memberAccessExecuteCondition.isGranted( - ADDRESS_ONE, // where (used) - ADDRESS_TWO, // who (used) - EXECUTE_PERMISSION_ID, // permission (used) - DAO__factory.createInterface().encodeFunctionData('revoke', [ - // call - SOME_CONTRACT_ADDRESS, - carol.address, - MEMBER_PERMISSION_ID, - ]) - ) - ).to.eq(true); - - // Invalid - expect( - await memberAccessExecuteCondition.isGranted( - ADDRESS_ONE, // where (used) - ADDRESS_TWO, // who (used) - EXECUTE_PERMISSION_ID, // permission (used) - DAO__factory.createInterface().encodeFunctionData('setDaoURI', [ - // call - hexlify(toUtf8Bytes('ipfs://')), - ]) - ) - ).to.eq(false); - expect( - await memberAccessExecuteCondition.isGranted( - ADDRESS_ONE, // where (used) - ADDRESS_TWO, // who (used) - EXECUTE_PERMISSION_ID, // permission (used) - DAO__factory.createInterface().encodeFunctionData('setMetadata', [ - // call - hexlify(toUtf8Bytes('ipfs://')), - ]) - ) - ).to.eq(false); - expect( - await memberAccessExecuteCondition.isGranted( - ADDRESS_ONE, // where (used) - ADDRESS_TWO, // who (used) - EXECUTE_PERMISSION_ID, // permission (used) - DAO__factory.createInterface().encodeFunctionData( - 'setSignatureValidator', - [ - // call - ADDRESS_ONE, - ] - ) - ) - ).to.eq(false); + applyUpdateParams = { + plugin: PLUGIN_ADDR_1, + helpersHash: ONE_BYTES32, + initData: '0x', + permissions: [], + pluginSetupRef: { + pluginSetupRepo: ADDRESS_ONE, + versionTag: { + release: 1, + build: 1, + }, + }, + }; }); - it('Should only allow MEMBER_PERMISSION_ID', async () => { - // Valid - expect( - await memberAccessExecuteCondition.isGranted( - ADDRESS_ONE, // where (used) - ADDRESS_TWO, // who (used) - EXECUTE_PERMISSION_ID, // permission (used) - DAO__factory.createInterface().encodeFunctionData('grant', [ - // call - SOME_CONTRACT_ADDRESS, - carol.address, - MEMBER_PERMISSION_ID, - ]) - ) - ).to.eq(true); - expect( - await memberAccessExecuteCondition.isGranted( - ADDRESS_ONE, // where (used) - ADDRESS_TWO, // who (used) - EXECUTE_PERMISSION_ID, // permission (used) - DAO__factory.createInterface().encodeFunctionData('revoke', [ - // call - SOME_CONTRACT_ADDRESS, - carol.address, - MEMBER_PERMISSION_ID, - ]) - ) - ).to.eq(true); - - // Invalid - expect( - await memberAccessExecuteCondition.isGranted( - ADDRESS_ONE, // where (used) - ADDRESS_TWO, // who (used) - EXECUTE_PERMISSION_ID, // permission (used) - DAO__factory.createInterface().encodeFunctionData('grant', [ - // call - SOME_CONTRACT_ADDRESS, - carol.address, - EDITOR_PERMISSION_ID, - ]) - ) - ).to.eq(false); - expect( - await memberAccessExecuteCondition.isGranted( - ADDRESS_ONE, // where (used) - ADDRESS_TWO, // who (used) - EXECUTE_PERMISSION_ID, // permission (used) - DAO__factory.createInterface().encodeFunctionData('revoke', [ - // call - SOME_CONTRACT_ADDRESS, - carol.address, - EDITOR_PERMISSION_ID, - ]) - ) - ).to.eq(false); - expect( - await memberAccessExecuteCondition.isGranted( - ADDRESS_ONE, // where (used) - ADDRESS_TWO, // who (used) - EXECUTE_PERMISSION_ID, // permission (used) - DAO__factory.createInterface().encodeFunctionData('grant', [ - // call - SOME_CONTRACT_ADDRESS, - carol.address, - ROOT_PERMISSION_ID, - ]) - ) - ).to.eq(false); - expect( - await memberAccessExecuteCondition.isGranted( - ADDRESS_ONE, // where (used) - ADDRESS_TWO, // who (used) - EXECUTE_PERMISSION_ID, // permission (used) - DAO__factory.createInterface().encodeFunctionData('revoke', [ - // call - SOME_CONTRACT_ADDRESS, - carol.address, - ROOT_PERMISSION_ID, - ]) - ) - ).to.eq(false); - expect( - await memberAccessExecuteCondition.isGranted( - ADDRESS_ONE, // where (used) - ADDRESS_TWO, // who (used) - EXECUTE_PERMISSION_ID, // permission (used) - DAO__factory.createInterface().encodeFunctionData('grant', [ - // call - SOME_CONTRACT_ADDRESS, - carol.address, - DEPLOYER_PERMISSION_ID, - ]) - ) - ).to.eq(false); - expect( - await memberAccessExecuteCondition.isGranted( - ADDRESS_ONE, // where (used) - ADDRESS_TWO, // who (used) - EXECUTE_PERMISSION_ID, // permission (used) - DAO__factory.createInterface().encodeFunctionData('revoke', [ - // call - SOME_CONTRACT_ADDRESS, - carol.address, - DEPLOYER_PERMISSION_ID, - ]) - ) - ).to.eq(false); - }); + describe('Executing applyUpdate on the PSP', () => { + it('Should allow executing grant, applyUpdate and revoke on the PSP', async () => { + const actions: IDAO.ActionStruct[] = [ + { + to: dao.address, + value: 0, + data: daoInterface.encodeFunctionData('grant', [ + PLUGIN_ADDR_1, + pspAddress, + UPGRADE_PLUGIN_PERMISSION_ID, + ]), + }, + { + to: pspAddress, + value: 0, + data: pspInterface.encodeFunctionData('applyUpdate', [ + dao.address, + applyUpdateParams, + ]), + }, + { + to: dao.address, + value: 0, + data: daoInterface.encodeFunctionData('revoke', [ + PLUGIN_ADDR_1, + pspAddress, + UPGRADE_PLUGIN_PERMISSION_ID, + ]), + }, + ]; + + expect( + await onlyPluginUpgraderCondition.isGranted( + ADDRESS_ZERO, // where + ADDRESS_ZERO, // who + EXECUTE_PERMISSION_ID, // permission + daoInterface.encodeFunctionData('execute', [ONE_BYTES32, actions, 0]) + ) + ).to.eq(true); + expect( + await onlyPluginUpgraderCondition.isGranted( + ADDRESS_ONE, // where + ADDRESS_TWO, // who + EXECUTE_PERMISSION_ID, // permission + daoInterface.encodeFunctionData('execute', [ONE_BYTES32, actions, 0]) + ) + ).to.eq(true); + }); + + it('Should reject calling the methods directly', async () => { + expect( + await onlyPluginUpgraderCondition.isGranted( + ADDRESS_ZERO, // where + ADDRESS_ZERO, // who + EXECUTE_PERMISSION_ID, // permission + daoInterface.encodeFunctionData('grant', [ + PLUGIN_ADDR_1, + pspAddress, + UPGRADE_PLUGIN_PERMISSION_ID, + ]) + ) + ).to.eq(false); + expect( + await onlyPluginUpgraderCondition.isGranted( + ADDRESS_ONE, // where + ADDRESS_TWO, // who + EXECUTE_PERMISSION_ID, // permission + pspInterface.encodeFunctionData('applyUpdate', [ + dao.address, + applyUpdateParams, + ]) + ) + ).to.eq(false); + expect( + await onlyPluginUpgraderCondition.isGranted( + ADDRESS_ONE, // where + ADDRESS_TWO, // who + EXECUTE_PERMISSION_ID, // permission + daoInterface.encodeFunctionData('revoke', [ + PLUGIN_ADDR_1, + pspAddress, + UPGRADE_PLUGIN_PERMISSION_ID, + ]) + ) + ).to.eq(false); + }); + + it('Should reject calling anything other than execute', async () => { + expect( + await onlyPluginUpgraderCondition.isGranted( + ADDRESS_ZERO, // where + ADDRESS_ZERO, // who + EXECUTE_PERMISSION_ID, // permission + daoInterface.encodeFunctionData('setDaoURI', ['ipfs://']) + ) + ).to.eq(false); + expect( + await onlyPluginUpgraderCondition.isGranted( + ADDRESS_ZERO, // where + ADDRESS_ZERO, // who + EXECUTE_PERMISSION_ID, // permission + daoInterface.encodeFunctionData('setMetadata', ['ipfs://']) + ) + ).to.eq(false); + }); - it('Should only allow to target the intended plugin contract', async () => { - // Valid - expect( - await memberAccessExecuteCondition.isGranted( - ADDRESS_ONE, // where (used) - ADDRESS_TWO, // who (used) - EXECUTE_PERMISSION_ID, // permission (used) - DAO__factory.createInterface().encodeFunctionData('grant', [ - // call - SOME_CONTRACT_ADDRESS, - carol.address, - MEMBER_PERMISSION_ID, - ]) - ) - ).to.eq(true); - expect( - await memberAccessExecuteCondition.isGranted( - ADDRESS_ONE, // where (used) - ADDRESS_TWO, // who (used) - EXECUTE_PERMISSION_ID, // permission (used) - DAO__factory.createInterface().encodeFunctionData('revoke', [ - // call - SOME_CONTRACT_ADDRESS, - carol.address, - MEMBER_PERMISSION_ID, - ]) - ) - ).to.eq(true); - - // Invalid - expect( - await memberAccessExecuteCondition.isGranted( - ADDRESS_ONE, // where (used) - ADDRESS_TWO, // who (used) - EXECUTE_PERMISSION_ID, // permission (used) - DAO__factory.createInterface().encodeFunctionData('grant', [ - // call - ADDRESS_TWO, - carol.address, - MEMBER_PERMISSION_ID, - ]) - ) - ).to.eq(false); - expect( - await memberAccessExecuteCondition.isGranted( - ADDRESS_ONE, // where (used) - ADDRESS_TWO, // who (used) - EXECUTE_PERMISSION_ID, // permission (used) - DAO__factory.createInterface().encodeFunctionData('revoke', [ - // call - ADDRESS_TWO, - carol.address, - MEMBER_PERMISSION_ID, - ]) - ) - ).to.eq(false); - - expect( - await memberAccessExecuteCondition.isGranted( - ADDRESS_ONE, // where (used) - ADDRESS_TWO, // who (used) - EXECUTE_PERMISSION_ID, // permission (used) - DAO__factory.createInterface().encodeFunctionData('grant', [ - // call + it('Should reject a proposal with less than 3 actions', async () => { + let actions: IDAO.ActionStruct[] = [ + { + to: dao.address, + value: 0, + data: daoInterface.encodeFunctionData('grant', [ + PLUGIN_ADDR_1, + pspAddress, + UPGRADE_PLUGIN_PERMISSION_ID, + ]), + }, + { + to: pspAddress, + value: 0, + data: pspInterface.encodeFunctionData('applyUpdate', [ + dao.address, + applyUpdateParams, + ]), + }, + ]; + + expect( + await onlyPluginUpgraderCondition.isGranted( + ADDRESS_ZERO, // where + ADDRESS_ZERO, // who + EXECUTE_PERMISSION_ID, // permission + daoInterface.encodeFunctionData('execute', [ONE_BYTES32, actions, 0]) + ) + ).to.eq(false); + expect( + await onlyPluginUpgraderCondition.isGranted( + ADDRESS_ONE, // where + ADDRESS_TWO, // who + EXECUTE_PERMISSION_ID, // permission + daoInterface.encodeFunctionData('execute', [ONE_BYTES32, actions, 0]) + ) + ).to.eq(false); + + // 2 + actions = [ + { + to: pspAddress, + value: 0, + data: pspInterface.encodeFunctionData('applyUpdate', [ + dao.address, + applyUpdateParams, + ]), + }, + { + to: dao.address, + value: 0, + data: daoInterface.encodeFunctionData('revoke', [ + PLUGIN_ADDR_1, + pspAddress, + UPGRADE_PLUGIN_PERMISSION_ID, + ]), + }, + ]; + + expect( + await onlyPluginUpgraderCondition.isGranted( + ADDRESS_ZERO, // where + ADDRESS_ZERO, // who + EXECUTE_PERMISSION_ID, // permission + daoInterface.encodeFunctionData('execute', [ONE_BYTES32, actions, 0]) + ) + ).to.eq(false); + expect( + await onlyPluginUpgraderCondition.isGranted( + ADDRESS_ONE, // where + ADDRESS_TWO, // who + EXECUTE_PERMISSION_ID, // permission + daoInterface.encodeFunctionData('execute', [ONE_BYTES32, actions, 0]) + ) + ).to.eq(false); + }); + + it('Should reject a proposal with more than 3 actions', async () => { + const actions: IDAO.ActionStruct[] = [ + { + to: dao.address, + value: 0, + data: daoInterface.encodeFunctionData('grant', [ + PLUGIN_ADDR_1, + pspAddress, + UPGRADE_PLUGIN_PERMISSION_ID, + ]), + }, + { + to: pspAddress, + value: 0, + data: pspInterface.encodeFunctionData('applyUpdate', [ + dao.address, + applyUpdateParams, + ]), + }, + { + to: dao.address, + value: 0, + data: daoInterface.encodeFunctionData('revoke', [ + PLUGIN_ADDR_1, + pspAddress, + UPGRADE_PLUGIN_PERMISSION_ID, + ]), + }, + {to: dao.address, value: 0, data: '0x'}, + ]; + + expect( + await onlyPluginUpgraderCondition.isGranted( + ADDRESS_ZERO, // where + ADDRESS_ZERO, // who + EXECUTE_PERMISSION_ID, // permission + daoInterface.encodeFunctionData('execute', [ONE_BYTES32, actions, 0]) + ) + ).to.eq(false); + expect( + await onlyPluginUpgraderCondition.isGranted( + ADDRESS_ONE, // where + ADDRESS_TWO, // who + EXECUTE_PERMISSION_ID, // permission + daoInterface.encodeFunctionData('execute', [ONE_BYTES32, actions, 0]) + ) + ).to.eq(false); + + // 2 + actions[3] = actions[2]; + + expect( + await onlyPluginUpgraderCondition.isGranted( + ADDRESS_ZERO, // where + ADDRESS_ZERO, // who + EXECUTE_PERMISSION_ID, // permission + daoInterface.encodeFunctionData('execute', [ONE_BYTES32, actions, 0]) + ) + ).to.eq(false); + expect( + await onlyPluginUpgraderCondition.isGranted( + ADDRESS_ONE, // where + ADDRESS_TWO, // who + EXECUTE_PERMISSION_ID, // permission + daoInterface.encodeFunctionData('execute', [ONE_BYTES32, actions, 0]) + ) + ).to.eq(false); + }); + + // to + + it('Should reject if action 1/3 are not executed on the DAO', async () => { + let actions: IDAO.ActionStruct[] = [ + { + to: bob.address, + value: 0, + data: daoInterface.encodeFunctionData('grant', [ + PLUGIN_ADDR_1, + pspAddress, + UPGRADE_PLUGIN_PERMISSION_ID, + ]), + }, + { + to: pspAddress, + value: 0, + data: pspInterface.encodeFunctionData('applyUpdate', [ + dao.address, + applyUpdateParams, + ]), + }, + { + to: dao.address, + value: 0, + data: daoInterface.encodeFunctionData('revoke', [ + PLUGIN_ADDR_1, + pspAddress, + UPGRADE_PLUGIN_PERMISSION_ID, + ]), + }, + ]; + + expect( + await onlyPluginUpgraderCondition.isGranted( + ADDRESS_ZERO, // where + ADDRESS_ZERO, // who + EXECUTE_PERMISSION_ID, // permission + daoInterface.encodeFunctionData('execute', [ONE_BYTES32, actions, 0]) + ) + ).to.eq(false); + expect( + await onlyPluginUpgraderCondition.isGranted( + ADDRESS_ONE, // where + ADDRESS_TWO, // who + EXECUTE_PERMISSION_ID, // permission + daoInterface.encodeFunctionData('execute', [ONE_BYTES32, actions, 0]) + ) + ).to.eq(false); + + // 2 + actions = [ + { + to: dao.address, + value: 0, + data: daoInterface.encodeFunctionData('grant', [ + PLUGIN_ADDR_1, + pspAddress, + UPGRADE_PLUGIN_PERMISSION_ID, + ]), + }, + { + to: pspAddress, + value: 0, + data: pspInterface.encodeFunctionData('applyUpdate', [ + dao.address, + applyUpdateParams, + ]), + }, + { + to: bob.address, + value: 0, + data: daoInterface.encodeFunctionData('revoke', [ + PLUGIN_ADDR_1, + pspAddress, + UPGRADE_PLUGIN_PERMISSION_ID, + ]), + }, + ]; + + expect( + await onlyPluginUpgraderCondition.isGranted( + ADDRESS_ZERO, // where + ADDRESS_ZERO, // who + EXECUTE_PERMISSION_ID, // permission + daoInterface.encodeFunctionData('execute', [ONE_BYTES32, actions, 0]) + ) + ).to.eq(false); + expect( + await onlyPluginUpgraderCondition.isGranted( + ADDRESS_ONE, // where + ADDRESS_TWO, // who + EXECUTE_PERMISSION_ID, // permission + daoInterface.encodeFunctionData('execute', [ONE_BYTES32, actions, 0]) + ) + ).to.eq(false); + }); + + it('Should reject if action 2 is not executed on the PSP', async () => { + let actions: IDAO.ActionStruct[] = [ + { + to: dao.address, + value: 0, + data: daoInterface.encodeFunctionData('grant', [ + PLUGIN_ADDR_1, + pspAddress, + UPGRADE_PLUGIN_PERMISSION_ID, + ]), + }, + { + to: bob.address, + value: 0, + data: pspInterface.encodeFunctionData('applyUpdate', [ + dao.address, + applyUpdateParams, + ]), + }, + { + to: dao.address, + value: 0, + data: daoInterface.encodeFunctionData('revoke', [ + PLUGIN_ADDR_1, + pspAddress, + UPGRADE_PLUGIN_PERMISSION_ID, + ]), + }, + ]; + + expect( + await onlyPluginUpgraderCondition.isGranted( + ADDRESS_ZERO, // where + ADDRESS_ZERO, // who + EXECUTE_PERMISSION_ID, // permission + daoInterface.encodeFunctionData('execute', [ONE_BYTES32, actions, 0]) + ) + ).to.eq(false); + expect( + await onlyPluginUpgraderCondition.isGranted( + ADDRESS_ONE, // where + ADDRESS_TWO, // who + EXECUTE_PERMISSION_ID, // permission + daoInterface.encodeFunctionData('execute', [ONE_BYTES32, actions, 0]) + ) + ).to.eq(false); + }); + + // grant/revoke calldata + + it('Should reject if actions 1/3 are not grant/revoke respectively', async () => { + let actions: IDAO.ActionStruct[] = [ + { + to: dao.address, + value: 0, + data: daoInterface.encodeFunctionData('revoke', [ + PLUGIN_ADDR_1, + pspAddress, + UPGRADE_PLUGIN_PERMISSION_ID, + ]), + }, + { + to: pspAddress, + value: 0, + data: pspInterface.encodeFunctionData('applyUpdate', [ + dao.address, + applyUpdateParams, + ]), + }, + { + to: dao.address, + value: 0, + data: daoInterface.encodeFunctionData('revoke', [ + PLUGIN_ADDR_1, + pspAddress, + UPGRADE_PLUGIN_PERMISSION_ID, + ]), + }, + ]; + + expect( + await onlyPluginUpgraderCondition.isGranted( + ADDRESS_ZERO, // where + ADDRESS_ZERO, // who + EXECUTE_PERMISSION_ID, // permission + daoInterface.encodeFunctionData('execute', [ONE_BYTES32, actions, 0]) + ) + ).to.eq(false); + expect( + await onlyPluginUpgraderCondition.isGranted( + ADDRESS_ONE, // where + ADDRESS_TWO, // who + EXECUTE_PERMISSION_ID, // permission + daoInterface.encodeFunctionData('execute', [ONE_BYTES32, actions, 0]) + ) + ).to.eq(false); + + // 2 + actions = [ + { + to: dao.address, + value: 0, + data: daoInterface.encodeFunctionData('grant', [ + PLUGIN_ADDR_1, + pspAddress, + UPGRADE_PLUGIN_PERMISSION_ID, + ]), + }, + { + to: pspAddress, + value: 0, + data: pspInterface.encodeFunctionData('applyUpdate', [ + dao.address, + applyUpdateParams, + ]), + }, + { + to: dao.address, + value: 0, + data: daoInterface.encodeFunctionData('grant', [ + PLUGIN_ADDR_1, + pspAddress, + UPGRADE_PLUGIN_PERMISSION_ID, + ]), + }, + ]; + + expect( + await onlyPluginUpgraderCondition.isGranted( + ADDRESS_ZERO, // where + ADDRESS_ZERO, // who + EXECUTE_PERMISSION_ID, // permission + daoInterface.encodeFunctionData('execute', [ONE_BYTES32, actions, 0]) + ) + ).to.eq(false); + expect( + await onlyPluginUpgraderCondition.isGranted( + ADDRESS_ONE, // where + ADDRESS_TWO, // who + EXECUTE_PERMISSION_ID, // permission + daoInterface.encodeFunctionData('execute', [ONE_BYTES32, actions, 0]) + ) + ).to.eq(false); + }); + + it("Should reject if actions 1/3 > who don't target the PSP", async () => { + let actions: IDAO.ActionStruct[] = [ + { + to: dao.address, + value: 0, + data: daoInterface.encodeFunctionData('grant', [ + PLUGIN_ADDR_1, + carol.address, + UPGRADE_PLUGIN_PERMISSION_ID, + ]), + }, + { + to: pspAddress, + value: 0, + data: pspInterface.encodeFunctionData('applyUpdate', [ + dao.address, + applyUpdateParams, + ]), + }, + { + to: dao.address, + value: 0, + data: daoInterface.encodeFunctionData('revoke', [ + PLUGIN_ADDR_1, + pspAddress, + UPGRADE_PLUGIN_PERMISSION_ID, + ]), + }, + ]; + + expect( + await onlyPluginUpgraderCondition.isGranted( + ADDRESS_ZERO, // where + ADDRESS_ZERO, // who + EXECUTE_PERMISSION_ID, // permission + daoInterface.encodeFunctionData('execute', [ONE_BYTES32, actions, 0]) + ) + ).to.eq(false); + expect( + await onlyPluginUpgraderCondition.isGranted( + ADDRESS_ONE, // where + ADDRESS_TWO, // who + EXECUTE_PERMISSION_ID, // permission + daoInterface.encodeFunctionData('execute', [ONE_BYTES32, actions, 0]) + ) + ).to.eq(false); + + // 2 + actions = [ + { + to: dao.address, + value: 0, + data: daoInterface.encodeFunctionData('grant', [ + PLUGIN_ADDR_1, + pspAddress, + UPGRADE_PLUGIN_PERMISSION_ID, + ]), + }, + { + to: pspAddress, + value: 0, + data: pspInterface.encodeFunctionData('applyUpdate', [ + dao.address, + applyUpdateParams, + ]), + }, + { + to: dao.address, + value: 0, + data: daoInterface.encodeFunctionData('revoke', [ + PLUGIN_ADDR_1, + carol.address, + UPGRADE_PLUGIN_PERMISSION_ID, + ]), + }, + ]; + + expect( + await onlyPluginUpgraderCondition.isGranted( + ADDRESS_ZERO, // where + ADDRESS_ZERO, // who + EXECUTE_PERMISSION_ID, // permission + daoInterface.encodeFunctionData('execute', [ONE_BYTES32, actions, 0]) + ) + ).to.eq(false); + expect( + await onlyPluginUpgraderCondition.isGranted( + ADDRESS_ONE, // where + ADDRESS_TWO, // who + EXECUTE_PERMISSION_ID, // permission + daoInterface.encodeFunctionData('execute', [ONE_BYTES32, actions, 0]) + ) + ).to.eq(false); + }); + + it('Should reject if actions 1/3 > permission is not UPGRADE_PLUGIN_PERMISSION_ID', async () => { + let actions: IDAO.ActionStruct[] = [ + { + to: dao.address, + value: 0, + data: daoInterface.encodeFunctionData('grant', [ + PLUGIN_ADDR_1, + pspAddress, + EXECUTE_PERMISSION_ID, + ]), + }, + { + to: pspAddress, + value: 0, + data: pspInterface.encodeFunctionData('applyUpdate', [ + dao.address, + applyUpdateParams, + ]), + }, + { + to: dao.address, + value: 0, + data: daoInterface.encodeFunctionData('revoke', [ + PLUGIN_ADDR_1, + pspAddress, + UPGRADE_PLUGIN_PERMISSION_ID, + ]), + }, + ]; + + expect( + await onlyPluginUpgraderCondition.isGranted( + ADDRESS_ZERO, // where + ADDRESS_ZERO, // who + EXECUTE_PERMISSION_ID, // permission + daoInterface.encodeFunctionData('execute', [ONE_BYTES32, actions, 0]) + ) + ).to.eq(false); + expect( + await onlyPluginUpgraderCondition.isGranted( + ADDRESS_ONE, // where + ADDRESS_TWO, // who + EXECUTE_PERMISSION_ID, // permission + daoInterface.encodeFunctionData('execute', [ONE_BYTES32, actions, 0]) + ) + ).to.eq(false); + + // 2 + actions = [ + { + to: dao.address, + value: 0, + data: daoInterface.encodeFunctionData('grant', [ + PLUGIN_ADDR_1, + pspAddress, + UPGRADE_PLUGIN_PERMISSION_ID, + ]), + }, + { + to: pspAddress, + value: 0, + data: pspInterface.encodeFunctionData('applyUpdate', [ + dao.address, + applyUpdateParams, + ]), + }, + { + to: dao.address, + value: 0, + data: daoInterface.encodeFunctionData('revoke', [ + PLUGIN_ADDR_1, + pspAddress, + EDITOR_PERMISSION_ID, + ]), + }, + ]; + + expect( + await onlyPluginUpgraderCondition.isGranted( + ADDRESS_ZERO, // where + ADDRESS_ZERO, // who + EXECUTE_PERMISSION_ID, // permission + daoInterface.encodeFunctionData('execute', [ONE_BYTES32, actions, 0]) + ) + ).to.eq(false); + expect( + await onlyPluginUpgraderCondition.isGranted( + ADDRESS_ONE, // where + ADDRESS_TWO, // who + EXECUTE_PERMISSION_ID, // permission + daoInterface.encodeFunctionData('execute', [ONE_BYTES32, actions, 0]) + ) + ).to.eq(false); + }); + + it('Should reject if actions 1/3 > where is not a listed plugin', async () => { + let actions: IDAO.ActionStruct[] = [ + { + to: dao.address, + value: 0, + data: daoInterface.encodeFunctionData('grant', [ + carol.address, + pspAddress, + UPGRADE_PLUGIN_PERMISSION_ID, + ]), + }, + { + to: pspAddress, + value: 0, + data: pspInterface.encodeFunctionData('applyUpdate', [ + dao.address, + applyUpdateParams, + ]), + }, + { + to: dao.address, + value: 0, + data: daoInterface.encodeFunctionData('revoke', [ + PLUGIN_ADDR_1, + pspAddress, + UPGRADE_PLUGIN_PERMISSION_ID, + ]), + }, + ]; + + expect( + await onlyPluginUpgraderCondition.isGranted( + ADDRESS_ZERO, // where + ADDRESS_ZERO, // who + EXECUTE_PERMISSION_ID, // permission + daoInterface.encodeFunctionData('execute', [ONE_BYTES32, actions, 0]) + ) + ).to.eq(false); + expect( + await onlyPluginUpgraderCondition.isGranted( + ADDRESS_ONE, // where + ADDRESS_TWO, // who + EXECUTE_PERMISSION_ID, // permission + daoInterface.encodeFunctionData('execute', [ONE_BYTES32, actions, 0]) + ) + ).to.eq(false); + + // 2 + actions = [ + { + to: dao.address, + value: 0, + data: daoInterface.encodeFunctionData('grant', [ + PLUGIN_ADDR_1, + pspAddress, + UPGRADE_PLUGIN_PERMISSION_ID, + ]), + }, + { + to: pspAddress, + value: 0, + data: pspInterface.encodeFunctionData('applyUpdate', [ + dao.address, + applyUpdateParams, + ]), + }, + { + to: dao.address, + value: 0, + data: daoInterface.encodeFunctionData('revoke', [ + bob.address, + pspAddress, + UPGRADE_PLUGIN_PERMISSION_ID, + ]), + }, + ]; + + expect( + await onlyPluginUpgraderCondition.isGranted( + ADDRESS_ZERO, // where + ADDRESS_ZERO, // who + EXECUTE_PERMISSION_ID, // permission + daoInterface.encodeFunctionData('execute', [ONE_BYTES32, actions, 0]) + ) + ).to.eq(false); + expect( + await onlyPluginUpgraderCondition.isGranted( + ADDRESS_ONE, // where + ADDRESS_TWO, // who + EXECUTE_PERMISSION_ID, // permission + daoInterface.encodeFunctionData('execute', [ONE_BYTES32, actions, 0]) + ) + ).to.eq(false); + + // 3 + actions = [ + { + to: dao.address, + value: 0, + data: daoInterface.encodeFunctionData('grant', [ + alice.address, + pspAddress, + UPGRADE_PLUGIN_PERMISSION_ID, + ]), + }, + { + to: pspAddress, + value: 0, + data: pspInterface.encodeFunctionData('applyUpdate', [ + dao.address, + applyUpdateParams, + ]), + }, + { + to: dao.address, + value: 0, + data: daoInterface.encodeFunctionData('revoke', [ + carol.address, + pspAddress, + UPGRADE_PLUGIN_PERMISSION_ID, + ]), + }, + ]; + + expect( + await onlyPluginUpgraderCondition.isGranted( + ADDRESS_ZERO, // where + ADDRESS_ZERO, // who + EXECUTE_PERMISSION_ID, // permission + daoInterface.encodeFunctionData('execute', [ONE_BYTES32, actions, 0]) + ) + ).to.eq(false); + expect( + await onlyPluginUpgraderCondition.isGranted( + ADDRESS_ONE, // where + ADDRESS_TWO, // who + EXECUTE_PERMISSION_ID, // permission + daoInterface.encodeFunctionData('execute', [ONE_BYTES32, actions, 0]) + ) + ).to.eq(false); + }); + + // applyUpdate calldata + + it('Should reject if action 2 is not applyUpdate', async () => { + let actions: IDAO.ActionStruct[] = [ + { + to: dao.address, + value: 0, + data: daoInterface.encodeFunctionData('grant', [ + PLUGIN_ADDR_1, + pspAddress, + UPGRADE_PLUGIN_PERMISSION_ID, + ]), + }, + { + to: pspAddress, + value: 0, + data: pspInterface.encodeFunctionData('applyInstallation', [ + dao.address, + applyUpdateParams, + ]), + }, + { + to: dao.address, + value: 0, + data: daoInterface.encodeFunctionData('revoke', [ + PLUGIN_ADDR_1, + pspAddress, + UPGRADE_PLUGIN_PERMISSION_ID, + ]), + }, + ]; + + expect( + await onlyPluginUpgraderCondition.isGranted( + ADDRESS_ZERO, // where + ADDRESS_ZERO, // who + EXECUTE_PERMISSION_ID, // permission + daoInterface.encodeFunctionData('execute', [ONE_BYTES32, actions, 0]) + ) + ).to.eq(false); + expect( + await onlyPluginUpgraderCondition.isGranted( + ADDRESS_ONE, // where + ADDRESS_TWO, // who + EXECUTE_PERMISSION_ID, // permission + daoInterface.encodeFunctionData('execute', [ONE_BYTES32, actions, 0]) + ) + ).to.eq(false); + + // 2 + actions = [ + { + to: dao.address, + value: 0, + data: daoInterface.encodeFunctionData('grant', [ + PLUGIN_ADDR_1, + pspAddress, + UPGRADE_PLUGIN_PERMISSION_ID, + ]), + }, + { + to: pspAddress, + value: 0, + data: pspInterface.encodeFunctionData('applyUninstallation', [ + dao.address, + applyUpdateParams, + ]), + }, + { + to: dao.address, + value: 0, + data: daoInterface.encodeFunctionData('revoke', [ + PLUGIN_ADDR_1, + pspAddress, + UPGRADE_PLUGIN_PERMISSION_ID, + ]), + }, + ]; + + expect( + await onlyPluginUpgraderCondition.isGranted( + ADDRESS_ZERO, // where + ADDRESS_ZERO, // who + EXECUTE_PERMISSION_ID, // permission + daoInterface.encodeFunctionData('execute', [ONE_BYTES32, actions, 0]) + ) + ).to.eq(false); + expect( + await onlyPluginUpgraderCondition.isGranted( + ADDRESS_ONE, // where + ADDRESS_TWO, // who + EXECUTE_PERMISSION_ID, // permission + daoInterface.encodeFunctionData('execute', [ONE_BYTES32, actions, 0]) + ) + ).to.eq(false); + }); + + it("Should reject if action 2 > dao doesn't match", async () => { + let actions: IDAO.ActionStruct[] = [ + { + to: dao.address, + value: 0, + data: daoInterface.encodeFunctionData('grant', [ + PLUGIN_ADDR_1, + pspAddress, + UPGRADE_PLUGIN_PERMISSION_ID, + ]), + }, + { + to: pspAddress, + value: 0, + data: pspInterface.encodeFunctionData('applyUpdate', [ + alice.address, // bad + applyUpdateParams, + ]), + }, + { + to: dao.address, + value: 0, + data: daoInterface.encodeFunctionData('revoke', [ + PLUGIN_ADDR_1, + pspAddress, + UPGRADE_PLUGIN_PERMISSION_ID, + ]), + }, + ]; + + expect( + await onlyPluginUpgraderCondition.isGranted( + ADDRESS_ZERO, // where + ADDRESS_ZERO, // who + EXECUTE_PERMISSION_ID, // permission + daoInterface.encodeFunctionData('execute', [ONE_BYTES32, actions, 0]) + ) + ).to.eq(false); + expect( + await onlyPluginUpgraderCondition.isGranted( + ADDRESS_ONE, // where + ADDRESS_TWO, // who + EXECUTE_PERMISSION_ID, // permission + daoInterface.encodeFunctionData('execute', [ONE_BYTES32, actions, 0]) + ) + ).to.eq(false); + + // 2 + actions = [ + { + to: dao.address, + value: 0, + data: daoInterface.encodeFunctionData('grant', [ + PLUGIN_ADDR_1, + pspAddress, + UPGRADE_PLUGIN_PERMISSION_ID, + ]), + }, + { + to: pspAddress, + value: 0, + data: pspInterface.encodeFunctionData('applyUpdate', [ + bob.address, // bad + applyUpdateParams, + ]), + }, + { + to: dao.address, + value: 0, + data: daoInterface.encodeFunctionData('revoke', [ + PLUGIN_ADDR_1, + pspAddress, + UPGRADE_PLUGIN_PERMISSION_ID, + ]), + }, + ]; + + expect( + await onlyPluginUpgraderCondition.isGranted( + ADDRESS_ZERO, // where + ADDRESS_ZERO, // who + EXECUTE_PERMISSION_ID, // permission + daoInterface.encodeFunctionData('execute', [ONE_BYTES32, actions, 0]) + ) + ).to.eq(false); + expect( + await onlyPluginUpgraderCondition.isGranted( + ADDRESS_ONE, // where + ADDRESS_TWO, // who + EXECUTE_PERMISSION_ID, // permission + daoInterface.encodeFunctionData('execute', [ONE_BYTES32, actions, 0]) + ) + ).to.eq(false); + }); + + it('Should reject if action 2 targets a non allowed plugin', async () => { + applyUpdateParams.plugin = alice.address; + const actions: IDAO.ActionStruct[] = [ + { + to: dao.address, + value: 0, + data: daoInterface.encodeFunctionData('grant', [ + PLUGIN_ADDR_1, + pspAddress, + UPGRADE_PLUGIN_PERMISSION_ID, + ]), + }, + { + to: pspAddress, + value: 0, + data: pspInterface.encodeFunctionData('applyUpdate', [ + dao.address, + applyUpdateParams, + ]), + }, + { + to: dao.address, + value: 0, + data: daoInterface.encodeFunctionData('revoke', [ + PLUGIN_ADDR_1, + pspAddress, + UPGRADE_PLUGIN_PERMISSION_ID, + ]), + }, + ]; + + expect( + await onlyPluginUpgraderCondition.isGranted( + ADDRESS_ZERO, // where + ADDRESS_ZERO, // who + EXECUTE_PERMISSION_ID, // permission + daoInterface.encodeFunctionData('execute', [ONE_BYTES32, actions, 0]) + ) + ).to.eq(false); + expect( + await onlyPluginUpgraderCondition.isGranted( + ADDRESS_ONE, // where + ADDRESS_TWO, // who + EXECUTE_PERMISSION_ID, // permission + daoInterface.encodeFunctionData('execute', [ONE_BYTES32, actions, 0]) + ) + ).to.eq(false); + + // 2 + applyUpdateParams.plugin = bob.address; + actions[1] = { + to: pspAddress, + value: 0, + data: pspInterface.encodeFunctionData('applyUpdate', [ dao.address, - carol.address, - MEMBER_PERMISSION_ID, - ]) - ) - ).to.eq(false); - expect( - await memberAccessExecuteCondition.isGranted( - ADDRESS_ONE, // where (used) - ADDRESS_TWO, // who (used) - EXECUTE_PERMISSION_ID, // permission (used) - DAO__factory.createInterface().encodeFunctionData('revoke', [ - // call + applyUpdateParams, + ]), + }; + + expect( + await onlyPluginUpgraderCondition.isGranted( + ADDRESS_ZERO, // where + ADDRESS_ZERO, // who + EXECUTE_PERMISSION_ID, // permission + daoInterface.encodeFunctionData('execute', [ONE_BYTES32, actions, 0]) + ) + ).to.eq(false); + expect( + await onlyPluginUpgraderCondition.isGranted( + ADDRESS_ONE, // where + ADDRESS_TWO, // who + EXECUTE_PERMISSION_ID, // permission + daoInterface.encodeFunctionData('execute', [ONE_BYTES32, actions, 0]) + ) + ).to.eq(false); + + // 3 + applyUpdateParams.plugin = ADDRESS_THREE; + actions[1] = { + to: pspAddress, + value: 0, + data: pspInterface.encodeFunctionData('applyUpdate', [ dao.address, - carol.address, - MEMBER_PERMISSION_ID, - ]) - ) - ).to.eq(false); + applyUpdateParams, + ]), + }; + + expect( + await onlyPluginUpgraderCondition.isGranted( + ADDRESS_ZERO, // where + ADDRESS_ZERO, // who + EXECUTE_PERMISSION_ID, // permission + daoInterface.encodeFunctionData('execute', [ONE_BYTES32, actions, 0]) + ) + ).to.eq(false); + expect( + await onlyPluginUpgraderCondition.isGranted( + ADDRESS_ONE, // where + ADDRESS_TWO, // who + EXECUTE_PERMISSION_ID, // permission + daoInterface.encodeFunctionData('execute', [ONE_BYTES32, actions, 0]) + ) + ).to.eq(false); + }); }); - it("Should allow granting to whatever 'who' address", async () => { - expect( - await memberAccessExecuteCondition.isGranted( - ADDRESS_ONE, // where (used) - ADDRESS_TWO, // who (used) - EXECUTE_PERMISSION_ID, // permission (used) - DAO__factory.createInterface().encodeFunctionData('grant', [ - // call - SOME_CONTRACT_ADDRESS, - alice.address, - MEMBER_PERMISSION_ID, - ]) - ) - ).to.eq(true); - expect( - await memberAccessExecuteCondition.isGranted( - ADDRESS_ONE, // where (used) - ADDRESS_TWO, // who (used) - EXECUTE_PERMISSION_ID, // permission (used) - DAO__factory.createInterface().encodeFunctionData('revoke', [ - // call - SOME_CONTRACT_ADDRESS, - alice.address, - MEMBER_PERMISSION_ID, - ]) - ) - ).to.eq(true); - - // Bob - expect( - await memberAccessExecuteCondition.isGranted( - ADDRESS_ONE, // where (used) - ADDRESS_TWO, // who (used) - EXECUTE_PERMISSION_ID, // permission (used) - DAO__factory.createInterface().encodeFunctionData('grant', [ - // call - SOME_CONTRACT_ADDRESS, - bob.address, - MEMBER_PERMISSION_ID, - ]) - ) - ).to.eq(true); - expect( - await memberAccessExecuteCondition.isGranted( - ADDRESS_ONE, // where (used) - ADDRESS_TWO, // who (used) - EXECUTE_PERMISSION_ID, // permission (used) - DAO__factory.createInterface().encodeFunctionData('revoke', [ - // call - SOME_CONTRACT_ADDRESS, - bob.address, - MEMBER_PERMISSION_ID, - ]) - ) - ).to.eq(true); - - // Carol - expect( - await memberAccessExecuteCondition.isGranted( - ADDRESS_ONE, // where (used) - ADDRESS_TWO, // who (used) - EXECUTE_PERMISSION_ID, // permission (used) - DAO__factory.createInterface().encodeFunctionData('grant', [ - // call - SOME_CONTRACT_ADDRESS, - carol.address, - MEMBER_PERMISSION_ID, - ]) - ) - ).to.eq(true); - expect( - await memberAccessExecuteCondition.isGranted( - ADDRESS_ONE, // where (used) - ADDRESS_TWO, // who (used) - EXECUTE_PERMISSION_ID, // permission (used) - DAO__factory.createInterface().encodeFunctionData('revoke', [ - // call - SOME_CONTRACT_ADDRESS, - carol.address, - MEMBER_PERMISSION_ID, - ]) - ) - ).to.eq(true); - - // Any - expect( - await memberAccessExecuteCondition.isGranted( - ADDRESS_ONE, // where (used) - ADDRESS_TWO, // who (used) - EXECUTE_PERMISSION_ID, // permission (used) - DAO__factory.createInterface().encodeFunctionData('grant', [ - // call - SOME_CONTRACT_ADDRESS, - ADDRESS_ZERO, - MEMBER_PERMISSION_ID, - ]) - ) - ).to.eq(true); - expect( - await memberAccessExecuteCondition.isGranted( - ADDRESS_ONE, // where (used) - ADDRESS_TWO, // who (used) - EXECUTE_PERMISSION_ID, // permission (used) - DAO__factory.createInterface().encodeFunctionData('revoke', [ - // call - SOME_CONTRACT_ADDRESS, - ADDRESS_ZERO, - MEMBER_PERMISSION_ID, - ]) - ) - ).to.eq(true); + describe('Decoders', () => { + it('Should decode getSelector properly', async () => { + const actions: IDAO.ActionStruct[] = [ + { + to: dao.address, + value: 0, + data: daoInterface.encodeFunctionData('grant', [ + PLUGIN_ADDR_1, + pspAddress, + UPGRADE_PLUGIN_PERMISSION_ID, + ]), + }, + { + to: pspAddress, + value: 0, + data: pspInterface.encodeFunctionData('applyUpdate', [ + dao.address, + applyUpdateParams, + ]), + }, + { + to: dao.address, + value: 0, + data: daoInterface.encodeFunctionData('revoke', [ + PLUGIN_ADDR_1, + pspAddress, + UPGRADE_PLUGIN_PERMISSION_ID, + ]), + }, + ]; + + expect( + await onlyPluginUpgraderCondition.getSelector(actions[0].data) + ).to.eq((actions[0].data as string).slice(0, 10)); + + expect( + await onlyPluginUpgraderCondition.getSelector(actions[1].data) + ).to.eq((actions[1].data as string).slice(0, 10)); + + expect( + await onlyPluginUpgraderCondition.getSelector(actions[2].data) + ).to.eq((actions[2].data as string).slice(0, 10)); + }); + + it('Should decode decodeGrantRevokeCalldata properly', async () => { + const calldataList = [ + daoInterface.encodeFunctionData('grant', [ + PLUGIN_ADDR_1, + pspAddress, + UPGRADE_PLUGIN_PERMISSION_ID, + ]), + daoInterface.encodeFunctionData('revoke', [ + PLUGIN_ADDR_2, + ADDRESS_THREE, + ROOT_PERMISSION_ID, + ]), + ]; + + // 1 + let [selector, where, who, permissionId] = + await onlyPluginUpgraderCondition.decodeGrantRevokeCalldata( + calldataList[0] + ); + expect(selector).to.eq(calldataList[0].slice(0, 10)); + expect(where).to.eq(PLUGIN_ADDR_1); + expect(who).to.eq(pspAddress); + expect(permissionId).to.eq(UPGRADE_PLUGIN_PERMISSION_ID); + + // 2 + [selector, where, who, permissionId] = + await onlyPluginUpgraderCondition.decodeGrantRevokeCalldata( + calldataList[2] + ); + expect(selector).to.eq(calldataList[2].slice(0, 10)); + expect(where).to.eq(PLUGIN_ADDR_2); + expect(who).to.eq(ADDRESS_THREE); + expect(permissionId).to.eq(ROOT_PERMISSION_ID); + }); + + it('Should decode decodeApplyUpdateCalldata properly', async () => { + applyUpdateParams.plugin = bob.address; + const calldataList = [ + pspInterface.encodeFunctionData('applyUpdate', [ + dao.address, + applyUpdateParams, + ]), + pspInterface.encodeFunctionData('applyUpdate', [ + ADDRESS_THREE, + applyUpdateParams, + ]), + ]; + + // 1 + let [selector, decodedDaoAddress, decodedParams] = + await onlyPluginUpgraderCondition.decodeApplyUpdateCalldata( + calldataList[0] + ); + expect(selector).to.eq(calldataList[0].slice(0, 10)); + expect(decodedDaoAddress).to.eq(dao.address); + expect(decodedParams.plugin).to.eq(bob.address); + + // 2 + [selector, decodedDaoAddress, decodedParams] = + await onlyPluginUpgraderCondition.decodeApplyUpdateCalldata( + calldataList[2] + ); + expect(selector).to.eq(calldataList[2].slice(0, 10)); + expect(decodedDaoAddress).to.eq(ADDRESS_THREE); + expect(decodedParams.plugin).to.eq(bob.address); + }); }); }); diff --git a/packages/contracts/utils/helpers.ts b/packages/contracts/utils/helpers.ts index dd05bf1..1f0a9cd 100644 --- a/packages/contracts/utils/helpers.ts +++ b/packages/contracts/utils/helpers.ts @@ -59,7 +59,10 @@ export function getPluginRepoFactoryAddress(networkName: string): string { return pluginRepoFactoryAddr; } -export function getPluginSetupProcessorAddress(networkName: string): string { +export function getPluginSetupProcessorAddress( + networkName: string, + silent = false +): string { let pluginSetupProcessorAddr: string; if ( @@ -71,16 +74,20 @@ export function getPluginSetupProcessorAddress(networkName: string): string { pluginSetupProcessorAddr = osxContracts[hardhatForkNetwork].PluginSetupProcessor; - console.log( - `Using the "${hardhatForkNetwork}" PluginSetupProcessor address (${pluginSetupProcessorAddr}) for deployment testing on network "${networkName}"` - ); + if (!silent) { + console.log( + `Using the "${hardhatForkNetwork}" PluginSetupProcessor address (${pluginSetupProcessorAddr}) for deployment testing on network "${networkName}"` + ); + } } else { pluginSetupProcessorAddr = osxContracts[networkNameMapping[networkName]].PluginSetupProcessor; - console.log( - `Using the ${networkNameMapping[networkName]} PluginSetupProcessor address (${pluginSetupProcessorAddr}) for deployment...` - ); + if (!silent) { + console.log( + `Using the ${networkNameMapping[networkName]} PluginSetupProcessor address (${pluginSetupProcessorAddr}) for deployment...` + ); + } } return pluginSetupProcessorAddr; } From c27e97e163ffcda0cc1d8ccbb332352a74329d7d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8r=E2=88=82=C2=A1?= Date: Thu, 30 Nov 2023 17:48:31 +0100 Subject: [PATCH 09/29] Condition testing WIP --- .../src/MemberAccessExecuteCondition.sol | 10 +- .../src/OnlyPluginUpgraderCondition.sol | 33 ++--- .../member-access-execute-condition.ts | 4 +- .../only-plugin-upgrader-condition.ts | 120 +++++++++--------- 4 files changed, 76 insertions(+), 91 deletions(-) diff --git a/packages/contracts/src/MemberAccessExecuteCondition.sol b/packages/contracts/src/MemberAccessExecuteCondition.sol index b1d7815..c27b2be 100644 --- a/packages/contracts/src/MemberAccessExecuteCondition.sol +++ b/packages/contracts/src/MemberAccessExecuteCondition.sol @@ -63,7 +63,7 @@ contract MemberAccessExecuteCondition is PermissionCondition { // Slices are only supported for bytes calldata, not bytes memory // Bytes memory requires an assembly block assembly { - selector := mload(add(_data, 32)) + selector := mload(add(_data, 0x20)) // 32 } } @@ -73,10 +73,10 @@ contract MemberAccessExecuteCondition is PermissionCondition { // Slicing is only supported for bytes calldata, not bytes memory // Bytes memory requires an assembly block assembly { - sig := mload(add(_data, 32)) - where := mload(add(_data, 36)) - who := mload(add(_data, 68)) - permissionId := mload(add(_data, 100)) + sig := mload(add(_data, 0x20)) // 32 + where := mload(add(_data, 0x24)) // 32 + 4 + who := mload(add(_data, 0x44)) // 32 + 4 + 32 + permissionId := mload(add(_data, 0x64)) // 32 + 4 + 32 + 32 } } } diff --git a/packages/contracts/src/OnlyPluginUpgraderCondition.sol b/packages/contracts/src/OnlyPluginUpgraderCondition.sol index b4f252d..443ef90 100644 --- a/packages/contracts/src/OnlyPluginUpgraderCondition.sol +++ b/packages/contracts/src/OnlyPluginUpgraderCondition.sol @@ -82,7 +82,7 @@ contract OnlyPluginUpgraderCondition is PermissionCondition { // Slices are only supported for bytes calldata // Bytes memory requires an assembly block assembly { - selector := mload(add(_data, 32)) + selector := mload(add(_data, 0x20)) // 32 } } @@ -92,30 +92,21 @@ contract OnlyPluginUpgraderCondition is PermissionCondition { // Slicing is only supported for bytes calldata, not bytes memory // Bytes memory requires an assembly block assembly { - selector := mload(add(_data, 32)) - where := mload(add(_data, 36)) - who := mload(add(_data, 68)) - permissionId := mload(add(_data, 100)) + selector := mload(add(_data, 0x20)) // 32 + where := mload(add(_data, 0x24)) // 32 + 4 + who := mload(add(_data, 0x44)) // 32 + 4 + 32 + permissionId := mload(add(_data, 0x64)) // 32 + 4 + 32 + 32 } } function decodeApplyUpdateCalldata( bytes memory _data - ) - public - pure - returns ( - bytes4 selector, - address daoAddress, - PluginSetupProcessor.ApplyUpdateParams memory applyUpdateParams - ) - { + ) public pure returns (bytes4 selector, address daoAddress) { // Slicing is only supported for bytes calldata, not bytes memory // Bytes memory requires an assembly block assembly { - selector := mload(add(_data, 32)) - daoAddress := mload(add(_data, 36)) - applyUpdateParams := mload(add(_data, 68)) + selector := mload(add(_data, 0x20)) // 32 + daoAddress := mload(add(_data, 0x24)) // 32 + 4 } } @@ -158,15 +149,11 @@ contract OnlyPluginUpgraderCondition is PermissionCondition { } function isValidApplyUpdateCalldata(bytes memory _data) private view returns (bool) { - ( - bytes4 _selector, - address _dao, - PluginSetupProcessor.ApplyUpdateParams memory _applyParams - ) = decodeApplyUpdateCalldata(_data); + (bytes4 _selector, address _dao) = decodeApplyUpdateCalldata(_data); if (_selector != PluginSetupProcessor.applyUpdate.selector) return false; else if (_dao != dao) return false; - else if (!allowedPluginAddresses[_applyParams.plugin]) return false; + // else if (!allowedPluginAddresses[_applyParams.plugin]) return false; return true; } diff --git a/packages/contracts/test/unit-testing/member-access-execute-condition.ts b/packages/contracts/test/unit-testing/member-access-execute-condition.ts index 33a7825..2a5668c 100644 --- a/packages/contracts/test/unit-testing/member-access-execute-condition.ts +++ b/packages/contracts/test/unit-testing/member-access-execute-condition.ts @@ -486,9 +486,9 @@ describe('Member Access Condition', function () { // 2 [selector, where, who, permissionId] = await memberAccessExecuteCondition.decodeGrantRevokeCalldata( - calldataList[2] + calldataList[1] ); - expect(selector).to.eq(calldataList[2].slice(0, 10)); + expect(selector).to.eq(calldataList[1].slice(0, 10)); expect(where).to.eq(PLUGIN_ADDR_2); expect(who).to.eq(bob.address); expect(permissionId).to.eq(ROOT_PERMISSION_ID); diff --git a/packages/contracts/test/unit-testing/only-plugin-upgrader-condition.ts b/packages/contracts/test/unit-testing/only-plugin-upgrader-condition.ts index 97830e1..43512b8 100644 --- a/packages/contracts/test/unit-testing/only-plugin-upgrader-condition.ts +++ b/packages/contracts/test/unit-testing/only-plugin-upgrader-condition.ts @@ -24,8 +24,8 @@ import {expect} from 'chai'; import {ethers, network} from 'hardhat'; const ONE_BYTES32 = '0x' + '0'.repeat(63) + '1'; -const PLUGIN_ADDR_1 = ADDRESS_ONE; -const PLUGIN_ADDR_2 = ADDRESS_TWO; +const ALLOWED_PLUGIN_ADDRESS_1 = ADDRESS_ONE; +const ALLOWED_PLUGIN_ADDRESS_2 = ADDRESS_TWO; const daoInterface = DAO__factory.createInterface(); const pspInterface = PluginSetupProcessor__factory.createInterface(); @@ -50,19 +50,19 @@ describe('Only Plugin Upgrader Condition', function () { onlyPluginUpgraderCondition = await factory.deploy( dao.address, pspAddress, - [PLUGIN_ADDR_1, PLUGIN_ADDR_2] + [ALLOWED_PLUGIN_ADDRESS_1, ALLOWED_PLUGIN_ADDRESS_2] ); applyUpdateParams = { - plugin: PLUGIN_ADDR_1, + plugin: ALLOWED_PLUGIN_ADDRESS_1, helpersHash: ONE_BYTES32, initData: '0x', permissions: [], pluginSetupRef: { - pluginSetupRepo: ADDRESS_ONE, + pluginSetupRepo: ADDRESS_TWO, versionTag: { - release: 1, - build: 1, + release: 3, + build: 4, }, }, }; @@ -75,7 +75,7 @@ describe('Only Plugin Upgrader Condition', function () { to: dao.address, value: 0, data: daoInterface.encodeFunctionData('grant', [ - PLUGIN_ADDR_1, + ALLOWED_PLUGIN_ADDRESS_1, pspAddress, UPGRADE_PLUGIN_PERMISSION_ID, ]), @@ -92,7 +92,7 @@ describe('Only Plugin Upgrader Condition', function () { to: dao.address, value: 0, data: daoInterface.encodeFunctionData('revoke', [ - PLUGIN_ADDR_1, + ALLOWED_PLUGIN_ADDRESS_1, pspAddress, UPGRADE_PLUGIN_PERMISSION_ID, ]), @@ -124,7 +124,7 @@ describe('Only Plugin Upgrader Condition', function () { ADDRESS_ZERO, // who EXECUTE_PERMISSION_ID, // permission daoInterface.encodeFunctionData('grant', [ - PLUGIN_ADDR_1, + ALLOWED_PLUGIN_ADDRESS_1, pspAddress, UPGRADE_PLUGIN_PERMISSION_ID, ]) @@ -147,7 +147,7 @@ describe('Only Plugin Upgrader Condition', function () { ADDRESS_TWO, // who EXECUTE_PERMISSION_ID, // permission daoInterface.encodeFunctionData('revoke', [ - PLUGIN_ADDR_1, + ALLOWED_PLUGIN_ADDRESS_1, pspAddress, UPGRADE_PLUGIN_PERMISSION_ID, ]) @@ -161,7 +161,7 @@ describe('Only Plugin Upgrader Condition', function () { ADDRESS_ZERO, // where ADDRESS_ZERO, // who EXECUTE_PERMISSION_ID, // permission - daoInterface.encodeFunctionData('setDaoURI', ['ipfs://']) + daoInterface.encodeFunctionData('setDaoURI', ['0x']) ) ).to.eq(false); expect( @@ -169,7 +169,7 @@ describe('Only Plugin Upgrader Condition', function () { ADDRESS_ZERO, // where ADDRESS_ZERO, // who EXECUTE_PERMISSION_ID, // permission - daoInterface.encodeFunctionData('setMetadata', ['ipfs://']) + daoInterface.encodeFunctionData('setMetadata', ['0x']) ) ).to.eq(false); }); @@ -180,7 +180,7 @@ describe('Only Plugin Upgrader Condition', function () { to: dao.address, value: 0, data: daoInterface.encodeFunctionData('grant', [ - PLUGIN_ADDR_1, + ALLOWED_PLUGIN_ADDRESS_1, pspAddress, UPGRADE_PLUGIN_PERMISSION_ID, ]), @@ -226,7 +226,7 @@ describe('Only Plugin Upgrader Condition', function () { to: dao.address, value: 0, data: daoInterface.encodeFunctionData('revoke', [ - PLUGIN_ADDR_1, + ALLOWED_PLUGIN_ADDRESS_1, pspAddress, UPGRADE_PLUGIN_PERMISSION_ID, ]), @@ -257,7 +257,7 @@ describe('Only Plugin Upgrader Condition', function () { to: dao.address, value: 0, data: daoInterface.encodeFunctionData('grant', [ - PLUGIN_ADDR_1, + ALLOWED_PLUGIN_ADDRESS_1, pspAddress, UPGRADE_PLUGIN_PERMISSION_ID, ]), @@ -274,7 +274,7 @@ describe('Only Plugin Upgrader Condition', function () { to: dao.address, value: 0, data: daoInterface.encodeFunctionData('revoke', [ - PLUGIN_ADDR_1, + ALLOWED_PLUGIN_ADDRESS_1, pspAddress, UPGRADE_PLUGIN_PERMISSION_ID, ]), @@ -328,7 +328,7 @@ describe('Only Plugin Upgrader Condition', function () { to: bob.address, value: 0, data: daoInterface.encodeFunctionData('grant', [ - PLUGIN_ADDR_1, + ALLOWED_PLUGIN_ADDRESS_1, pspAddress, UPGRADE_PLUGIN_PERMISSION_ID, ]), @@ -345,7 +345,7 @@ describe('Only Plugin Upgrader Condition', function () { to: dao.address, value: 0, data: daoInterface.encodeFunctionData('revoke', [ - PLUGIN_ADDR_1, + ALLOWED_PLUGIN_ADDRESS_1, pspAddress, UPGRADE_PLUGIN_PERMISSION_ID, ]), @@ -375,7 +375,7 @@ describe('Only Plugin Upgrader Condition', function () { to: dao.address, value: 0, data: daoInterface.encodeFunctionData('grant', [ - PLUGIN_ADDR_1, + ALLOWED_PLUGIN_ADDRESS_1, pspAddress, UPGRADE_PLUGIN_PERMISSION_ID, ]), @@ -392,7 +392,7 @@ describe('Only Plugin Upgrader Condition', function () { to: bob.address, value: 0, data: daoInterface.encodeFunctionData('revoke', [ - PLUGIN_ADDR_1, + ALLOWED_PLUGIN_ADDRESS_1, pspAddress, UPGRADE_PLUGIN_PERMISSION_ID, ]), @@ -423,7 +423,7 @@ describe('Only Plugin Upgrader Condition', function () { to: dao.address, value: 0, data: daoInterface.encodeFunctionData('grant', [ - PLUGIN_ADDR_1, + ALLOWED_PLUGIN_ADDRESS_1, pspAddress, UPGRADE_PLUGIN_PERMISSION_ID, ]), @@ -440,7 +440,7 @@ describe('Only Plugin Upgrader Condition', function () { to: dao.address, value: 0, data: daoInterface.encodeFunctionData('revoke', [ - PLUGIN_ADDR_1, + ALLOWED_PLUGIN_ADDRESS_1, pspAddress, UPGRADE_PLUGIN_PERMISSION_ID, ]), @@ -473,7 +473,7 @@ describe('Only Plugin Upgrader Condition', function () { to: dao.address, value: 0, data: daoInterface.encodeFunctionData('revoke', [ - PLUGIN_ADDR_1, + ALLOWED_PLUGIN_ADDRESS_1, pspAddress, UPGRADE_PLUGIN_PERMISSION_ID, ]), @@ -490,7 +490,7 @@ describe('Only Plugin Upgrader Condition', function () { to: dao.address, value: 0, data: daoInterface.encodeFunctionData('revoke', [ - PLUGIN_ADDR_1, + ALLOWED_PLUGIN_ADDRESS_1, pspAddress, UPGRADE_PLUGIN_PERMISSION_ID, ]), @@ -520,7 +520,7 @@ describe('Only Plugin Upgrader Condition', function () { to: dao.address, value: 0, data: daoInterface.encodeFunctionData('grant', [ - PLUGIN_ADDR_1, + ALLOWED_PLUGIN_ADDRESS_1, pspAddress, UPGRADE_PLUGIN_PERMISSION_ID, ]), @@ -537,7 +537,7 @@ describe('Only Plugin Upgrader Condition', function () { to: dao.address, value: 0, data: daoInterface.encodeFunctionData('grant', [ - PLUGIN_ADDR_1, + ALLOWED_PLUGIN_ADDRESS_1, pspAddress, UPGRADE_PLUGIN_PERMISSION_ID, ]), @@ -568,7 +568,7 @@ describe('Only Plugin Upgrader Condition', function () { to: dao.address, value: 0, data: daoInterface.encodeFunctionData('grant', [ - PLUGIN_ADDR_1, + ALLOWED_PLUGIN_ADDRESS_1, carol.address, UPGRADE_PLUGIN_PERMISSION_ID, ]), @@ -585,7 +585,7 @@ describe('Only Plugin Upgrader Condition', function () { to: dao.address, value: 0, data: daoInterface.encodeFunctionData('revoke', [ - PLUGIN_ADDR_1, + ALLOWED_PLUGIN_ADDRESS_1, pspAddress, UPGRADE_PLUGIN_PERMISSION_ID, ]), @@ -615,7 +615,7 @@ describe('Only Plugin Upgrader Condition', function () { to: dao.address, value: 0, data: daoInterface.encodeFunctionData('grant', [ - PLUGIN_ADDR_1, + ALLOWED_PLUGIN_ADDRESS_1, pspAddress, UPGRADE_PLUGIN_PERMISSION_ID, ]), @@ -632,7 +632,7 @@ describe('Only Plugin Upgrader Condition', function () { to: dao.address, value: 0, data: daoInterface.encodeFunctionData('revoke', [ - PLUGIN_ADDR_1, + ALLOWED_PLUGIN_ADDRESS_1, carol.address, UPGRADE_PLUGIN_PERMISSION_ID, ]), @@ -663,7 +663,7 @@ describe('Only Plugin Upgrader Condition', function () { to: dao.address, value: 0, data: daoInterface.encodeFunctionData('grant', [ - PLUGIN_ADDR_1, + ALLOWED_PLUGIN_ADDRESS_1, pspAddress, EXECUTE_PERMISSION_ID, ]), @@ -680,7 +680,7 @@ describe('Only Plugin Upgrader Condition', function () { to: dao.address, value: 0, data: daoInterface.encodeFunctionData('revoke', [ - PLUGIN_ADDR_1, + ALLOWED_PLUGIN_ADDRESS_1, pspAddress, UPGRADE_PLUGIN_PERMISSION_ID, ]), @@ -710,7 +710,7 @@ describe('Only Plugin Upgrader Condition', function () { to: dao.address, value: 0, data: daoInterface.encodeFunctionData('grant', [ - PLUGIN_ADDR_1, + ALLOWED_PLUGIN_ADDRESS_1, pspAddress, UPGRADE_PLUGIN_PERMISSION_ID, ]), @@ -727,7 +727,7 @@ describe('Only Plugin Upgrader Condition', function () { to: dao.address, value: 0, data: daoInterface.encodeFunctionData('revoke', [ - PLUGIN_ADDR_1, + ALLOWED_PLUGIN_ADDRESS_1, pspAddress, EDITOR_PERMISSION_ID, ]), @@ -775,7 +775,7 @@ describe('Only Plugin Upgrader Condition', function () { to: dao.address, value: 0, data: daoInterface.encodeFunctionData('revoke', [ - PLUGIN_ADDR_1, + ALLOWED_PLUGIN_ADDRESS_1, pspAddress, UPGRADE_PLUGIN_PERMISSION_ID, ]), @@ -805,7 +805,7 @@ describe('Only Plugin Upgrader Condition', function () { to: dao.address, value: 0, data: daoInterface.encodeFunctionData('grant', [ - PLUGIN_ADDR_1, + ALLOWED_PLUGIN_ADDRESS_1, pspAddress, UPGRADE_PLUGIN_PERMISSION_ID, ]), @@ -902,7 +902,7 @@ describe('Only Plugin Upgrader Condition', function () { to: dao.address, value: 0, data: daoInterface.encodeFunctionData('grant', [ - PLUGIN_ADDR_1, + ALLOWED_PLUGIN_ADDRESS_1, pspAddress, UPGRADE_PLUGIN_PERMISSION_ID, ]), @@ -919,7 +919,7 @@ describe('Only Plugin Upgrader Condition', function () { to: dao.address, value: 0, data: daoInterface.encodeFunctionData('revoke', [ - PLUGIN_ADDR_1, + ALLOWED_PLUGIN_ADDRESS_1, pspAddress, UPGRADE_PLUGIN_PERMISSION_ID, ]), @@ -949,7 +949,7 @@ describe('Only Plugin Upgrader Condition', function () { to: dao.address, value: 0, data: daoInterface.encodeFunctionData('grant', [ - PLUGIN_ADDR_1, + ALLOWED_PLUGIN_ADDRESS_1, pspAddress, UPGRADE_PLUGIN_PERMISSION_ID, ]), @@ -966,7 +966,7 @@ describe('Only Plugin Upgrader Condition', function () { to: dao.address, value: 0, data: daoInterface.encodeFunctionData('revoke', [ - PLUGIN_ADDR_1, + ALLOWED_PLUGIN_ADDRESS_1, pspAddress, UPGRADE_PLUGIN_PERMISSION_ID, ]), @@ -997,7 +997,7 @@ describe('Only Plugin Upgrader Condition', function () { to: dao.address, value: 0, data: daoInterface.encodeFunctionData('grant', [ - PLUGIN_ADDR_1, + ALLOWED_PLUGIN_ADDRESS_1, pspAddress, UPGRADE_PLUGIN_PERMISSION_ID, ]), @@ -1014,7 +1014,7 @@ describe('Only Plugin Upgrader Condition', function () { to: dao.address, value: 0, data: daoInterface.encodeFunctionData('revoke', [ - PLUGIN_ADDR_1, + ALLOWED_PLUGIN_ADDRESS_1, pspAddress, UPGRADE_PLUGIN_PERMISSION_ID, ]), @@ -1044,7 +1044,7 @@ describe('Only Plugin Upgrader Condition', function () { to: dao.address, value: 0, data: daoInterface.encodeFunctionData('grant', [ - PLUGIN_ADDR_1, + ALLOWED_PLUGIN_ADDRESS_1, pspAddress, UPGRADE_PLUGIN_PERMISSION_ID, ]), @@ -1061,7 +1061,7 @@ describe('Only Plugin Upgrader Condition', function () { to: dao.address, value: 0, data: daoInterface.encodeFunctionData('revoke', [ - PLUGIN_ADDR_1, + ALLOWED_PLUGIN_ADDRESS_1, pspAddress, UPGRADE_PLUGIN_PERMISSION_ID, ]), @@ -1093,7 +1093,7 @@ describe('Only Plugin Upgrader Condition', function () { to: dao.address, value: 0, data: daoInterface.encodeFunctionData('grant', [ - PLUGIN_ADDR_1, + ALLOWED_PLUGIN_ADDRESS_1, pspAddress, UPGRADE_PLUGIN_PERMISSION_ID, ]), @@ -1110,7 +1110,7 @@ describe('Only Plugin Upgrader Condition', function () { to: dao.address, value: 0, data: daoInterface.encodeFunctionData('revoke', [ - PLUGIN_ADDR_1, + ALLOWED_PLUGIN_ADDRESS_1, pspAddress, UPGRADE_PLUGIN_PERMISSION_ID, ]), @@ -1199,7 +1199,7 @@ describe('Only Plugin Upgrader Condition', function () { to: dao.address, value: 0, data: daoInterface.encodeFunctionData('grant', [ - PLUGIN_ADDR_1, + ALLOWED_PLUGIN_ADDRESS_1, pspAddress, UPGRADE_PLUGIN_PERMISSION_ID, ]), @@ -1216,7 +1216,7 @@ describe('Only Plugin Upgrader Condition', function () { to: dao.address, value: 0, data: daoInterface.encodeFunctionData('revoke', [ - PLUGIN_ADDR_1, + ALLOWED_PLUGIN_ADDRESS_1, pspAddress, UPGRADE_PLUGIN_PERMISSION_ID, ]), @@ -1239,12 +1239,12 @@ describe('Only Plugin Upgrader Condition', function () { it('Should decode decodeGrantRevokeCalldata properly', async () => { const calldataList = [ daoInterface.encodeFunctionData('grant', [ - PLUGIN_ADDR_1, + ALLOWED_PLUGIN_ADDRESS_1, pspAddress, UPGRADE_PLUGIN_PERMISSION_ID, ]), daoInterface.encodeFunctionData('revoke', [ - PLUGIN_ADDR_2, + ALLOWED_PLUGIN_ADDRESS_2, ADDRESS_THREE, ROOT_PERMISSION_ID, ]), @@ -1256,17 +1256,17 @@ describe('Only Plugin Upgrader Condition', function () { calldataList[0] ); expect(selector).to.eq(calldataList[0].slice(0, 10)); - expect(where).to.eq(PLUGIN_ADDR_1); + expect(where).to.eq(ALLOWED_PLUGIN_ADDRESS_1); expect(who).to.eq(pspAddress); expect(permissionId).to.eq(UPGRADE_PLUGIN_PERMISSION_ID); // 2 [selector, where, who, permissionId] = await onlyPluginUpgraderCondition.decodeGrantRevokeCalldata( - calldataList[2] + calldataList[1] ); - expect(selector).to.eq(calldataList[2].slice(0, 10)); - expect(where).to.eq(PLUGIN_ADDR_2); + expect(selector).to.eq(calldataList[1].slice(0, 10)); + expect(where).to.eq(ALLOWED_PLUGIN_ADDRESS_2); expect(who).to.eq(ADDRESS_THREE); expect(permissionId).to.eq(ROOT_PERMISSION_ID); }); @@ -1285,22 +1285,20 @@ describe('Only Plugin Upgrader Condition', function () { ]; // 1 - let [selector, decodedDaoAddress, decodedParams] = + let [selector, decodedDaoAddress] = await onlyPluginUpgraderCondition.decodeApplyUpdateCalldata( calldataList[0] ); expect(selector).to.eq(calldataList[0].slice(0, 10)); expect(decodedDaoAddress).to.eq(dao.address); - expect(decodedParams.plugin).to.eq(bob.address); // 2 - [selector, decodedDaoAddress, decodedParams] = + [selector, decodedDaoAddress] = await onlyPluginUpgraderCondition.decodeApplyUpdateCalldata( - calldataList[2] + calldataList[1] ); - expect(selector).to.eq(calldataList[2].slice(0, 10)); + expect(selector).to.eq(calldataList[1].slice(0, 10)); expect(decodedDaoAddress).to.eq(ADDRESS_THREE); - expect(decodedParams.plugin).to.eq(bob.address); }); }); }); From 222f32ed2e672b4cb804624d5ddaee443cb26f8f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8r=E2=88=82=C2=A1?= Date: Fri, 1 Dec 2023 11:56:31 +0100 Subject: [PATCH 10/29] Nested calldata decoding ready --- .../src/OnlyPluginUpgraderCondition.sol | 26 +++++++++++++++---- .../only-plugin-upgrader-condition.ts | 11 +++++--- 2 files changed, 29 insertions(+), 8 deletions(-) diff --git a/packages/contracts/src/OnlyPluginUpgraderCondition.sol b/packages/contracts/src/OnlyPluginUpgraderCondition.sol index 443ef90..9446c20 100644 --- a/packages/contracts/src/OnlyPluginUpgraderCondition.sol +++ b/packages/contracts/src/OnlyPluginUpgraderCondition.sol @@ -101,12 +101,26 @@ contract OnlyPluginUpgraderCondition is PermissionCondition { function decodeApplyUpdateCalldata( bytes memory _data - ) public pure returns (bytes4 selector, address daoAddress) { + ) public pure returns (bytes4 selector, address daoAddress, address targetPluginAddress) { // Slicing is only supported for bytes calldata, not bytes memory // Bytes memory requires an assembly block assembly { - selector := mload(add(_data, 0x20)) // 32 - daoAddress := mload(add(_data, 0x24)) // 32 + 4 + selector := mload(add(_data, 0x20)) + + let _payloadStart := add(_data, 0x24) + daoAddress := mload(_payloadStart) + + let _paramsStructOffset := mload(add(_payloadStart, 0x20)) + + // Extracting the first field of the struct at offset 0 + // struct ApplyUpdateParams { + // address plugin; + // PluginSetupRef pluginSetupRef; + // bytes initData; + // PermissionLib.MultiTargetPermission[] permissions; + // bytes32 helpersHash; + // } + targetPluginAddress := mload(add(_payloadStart, _paramsStructOffset)) } } @@ -149,11 +163,13 @@ contract OnlyPluginUpgraderCondition is PermissionCondition { } function isValidApplyUpdateCalldata(bytes memory _data) private view returns (bool) { - (bytes4 _selector, address _dao) = decodeApplyUpdateCalldata(_data); + (bytes4 _selector, address _dao, address _targetPluginAddress) = decodeApplyUpdateCalldata( + _data + ); if (_selector != PluginSetupProcessor.applyUpdate.selector) return false; else if (_dao != dao) return false; - // else if (!allowedPluginAddresses[_applyParams.plugin]) return false; + else if (!allowedPluginAddresses[_targetPluginAddress]) return false; return true; } diff --git a/packages/contracts/test/unit-testing/only-plugin-upgrader-condition.ts b/packages/contracts/test/unit-testing/only-plugin-upgrader-condition.ts index 43512b8..611bbaf 100644 --- a/packages/contracts/test/unit-testing/only-plugin-upgrader-condition.ts +++ b/packages/contracts/test/unit-testing/only-plugin-upgrader-condition.ts @@ -1273,6 +1273,9 @@ describe('Only Plugin Upgrader Condition', function () { it('Should decode decodeApplyUpdateCalldata properly', async () => { applyUpdateParams.plugin = bob.address; + const applyUpdateParams2 = JSON.parse(JSON.stringify(applyUpdateParams)); + applyUpdateParams2.plugin = alice.address; + const calldataList = [ pspInterface.encodeFunctionData('applyUpdate', [ dao.address, @@ -1280,25 +1283,27 @@ describe('Only Plugin Upgrader Condition', function () { ]), pspInterface.encodeFunctionData('applyUpdate', [ ADDRESS_THREE, - applyUpdateParams, + applyUpdateParams2, ]), ]; // 1 - let [selector, decodedDaoAddress] = + let [selector, decodedDaoAddress, pluginAddress] = await onlyPluginUpgraderCondition.decodeApplyUpdateCalldata( calldataList[0] ); expect(selector).to.eq(calldataList[0].slice(0, 10)); expect(decodedDaoAddress).to.eq(dao.address); + expect(pluginAddress).to.eq(bob.address); // 2 - [selector, decodedDaoAddress] = + [selector, decodedDaoAddress, pluginAddress] = await onlyPluginUpgraderCondition.decodeApplyUpdateCalldata( calldataList[1] ); expect(selector).to.eq(calldataList[1].slice(0, 10)); expect(decodedDaoAddress).to.eq(ADDRESS_THREE); + expect(pluginAddress).to.eq(alice.address); }); }); }); From 251b05d3bc6374835f6e87380fb9ac7ecb1e0657 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8r=E2=88=82=C2=A1?= Date: Fri, 1 Dec 2023 12:40:15 +0100 Subject: [PATCH 11/29] Minor edit --- packages/contracts/.solhint.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/contracts/.solhint.json b/packages/contracts/.solhint.json index 901bcf1..d14d959 100644 --- a/packages/contracts/.solhint.json +++ b/packages/contracts/.solhint.json @@ -2,7 +2,7 @@ "extends": "solhint:recommended", "plugins": ["prettier"], "rules": { - "code-complexity": ["error", 8], + "code-complexity": ["error", 10], "compiler-version": ["error", ">=0.8.4"], "func-visibility": ["error", {"ignoreConstructors": true}], "max-line-length": ["warn", 120], From e4b8eaa24cf2fdf36b7f4f0c09e3e03cae15d6e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8r=E2=88=82=C2=A1?= Date: Fri, 1 Dec 2023 13:14:24 +0100 Subject: [PATCH 12/29] Amend the linter --- packages/contracts/package.json | 2 +- .../test/unit-testing/only-plugin-upgrader-condition.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/contracts/package.json b/packages/contracts/package.json index b28e3f1..a1e7e2d 100644 --- a/packages/contracts/package.json +++ b/packages/contracts/package.json @@ -65,7 +65,7 @@ "deploy": "hardhat deploy", "lint": "yarn lint:sol && yarn lint:ts", "lint:sol": "solhint \"src/**/*.sol\"", - "lint:ts": "eslint --ignore-path ./.eslintignore --ignore-path ./node_modules --ext .js,.ts .", + "lint:ts": "eslint --ignore-path ./.eslintignore --ext .js,.ts .", "postinstall": "DOTENV_CONFIG_PATH=../../.env.example yarn typechain", "test": "hardhat test", "typechain": "cross-env TS_NODE_TRANSPILE_ONLY=true hardhat typechain", diff --git a/packages/contracts/test/unit-testing/only-plugin-upgrader-condition.ts b/packages/contracts/test/unit-testing/only-plugin-upgrader-condition.ts index 611bbaf..96fa8a9 100644 --- a/packages/contracts/test/unit-testing/only-plugin-upgrader-condition.ts +++ b/packages/contracts/test/unit-testing/only-plugin-upgrader-condition.ts @@ -418,7 +418,7 @@ describe('Only Plugin Upgrader Condition', function () { }); it('Should reject if action 2 is not executed on the PSP', async () => { - let actions: IDAO.ActionStruct[] = [ + const actions: IDAO.ActionStruct[] = [ { to: dao.address, value: 0, From 9bea4c08d5662d990747b7d72fc0784fa265c9f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8r=E2=88=82=C2=A1?= Date: Fri, 15 Dec 2023 10:49:42 +0100 Subject: [PATCH 13/29] Updated OSx dependencies --- packages/contracts/package.json | 4 +- yarn.lock | 6673 ++----------------------------- 2 files changed, 252 insertions(+), 6425 deletions(-) diff --git a/packages/contracts/package.json b/packages/contracts/package.json index a1e7e2d..111daf7 100644 --- a/packages/contracts/package.json +++ b/packages/contracts/package.json @@ -36,8 +36,8 @@ "tmp-promise": "^3.0.3" }, "dependencies": { - "@aragon/osx": "^1.3.0-rc0.1", - "@aragon/osx-ethers": "^1.3.0-rc0.1", + "@aragon/osx": "^1.3.0", + "@aragon/osx-ethers": "^1.3.0", "@openzeppelin/contracts": "^4.9.3", "@openzeppelin/contracts-upgradeable": "^4.9.3", "@openzeppelin/hardhat-upgrades": "^1.27.0" diff --git a/yarn.lock b/yarn.lock index 89e57f8..5099d6b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,87 +2,22 @@ # yarn lockfile v1 -"@ampproject/remapping@^2.2.0": - version "2.2.1" - resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630" - integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg== - dependencies: - "@jridgewell/gen-mapping" "^0.3.0" - "@jridgewell/trace-mapping" "^0.3.9" - -"@aragon/osx-ethers@1.3.0-rc0", "@aragon/osx-ethers@^1.3.0-rc0": - version "1.3.0-rc0" - resolved "https://registry.yarnpkg.com/@aragon/osx-ethers/-/osx-ethers-1.3.0-rc0.tgz#f706b007f8e3c95418f6ba8dab7bdeeb97858378" - integrity sha512-iPTkjnmIToVc6x+4xfBByMskX0VhYrNvHlolsewLHz3wuJONx08dUODAxnMgU17X9H8UXxuLcApTf+KvhUezxg== - dependencies: - ethers "^5.6.2" - -"@aragon/osx-ethers@^1.3.0-rc0.1": - version "1.3.0-rc0.1" - resolved "https://registry.yarnpkg.com/@aragon/osx-ethers/-/osx-ethers-1.3.0-rc0.1.tgz#d8168205d76edfae42e961d5eab5e545c1bacb99" - integrity sha512-KjaEoIXG6+P6cxfX2FzmlTc+A67+l44FxpnSSW0GljyI5kcdFlXIrsgOeyj8iIcKo2iHsCkPibjjNgSc3sP6QA== +"@aragon/osx-ethers@^1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@aragon/osx-ethers/-/osx-ethers-1.3.0.tgz#85ddd93f4448789e94154b313f9ddd8069dff568" + integrity sha512-zfLAYdgZ3SSifHiyJLkBKmoDw/IEX/yzvw6liUAa/gz7HZOsrwp3JsBJaIwB2epOnGa6vhXyWTKKZ15aJvoMaA== dependencies: ethers "^5.6.2" -"@aragon/osx@^1.3.0-rc0.1": - version "1.3.0-rc0.1" - resolved "https://registry.yarnpkg.com/@aragon/osx/-/osx-1.3.0-rc0.1.tgz#284133efcea4d9c142a24179bc1be6d808f91e6b" - integrity sha512-JGfomBRqeHii6qLRUVmmu+s2xsSHIw0RD3Q38ZFN6P0TiYPK5BVnDnWKpC/6uBdxFrwUi3HwWCMevYEr5nBH/w== +"@aragon/osx@^1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@aragon/osx/-/osx-1.3.0.tgz#eee59963546016bb3b41b7c7a9b7c41d33b37de2" + integrity sha512-ziLmnhWEoFS/uthxAYfI9tSylesMLTDe69XggKP9LK/tIOKAhyYjfAJ2mbhWZcH558c9o0gzAEErkDhqh/wdog== dependencies: "@ensdomains/ens-contracts" "0.0.11" "@openzeppelin/contracts" "4.8.1" "@openzeppelin/contracts-upgradeable" "4.8.1" -"@aragon/sdk-client-common@1.2.0-rc0", "@aragon/sdk-client-common@^1.2.0-rc0": - version "1.2.0-rc0" - resolved "https://registry.yarnpkg.com/@aragon/sdk-client-common/-/sdk-client-common-1.2.0-rc0.tgz#642d294aa8faae4ddc1d121b4ba1df4c8d526fab" - integrity sha512-xzVBcNnY0FBdID1lD84L+krlOrIYX/ZOzluFWD4gdQr+5Mo1xc7UTazSUMiU5cvr8vD/dF2JrZHj8eWpW3j7nA== - dependencies: - "@aragon/osx-ethers" "^1.3.0-rc0" - "@aragon/sdk-common" "^1.5.0" - "@aragon/sdk-ipfs" "^1.1.0" - "@ethersproject/abstract-signer" "^5.5.0" - "@ethersproject/bignumber" "^5.6.0" - "@ethersproject/constants" "^5.6.0" - "@ethersproject/contracts" "^5.5.0" - "@ethersproject/providers" "^5.5.0" - "@ethersproject/wallet" "^5.6.0" - graphql "^16.5.0" - graphql-request "^4.3.0" - -"@aragon/sdk-client@1.10.0-rc1": - version "1.10.0-rc1" - resolved "https://registry.yarnpkg.com/@aragon/sdk-client/-/sdk-client-1.10.0-rc1.tgz#74f5226c8d0f9cf8bfdc2b7b6a2bf46622ebf2e5" - integrity sha512-WjNmPLlUGJBYRljFQgCGpl7+6dehwQAkVwiz+3HnSfIrx3aOTyEnxBtOKSXkH7Na2f6WZDLa/1q9ICsVfLnFlA== - dependencies: - "@aragon/osx-ethers" "1.3.0-rc0" - "@aragon/sdk-client-common" "^1.2.0-rc0" - "@aragon/sdk-common" "^1.5.0" - "@aragon/sdk-ipfs" "^1.1.0" - "@ethersproject/abstract-signer" "^5.5.0" - "@ethersproject/bignumber" "^5.6.0" - "@ethersproject/constants" "^5.6.0" - "@ethersproject/contracts" "^5.5.0" - "@ethersproject/providers" "^5.5.0" - "@ethersproject/wallet" "^5.6.0" - graphql "^16.5.0" - graphql-request "^4.3.0" - -"@aragon/sdk-common@1.5.0", "@aragon/sdk-common@^1.5.0": - version "1.5.0" - resolved "https://registry.yarnpkg.com/@aragon/sdk-common/-/sdk-common-1.5.0.tgz#321d5861a18d3d50b79aebb888ab77c830022be9" - integrity sha512-3dV1ATZamBOaDhEPlXM1thIl6BzjerqArFjd0MvajEyjbVBkFFAVM5PZRSYs243o+91iSNdVPGFml+TSonCZTg== - -"@aragon/sdk-ipfs@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@aragon/sdk-ipfs/-/sdk-ipfs-1.1.0.tgz#178ee5ce840ce40b44ba0345dd5068e1b5608f9d" - integrity sha512-2uAh/QPcmaita4AfHYV93lESzAhrmGEZ6CL7pvOH86HTkU6j7LnePvD1ly+x0hxRznTb+zgVgSPPKUn0ArPycw== - dependencies: - "@web-std/fetch" "^4.1.0" - "@web-std/file" "^3.0.2" - "@web-std/form-data" "^3.0.2" - isomorphic-unfetch "^3.1.0" - "@aws-crypto/sha256-js@1.2.2": version "1.2.2" resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-js/-/sha256-js-1.2.2.tgz#02acd1a1fda92896fc5a28ec7c6e164644ea32fc" @@ -122,39 +57,13 @@ dependencies: "@babel/highlight" "^7.18.6" -"@babel/code-frame@^7.12.13", "@babel/code-frame@^7.16.7", "@babel/code-frame@^7.18.6", "@babel/code-frame@^7.22.5", "@babel/code-frame@^7.5.5": +"@babel/code-frame@^7.16.7", "@babel/code-frame@^7.18.6", "@babel/code-frame@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.5.tgz#234d98e1551960604f1246e6475891a570ad5658" integrity sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ== dependencies: "@babel/highlight" "^7.22.5" -"@babel/compat-data@^7.17.7", "@babel/compat-data@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.22.5.tgz#b1f6c86a02d85d2dd3368a2b67c09add8cd0c255" - integrity sha512-4Jc/YuIaYqKnDDz892kPIledykKg12Aw1PYX5i/TY28anJtacvM1Rrr8wbieB9GfEJwlzqT0hUEao0CxEebiDA== - -"@babel/core@^7.1.0", "@babel/core@^7.12.3", "@babel/core@^7.4.4", "@babel/core@^7.7.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.22.5.tgz#d67d9747ecf26ee7ecd3ebae1ee22225fe902a89" - integrity sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg== - dependencies: - "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.22.5" - "@babel/generator" "^7.22.5" - "@babel/helper-compilation-targets" "^7.22.5" - "@babel/helper-module-transforms" "^7.22.5" - "@babel/helpers" "^7.22.5" - "@babel/parser" "^7.22.5" - "@babel/template" "^7.22.5" - "@babel/traverse" "^7.22.5" - "@babel/types" "^7.22.5" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.2.2" - semver "^6.3.0" - "@babel/generator@7.17.7": version "7.17.7" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.17.7.tgz#8da2599beb4a86194a3b24df6c085931d9ee45ad" @@ -164,7 +73,7 @@ jsesc "^2.5.1" source-map "^0.5.0" -"@babel/generator@^7.17.3", "@babel/generator@^7.22.5": +"@babel/generator@^7.17.3": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.22.5.tgz#1e7bf768688acfb05cf30b2369ef855e82d984f7" integrity sha512-+lcUbnTRhd0jOewtFSedLyiPsD5tswKkbgcezOqqWFUVNEwoUTlpPOBmvhG7OXWLR4jMdv0czPGH5XbflnD1EA== @@ -174,87 +83,12 @@ "@jridgewell/trace-mapping" "^0.3.17" jsesc "^2.5.1" -"@babel/helper-annotate-as-pure@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz#e7f06737b197d580a01edf75d97e2c8be99d3882" - integrity sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-builder-binary-assignment-operator-visitor@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.5.tgz#a3f4758efdd0190d8927fcffd261755937c71878" - integrity sha512-m1EP3lVOPptR+2DwD125gziZNcmoNSHGmJROKoy87loWUQyJaVXDgpmruWqDARZSmtYQ+Dl25okU8+qhVzuykw== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-compilation-targets@^7.10.4", "@babel/helper-compilation-targets@^7.17.7", "@babel/helper-compilation-targets@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.5.tgz#fc7319fc54c5e2fa14b2909cf3c5fd3046813e02" - integrity sha512-Ji+ywpHeuqxB8WDxraCiqR0xfhYjiDE/e6k7FuIaANnoOFxAHskHChz4vA1mJC9Lbm01s1PVAGhQY4FUKSkGZw== - dependencies: - "@babel/compat-data" "^7.22.5" - "@babel/helper-validator-option" "^7.22.5" - browserslist "^4.21.3" - lru-cache "^5.1.1" - semver "^6.3.0" - -"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.5.tgz#2192a1970ece4685fbff85b48da2c32fcb130b7c" - integrity sha512-xkb58MyOYIslxu3gKmVXmjTtUPvBU4odYzbiIQbWwLKIHCsx6UGZGX6F1IznMFVnDdirseUZopzN+ZRt8Xb33Q== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-function-name" "^7.22.5" - "@babel/helper-member-expression-to-functions" "^7.22.5" - "@babel/helper-optimise-call-expression" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.5" - semver "^6.3.0" - -"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.5.tgz#bb2bf0debfe39b831986a4efbf4066586819c6e4" - integrity sha512-1VpEFOIbMRaXyDeUwUfmTIxExLwQ+zkW+Bh5zXpApA3oQedBx9v/updixWxnx/bZpKw7u8VxWjb/qWpIcmPq8A== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - regexpu-core "^5.3.1" - semver "^6.3.0" - -"@babel/helper-define-polyfill-provider@^0.0.3": - version "0.0.3" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.0.3.tgz#df9da66285b884ce66417abdd0b6ca91198149bd" - integrity sha512-dULDd/APiP4JowYDAMosecKOi/1v+UId99qhBGiO3myM29KtAVKS/R3x3OJJNBR0FeYB1BcYb2dCwkhqvxWXXQ== - dependencies: - "@babel/helper-compilation-targets" "^7.10.4" - "@babel/helper-module-imports" "^7.10.4" - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/traverse" "^7.11.5" - debug "^4.1.1" - lodash.debounce "^4.0.8" - resolve "^1.14.2" - semver "^6.1.2" - -"@babel/helper-define-polyfill-provider@^0.4.0": - version "0.4.0" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.0.tgz#487053f103110f25b9755c5980e031e93ced24d8" - integrity sha512-RnanLx5ETe6aybRi1cO/edaRH+bNYWaryCEmjDDYyNr4wnSzyOp8T0dWipmqVHKEY3AbVKUom50AKSlj1zmKbg== - dependencies: - "@babel/helper-compilation-targets" "^7.17.7" - "@babel/helper-plugin-utils" "^7.16.7" - debug "^4.1.1" - lodash.debounce "^4.0.8" - resolve "^1.14.2" - semver "^6.1.2" - -"@babel/helper-environment-visitor@^7.16.7", "@babel/helper-environment-visitor@^7.22.5": +"@babel/helper-environment-visitor@^7.16.7": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz#f06dd41b7c1f44e1f8da6c4055b41ab3a09a7e98" integrity sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q== -"@babel/helper-function-name@^7.16.7", "@babel/helper-function-name@^7.22.5": +"@babel/helper-function-name@^7.16.7": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz#ede300828905bb15e582c037162f99d5183af1be" integrity sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ== @@ -262,90 +96,14 @@ "@babel/template" "^7.22.5" "@babel/types" "^7.22.5" -"@babel/helper-hoist-variables@^7.16.7", "@babel/helper-hoist-variables@^7.22.5": +"@babel/helper-hoist-variables@^7.16.7": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb" integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw== dependencies: "@babel/types" "^7.22.5" -"@babel/helper-member-expression-to-functions@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz#0a7c56117cad3372fbf8d2fb4bf8f8d64a1e76b2" - integrity sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz#1a8f4c9f4027d23f520bd76b364d44434a72660c" - integrity sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-module-transforms@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.22.5.tgz#0f65daa0716961b6e96b164034e737f60a80d2ef" - integrity sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw== - dependencies: - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-module-imports" "^7.22.5" - "@babel/helper-simple-access" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.5" - "@babel/helper-validator-identifier" "^7.22.5" - "@babel/template" "^7.22.5" - "@babel/traverse" "^7.22.5" - "@babel/types" "^7.22.5" - -"@babel/helper-optimise-call-expression@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz#f21531a9ccbff644fdd156b4077c16ff0c3f609e" - integrity sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295" - integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg== - -"@babel/helper-remap-async-to-generator@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.5.tgz#14a38141a7bf2165ad38da61d61cf27b43015da2" - integrity sha512-cU0Sq1Rf4Z55fgz7haOakIyM7+x/uCFwXpLPaeRzfoUtAEAuUZjZvFPjL/rk5rW693dIgn2hng1W7xbT7lWT4g== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-wrap-function" "^7.22.5" - "@babel/types" "^7.22.5" - -"@babel/helper-replace-supers@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.22.5.tgz#71bc5fb348856dea9fdc4eafd7e2e49f585145dc" - integrity sha512-aLdNM5I3kdI/V9xGNyKSF3X/gTyMUBohTZ+/3QdQKAA9vxIiy12E+8E2HoOP1/DjeqU+g6as35QHJNMDDYpuCg== - dependencies: - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-member-expression-to-functions" "^7.22.5" - "@babel/helper-optimise-call-expression" "^7.22.5" - "@babel/template" "^7.22.5" - "@babel/traverse" "^7.22.5" - "@babel/types" "^7.22.5" - -"@babel/helper-simple-access@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz#4938357dc7d782b80ed6dbb03a0fba3d22b1d5de" - integrity sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-skip-transparent-expression-wrappers@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz#007f15240b5751c537c40e77abb4e89eeaaa8847" - integrity sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-split-export-declaration@^7.16.7", "@babel/helper-split-export-declaration@^7.22.5": +"@babel/helper-split-export-declaration@^7.16.7": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.5.tgz#88cf11050edb95ed08d596f7a044462189127a08" integrity sha512-thqK5QFghPKWLhAV321lxF95yCg2K3Ob5yw+M3VHWfdia0IkPXUtoLH8x/6Fh486QUvzhb8YOWHChTVen2/PoQ== @@ -367,30 +125,6 @@ resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2" integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== -"@babel/helper-validator-option@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz#de52000a15a177413c8234fa3a8af4ee8102d0ac" - integrity sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw== - -"@babel/helper-wrap-function@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.22.5.tgz#44d205af19ed8d872b4eefb0d2fa65f45eb34f06" - integrity sha512-bYqLIBSEshYcYQyfks8ewYA8S30yaGSeRslcvKMvoUk6HHPySbxHq9YRi6ghhzEU+yhQv9bP/jXnygkStOcqZw== - dependencies: - "@babel/helper-function-name" "^7.22.5" - "@babel/template" "^7.22.5" - "@babel/traverse" "^7.22.5" - "@babel/types" "^7.22.5" - -"@babel/helpers@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.22.5.tgz#74bb4373eb390d1ceed74a15ef97767e63120820" - integrity sha512-pSXRmfE1vzcUIDFQcSGA5Mr+GxBV9oiRKDuDxXvWQQBCh8HoIjs/2DlDB7H8smac1IVrB9/xdXj2N3Wol9Cr+Q== - dependencies: - "@babel/template" "^7.22.5" - "@babel/traverse" "^7.22.5" - "@babel/types" "^7.22.5" - "@babel/highlight@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" @@ -409,680 +143,19 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.11.5", "@babel/parser@^7.14.7", "@babel/parser@^7.17.3", "@babel/parser@^7.20.5", "@babel/parser@^7.20.7", "@babel/parser@^7.22.5", "@babel/parser@^7.7.0": +"@babel/parser@^7.17.3", "@babel/parser@^7.20.5", "@babel/parser@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.22.5.tgz#721fd042f3ce1896238cf1b341c77eb7dee7dbea" integrity sha512-DFZMC9LJUG9PLOclRC32G63UXwzqS2koQC8dkx+PLdmt1xSePYpbT/NbsrJy8Q/muXz7o/h/d4A7Fuyixm559Q== -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.5.tgz#87245a21cd69a73b0b81bcda98d443d6df08f05e" - integrity sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.5.tgz#fef09f9499b1f1c930da8a0c419db42167d792ca" - integrity sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/plugin-transform-optional-chaining" "^7.22.5" - -"@babel/plugin-proposal-class-properties@^7.4.4": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz#b110f59741895f7ec21a6fff696ec46265c446a3" - integrity sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - -"@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2": - version "7.21.0-placeholder-for-preset-env.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz#7844f9289546efa9febac2de4cfe358a050bd703" - integrity sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w== - -"@babel/plugin-proposal-unicode-property-regex@^7.4.4": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz#af613d2cd5e643643b65cded64207b15c85cb78e" - integrity sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - -"@babel/plugin-syntax-async-generators@^7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" - integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-bigint@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" - integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-class-properties@^7.12.13", "@babel/plugin-syntax-class-properties@^7.8.3": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" - integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-syntax-class-static-block@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406" - integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-syntax-dynamic-import@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" - integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-export-namespace-from@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" - integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-syntax-import-assertions@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz#07d252e2aa0bc6125567f742cd58619cb14dce98" - integrity sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-syntax-import-attributes@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz#ab840248d834410b829f569f5262b9e517555ecb" - integrity sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-syntax-import-meta@^7.10.4", "@babel/plugin-syntax-import-meta@^7.8.3": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" - integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-json-strings@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" - integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-logical-assignment-operators@^7.10.4", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" - integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" - integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-numeric-separator@^7.10.4", "@babel/plugin-syntax-numeric-separator@^7.8.3": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" - integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-object-rest-spread@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" - integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-optional-catch-binding@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" - integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-optional-chaining@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" - integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-private-property-in-object@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad" - integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-syntax-top-level-await@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" - integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-syntax-unicode-sets-regex@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz#d49a3b3e6b52e5be6740022317580234a6a47357" - integrity sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - -"@babel/plugin-transform-arrow-functions@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz#e5ba566d0c58a5b2ba2a8b795450641950b71958" - integrity sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-async-generator-functions@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.5.tgz#7336356d23380eda9a56314974f053a020dab0c3" - integrity sha512-gGOEvFzm3fWoyD5uZq7vVTD57pPJ3PczPUD/xCFGjzBpUosnklmXyKnGQbbbGs1NPNPskFex0j93yKbHt0cHyg== - dependencies: - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-remap-async-to-generator" "^7.22.5" - "@babel/plugin-syntax-async-generators" "^7.8.4" - -"@babel/plugin-transform-async-to-generator@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz#c7a85f44e46f8952f6d27fe57c2ed3cc084c3775" - integrity sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ== - dependencies: - "@babel/helper-module-imports" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-remap-async-to-generator" "^7.22.5" - -"@babel/plugin-transform-block-scoped-functions@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz#27978075bfaeb9fa586d3cb63a3d30c1de580024" - integrity sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-block-scoping@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.5.tgz#8bfc793b3a4b2742c0983fadc1480d843ecea31b" - integrity sha512-EcACl1i5fSQ6bt+YGuU/XGCeZKStLmyVGytWkpyhCLeQVA0eu6Wtiw92V+I1T/hnezUv7j74dA/Ro69gWcU+hg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-class-properties@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz#97a56e31ad8c9dc06a0b3710ce7803d5a48cca77" - integrity sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-class-static-block@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.5.tgz#3e40c46f048403472d6f4183116d5e46b1bff5ba" - integrity sha512-SPToJ5eYZLxlnp1UzdARpOGeC2GbHvr9d/UV0EukuVx8atktg194oe+C5BqQ8jRTkgLRVOPYeXRSBg1IlMoVRA== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-class-static-block" "^7.14.5" - -"@babel/plugin-transform-classes@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.5.tgz#635d4e98da741fad814984639f4c0149eb0135e1" - integrity sha512-2edQhLfibpWpsVBx2n/GKOz6JdGQvLruZQfGr9l1qes2KQaWswjBzhQF7UDUZMNaMMQeYnQzxwOMPsbYF7wqPQ== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-compilation-targets" "^7.22.5" - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-function-name" "^7.22.5" - "@babel/helper-optimise-call-expression" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.5" - globals "^11.1.0" - -"@babel/plugin-transform-computed-properties@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz#cd1e994bf9f316bd1c2dafcd02063ec261bb3869" - integrity sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/template" "^7.22.5" - -"@babel/plugin-transform-destructuring@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.5.tgz#d3aca7438f6c26c78cdd0b0ba920a336001b27cc" - integrity sha512-GfqcFuGW8vnEqTUBM7UtPd5A4q797LTvvwKxXTgRsFjoqaJiEg9deBG6kWeQYkVEL569NpnmpC0Pkr/8BLKGnQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-dotall-regex@^7.22.5", "@babel/plugin-transform-dotall-regex@^7.4.4": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz#dbb4f0e45766eb544e193fb00e65a1dd3b2a4165" - integrity sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-duplicate-keys@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz#b6e6428d9416f5f0bba19c70d1e6e7e0b88ab285" - integrity sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-dynamic-import@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.5.tgz#d6908a8916a810468c4edff73b5b75bda6ad393e" - integrity sha512-0MC3ppTB1AMxd8fXjSrbPa7LT9hrImt+/fcj+Pg5YMD7UQyWp/02+JWpdnCymmsXwIx5Z+sYn1bwCn4ZJNvhqQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - -"@babel/plugin-transform-exponentiation-operator@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz#402432ad544a1f9a480da865fda26be653e48f6a" - integrity sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g== - dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-export-namespace-from@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.5.tgz#57c41cb1d0613d22f548fddd8b288eedb9973a5b" - integrity sha512-X4hhm7FRnPgd4nDA4b/5V280xCx6oL7Oob5+9qVS5C13Zq4bh1qq7LU0GgRU6b5dBWBvhGaXYVB4AcN6+ol6vg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - -"@babel/plugin-transform-for-of@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.5.tgz#ab1b8a200a8f990137aff9a084f8de4099ab173f" - integrity sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-function-name@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz#935189af68b01898e0d6d99658db6b164205c143" - integrity sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg== - dependencies: - "@babel/helper-compilation-targets" "^7.22.5" - "@babel/helper-function-name" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-json-strings@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.5.tgz#14b64352fdf7e1f737eed68de1a1468bd2a77ec0" - integrity sha512-DuCRB7fu8MyTLbEQd1ew3R85nx/88yMoqo2uPSjevMj3yoN7CDM8jkgrY0wmVxfJZyJ/B9fE1iq7EQppWQmR5A== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-json-strings" "^7.8.3" - -"@babel/plugin-transform-literals@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz#e9341f4b5a167952576e23db8d435849b1dd7920" - integrity sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-logical-assignment-operators@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.5.tgz#66ae5f068fd5a9a5dc570df16f56c2a8462a9d6c" - integrity sha512-MQQOUW1KL8X0cDWfbwYP+TbVbZm16QmQXJQ+vndPtH/BoO0lOKpVoEDMI7+PskYxH+IiE0tS8xZye0qr1lGzSA== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - -"@babel/plugin-transform-member-expression-literals@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz#4fcc9050eded981a468347dd374539ed3e058def" - integrity sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-modules-amd@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz#4e045f55dcf98afd00f85691a68fc0780704f526" - integrity sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ== - dependencies: - "@babel/helper-module-transforms" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-modules-commonjs@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.5.tgz#7d9875908d19b8c0536085af7b053fd5bd651bfa" - integrity sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA== - dependencies: - "@babel/helper-module-transforms" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-simple-access" "^7.22.5" - -"@babel/plugin-transform-modules-systemjs@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.5.tgz#18c31410b5e579a0092638f95c896c2a98a5d496" - integrity sha512-emtEpoaTMsOs6Tzz+nbmcePl6AKVtS1yC4YNAeMun9U8YCsgadPNxnOPQ8GhHFB2qdx+LZu9LgoC0Lthuu05DQ== - dependencies: - "@babel/helper-hoist-variables" "^7.22.5" - "@babel/helper-module-transforms" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-validator-identifier" "^7.22.5" - -"@babel/plugin-transform-modules-umd@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz#4694ae40a87b1745e3775b6a7fe96400315d4f98" - integrity sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ== - dependencies: - "@babel/helper-module-transforms" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-named-capturing-groups-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz#67fe18ee8ce02d57c855185e27e3dc959b2e991f" - integrity sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-new-target@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz#1b248acea54ce44ea06dfd37247ba089fcf9758d" - integrity sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-nullish-coalescing-operator@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.5.tgz#f8872c65776e0b552e0849d7596cddd416c3e381" - integrity sha512-6CF8g6z1dNYZ/VXok5uYkkBBICHZPiGEl7oDnAx2Mt1hlHVHOSIKWJaXHjQJA5VB43KZnXZDIexMchY4y2PGdA== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - -"@babel/plugin-transform-numeric-separator@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.5.tgz#57226a2ed9e512b9b446517ab6fa2d17abb83f58" - integrity sha512-NbslED1/6M+sXiwwtcAB/nieypGw02Ejf4KtDeMkCEpP6gWFMX1wI9WKYua+4oBneCCEmulOkRpwywypVZzs/g== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - -"@babel/plugin-transform-object-rest-spread@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.5.tgz#9686dc3447df4753b0b2a2fae7e8bc33cdc1f2e1" - integrity sha512-Kk3lyDmEslH9DnvCDA1s1kkd3YWQITiBOHngOtDL9Pt6BZjzqb6hiOlb8VfjiiQJ2unmegBqZu0rx5RxJb5vmQ== - dependencies: - "@babel/compat-data" "^7.22.5" - "@babel/helper-compilation-targets" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.22.5" - -"@babel/plugin-transform-object-super@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz#794a8d2fcb5d0835af722173c1a9d704f44e218c" - integrity sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.5" - -"@babel/plugin-transform-optional-catch-binding@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.5.tgz#842080be3076703be0eaf32ead6ac8174edee333" - integrity sha512-pH8orJahy+hzZje5b8e2QIlBWQvGpelS76C63Z+jhZKsmzfNaPQ+LaW6dcJ9bxTpo1mtXbgHwy765Ro3jftmUg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - -"@babel/plugin-transform-optional-chaining@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.5.tgz#1003762b9c14295501beb41be72426736bedd1e0" - integrity sha512-AconbMKOMkyG+xCng2JogMCDcqW8wedQAqpVIL4cOSescZ7+iW8utC6YDZLMCSUIReEA733gzRSaOSXMAt/4WQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - -"@babel/plugin-transform-parameters@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.5.tgz#c3542dd3c39b42c8069936e48717a8d179d63a18" - integrity sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-private-methods@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz#21c8af791f76674420a147ae62e9935d790f8722" - integrity sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-private-property-in-object@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.5.tgz#07a77f28cbb251546a43d175a1dda4cf3ef83e32" - integrity sha512-/9xnaTTJcVoBtSSmrVyhtSvO3kbqS2ODoh2juEU72c3aYonNF0OMGiaz2gjukyKM2wBBYJP38S4JiE0Wfb5VMQ== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-create-class-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" - -"@babel/plugin-transform-property-literals@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz#b5ddabd73a4f7f26cd0e20f5db48290b88732766" - integrity sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-regenerator@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.5.tgz#cd8a68b228a5f75fa01420e8cc2fc400f0fc32aa" - integrity sha512-rR7KePOE7gfEtNTh9Qw+iO3Q/e4DEsoQ+hdvM6QUDH7JRJ5qxq5AA52ZzBWbI5i9lfNuvySgOGP8ZN7LAmaiPw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - regenerator-transform "^0.15.1" - -"@babel/plugin-transform-reserved-words@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz#832cd35b81c287c4bcd09ce03e22199641f964fb" - integrity sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-shorthand-properties@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz#6e277654be82b5559fc4b9f58088507c24f0c624" - integrity sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-spread@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz#6487fd29f229c95e284ba6c98d65eafb893fea6b" - integrity sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - -"@babel/plugin-transform-sticky-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz#295aba1595bfc8197abd02eae5fc288c0deb26aa" - integrity sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-template-literals@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz#8f38cf291e5f7a8e60e9f733193f0bcc10909bff" - integrity sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-typeof-symbol@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz#5e2ba478da4b603af8673ff7c54f75a97b716b34" - integrity sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-unicode-escapes@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.5.tgz#ce0c248522b1cb22c7c992d88301a5ead70e806c" - integrity sha512-biEmVg1IYB/raUO5wT1tgfacCef15Fbzhkx493D3urBI++6hpJ+RFG4SrWMn0NEZLfvilqKf3QDrRVZHo08FYg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-unicode-property-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz#098898f74d5c1e86660dc112057b2d11227f1c81" - integrity sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-unicode-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz#ce7e7bb3ef208c4ff67e02a22816656256d7a183" - integrity sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-unicode-sets-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz#77788060e511b708ffc7d42fdfbc5b37c3004e91" - integrity sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/preset-env@^7.11.0": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.22.5.tgz#3da66078b181f3d62512c51cf7014392c511504e" - integrity sha512-fj06hw89dpiZzGZtxn+QybifF07nNiZjZ7sazs2aVDcysAZVGjW7+7iFYxg6GLNM47R/thYfLdrXc+2f11Vi9A== - dependencies: - "@babel/compat-data" "^7.22.5" - "@babel/helper-compilation-targets" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-validator-option" "^7.22.5" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.22.5" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.22.5" - "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" - "@babel/plugin-syntax-async-generators" "^7.8.4" - "@babel/plugin-syntax-class-properties" "^7.12.13" - "@babel/plugin-syntax-class-static-block" "^7.14.5" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - "@babel/plugin-syntax-import-assertions" "^7.22.5" - "@babel/plugin-syntax-import-attributes" "^7.22.5" - "@babel/plugin-syntax-import-meta" "^7.10.4" - "@babel/plugin-syntax-json-strings" "^7.8.3" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" - "@babel/plugin-syntax-top-level-await" "^7.14.5" - "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" - "@babel/plugin-transform-arrow-functions" "^7.22.5" - "@babel/plugin-transform-async-generator-functions" "^7.22.5" - "@babel/plugin-transform-async-to-generator" "^7.22.5" - "@babel/plugin-transform-block-scoped-functions" "^7.22.5" - "@babel/plugin-transform-block-scoping" "^7.22.5" - "@babel/plugin-transform-class-properties" "^7.22.5" - "@babel/plugin-transform-class-static-block" "^7.22.5" - "@babel/plugin-transform-classes" "^7.22.5" - "@babel/plugin-transform-computed-properties" "^7.22.5" - "@babel/plugin-transform-destructuring" "^7.22.5" - "@babel/plugin-transform-dotall-regex" "^7.22.5" - "@babel/plugin-transform-duplicate-keys" "^7.22.5" - "@babel/plugin-transform-dynamic-import" "^7.22.5" - "@babel/plugin-transform-exponentiation-operator" "^7.22.5" - "@babel/plugin-transform-export-namespace-from" "^7.22.5" - "@babel/plugin-transform-for-of" "^7.22.5" - "@babel/plugin-transform-function-name" "^7.22.5" - "@babel/plugin-transform-json-strings" "^7.22.5" - "@babel/plugin-transform-literals" "^7.22.5" - "@babel/plugin-transform-logical-assignment-operators" "^7.22.5" - "@babel/plugin-transform-member-expression-literals" "^7.22.5" - "@babel/plugin-transform-modules-amd" "^7.22.5" - "@babel/plugin-transform-modules-commonjs" "^7.22.5" - "@babel/plugin-transform-modules-systemjs" "^7.22.5" - "@babel/plugin-transform-modules-umd" "^7.22.5" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.22.5" - "@babel/plugin-transform-new-target" "^7.22.5" - "@babel/plugin-transform-nullish-coalescing-operator" "^7.22.5" - "@babel/plugin-transform-numeric-separator" "^7.22.5" - "@babel/plugin-transform-object-rest-spread" "^7.22.5" - "@babel/plugin-transform-object-super" "^7.22.5" - "@babel/plugin-transform-optional-catch-binding" "^7.22.5" - "@babel/plugin-transform-optional-chaining" "^7.22.5" - "@babel/plugin-transform-parameters" "^7.22.5" - "@babel/plugin-transform-private-methods" "^7.22.5" - "@babel/plugin-transform-private-property-in-object" "^7.22.5" - "@babel/plugin-transform-property-literals" "^7.22.5" - "@babel/plugin-transform-regenerator" "^7.22.5" - "@babel/plugin-transform-reserved-words" "^7.22.5" - "@babel/plugin-transform-shorthand-properties" "^7.22.5" - "@babel/plugin-transform-spread" "^7.22.5" - "@babel/plugin-transform-sticky-regex" "^7.22.5" - "@babel/plugin-transform-template-literals" "^7.22.5" - "@babel/plugin-transform-typeof-symbol" "^7.22.5" - "@babel/plugin-transform-unicode-escapes" "^7.22.5" - "@babel/plugin-transform-unicode-property-regex" "^7.22.5" - "@babel/plugin-transform-unicode-regex" "^7.22.5" - "@babel/plugin-transform-unicode-sets-regex" "^7.22.5" - "@babel/preset-modules" "^0.1.5" - "@babel/types" "^7.22.5" - babel-plugin-polyfill-corejs2 "^0.4.3" - babel-plugin-polyfill-corejs3 "^0.8.1" - babel-plugin-polyfill-regenerator "^0.5.0" - core-js-compat "^3.30.2" - semver "^6.3.0" - -"@babel/preset-modules@^0.1.5": - version "0.1.5" - resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.5.tgz#ef939d6e7f268827e1841638dc6ff95515e115d9" - integrity sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" - "@babel/plugin-transform-dotall-regex" "^7.4.4" - "@babel/types" "^7.4.4" - esutils "^2.0.2" - -"@babel/regjsgen@^0.8.0": - version "0.8.0" - resolved "https://registry.yarnpkg.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310" - integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== - -"@babel/runtime@^7.20.7", "@babel/runtime@^7.4.4", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4": +"@babel/runtime@^7.4.4": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.5.tgz#8564dd588182ce0047d55d7a75e93921107b57ec" integrity sha512-ecjvYlnAaZ/KVneE/OdKYBYfgXV3Ptu6zQWmgEF7vwKhQnvVS6bjMD2XYgj+SNvQ1GfK/pjgokfPkC/2CO8CuA== dependencies: regenerator-runtime "^0.13.11" -"@babel/template@^7.22.5", "@babel/template@^7.3.3": +"@babel/template@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.5.tgz#0c8c4d944509875849bd0344ff0050756eefc6ec" integrity sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw== @@ -1107,22 +180,6 @@ debug "^4.1.0" globals "^11.1.0" -"@babel/traverse@^7.1.0", "@babel/traverse@^7.11.5", "@babel/traverse@^7.22.5", "@babel/traverse@^7.7.0": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.22.5.tgz#44bd276690db6f4940fdb84e1cb4abd2f729ccd1" - integrity sha512-7DuIjPgERaNo6r+PZwItpjCZEa5vyw4eJGufeLxrPdBXBoLcCJCIasvK6pK/9DVNrLZTLFhUGqaC6X/PA007TQ== - dependencies: - "@babel/code-frame" "^7.22.5" - "@babel/generator" "^7.22.5" - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-function-name" "^7.22.5" - "@babel/helper-hoist-variables" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.5" - "@babel/parser" "^7.22.5" - "@babel/types" "^7.22.5" - debug "^4.1.0" - globals "^11.1.0" - "@babel/types@7.17.0": version "7.17.0" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.17.0.tgz#a826e368bccb6b3d84acd76acad5c0d87342390b" @@ -1131,7 +188,7 @@ "@babel/helper-validator-identifier" "^7.16.7" to-fast-properties "^2.0.0" -"@babel/types@^7.0.0", "@babel/types@^7.17.0", "@babel/types@^7.20.7", "@babel/types@^7.22.5", "@babel/types@^7.3.3", "@babel/types@^7.4.4", "@babel/types@^7.7.0": +"@babel/types@^7.17.0", "@babel/types@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.22.5.tgz#cd93eeaab025880a3a47ec881f4b096a5b786fbe" integrity sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA== @@ -1140,11 +197,6 @@ "@babel/helper-validator-identifier" "^7.22.5" to-fast-properties "^2.0.0" -"@bcoe/v8-coverage@^0.2.3": - version "0.2.3" - resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" - integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== - "@chainsafe/as-sha256@^0.3.1": version "0.3.1" resolved "https://registry.yarnpkg.com/@chainsafe/as-sha256/-/as-sha256-0.3.1.tgz#3639df0e1435cab03f4d9870cc3ac079e57a6fc9" @@ -1181,14 +233,6 @@ "@chainsafe/persistent-merkle-tree" "^0.4.2" case "^1.6.3" -"@cnakazawa/watch@^1.0.3": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.4.tgz#f864ae85004d0fcab6f50be9141c4da368d1656a" - integrity sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ== - dependencies: - exec-sh "^0.3.2" - minimist "^1.2.0" - "@cspotcode/source-map-support@^0.8.0": version "0.8.1" resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" @@ -1216,11 +260,6 @@ dependencies: "@nomiclabs/hardhat-truffle5" "^2.0.0" -"@ensdomains/buffer@^0.1.1": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@ensdomains/buffer/-/buffer-0.1.1.tgz#6c275ba7e457e935405b67876f1f0d980c8baa63" - integrity sha512-92SfSiNS8XorgU7OUBHo/i1ZU7JV7iz/6bKuLPNVsMxV79/eI7fJR6jfJJc40zAHjs3ha+Xo965Idomlq3rqnw== - "@ensdomains/ens-contracts@0.0.11": version "0.0.11" resolved "https://registry.yarnpkg.com/@ensdomains/ens-contracts/-/ens-contracts-0.0.11.tgz#a1cd87af8c454b694acba5be1a44c1b20656a9be" @@ -1231,26 +270,6 @@ "@openzeppelin/contracts" "^4.1.0" dns-packet "^5.3.0" -"@ensdomains/ens-contracts@0.0.20": - version "0.0.20" - resolved "https://registry.yarnpkg.com/@ensdomains/ens-contracts/-/ens-contracts-0.0.20.tgz#346eac70d666a7864142287ce1759b0f44bd8a5e" - integrity sha512-lAHQBVj2WtgbchcrE8ZuFI6DFq+O33wkLAGqsO2gcnn0EUJb65OJIdTqUfvfULKGJjkB2pyHfS/RgMSIW6h1Pw== - dependencies: - "@ensdomains/buffer" "^0.1.1" - "@ensdomains/solsha1" "0.0.3" - "@openzeppelin/contracts" "^4.1.0" - dns-packet "^5.3.0" - -"@ensdomains/ens-contracts@^0.0.15": - version "0.0.15" - resolved "https://registry.yarnpkg.com/@ensdomains/ens-contracts/-/ens-contracts-0.0.15.tgz#f305e863d360cfdf6ccfba44981635ac211c114a" - integrity sha512-fOmGylPbsHWjhD3iXz1pyi5VuyW25ahbjjUIjaKwC5MBULJYJDFb2sHlK8P4bxVep2pTGfV3XUhdFVMiEE4LLQ== - dependencies: - "@ensdomains/buffer" "^0.0.13" - "@ensdomains/solsha1" "0.0.3" - "@openzeppelin/contracts" "^4.1.0" - dns-packet "^5.3.0" - "@ensdomains/ens@0.4.5": version "0.4.5" resolved "https://registry.yarnpkg.com/@ensdomains/ens/-/ens-0.4.5.tgz#e0aebc005afdc066447c6e22feb4eda89a5edbfc" @@ -1288,11 +307,6 @@ dependencies: hash-test-vectors "^1.3.2" -"@esbuild/linux-loong64@0.14.54": - version "0.14.54" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.14.54.tgz#de2a4be678bd4d0d1ffbb86e6de779cde5999028" - integrity sha512-bZBrLAIX1kpWelV0XemxBZllyRmM6vgFQQG2GdNb+r3Fkp0FOh1NJSvekXDs7jq70k4euu1cryLMfU+mTXlEpw== - "@eslint-community/eslint-utils@^4.2.0": version "4.4.0" resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" @@ -1349,21 +363,6 @@ "@ethereumjs/common" "^2.5.0" ethereumjs-util "^7.1.2" -"@ethersproject/abi@5.0.7": - version "5.0.7" - resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.0.7.tgz#79e52452bd3ca2956d0e1c964207a58ad1a0ee7b" - integrity sha512-Cqktk+hSIckwP/W8O47Eef60VwmoSC/L3lY0+dIBhQPCNn9E4V7rwmm2aFrNRRDJfFlGuZ1khkQUOc3oBX+niw== - dependencies: - "@ethersproject/address" "^5.0.4" - "@ethersproject/bignumber" "^5.0.7" - "@ethersproject/bytes" "^5.0.4" - "@ethersproject/constants" "^5.0.4" - "@ethersproject/hash" "^5.0.4" - "@ethersproject/keccak256" "^5.0.3" - "@ethersproject/logger" "^5.0.5" - "@ethersproject/properties" "^5.0.3" - "@ethersproject/strings" "^5.0.4" - "@ethersproject/abi@5.7.0", "@ethersproject/abi@^5.0.0-beta.146", "@ethersproject/abi@^5.0.9", "@ethersproject/abi@^5.1.2", "@ethersproject/abi@^5.6.3", "@ethersproject/abi@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.7.0.tgz#b3f3e045bbbeed1af3947335c247ad625a44e449" @@ -1392,7 +391,7 @@ "@ethersproject/transactions" "^5.7.0" "@ethersproject/web" "^5.7.0" -"@ethersproject/abstract-signer@5.7.0", "@ethersproject/abstract-signer@^5.5.0", "@ethersproject/abstract-signer@^5.7.0": +"@ethersproject/abstract-signer@5.7.0", "@ethersproject/abstract-signer@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz#13f4f32117868452191a4649723cb086d2b596b2" integrity sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ== @@ -1403,7 +402,7 @@ "@ethersproject/logger" "^5.7.0" "@ethersproject/properties" "^5.7.0" -"@ethersproject/address@5.7.0", "@ethersproject/address@^5.0.2", "@ethersproject/address@^5.0.4", "@ethersproject/address@^5.7.0": +"@ethersproject/address@5.7.0", "@ethersproject/address@^5.0.2", "@ethersproject/address@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.7.0.tgz#19b56c4d74a3b0a46bfdbb6cfcc0a153fc697f37" integrity sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA== @@ -1429,7 +428,7 @@ "@ethersproject/bytes" "^5.7.0" "@ethersproject/properties" "^5.7.0" -"@ethersproject/bignumber@5.7.0", "@ethersproject/bignumber@^5.0.7", "@ethersproject/bignumber@^5.6.0", "@ethersproject/bignumber@^5.7.0": +"@ethersproject/bignumber@5.7.0", "@ethersproject/bignumber@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.7.0.tgz#e2f03837f268ba655ffba03a57853e18a18dc9c2" integrity sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw== @@ -1438,21 +437,21 @@ "@ethersproject/logger" "^5.7.0" bn.js "^5.2.1" -"@ethersproject/bytes@5.7.0", "@ethersproject/bytes@^5.0.4", "@ethersproject/bytes@^5.7.0": +"@ethersproject/bytes@5.7.0", "@ethersproject/bytes@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.7.0.tgz#a00f6ea8d7e7534d6d87f47188af1148d71f155d" integrity sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A== dependencies: "@ethersproject/logger" "^5.7.0" -"@ethersproject/constants@5.7.0", "@ethersproject/constants@^5.0.4", "@ethersproject/constants@^5.6.0", "@ethersproject/constants@^5.7.0": +"@ethersproject/constants@5.7.0", "@ethersproject/constants@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.7.0.tgz#df80a9705a7e08984161f09014ea012d1c75295e" integrity sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA== dependencies: "@ethersproject/bignumber" "^5.7.0" -"@ethersproject/contracts@5.7.0", "@ethersproject/contracts@^5.5.0", "@ethersproject/contracts@^5.7.0": +"@ethersproject/contracts@5.7.0", "@ethersproject/contracts@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.7.0.tgz#c305e775abd07e48aa590e1a877ed5c316f8bd1e" integrity sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg== @@ -1468,7 +467,7 @@ "@ethersproject/properties" "^5.7.0" "@ethersproject/transactions" "^5.7.0" -"@ethersproject/hash@5.7.0", "@ethersproject/hash@^5.0.4", "@ethersproject/hash@^5.7.0": +"@ethersproject/hash@5.7.0", "@ethersproject/hash@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.7.0.tgz#eb7aca84a588508369562e16e514b539ba5240a7" integrity sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g== @@ -1520,7 +519,7 @@ aes-js "3.0.0" scrypt-js "3.0.1" -"@ethersproject/keccak256@5.7.0", "@ethersproject/keccak256@^5.0.3", "@ethersproject/keccak256@^5.7.0": +"@ethersproject/keccak256@5.7.0", "@ethersproject/keccak256@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.7.0.tgz#3186350c6e1cd6aba7940384ec7d6d9db01f335a" integrity sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg== @@ -1528,7 +527,7 @@ "@ethersproject/bytes" "^5.7.0" js-sha3 "0.8.0" -"@ethersproject/logger@5.7.0", "@ethersproject/logger@^5.0.5", "@ethersproject/logger@^5.7.0": +"@ethersproject/logger@5.7.0", "@ethersproject/logger@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.7.0.tgz#6ce9ae168e74fecf287be17062b590852c311892" integrity sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig== @@ -1548,14 +547,14 @@ "@ethersproject/bytes" "^5.7.0" "@ethersproject/sha2" "^5.7.0" -"@ethersproject/properties@5.7.0", "@ethersproject/properties@^5.0.3", "@ethersproject/properties@^5.7.0": +"@ethersproject/properties@5.7.0", "@ethersproject/properties@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.7.0.tgz#a6e12cb0439b878aaf470f1902a176033067ed30" integrity sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw== dependencies: "@ethersproject/logger" "^5.7.0" -"@ethersproject/providers@5.7.2", "@ethersproject/providers@^5.5.0", "@ethersproject/providers@^5.7.1", "@ethersproject/providers@^5.7.2": +"@ethersproject/providers@5.7.2", "@ethersproject/providers@^5.7.1", "@ethersproject/providers@^5.7.2": version "5.7.2" resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.7.2.tgz#f8b1a4f275d7ce58cf0a2eec222269a08beb18cb" integrity sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg== @@ -1630,7 +629,7 @@ "@ethersproject/sha2" "^5.7.0" "@ethersproject/strings" "^5.7.0" -"@ethersproject/strings@5.7.0", "@ethersproject/strings@^5.0.4", "@ethersproject/strings@^5.7.0": +"@ethersproject/strings@5.7.0", "@ethersproject/strings@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.7.0.tgz#54c9d2a7c57ae8f1205c88a9d3a56471e14d5ed2" integrity sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg== @@ -1663,7 +662,7 @@ "@ethersproject/constants" "^5.7.0" "@ethersproject/logger" "^5.7.0" -"@ethersproject/wallet@5.7.0", "@ethersproject/wallet@^5.6.0", "@ethersproject/wallet@^5.7.0": +"@ethersproject/wallet@5.7.0", "@ethersproject/wallet@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.7.0.tgz#4e5d0790d96fe21d61d38fb40324e6c7ef350b2d" integrity sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA== @@ -1706,55 +705,6 @@ "@ethersproject/properties" "^5.7.0" "@ethersproject/strings" "^5.7.0" -"@float-capital/float-subgraph-uncrashable@^0.0.0-alpha.4": - version "0.0.0-internal-testing.5" - resolved "https://registry.yarnpkg.com/@float-capital/float-subgraph-uncrashable/-/float-subgraph-uncrashable-0.0.0-internal-testing.5.tgz#060f98440f6e410812766c5b040952d2d02e2b73" - integrity sha512-yZ0H5e3EpAYKokX/AbtplzlvSxEJY7ZfpvQyDzyODkks0hakAAlDG6fQu1SlDJMWorY7bbq1j7fCiFeTWci6TA== - dependencies: - "@rescript/std" "9.0.0" - graphql "^16.6.0" - graphql-import-node "^0.0.5" - js-yaml "^4.1.0" - -"@graphprotocol/graph-cli@^0.51.0": - version "0.51.1" - resolved "https://registry.yarnpkg.com/@graphprotocol/graph-cli/-/graph-cli-0.51.1.tgz#252a53c9cf235efb8a7f4cb16b2bc053b00e99f1" - integrity sha512-6W1aphU/0Uq1ju8e4Ya5plmXUcjCR2N30wjDrf5Cn6QjHsk9VUqMt4x3+D3DHGSVvXve2+ThiEU2s2xktP3PTw== - dependencies: - "@float-capital/float-subgraph-uncrashable" "^0.0.0-alpha.4" - "@oclif/core" "2.8.4" - "@whatwg-node/fetch" "^0.8.4" - assemblyscript "0.19.23" - binary-install-raw "0.0.13" - chalk "3.0.0" - chokidar "3.5.3" - debug "4.3.4" - docker-compose "0.23.19" - dockerode "2.5.8" - fs-extra "9.1.0" - glob "9.3.5" - gluegun "5.1.2" - graphql "15.5.0" - immutable "4.2.1" - ipfs-http-client "55.0.0" - jayson "4.0.0" - js-yaml "3.14.1" - prettier "1.19.1" - request "2.88.2" - semver "7.4.0" - sync-request "6.1.0" - tmp-promise "3.0.3" - web3-eth-abi "1.7.0" - which "2.0.2" - yaml "1.10.2" - -"@graphprotocol/graph-ts@^0.31.0": - version "0.31.0" - resolved "https://registry.yarnpkg.com/@graphprotocol/graph-ts/-/graph-ts-0.31.0.tgz#730668c0369828b31bef81e8d9bc66b9b48e3480" - integrity sha512-xreRVM6ho2BtolyOh2flDkNoGZximybnzUnF53zJVp0+Ed0KnAlO1/KOCUYw06euVI9tk0c9nA2Z/D5SIQV2Rg== - dependencies: - assemblyscript "0.19.10" - "@humanwhocodes/config-array@^0.11.10": version "0.11.10" resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.10.tgz#5a3ffe32cc9306365fb3fd572596cd602d5e12d2" @@ -1782,22 +732,6 @@ cborg "^1.5.4" multiformats "^9.5.4" -"@ipld/dag-cbor@^7.0.0": - version "7.0.3" - resolved "https://registry.yarnpkg.com/@ipld/dag-cbor/-/dag-cbor-7.0.3.tgz#aa31b28afb11a807c3d627828a344e5521ac4a1e" - integrity sha512-1VVh2huHsuohdXC1bGJNE8WR72slZ9XE2T3wbBBq31dm7ZBatmKLLxrB+XAqafxfRFjv08RZmj/W/ZqaM13AuA== - dependencies: - cborg "^1.6.0" - multiformats "^9.5.4" - -"@ipld/dag-json@^8.0.1": - version "8.0.11" - resolved "https://registry.yarnpkg.com/@ipld/dag-json/-/dag-json-8.0.11.tgz#8d30cc2dfacb0aef04d327465d3df91e79e8b6ce" - integrity sha512-Pea7JXeYHTWXRTIhBqBlhw7G53PJ7yta3G/sizGEZyzdeEwhZRr0od5IQ0r2ZxOt1Do+2czddjeEPp+YTxDwCA== - dependencies: - cborg "^1.5.4" - multiformats "^9.5.4" - "@ipld/dag-pb@^2.1.3": version "2.1.18" resolved "https://registry.yarnpkg.com/@ipld/dag-pb/-/dag-pb-2.1.18.tgz#12d63e21580e87c75fd1a2c62e375a78e355c16f" @@ -1817,217 +751,7 @@ wrap-ansi "^8.1.0" wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" -"@istanbuljs/load-nyc-config@^1.0.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" - integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== - dependencies: - camelcase "^5.3.1" - find-up "^4.1.0" - get-package-type "^0.1.0" - js-yaml "^3.13.1" - resolve-from "^5.0.0" - -"@istanbuljs/schema@^0.1.2": - version "0.1.3" - resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" - integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== - -"@jest/console@^25.5.0": - version "25.5.0" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-25.5.0.tgz#770800799d510f37329c508a9edd0b7b447d9abb" - integrity sha512-T48kZa6MK1Y6k4b89sexwmSF4YLeZS/Udqg3Jj3jG/cHH+N/sLFCEoXEDMOKugJQ9FxPN1osxIknvKkxt6MKyw== - dependencies: - "@jest/types" "^25.5.0" - chalk "^3.0.0" - jest-message-util "^25.5.0" - jest-util "^25.5.0" - slash "^3.0.0" - -"@jest/core@^25.5.4": - version "25.5.4" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-25.5.4.tgz#3ef7412f7339210f003cdf36646bbca786efe7b4" - integrity sha512-3uSo7laYxF00Dg/DMgbn4xMJKmDdWvZnf89n8Xj/5/AeQ2dOQmn6b6Hkj/MleyzZWXpwv+WSdYWl4cLsy2JsoA== - dependencies: - "@jest/console" "^25.5.0" - "@jest/reporters" "^25.5.1" - "@jest/test-result" "^25.5.0" - "@jest/transform" "^25.5.1" - "@jest/types" "^25.5.0" - ansi-escapes "^4.2.1" - chalk "^3.0.0" - exit "^0.1.2" - graceful-fs "^4.2.4" - jest-changed-files "^25.5.0" - jest-config "^25.5.4" - jest-haste-map "^25.5.1" - jest-message-util "^25.5.0" - jest-regex-util "^25.2.6" - jest-resolve "^25.5.1" - jest-resolve-dependencies "^25.5.4" - jest-runner "^25.5.4" - jest-runtime "^25.5.4" - jest-snapshot "^25.5.1" - jest-util "^25.5.0" - jest-validate "^25.5.0" - jest-watcher "^25.5.0" - micromatch "^4.0.2" - p-each-series "^2.1.0" - realpath-native "^2.0.0" - rimraf "^3.0.0" - slash "^3.0.0" - strip-ansi "^6.0.0" - -"@jest/environment@^25.5.0": - version "25.5.0" - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-25.5.0.tgz#aa33b0c21a716c65686638e7ef816c0e3a0c7b37" - integrity sha512-U2VXPEqL07E/V7pSZMSQCvV5Ea4lqOlT+0ZFijl/i316cRMHvZ4qC+jBdryd+lmRetjQo0YIQr6cVPNxxK87mA== - dependencies: - "@jest/fake-timers" "^25.5.0" - "@jest/types" "^25.5.0" - jest-mock "^25.5.0" - -"@jest/expect-utils@^29.6.1": - version "29.6.1" - resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.6.1.tgz#ab83b27a15cdd203fe5f68230ea22767d5c3acc5" - integrity sha512-o319vIf5pEMx0LmzSxxkYYxo4wrRLKHq9dP1yJU7FoPTB0LfAKSz8SWD6D/6U3v/O52t9cF5t+MeJiRsfk7zMw== - dependencies: - jest-get-type "^29.4.3" - -"@jest/fake-timers@^25.5.0": - version "25.5.0" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-25.5.0.tgz#46352e00533c024c90c2bc2ad9f2959f7f114185" - integrity sha512-9y2+uGnESw/oyOI3eww9yaxdZyHq7XvprfP/eeoCsjqKYts2yRlsHS/SgjPDV8FyMfn2nbMy8YzUk6nyvdLOpQ== - dependencies: - "@jest/types" "^25.5.0" - jest-message-util "^25.5.0" - jest-mock "^25.5.0" - jest-util "^25.5.0" - lolex "^5.0.0" - -"@jest/globals@^25.5.2": - version "25.5.2" - resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-25.5.2.tgz#5e45e9de8d228716af3257eeb3991cc2e162ca88" - integrity sha512-AgAS/Ny7Q2RCIj5kZ+0MuKM1wbF0WMLxbCVl/GOMoCNbODRdJ541IxJ98xnZdVSZXivKpJlNPIWa3QmY0l4CXA== - dependencies: - "@jest/environment" "^25.5.0" - "@jest/types" "^25.5.0" - expect "^25.5.0" - -"@jest/reporters@^25.5.1": - version "25.5.1" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-25.5.1.tgz#cb686bcc680f664c2dbaf7ed873e93aa6811538b" - integrity sha512-3jbd8pPDTuhYJ7vqiHXbSwTJQNavczPs+f1kRprRDxETeE3u6srJ+f0NPuwvOmk+lmunZzPkYWIFZDLHQPkviw== - dependencies: - "@bcoe/v8-coverage" "^0.2.3" - "@jest/console" "^25.5.0" - "@jest/test-result" "^25.5.0" - "@jest/transform" "^25.5.1" - "@jest/types" "^25.5.0" - chalk "^3.0.0" - collect-v8-coverage "^1.0.0" - exit "^0.1.2" - glob "^7.1.2" - graceful-fs "^4.2.4" - istanbul-lib-coverage "^3.0.0" - istanbul-lib-instrument "^4.0.0" - istanbul-lib-report "^3.0.0" - istanbul-lib-source-maps "^4.0.0" - istanbul-reports "^3.0.2" - jest-haste-map "^25.5.1" - jest-resolve "^25.5.1" - jest-util "^25.5.0" - jest-worker "^25.5.0" - slash "^3.0.0" - source-map "^0.6.0" - string-length "^3.1.0" - terminal-link "^2.0.0" - v8-to-istanbul "^4.1.3" - optionalDependencies: - node-notifier "^6.0.0" - -"@jest/schemas@^29.6.0": - version "29.6.0" - resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.0.tgz#0f4cb2c8e3dca80c135507ba5635a4fd755b0040" - integrity sha512-rxLjXyJBTL4LQeJW3aKo0M/+GkCOXsO+8i9Iu7eDb6KwtP65ayoDsitrdPBtujxQ88k4wI2FNYfa6TOGwSn6cQ== - dependencies: - "@sinclair/typebox" "^0.27.8" - -"@jest/source-map@^25.5.0": - version "25.5.0" - resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-25.5.0.tgz#df5c20d6050aa292c2c6d3f0d2c7606af315bd1b" - integrity sha512-eIGx0xN12yVpMcPaVpjXPnn3N30QGJCJQSkEDUt9x1fI1Gdvb07Ml6K5iN2hG7NmMP6FDmtPEssE3z6doOYUwQ== - dependencies: - callsites "^3.0.0" - graceful-fs "^4.2.4" - source-map "^0.6.0" - -"@jest/test-result@^25.5.0": - version "25.5.0" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-25.5.0.tgz#139a043230cdeffe9ba2d8341b27f2efc77ce87c" - integrity sha512-oV+hPJgXN7IQf/fHWkcS99y0smKLU2czLBJ9WA0jHITLst58HpQMtzSYxzaBvYc6U5U6jfoMthqsUlUlbRXs0A== - dependencies: - "@jest/console" "^25.5.0" - "@jest/types" "^25.5.0" - "@types/istanbul-lib-coverage" "^2.0.0" - collect-v8-coverage "^1.0.0" - -"@jest/test-sequencer@^25.5.4": - version "25.5.4" - resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-25.5.4.tgz#9b4e685b36954c38d0f052e596d28161bdc8b737" - integrity sha512-pTJGEkSeg1EkCO2YWq6hbFvKNXk8ejqlxiOg1jBNLnWrgXOkdY6UmqZpwGFXNnRt9B8nO1uWMzLLZ4eCmhkPNA== - dependencies: - "@jest/test-result" "^25.5.0" - graceful-fs "^4.2.4" - jest-haste-map "^25.5.1" - jest-runner "^25.5.4" - jest-runtime "^25.5.4" - -"@jest/transform@^25.5.1": - version "25.5.1" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-25.5.1.tgz#0469ddc17699dd2bf985db55fa0fb9309f5c2db3" - integrity sha512-Y8CEoVwXb4QwA6Y/9uDkn0Xfz0finGkieuV0xkdF9UtZGJeLukD5nLkaVrVsODB1ojRWlaoD0AJZpVHCSnJEvg== - dependencies: - "@babel/core" "^7.1.0" - "@jest/types" "^25.5.0" - babel-plugin-istanbul "^6.0.0" - chalk "^3.0.0" - convert-source-map "^1.4.0" - fast-json-stable-stringify "^2.0.0" - graceful-fs "^4.2.4" - jest-haste-map "^25.5.1" - jest-regex-util "^25.2.6" - jest-util "^25.5.0" - micromatch "^4.0.2" - pirates "^4.0.1" - realpath-native "^2.0.0" - slash "^3.0.0" - source-map "^0.6.1" - write-file-atomic "^3.0.0" - -"@jest/types@^25.5.0": - version "25.5.0" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-25.5.0.tgz#4d6a4793f7b9599fc3680877b856a97dbccf2a9d" - integrity sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw== - dependencies: - "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^1.1.1" - "@types/yargs" "^15.0.0" - chalk "^3.0.0" - -"@jest/types@^29.6.1": - version "29.6.1" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.6.1.tgz#ae79080278acff0a6af5eb49d063385aaa897bf2" - integrity sha512-tPKQNMPuXgvdOn2/Lg9HNfUvjYVGolt04Hp03f5hAk878uwOLikN+JzeLY0HcVgKgFl9Hs3EIqpu3WX27XNhnw== - dependencies: - "@jest/schemas" "^29.6.0" - "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^3.0.0" - "@types/node" "*" - "@types/yargs" "^17.0.8" - chalk "^4.0.0" - -"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": +"@jridgewell/gen-mapping@^0.3.2": version "0.3.3" resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== @@ -2395,50 +1119,15 @@ ethers "^4.0.0-beta.1" source-map-support "^0.5.19" -"@oclif/core@2.8.4": - version "2.8.4" - resolved "https://registry.yarnpkg.com/@oclif/core/-/core-2.8.4.tgz#7b453be6d4cd060ff4990bc8e31824a1de308354" - integrity sha512-VlFDhoAJ1RDwcpDF46wAlciWTIryapMUViACttY9GwX6Ci6Lud1awe/pC3k4jad5472XshnPQV4bHAl4a/yxpA== - dependencies: - "@types/cli-progress" "^3.11.0" - ansi-escapes "^4.3.2" - ansi-styles "^4.3.0" - cardinal "^2.1.1" - chalk "^4.1.2" - clean-stack "^3.0.1" - cli-progress "^3.12.0" - debug "^4.3.4" - ejs "^3.1.8" - fs-extra "^9.1.0" - get-package-type "^0.1.0" - globby "^11.1.0" - hyperlinker "^1.0.0" - indent-string "^4.0.0" - is-wsl "^2.2.0" - js-yaml "^3.14.1" - natural-orderby "^2.0.3" - object-treeify "^1.1.33" - password-prompt "^1.1.2" - semver "^7.3.7" - string-width "^4.2.3" - strip-ansi "^6.0.1" - supports-color "^8.1.1" - supports-hyperlinks "^2.2.0" - ts-node "^10.9.1" - tslib "^2.5.0" - widest-line "^3.1.0" - wordwrap "^1.0.0" - wrap-ansi "^7.0.0" - "@openzeppelin/contracts-upgradeable@4.8.1": version "4.8.1" resolved "https://registry.yarnpkg.com/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-4.8.1.tgz#363f7dd08f25f8f77e16d374350c3d6b43340a7a" integrity sha512-1wTv+20lNiC0R07jyIAbHU7TNHKRwGiTGRfiNnA8jOWjKT98g5OgLpYWOi40Vgpk8SPLA9EvfJAbAeIyVn+7Bw== -"@openzeppelin/contracts-upgradeable@^4.8.2": - version "4.9.2" - resolved "https://registry.yarnpkg.com/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-4.9.2.tgz#a817c75688f8daede420052fbcb34e52482e769e" - integrity sha512-siviV3PZV/fHfPaoIC51rf1Jb6iElkYWnNYZ0leO23/ukXuvOyoC/ahy8jqiV7g+++9Nuo3n/rk5ajSN/+d/Sg== +"@openzeppelin/contracts-upgradeable@^4.9.3": + version "4.9.5" + resolved "https://registry.yarnpkg.com/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-4.9.5.tgz#572b5da102fc9be1d73f34968e0ca56765969812" + integrity sha512-f7L1//4sLlflAN7fVzJLoRedrf5Na3Oal5PZfIq55NFcVZ90EpV1q5xOvL4lFvg3MNICSDr2hH0JUBxwlxcoPg== "@openzeppelin/contracts@4.8.1": version "4.8.1" @@ -2450,10 +1139,10 @@ resolved "https://registry.yarnpkg.com/@openzeppelin/contracts/-/contracts-4.9.1.tgz#afa804d2c68398704b0175acc94d91a54f203645" integrity sha512-aLDTLu/If1qYIFW5g4ZibuQaUsFGWQPBq1mZKp/txaebUnGHDmmiBhRLY1tDNedN0m+fJtKZ1zAODS9Yk+V6uA== -"@openzeppelin/contracts@^4.8.2": - version "4.9.2" - resolved "https://registry.yarnpkg.com/@openzeppelin/contracts/-/contracts-4.9.2.tgz#1cb2d5e4d3360141a17dbc45094a8cad6aac16c1" - integrity sha512-mO+y6JaqXjWeMh9glYVzVu8HYPGknAAnWyxTRhGeckOruyXQMNnlcW6w/Dx9ftLeIQk6N+ZJFuVmTwF7lEIFrg== +"@openzeppelin/contracts@^4.9.3": + version "4.9.5" + resolved "https://registry.yarnpkg.com/@openzeppelin/contracts/-/contracts-4.9.5.tgz#1eed23d4844c861a1835b5d33507c1017fa98de8" + integrity sha512-ZK+W5mVhRppff9BE6YdR8CC52C8zAvsVAiWhEtQ5+oNxFE6h1WdeWo+FJSF8KKvtxxVYZ7MTP/5KoVpAU3aSWg== "@openzeppelin/defender-base-client@^1.46.0": version "1.46.0" @@ -2503,33 +1192,6 @@ proper-lockfile "^4.1.1" solidity-ast "^0.4.15" -"@peculiar/asn1-schema@^2.3.6": - version "2.3.6" - resolved "https://registry.yarnpkg.com/@peculiar/asn1-schema/-/asn1-schema-2.3.6.tgz#3dd3c2ade7f702a9a94dfb395c192f5fa5d6b922" - integrity sha512-izNRxPoaeJeg/AyH8hER6s+H7p4itk+03QCa4sbxI3lNdseQYCuxzgsuNK8bTXChtLTjpJz6NmXKA73qLa3rCA== - dependencies: - asn1js "^3.0.5" - pvtsutils "^1.3.2" - tslib "^2.4.0" - -"@peculiar/json-schema@^1.1.12": - version "1.1.12" - resolved "https://registry.yarnpkg.com/@peculiar/json-schema/-/json-schema-1.1.12.tgz#fe61e85259e3b5ba5ad566cb62ca75b3d3cd5339" - integrity sha512-coUfuoMeIB7B8/NMekxaDzLhaYmp0HZNPEjYRm9goRou8UZIC3z21s0sL9AWoCw4EG876QyO3kYrc61WNF9B/w== - dependencies: - tslib "^2.0.0" - -"@peculiar/webcrypto@^1.4.0": - version "1.4.3" - resolved "https://registry.yarnpkg.com/@peculiar/webcrypto/-/webcrypto-1.4.3.tgz#078b3e8f598e847b78683dc3ba65feb5029b93a7" - integrity sha512-VtaY4spKTdN5LjJ04im/d/joXuvLbQdgy5Z4DXF4MFZhQ+MTrejbNMkfZBp1Bs3O5+bFqnJgyGdPuZQflvIa5A== - dependencies: - "@peculiar/asn1-schema" "^2.3.6" - "@peculiar/json-schema" "^1.1.12" - pvtsutils "^1.3.2" - tslib "^2.5.0" - webcrypto-core "^1.7.7" - "@pkgjs/parseargs@^0.11.0": version "0.11.0" resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" @@ -2584,63 +1246,17 @@ integrity sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw== "@protobufjs/utf8@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570" - integrity sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw== - -"@rescript/std@9.0.0": - version "9.0.0" - resolved "https://registry.yarnpkg.com/@rescript/std/-/std-9.0.0.tgz#df53f3fa5911cb4e85bd66b92e9e58ddf3e4a7e1" - integrity sha512-zGzFsgtZ44mgL4Xef2gOy1hrRVdrs9mcxCOOKZrIPsmbZW14yTkaF591GXxpQvjXiHtgZ/iA9qLyWH6oSReIxQ== - -"@rollup/plugin-babel@^5.1.0": - version "5.3.1" - resolved "https://registry.yarnpkg.com/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz#04bc0608f4aa4b2e4b1aebf284344d0f68fda283" - integrity sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q== - dependencies: - "@babel/helper-module-imports" "^7.10.4" - "@rollup/pluginutils" "^3.1.0" - -"@rollup/plugin-commonjs@^11.0.0": - version "11.1.0" - resolved "https://registry.yarnpkg.com/@rollup/plugin-commonjs/-/plugin-commonjs-11.1.0.tgz#60636c7a722f54b41e419e1709df05c7234557ef" - integrity sha512-Ycr12N3ZPN96Fw2STurD21jMqzKwL9QuFhms3SD7KKRK7oaXUsBU9Zt0jL/rOPHiPYisI21/rXGO3jr9BnLHUA== - dependencies: - "@rollup/pluginutils" "^3.0.8" - commondir "^1.0.1" - estree-walker "^1.0.1" - glob "^7.1.2" - is-reference "^1.1.2" - magic-string "^0.25.2" - resolve "^1.11.0" + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570" + integrity sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw== -"@rollup/plugin-json@^4.0.0", "@rollup/plugin-json@^4.1.0": +"@rollup/plugin-json@^4.1.0": version "4.1.0" resolved "https://registry.yarnpkg.com/@rollup/plugin-json/-/plugin-json-4.1.0.tgz#54e09867ae6963c593844d8bd7a9c718294496f3" integrity sha512-yfLbTdNS6amI/2OpmbiBoW12vngr5NW2jCJVZSBEz+H5KfUJZ2M7sDjk0U6GOOdCWFVScShte29o9NezJ53TPw== dependencies: "@rollup/pluginutils" "^3.0.8" -"@rollup/plugin-node-resolve@^9.0.0": - version "9.0.0" - resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-9.0.0.tgz#39bd0034ce9126b39c1699695f440b4b7d2b62e6" - integrity sha512-gPz+utFHLRrd41WMP13Jq5mqqzHL3OXrfj3/MkSyB6UBIcuNt9j60GCbarzMzdf1VHFpOxfQh/ez7wyadLMqkg== - dependencies: - "@rollup/pluginutils" "^3.1.0" - "@types/resolve" "1.17.1" - builtin-modules "^3.1.0" - deepmerge "^4.2.2" - is-module "^1.0.0" - resolve "^1.17.0" - -"@rollup/plugin-replace@^2.2.1": - version "2.4.2" - resolved "https://registry.yarnpkg.com/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz#a2d539314fbc77c244858faa523012825068510a" - integrity sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg== - dependencies: - "@rollup/pluginutils" "^3.1.0" - magic-string "^0.25.7" - "@rollup/plugin-typescript@^8.3.1": version "8.5.0" resolved "https://registry.yarnpkg.com/@rollup/plugin-typescript/-/plugin-typescript-8.5.0.tgz#7ea11599a15b0a30fa7ea69ce3b791d41b862515" @@ -2649,7 +1265,7 @@ "@rollup/pluginutils" "^3.1.0" resolve "^1.17.0" -"@rollup/pluginutils@^3.0.8", "@rollup/pluginutils@^3.0.9", "@rollup/pluginutils@^3.1.0": +"@rollup/pluginutils@^3.0.8", "@rollup/pluginutils@^3.1.0": version "3.1.0" resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-3.1.0.tgz#706b4524ee6dc8b103b3c995533e5ad680c02b9b" integrity sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg== @@ -2748,46 +1364,11 @@ "@sentry/types" "5.30.0" tslib "^1.9.3" -"@sinclair/typebox@^0.27.8": - version "0.27.8" - resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" - integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== - "@sindresorhus/is@^4.0.0", "@sindresorhus/is@^4.6.0": version "4.6.0" resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.6.0.tgz#3c7c9c46e678feefe7a2e5bb609d3dbd665ffb3f" integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw== -"@sinonjs/commons@^1.7.0": - version "1.8.6" - resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.6.tgz#80c516a4dc264c2a69115e7578d62581ff455ed9" - integrity sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ== - dependencies: - type-detect "4.0.8" - -"@size-limit/esbuild@7.0.8": - version "7.0.8" - resolved "https://registry.yarnpkg.com/@size-limit/esbuild/-/esbuild-7.0.8.tgz#1dff3b41ab2c2b5b07ec61a124ecb19aa68661d0" - integrity sha512-AzCrxJJThDvHrBNoolebYVgXu46c6HuS3fOxoXr3V0YWNM0qz81z5F3j7RruzboZnls8ZgME4WrH6GM5rB9gtA== - dependencies: - esbuild "^0.14.18" - nanoid "^3.2.0" - -"@size-limit/file@7.0.8": - version "7.0.8" - resolved "https://registry.yarnpkg.com/@size-limit/file/-/file-7.0.8.tgz#05c43fa01bf164c2fba24e13f1695bf7e861e277" - integrity sha512-1KeFQuMXIXAH/iELqIX7x+YNYDFvzIvmxcp9PrdwEoSNL0dXdaDIo9WE/yz8xvOmUcKaLfqbWkL75DM0k91WHQ== - dependencies: - semver "7.3.5" - -"@size-limit/preset-small-lib@^7.0.8": - version "7.0.8" - resolved "https://registry.yarnpkg.com/@size-limit/preset-small-lib/-/preset-small-lib-7.0.8.tgz#e787fd1c5cddd51ff02a7a5bef34cbd13e17c2bf" - integrity sha512-CT8nIYA/c2CSD+X4rAUgwqYccQMahJ6rBnaZxvi3YKFdkXIbuGNXHNjHsYaFksgwG9P4UjG/unyO5L73f3zQBw== - dependencies: - "@size-limit/esbuild" "7.0.8" - "@size-limit/file" "7.0.8" - "@solidity-parser/parser@^0.14.0", "@solidity-parser/parser@^0.14.1": version "0.14.5" resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.14.5.tgz#87bc3cc7b068e08195c219c91cd8ddff5ef1a804" @@ -2905,13 +1486,6 @@ ethers "^4.0.32" web3 "1.10.0" -"@trufflesuite/bigint-buffer@1.1.10": - version "1.1.10" - resolved "https://registry.yarnpkg.com/@trufflesuite/bigint-buffer/-/bigint-buffer-1.1.10.tgz#a1d9ca22d3cad1a138b78baaf15543637a3e1692" - integrity sha512-pYIQC5EcMmID74t26GCC67946mgTJFiLXOT/BYozgrd4UEY2JHEGLhWi9cMiQCt5BSqFEvKkCHNnoj82SRjiEw== - dependencies: - node-gyp-build "4.4.0" - "@trufflesuite/chromafi@^3.0.0": version "3.0.0" resolved "https://registry.yarnpkg.com/@trufflesuite/chromafi/-/chromafi-3.0.0.tgz#f6956408c1af6a38a6ed1657783ce59504a1eb8b" @@ -2926,26 +1500,6 @@ strip-ansi "^4.0.0" strip-indent "^2.0.0" -"@trufflesuite/uws-js-unofficial@20.10.0-unofficial.2": - version "20.10.0-unofficial.2" - resolved "https://registry.yarnpkg.com/@trufflesuite/uws-js-unofficial/-/uws-js-unofficial-20.10.0-unofficial.2.tgz#7ed613ce3260cd5d1773a4d5787a2a106acd1a91" - integrity sha512-oQQlnS3oNeGsgS4K3KCSSavJgSb0W9D5ktZs4FacX9VbM7b+NlhjH96d6/G4fMrz+bc5MXRyco419on0X0dvRA== - dependencies: - ws "8.2.3" - optionalDependencies: - bufferutil "4.0.5" - utf-8-validate "5.0.7" - -"@ts-morph/common@~0.18.0": - version "0.18.1" - resolved "https://registry.yarnpkg.com/@ts-morph/common/-/common-0.18.1.tgz#ca40c3a62c3f9e17142e0af42633ad63efbae0ec" - integrity sha512-RVE+zSRICWRsfrkAw5qCAK+4ZH9kwEFv5h0+/YeHTLieWP7F4wWq4JsKFuNWG+fYh/KF+8rAtgdj5zb2mm+DVA== - dependencies: - fast-glob "^3.2.12" - minimatch "^5.1.0" - mkdirp "^1.0.4" - path-browserify "^1.0.1" - "@tsconfig/node10@^1.0.7": version "1.0.9" resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2" @@ -2981,39 +1535,6 @@ dependencies: fs-extra "^9.1.0" -"@types/babel__core@^7.1.7": - version "7.20.1" - resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.1.tgz#916ecea274b0c776fec721e333e55762d3a9614b" - integrity sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw== - dependencies: - "@babel/parser" "^7.20.7" - "@babel/types" "^7.20.7" - "@types/babel__generator" "*" - "@types/babel__template" "*" - "@types/babel__traverse" "*" - -"@types/babel__generator@*": - version "7.6.4" - resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.4.tgz#1f20ce4c5b1990b37900b63f050182d28c2439b7" - integrity sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg== - dependencies: - "@babel/types" "^7.0.0" - -"@types/babel__template@*": - version "7.4.1" - resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.1.tgz#3d1a48fd9d6c0edfd56f2ff578daed48f36c8969" - integrity sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g== - dependencies: - "@babel/parser" "^7.1.0" - "@babel/types" "^7.0.0" - -"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": - version "7.20.1" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.1.tgz#dd6f1d2411ae677dcb2db008c962598be31d6acf" - integrity sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg== - dependencies: - "@babel/types" "^7.20.7" - "@types/bn.js@^4.11.3": version "4.11.6" resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-4.11.6.tgz#c306c70d9358aaea33cd4eda092a742b9505967c" @@ -3050,13 +1571,6 @@ resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.5.tgz#ae69bcbb1bebb68c4ac0b11e9d8ed04526b3562b" integrity sha512-mEo1sAde+UCE6b2hxn332f1g1E8WfYRu6p5SvTKr2ZKC1f7gFJXk4h5PyGP9Dt6gCaG8y8XhwnXWC6Iy2cmBng== -"@types/cli-progress@^3.11.0": - version "3.11.0" - resolved "https://registry.yarnpkg.com/@types/cli-progress/-/cli-progress-3.11.0.tgz#ec79df99b26757c3d1c7170af8422e0fc95eef7e" - integrity sha512-XhXhBv1R/q2ahF3BM7qT5HLzJNlIL0wbcGyZVjqOTqAybAnsLisd7gy1UCyIqpL+5Iv6XhlSyzjLCnI2sIdbCg== - dependencies: - "@types/node" "*" - "@types/concat-stream@^1.6.0": version "1.6.1" resolved "https://registry.yarnpkg.com/@types/concat-stream/-/concat-stream-1.6.1.tgz#24bcfc101ecf68e886aaedce60dfd74b632a1b74" @@ -3064,23 +1578,6 @@ dependencies: "@types/node" "*" -"@types/connect@^3.4.33": - version "3.4.35" - resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.35.tgz#5fcf6ae445e4021d1fc2219a4873cc73a3bb2ad1" - integrity sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ== - dependencies: - "@types/node" "*" - -"@types/eslint-visitor-keys@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#1ee30d79544ca84d68d4b3cdb0af4f205663dd2d" - integrity sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag== - -"@types/estree@*": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.1.tgz#aa22750962f3bf0e79d753d3cc067f010c95f194" - integrity sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA== - "@types/estree@0.0.39": version "0.0.39" resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" @@ -3108,71 +1605,16 @@ "@types/minimatch" "*" "@types/node" "*" -"@types/graceful-fs@^4.1.2": - version "4.1.6" - resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.6.tgz#e14b2576a1c25026b7f02ede1de3b84c3a1efeae" - integrity sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw== - dependencies: - "@types/node" "*" - "@types/http-cache-semantics@*": version "4.0.1" resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz#0ea7b61496902b95890dc4c3a116b60cb8dae812" integrity sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ== -"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44" - integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g== - -"@types/istanbul-lib-report@*": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" - integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== - dependencies: - "@types/istanbul-lib-coverage" "*" - -"@types/istanbul-reports@^1.1.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz#e875cc689e47bce549ec81f3df5e6f6f11cfaeb2" - integrity sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw== - dependencies: - "@types/istanbul-lib-coverage" "*" - "@types/istanbul-lib-report" "*" - -"@types/istanbul-reports@^3.0.0": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz#9153fe98bba2bd565a63add9436d6f0d7f8468ff" - integrity sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw== - dependencies: - "@types/istanbul-lib-report" "*" - -"@types/jest@^25.2.1": - version "25.2.3" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-25.2.3.tgz#33d27e4c4716caae4eced355097a47ad363fdcaf" - integrity sha512-JXc1nK/tXHiDhV55dvfzqtmP4S3sy3T3ouV2tkViZgxY/zeUkcpQcQPGRlgF4KmWzWW5oiWYSZwtCB+2RsE4Fw== - dependencies: - jest-diff "^25.2.1" - pretty-format "^25.2.1" - -"@types/jest@^29.5.2": - version "29.5.3" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.5.3.tgz#7a35dc0044ffb8b56325c6802a4781a626b05777" - integrity sha512-1Nq7YrO/vJE/FYnqYyw0FS8LdrjExSgIiHyKg7xPpn+yi8Q4huZryKnkJatN1ZRH89Kw2v33/8ZMB7DuZeSLlA== - dependencies: - expect "^29.0.0" - pretty-format "^29.0.0" - -"@types/json-schema@^7.0.3", "@types/json-schema@^7.0.9": +"@types/json-schema@^7.0.9": version "7.0.12" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.12.tgz#d70faba7039d5fca54c83c7dbab41051d2b6f6cb" integrity sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA== -"@types/json5@^0.0.29": - version "0.0.29" - resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" - integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== - "@types/keyv@^3.1.4": version "3.1.4" resolved "https://registry.yarnpkg.com/@types/keyv/-/keyv-3.1.4.tgz#3ccdb1c6751b0c7e52300bcdacd5bcbf8faa75b6" @@ -3185,7 +1627,7 @@ resolved "https://registry.yarnpkg.com/@types/long/-/long-4.0.2.tgz#b74129719fc8d11c01868010082d483b7545591a" integrity sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA== -"@types/lru-cache@5.1.1", "@types/lru-cache@^5.1.0": +"@types/lru-cache@^5.1.0": version "5.1.1" resolved "https://registry.yarnpkg.com/@types/lru-cache/-/lru-cache-5.1.1.tgz#c48c2e27b65d2a153b19bfc1a317e30872e01eef" integrity sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw== @@ -3220,7 +1662,7 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.60.tgz#35f3d6213daed95da7f0f73e75bcc6980e90597b" integrity sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw== -"@types/node@^12.12.54", "@types/node@^12.12.6": +"@types/node@^12.12.6": version "12.20.55" resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.55.tgz#c329cbd434c42164f846b909bd6f85b5537f6240" integrity sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ== @@ -3235,16 +1677,6 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-8.10.66.tgz#dd035d409df322acc83dff62a602f12a5783bbb3" integrity sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw== -"@types/normalize-package-data@^2.4.0": - version "2.4.1" - resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz#d3357479a0fdfdd5907fe67e17e0a85c906e1301" - integrity sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw== - -"@types/parse-json@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" - integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== - "@types/pbkdf2@^3.0.0": version "3.1.0" resolved "https://registry.yarnpkg.com/@types/pbkdf2/-/pbkdf2-3.1.0.tgz#039a0e9b67da0cdc4ee5dab865caa6b267bb66b1" @@ -3252,11 +1684,6 @@ dependencies: "@types/node" "*" -"@types/prettier@^1.19.0": - version "1.19.1" - resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-1.19.1.tgz#33509849f8e679e4add158959fdb086440e9553f" - integrity sha512-5qOlnZscTn4xxM5MeGXAMOsIOIKIbh9e85zJWfBRVPlRMEVawzoPhINYbRGkBZCI8LxvBe7tJCdWiarA99OZfQ== - "@types/prettier@^2.1.1": version "2.7.3" resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.3.tgz#3e51a17e291d01d17d3fc61422015a933af7a08f" @@ -3275,13 +1702,6 @@ "@types/node" "*" safe-buffer "~5.1.1" -"@types/resolve@1.17.1": - version "1.17.1" - resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.17.1.tgz#3afd6ad8967c77e4376c598a82ddd58f46ec45d6" - integrity sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw== - dependencies: - "@types/node" "*" - "@types/responselike@^1.0.0": version "1.0.0" resolved "https://registry.yarnpkg.com/@types/responselike/-/responselike-1.0.0.tgz#251f4fe7d154d2bad125abe1b429b23afd262e29" @@ -3296,62 +1716,11 @@ dependencies: "@types/node" "*" -"@types/seedrandom@3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@types/seedrandom/-/seedrandom-3.0.1.tgz#1254750a4fec4aff2ebec088ccd0bb02e91fedb4" - integrity sha512-giB9gzDeiCeloIXDgzFBCgjj1k4WxcDrZtGl6h1IqmUPlxF+Nx8Ve+96QCyDZ/HseB/uvDsKbpib9hU5cU53pw== - "@types/semver@^7.3.12": version "7.5.0" resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.0.tgz#591c1ce3a702c45ee15f47a42ade72c2fd78978a" integrity sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw== -"@types/stack-utils@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e" - integrity sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw== - -"@types/stack-utils@^2.0.0": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c" - integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw== - -"@types/ws@^7.4.4": - version "7.4.7" - resolved "https://registry.yarnpkg.com/@types/ws/-/ws-7.4.7.tgz#f7c390a36f7a0679aa69de2d501319f4f8d9b702" - integrity sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww== - dependencies: - "@types/node" "*" - -"@types/yargs-parser@*": - version "21.0.0" - resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.0.tgz#0c60e537fa790f5f9472ed2776c2b71ec117351b" - integrity sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA== - -"@types/yargs@^15.0.0": - version "15.0.15" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.15.tgz#e609a2b1ef9e05d90489c2f5f45bbfb2be092158" - integrity sha512-IziEYMU9XoVj8hWg7k+UJrXALkGFjWJhn5QFEv9q4p+v40oZhSuC135M38st8XPjICL7Ey4TV64ferBGUoJhBg== - dependencies: - "@types/yargs-parser" "*" - -"@types/yargs@^17.0.8": - version "17.0.24" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.24.tgz#b3ef8d50ad4aa6aecf6ddc97c580a00f5aa11902" - integrity sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw== - dependencies: - "@types/yargs-parser" "*" - -"@typescript-eslint/eslint-plugin@^2.12.0": - version "2.34.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.34.0.tgz#6f8ce8a46c7dea4a6f1d171d2bb8fbae6dac2be9" - integrity sha512-4zY3Z88rEE99+CNvTbXSyovv2z9PNOVffTWD2W8QF5s2prBQtwN2zadqERcrHpcR7O/+KMI3fcTAmUUhK/iQcQ== - dependencies: - "@typescript-eslint/experimental-utils" "2.34.0" - functional-red-black-tree "^1.0.1" - regexpp "^3.0.0" - tsutils "^3.17.1" - "@typescript-eslint/eslint-plugin@^5.59.8": version "5.60.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.60.0.tgz#2f4bea6a3718bed2ba52905358d0f45cd3620d31" @@ -3368,26 +1737,6 @@ semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/experimental-utils@2.34.0": - version "2.34.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-2.34.0.tgz#d3524b644cdb40eebceca67f8cf3e4cc9c8f980f" - integrity sha512-eS6FTkq+wuMJ+sgtuNTtcqavWXqsflWcfBnlYhg/nS4aZ1leewkXGbvBhaapn1q6qf4M71bsR1tez5JTRMuqwA== - dependencies: - "@types/json-schema" "^7.0.3" - "@typescript-eslint/typescript-estree" "2.34.0" - eslint-scope "^5.0.0" - eslint-utils "^2.0.0" - -"@typescript-eslint/parser@^2.12.0": - version "2.34.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-2.34.0.tgz#50252630ca319685420e9a39ca05fe185a256bc8" - integrity sha512-03ilO0ucSD0EPTw2X4PntSIRFtDPWjrVq7C3/Z3VQHRC7+13YB55rcJI3Jt+YgeHbjUdJPcPa7b23rXCBokuyA== - dependencies: - "@types/eslint-visitor-keys" "^1.0.0" - "@typescript-eslint/experimental-utils" "2.34.0" - "@typescript-eslint/typescript-estree" "2.34.0" - eslint-visitor-keys "^1.1.0" - "@typescript-eslint/parser@^5.44.0": version "5.60.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.60.0.tgz#08f4daf5fc6548784513524f4f2f359cebb4068a" @@ -3421,19 +1770,6 @@ resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.60.0.tgz#3179962b28b4790de70e2344465ec97582ce2558" integrity sha512-ascOuoCpNZBccFVNJRSC6rPq4EmJ2NkuoKnd6LDNyAQmdDnziAtxbCGWCbefG1CNzmDvd05zO36AmB7H8RzKPA== -"@typescript-eslint/typescript-estree@2.34.0": - version "2.34.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-2.34.0.tgz#14aeb6353b39ef0732cc7f1b8285294937cf37d5" - integrity sha512-OMAr+nJWKdlVM9LOqCqh3pQQPwxHAN7Du8DR6dmwCrAmxtiXQnhHJ6tBNtf+cggqfo51SG/FCwnKhXCIM7hnVg== - dependencies: - debug "^4.1.1" - eslint-visitor-keys "^1.1.0" - glob "^7.1.6" - is-glob "^4.0.1" - lodash "^4.17.15" - semver "^7.3.2" - tsutils "^3.17.1" - "@typescript-eslint/typescript-estree@5.60.0": version "5.60.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.60.0.tgz#4ddf1a81d32a850de66642d9b3ad1e3254fb1600" @@ -3469,112 +1805,6 @@ "@typescript-eslint/types" "5.60.0" eslint-visitor-keys "^3.3.0" -"@web-std/blob@^3.0.3": - version "3.0.4" - resolved "https://registry.yarnpkg.com/@web-std/blob/-/blob-3.0.4.tgz#dd67a685547331915428d69e723c7da2015c3fc5" - integrity sha512-+dibyiw+uHYK4dX5cJ7HA+gtDAaUUe6JsOryp2ZpAC7h4ICsh49E34JwHoEKPlPvP0llCrNzz45vvD+xX5QDBg== - dependencies: - "@web-std/stream" "1.0.0" - web-encoding "1.1.5" - -"@web-std/fetch@^4.1.0": - version "4.1.0" - resolved "https://registry.yarnpkg.com/@web-std/fetch/-/fetch-4.1.0.tgz#db1eb659198376dad692421896b7119fb13e6e52" - integrity sha512-ZRizMcP8YyuRlhIsRYNFD9x/w28K7kbUhNGmKM9hDy4qeQ5xMTk//wA89EF+Clbl6EP4ksmCcN+4TqBMSRL8Zw== - dependencies: - "@web-std/blob" "^3.0.3" - "@web-std/form-data" "^3.0.2" - "@web-std/stream" "^1.0.1" - "@web3-storage/multipart-parser" "^1.0.0" - data-uri-to-buffer "^3.0.1" - mrmime "^1.0.0" - -"@web-std/file@^3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@web-std/file/-/file-3.0.2.tgz#b84cc9ed754608b18dcf78ac62c40dbcc6a94692" - integrity sha512-pIH0uuZsmY8YFvSHP1NsBIiMT/1ce0suPrX74fEeO3Wbr1+rW0fUGEe4d0R99iLwXtyCwyserqCFI4BJkJlkRA== - dependencies: - "@web-std/blob" "^3.0.3" - -"@web-std/form-data@^3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@web-std/form-data/-/form-data-3.0.2.tgz#c71d9def6a593138ea92fe3d1ffbce19f43e869c" - integrity sha512-rhc8IRw66sJ0FHcnC84kT3mTN6eACTuNftkt1XSl1Ef6WRKq4Pz65xixxqZymAZl1K3USpwhLci4SKNn4PYxWQ== - dependencies: - web-encoding "1.1.5" - -"@web-std/stream@1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@web-std/stream/-/stream-1.0.0.tgz#01066f40f536e4329d9b696dc29872f3a14b93c1" - integrity sha512-jyIbdVl+0ZJyKGTV0Ohb9E6UnxP+t7ZzX4Do3AHjZKxUXKMs9EmqnBDQgHF7bEw0EzbQygOjtt/7gvtmi//iCQ== - dependencies: - web-streams-polyfill "^3.1.1" - -"@web-std/stream@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@web-std/stream/-/stream-1.0.1.tgz#af2972654848e20a683781b0a50bef2ce3f011a0" - integrity sha512-tsz4Y0WNDgFA5jwLSeV7/UV5rfMIlj0cPsSLVfTihjaVW0OJPd5NxJ3le1B3yLyqqzRpeG5OAfJAADLc4VoGTA== - dependencies: - web-streams-polyfill "^3.1.1" - -"@web3-storage/multipart-parser@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@web3-storage/multipart-parser/-/multipart-parser-1.0.0.tgz#6b69dc2a32a5b207ba43e556c25cc136a56659c4" - integrity sha512-BEO6al7BYqcnfX15W2cnGR+Q566ACXAT9UQykORCWW80lmkpWsnEob6zJS1ZVBKsSJC8+7vJkHwlp+lXG1UCdw== - -"@whatwg-node/events@^0.0.3": - version "0.0.3" - resolved "https://registry.yarnpkg.com/@whatwg-node/events/-/events-0.0.3.tgz#13a65dd4f5893f55280f766e29ae48074927acad" - integrity sha512-IqnKIDWfXBJkvy/k6tzskWTc2NK3LcqHlb+KHGCrjOCH4jfQckRX0NAiIcC/vIqQkzLYw2r2CTSwAxcrtcD6lA== - -"@whatwg-node/fetch@^0.8.4": - version "0.8.8" - resolved "https://registry.yarnpkg.com/@whatwg-node/fetch/-/fetch-0.8.8.tgz#48c6ad0c6b7951a73e812f09dd22d75e9fa18cae" - integrity sha512-CdcjGC2vdKhc13KKxgsc6/616BQ7ooDIgPeTuAiE8qfCnS0mGzcfCOoZXypQSz73nxI+GWc7ZReIAVhxoE1KCg== - dependencies: - "@peculiar/webcrypto" "^1.4.0" - "@whatwg-node/node-fetch" "^0.3.6" - busboy "^1.6.0" - urlpattern-polyfill "^8.0.0" - web-streams-polyfill "^3.2.1" - -"@whatwg-node/node-fetch@^0.3.6": - version "0.3.6" - resolved "https://registry.yarnpkg.com/@whatwg-node/node-fetch/-/node-fetch-0.3.6.tgz#e28816955f359916e2d830b68a64493124faa6d0" - integrity sha512-w9wKgDO4C95qnXZRwZTfCmLWqyRnooGjcIwG0wADWjw9/HN0p7dtvtgSvItZtUyNteEvgTrd8QojNEqV6DAGTA== - dependencies: - "@whatwg-node/events" "^0.0.3" - busboy "^1.6.0" - fast-querystring "^1.1.1" - fast-url-parser "^1.1.3" - tslib "^2.3.1" - -"@zxing/text-encoding@0.9.0": - version "0.9.0" - resolved "https://registry.yarnpkg.com/@zxing/text-encoding/-/text-encoding-0.9.0.tgz#fb50ffabc6c7c66a0c96b4c03e3d9be74864b70b" - integrity sha512-U/4aVJ2mxI0aDNI8Uq0wEhMgY+u4CNtEb0om3+y3+niDAsoTCOB33UF0sxpzqzdqXLqmvc+vZyAt4O8pPdfkwA== - -JSONStream@1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.2.tgz#c102371b6ec3a7cf3b847ca00c20bb0fce4c6dea" - integrity sha512-mn0KSip7N4e0UDPZHnqDsHECo5uGQrixQKnAskOM1BIB8hd7QKbd6il8IPRPudPHOeHiECoCFqhyMaRO9+nWyA== - dependencies: - jsonparse "^1.2.0" - through ">=2.2.7 <3" - -JSONStream@^1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" - integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== - dependencies: - jsonparse "^1.2.0" - through ">=2.2.7 <3" - -abab@^2.0.0: - version "2.0.6" - resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291" - integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA== - abbrev@1: version "1.1.1" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" @@ -3597,7 +1827,7 @@ abortcontroller-polyfill@^1.7.3: resolved "https://registry.yarnpkg.com/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.5.tgz#6738495f4e901fbb57b6c0611d0c75f76c485bed" integrity sha512-JMJ5soJWP18htbbxJjG7bG6yuI6pRhgJ0scHHTfkUjf6wjP912xZWvM+A4sJK3gqd9E8fcPbDnOefbA9Th/FIQ== -abstract-level@1.0.3, abstract-level@^1.0.0, abstract-level@^1.0.2, abstract-level@^1.0.3: +abstract-level@^1.0.0, abstract-level@^1.0.2, abstract-level@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/abstract-level/-/abstract-level-1.0.3.tgz#78a67d3d84da55ee15201486ab44c09560070741" integrity sha512-t6jv+xHy+VYwc4xqZMn2Pa9DjcdzvzZmQGRjTFc8spIbRGHgBrEKbPq+rYXc7CCo0lxgYvSgKVg9qZAhpVQSjA== @@ -3610,18 +1840,6 @@ abstract-level@1.0.3, abstract-level@^1.0.0, abstract-level@^1.0.2, abstract-lev module-error "^1.0.1" queue-microtask "^1.2.3" -abstract-leveldown@7.2.0, abstract-leveldown@^7.2.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz#08d19d4e26fb5be426f7a57004851b39e1795a2e" - integrity sha512-DnhQwcFEaYsvYDnACLZhMmCWd3rkOeEvglpa4q5i/5Jlm3UIsWaxVzuXvDLFCSCWRO3yy2/+V/G7FusFgejnfQ== - dependencies: - buffer "^6.0.3" - catering "^2.0.0" - is-buffer "^2.0.5" - level-concat-iterator "^3.0.0" - level-supports "^2.0.1" - queue-microtask "^1.2.3" - accepts@~1.3.8: version "1.3.8" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" @@ -3630,39 +1848,16 @@ accepts@~1.3.8: mime-types "~2.1.34" negotiator "0.6.3" -acorn-globals@^4.3.2: - version "4.3.4" - resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.3.4.tgz#9fa1926addc11c97308c4e66d7add0d40c3272e7" - integrity sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A== - dependencies: - acorn "^6.0.1" - acorn-walk "^6.0.1" - -acorn-jsx@^5.2.0, acorn-jsx@^5.3.2: +acorn-jsx@^5.3.2: version "5.3.2" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== -acorn-walk@^6.0.1: - version "6.2.0" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.2.0.tgz#123cb8f3b84c2171f1f7fb252615b1c78a6b1a8c" - integrity sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA== - acorn-walk@^8.1.1: version "8.2.0" resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== -acorn@^6.0.1: - version "6.4.2" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" - integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ== - -acorn@^7.1.0, acorn@^7.1.1: - version "7.4.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" - integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== - acorn@^8.4.1, acorn@^8.8.0: version "8.9.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.9.0.tgz#78a16e3b2bcc198c10822786fa6679e245db5b59" @@ -3698,7 +1893,7 @@ aggregate-error@^3.0.0: clean-stack "^2.0.0" indent-string "^4.0.0" -ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.6: +ajv@^6.10.0, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.6: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -3749,12 +1944,7 @@ ansi-colors@^4.1.1: resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== -ansi-escapes@^3.0.0, ansi-escapes@^3.1.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" - integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== - -ansi-escapes@^4.2.1, ansi-escapes@^4.3.0, ansi-escapes@^4.3.2: +ansi-escapes@^4.3.0: version "4.3.2" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== @@ -3776,7 +1966,7 @@ ansi-regex@^4.1.0: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.1.tgz#164daac87ab2d6f6db3a29875e2d1766582dabed" integrity sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g== -ansi-regex@^5.0.0, ansi-regex@^5.0.1: +ansi-regex@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== @@ -3793,28 +1983,18 @@ ansi-styles@^3.2.0, ansi-styles@^3.2.1: dependencies: color-convert "^1.9.0" -ansi-styles@^4.0.0, ansi-styles@^4.1.0, ansi-styles@^4.3.0: +ansi-styles@^4.0.0, ansi-styles@^4.1.0: version "4.3.0" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== dependencies: color-convert "^2.0.1" -ansi-styles@^5.0.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" - integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== - ansi-styles@^6.1.0: version "6.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== -ansicolors@~0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/ansicolors/-/ansicolors-0.3.2.tgz#665597de86a9ffe3aa9bfbe6cae5c6ea426b4979" - integrity sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg== - antlr4@^4.11.0: version "4.13.0" resolved "https://registry.yarnpkg.com/antlr4/-/antlr4-4.13.0.tgz#25c0b17f0d9216de114303d38bafd6f181d5447f" @@ -3833,20 +2013,7 @@ any-signal@^2.1.0, any-signal@^2.1.2: abort-controller "^3.0.0" native-abort-controller "^1.0.3" -any-signal@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/any-signal/-/any-signal-3.0.1.tgz#49cae34368187a3472e31de28fb5cb1430caa9a6" - integrity sha512-xgZgJtKEa9YmDqXodIgl7Fl1C8yNXr8w6gXjqK3LW4GcEiYT+6AQfJSE/8SPsEpLLmcvbv8YU+qet94UewHxqg== - -anymatch@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" - integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== - dependencies: - micromatch "^3.1.4" - normalize-path "^2.1.1" - -anymatch@^3.0.3, anymatch@~3.1.1, anymatch@~3.1.2: +anymatch@~3.1.1, anymatch@~3.1.2: version "3.1.3" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== @@ -3854,18 +2021,6 @@ anymatch@^3.0.3, anymatch@~3.1.1, anymatch@~3.1.2: normalize-path "^3.0.0" picomatch "^2.0.4" -apisauce@^2.1.5: - version "2.1.6" - resolved "https://registry.yarnpkg.com/apisauce/-/apisauce-2.1.6.tgz#94887f335bf3d735305fc895c8a191c9c2608a7f" - integrity sha512-MdxR391op/FucS2YQRfB/NMRyCnHEPDd4h17LRIuVYi0BpGmMhpxc0shbOpfs5ahABuBEffNCGal5EcsydbBWg== - dependencies: - axios "^0.21.4" - -app-module-path@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/app-module-path/-/app-module-path-2.2.0.tgz#641aa55dfb7d6a6f0a8141c4b9c0aa50b6c24dd5" - integrity sha512-gkco+qxENJV+8vFcDiiFhuoSvRXb2a/QPqpSoWhVz829VNJfOTnELbBmPmNKFxf3xdNnw4DWCkzkDaavcX/1YQ== - arg@^4.1.0: version "4.1.3" resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" @@ -3883,28 +2038,6 @@ argparse@^2.0.1: resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== -aria-query@^5.1.3: - version "5.2.1" - resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.2.1.tgz#bc285d9d654d1df121bcd0c134880d415ca67c15" - integrity sha512-7uFg4b+lETFgdaJyETnILsXgnnzVnkHcgRbwbPwevm5x/LmUlt3MjczMRe1zg824iBgXZNRPTBftNYyRSKLp2g== - dependencies: - dequal "^2.0.3" - -arr-diff@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" - integrity sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA== - -arr-flatten@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" - integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== - -arr-union@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" - integrity sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q== - array-back@^3.0.1, array-back@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/array-back/-/array-back-3.1.0.tgz#b8859d7a508871c9a7b2cf42f99428f65e96bfb0" @@ -3923,27 +2056,11 @@ array-buffer-byte-length@^1.0.0: call-bind "^1.0.2" is-array-buffer "^3.0.1" -array-equal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" - integrity sha512-H3LU5RLiSsGXPhN+Nipar0iR0IofH+8r89G2y1tBKxQ/agagKyAjhkAFDRBfodP2caPrNKHpAWNIM/c9yeL7uA== - array-flatten@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== -array-includes@^3.1.5, array-includes@^3.1.6: - version "3.1.6" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.6.tgz#9e9e720e194f198266ba9e18c29e6a9b0e4b225f" - integrity sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - get-intrinsic "^1.1.3" - is-string "^1.0.7" - array-union@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" @@ -3954,31 +2071,6 @@ array-uniq@1.0.3: resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" integrity sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q== -array-unique@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" - integrity sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ== - -array.prototype.flat@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz#ffc6576a7ca3efc2f46a143b9d1dda9b4b3cf5e2" - integrity sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - es-shim-unscopables "^1.0.0" - -array.prototype.flatmap@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz#1aae7903c2100433cb8261cd4ed310aab5c4a183" - integrity sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - es-shim-unscopables "^1.0.0" - array.prototype.reduce@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/array.prototype.reduce/-/array.prototype.reduce-1.0.5.tgz#6b20b0daa9d9734dd6bc7ea66b5bbce395471eac" @@ -3990,17 +2082,6 @@ array.prototype.reduce@^1.0.5: es-array-method-boxes-properly "^1.0.0" is-string "^1.0.7" -array.prototype.tosorted@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz#ccf44738aa2b5ac56578ffda97c03fd3e23dd532" - integrity sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - es-shim-unscopables "^1.0.0" - get-intrinsic "^1.1.3" - asap@~2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" @@ -4013,32 +2094,6 @@ asn1@~0.2.3: dependencies: safer-buffer "~2.1.0" -asn1js@^3.0.1, asn1js@^3.0.5: - version "3.0.5" - resolved "https://registry.yarnpkg.com/asn1js/-/asn1js-3.0.5.tgz#5ea36820443dbefb51cc7f88a2ebb5b462114f38" - integrity sha512-FVnvrKJwpt9LP2lAMl8qZswRNm3T4q9CON+bxldk2iwk3FFpuwhx2FfinyitizWHsVYyaY+y5JzDR0rCMV5yTQ== - dependencies: - pvtsutils "^1.3.2" - pvutils "^1.1.3" - tslib "^2.4.0" - -assemblyscript@0.19.10: - version "0.19.10" - resolved "https://registry.yarnpkg.com/assemblyscript/-/assemblyscript-0.19.10.tgz#7ede6d99c797a219beb4fa4614c3eab9e6343c8e" - integrity sha512-HavcUBXB3mBTRGJcpvaQjmnmaqKHBGREjSPNsIvnAk2f9dj78y4BkMaSSdvBQYWcDDzsHQjyUC8stICFkD1Odg== - dependencies: - binaryen "101.0.0-nightly.20210723" - long "^4.0.0" - -assemblyscript@0.19.23: - version "0.19.23" - resolved "https://registry.yarnpkg.com/assemblyscript/-/assemblyscript-0.19.23.tgz#16ece69f7f302161e2e736a0f6a474e6db72134c" - integrity sha512-fwOQNZVTMga5KRsfY80g7cpOl4PsFQczMwHzdtgoqLXaYhkhavufKb0sB0l3T1DUxpAufA0KNhlbpuuhZUwxMA== - dependencies: - binaryen "102.0.0-nightly.20211028" - long "^5.2.0" - source-map-support "^0.5.20" - assert-plus@1.0.0, assert-plus@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" @@ -4049,38 +2104,16 @@ assertion-error@^1.1.0: resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== -assign-symbols@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" - integrity sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw== - ast-parents@^0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/ast-parents/-/ast-parents-0.0.1.tgz#508fd0f05d0c48775d9eccda2e174423261e8dd3" integrity sha512-XHusKxKz3zoYk1ic8Un640joHbFMhbqneyoZfoKnEGtf2ey9Uh/IdpcQplODdO/kENaMIWsD0nJm4+wX3UNLHA== -ast-types-flow@^0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" - integrity sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag== - -astral-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" - integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== - astral-regex@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== -async-eventemitter@0.2.4: - version "0.2.4" - resolved "https://registry.yarnpkg.com/async-eventemitter/-/async-eventemitter-0.2.4.tgz#f5e7c8ca7d3e46aab9ec40a292baf686a0bafaca" - integrity sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw== - dependencies: - async "^2.4.0" - async-limiter@~1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" @@ -4098,38 +2131,16 @@ async@1.x: resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" integrity sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w== -async@^2.4.0: - version "2.6.4" - resolved "https://registry.yarnpkg.com/async/-/async-2.6.4.tgz#706b7ff6084664cd7eae713f6f965433b5504221" - integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA== - dependencies: - lodash "^4.17.14" - -async@^3.2.3: - version "3.2.4" - resolved "https://registry.yarnpkg.com/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c" - integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ== - asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== -asyncro@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/asyncro/-/asyncro-3.0.0.tgz#3c7a732e263bc4a42499042f48d7d858e9c0134e" - integrity sha512-nEnWYfrBmA3taTiuiOoZYmgJ/CNrSoQLeLs29SeLcPu60yaw/mHDBHV0iOZ051fTvsTHxpCY+gXibqT9wbQYfg== - at-least-node@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== -atob@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" - integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== - available-typed-arrays@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" @@ -4143,152 +2154,14 @@ aws-sign2@~0.7.0: aws4@^1.8.0: version "1.12.0" resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.12.0.tgz#ce1c9d143389679e253b314241ea9aa5cec980d3" - integrity sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg== - -axe-core@^4.6.2: - version "4.7.2" - resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.7.2.tgz#040a7342b20765cb18bb50b628394c21bccc17a0" - integrity sha512-zIURGIS1E1Q4pcrMjp+nnEh+16G56eG/MUllJH8yEvw7asDo7Ac9uhC9KIH5jzpITueEZolfYglnCGIuSBz39g== - -axios@^0.21.1, axios@^0.21.2, axios@^0.21.4: - version "0.21.4" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.4.tgz#c67b90dc0568e5c1cf2b0b858c43ba28e2eda575" - integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg== - dependencies: - follow-redirects "^1.14.0" - -axobject-query@^3.1.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-3.2.1.tgz#39c378a6e3b06ca679f29138151e45b2b32da62a" - integrity sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg== - dependencies: - dequal "^2.0.3" - -babel-eslint@^10.0.3: - version "10.1.0" - resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-10.1.0.tgz#6968e568a910b78fb3779cdd8b6ac2f479943232" - integrity sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg== - dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/parser" "^7.7.0" - "@babel/traverse" "^7.7.0" - "@babel/types" "^7.7.0" - eslint-visitor-keys "^1.0.0" - resolve "^1.12.0" - -babel-jest@^25.5.1: - version "25.5.1" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-25.5.1.tgz#bc2e6101f849d6f6aec09720ffc7bc5332e62853" - integrity sha512-9dA9+GmMjIzgPnYtkhBg73gOo/RHqPmLruP3BaGL4KEX3Dwz6pI8auSN8G8+iuEG90+GSswyKvslN+JYSaacaQ== - dependencies: - "@jest/transform" "^25.5.1" - "@jest/types" "^25.5.0" - "@types/babel__core" "^7.1.7" - babel-plugin-istanbul "^6.0.0" - babel-preset-jest "^25.5.0" - chalk "^3.0.0" - graceful-fs "^4.2.4" - slash "^3.0.0" - -babel-plugin-annotate-pure-calls@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/babel-plugin-annotate-pure-calls/-/babel-plugin-annotate-pure-calls-0.4.0.tgz#78aa00fd878c4fcde4d49f3da397fcf5defbcce8" - integrity sha512-oi4M/PWUJOU9ZyRGoPTfPMqdyMp06jbJAomd3RcyYuzUtBOddv98BqLm96Lucpi2QFoQHkdGQt0ACvw7VzVEQA== - -babel-plugin-dev-expression@^0.2.1: - version "0.2.3" - resolved "https://registry.yarnpkg.com/babel-plugin-dev-expression/-/babel-plugin-dev-expression-0.2.3.tgz#8aaf52155dfb063ed4ddec6280456fbc256fead4" - integrity sha512-rP5LK9QQTzCW61nVVzw88En1oK8t8gTsIeC6E61oelxNsU842yMjF0G1MxhvUpCkxCEIj7sE8/e5ieTheT//uw== - -babel-plugin-istanbul@^6.0.0: - version "6.1.1" - resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" - integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@istanbuljs/load-nyc-config" "^1.0.0" - "@istanbuljs/schema" "^0.1.2" - istanbul-lib-instrument "^5.0.4" - test-exclude "^6.0.0" - -babel-plugin-jest-hoist@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-25.5.0.tgz#129c80ba5c7fc75baf3a45b93e2e372d57ca2677" - integrity sha512-u+/W+WAjMlvoocYGTwthAiQSxDcJAyHpQ6oWlHdFZaaN+Rlk8Q7iiwDPg2lN/FyJtAYnKjFxbn7xus4HCFkg5g== - dependencies: - "@babel/template" "^7.3.3" - "@babel/types" "^7.3.3" - "@types/babel__traverse" "^7.0.6" - -babel-plugin-macros@^2.6.1: - version "2.8.0" - resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz#0f958a7cc6556b1e65344465d99111a1e5e10138" - integrity sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg== - dependencies: - "@babel/runtime" "^7.7.2" - cosmiconfig "^6.0.0" - resolve "^1.12.0" - -babel-plugin-polyfill-corejs2@^0.4.3: - version "0.4.3" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.3.tgz#75044d90ba5043a5fb559ac98496f62f3eb668fd" - integrity sha512-bM3gHc337Dta490gg+/AseNB9L4YLHxq1nGKZZSHbhXv4aTYU2MD2cjza1Ru4S6975YLTaL1K8uJf6ukJhhmtw== - dependencies: - "@babel/compat-data" "^7.17.7" - "@babel/helper-define-polyfill-provider" "^0.4.0" - semver "^6.1.1" - -babel-plugin-polyfill-corejs3@^0.8.1: - version "0.8.1" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.1.tgz#39248263c38191f0d226f928d666e6db1b4b3a8a" - integrity sha512-ikFrZITKg1xH6pLND8zT14UPgjKHiGLqex7rGEZCH2EvhsneJaJPemmpQaIZV5AL03II+lXylw3UmddDK8RU5Q== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.4.0" - core-js-compat "^3.30.1" - -babel-plugin-polyfill-regenerator@^0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.0.4.tgz#588641af9a2cb4e299b1400c47672a4a104d2459" - integrity sha512-+/uCzO9JTYVZVGCpZpVAQkgPGt2zkR0VYiZvJ4aVoCe4ccgpKvNQqcjzAgQzSsjK64Jhc5hvrCR3l0087BevkA== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.0.3" + integrity sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg== -babel-plugin-polyfill-regenerator@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.0.tgz#e7344d88d9ef18a3c47ded99362ae4a757609380" - integrity sha512-hDJtKjMLVa7Z+LwnTCxoDLQj6wdc+B8dun7ayF2fYieI6OzfuvcLMB32ihJZ4UhCBwNYGl5bg/x/P9cMdnkc2g== +axios@^0.21.1, axios@^0.21.2: + version "0.21.4" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.4.tgz#c67b90dc0568e5c1cf2b0b858c43ba28e2eda575" + integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg== dependencies: - "@babel/helper-define-polyfill-provider" "^0.4.0" - -babel-plugin-transform-rename-import@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-rename-import/-/babel-plugin-transform-rename-import-2.3.0.tgz#5d9d645f937b0ca5c26a24b2510a06277b6ffd9b" - integrity sha512-dPgJoT57XC0PqSnLgl2FwNvxFrWlspatX2dkk7yjKQj5HHGw071vAcOf+hqW8ClqcBDMvEbm6mevn5yHAD8mlQ== - -babel-preset-current-node-syntax@^0.1.2: - version "0.1.4" - resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-0.1.4.tgz#826f1f8e7245ad534714ba001f84f7e906c3b615" - integrity sha512-5/INNCYhUGqw7VbVjT/hb3ucjgkVHKXY7lX3ZjlN4gm565VyFmJUrJ/h+h16ECVB38R/9SF6aACydpKMLZ/c9w== - dependencies: - "@babel/plugin-syntax-async-generators" "^7.8.4" - "@babel/plugin-syntax-bigint" "^7.8.3" - "@babel/plugin-syntax-class-properties" "^7.8.3" - "@babel/plugin-syntax-import-meta" "^7.8.3" - "@babel/plugin-syntax-json-strings" "^7.8.3" - "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-syntax-numeric-separator" "^7.8.3" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - -babel-preset-jest@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-25.5.0.tgz#c1d7f191829487a907764c65307faa0e66590b49" - integrity sha512-8ZczygctQkBU+63DtSOKGh7tFL0CeCuz+1ieud9lJ1WPQ9O6A1a/r+LGn6Y705PA6whHQ3T1XuB/PmpfNYf8Fw== - dependencies: - babel-plugin-jest-hoist "^25.5.0" - babel-preset-current-node-syntax "^0.1.2" + follow-redirects "^1.14.0" balanced-match@^1.0.0: version "1.0.2" @@ -4307,19 +2180,6 @@ base64-js@^1.0.2, base64-js@^1.3.1: resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== -base@^0.11.1: - version "0.11.2" - resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" - integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== - dependencies: - cache-base "^1.0.1" - class-utils "^0.3.5" - component-emitter "^1.2.1" - define-property "^1.0.0" - isobject "^3.0.1" - mixin-deep "^1.2.0" - pascalcase "^0.1.1" - bcrypt-pbkdf@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" @@ -4362,33 +2222,6 @@ binary-extensions@^2.0.0: resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== -binary-install-raw@0.0.13: - version "0.0.13" - resolved "https://registry.yarnpkg.com/binary-install-raw/-/binary-install-raw-0.0.13.tgz#43a13c6980eb9844e2932eb7a91a56254f55b7dd" - integrity sha512-v7ms6N/H7iciuk6QInon3/n2mu7oRX+6knJ9xFPsJ3rQePgAqcR3CRTwUheFd8SLbiq4LL7Z4G/44L9zscdt9A== - dependencies: - axios "^0.21.1" - rimraf "^3.0.2" - tar "^6.1.0" - -binaryen@101.0.0-nightly.20210723: - version "101.0.0-nightly.20210723" - resolved "https://registry.yarnpkg.com/binaryen/-/binaryen-101.0.0-nightly.20210723.tgz#b6bb7f3501341727681a03866c0856500eec3740" - integrity sha512-eioJNqhHlkguVSbblHOtLqlhtC882SOEPKmNFZaDuz1hzQjolxZ+eu3/kaS10n3sGPONsIZsO7R9fR00UyhEUA== - -binaryen@102.0.0-nightly.20211028: - version "102.0.0-nightly.20211028" - resolved "https://registry.yarnpkg.com/binaryen/-/binaryen-102.0.0-nightly.20211028.tgz#8f1efb0920afd34509e342e37f84313ec936afb2" - integrity sha512-GCJBVB5exbxzzvyt8MGDv/MeUjs6gkXDvf4xOIItRBptYl0Tz5sm1o/uG95YK0L0VeG5ajDu3hRtkBP2kzqC5w== - -bl@^1.0.0: - version "1.2.3" - resolved "https://registry.yarnpkg.com/bl/-/bl-1.2.3.tgz#1e8dd80142eac80d7158c9dccc047fb620e035e7" - integrity sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww== - dependencies: - readable-stream "^2.3.5" - safe-buffer "^5.1.1" - bl@^5.0.0: version "5.1.0" resolved "https://registry.yarnpkg.com/bl/-/bl-5.1.0.tgz#183715f678c7188ecef9fe475d90209400624273" @@ -4486,22 +2319,6 @@ brace-expansion@^2.0.1: dependencies: balanced-match "^1.0.0" -braces@^2.3.1: - version "2.3.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" - integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== - dependencies: - arr-flatten "^1.1.0" - array-unique "^0.3.2" - extend-shallow "^2.0.1" - fill-range "^4.0.0" - isobject "^3.0.1" - repeat-element "^1.1.2" - snapdragon "^0.8.1" - snapdragon-node "^2.0.1" - split-string "^3.0.2" - to-regex "^3.0.1" - braces@^3.0.2, braces@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" @@ -4524,23 +2341,11 @@ browser-level@^1.0.1: module-error "^1.0.2" run-parallel-limit "^1.1.0" -browser-process-hrtime@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" - integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== - -browser-readablestream-to-it@^1.0.0, browser-readablestream-to-it@^1.0.1, browser-readablestream-to-it@^1.0.3: +browser-readablestream-to-it@^1.0.1, browser-readablestream-to-it@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/browser-readablestream-to-it/-/browser-readablestream-to-it-1.0.3.tgz#ac3e406c7ee6cdf0a502dd55db33bab97f7fba76" integrity sha512-+12sHB+Br8HIh6VAMVEG5r3UXCyESIgDW7kzk3BjIXa43DVqVwL7GC5TW3jeh+72dtcH99pPVpw0X8i0jt+/kw== -browser-resolve@^1.11.3: - version "1.11.3" - resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.3.tgz#9b7cbb3d0f510e4cb86bdbd796124d28b5890af6" - integrity sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ== - dependencies: - resolve "1.1.7" - browser-stdout@1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" @@ -4558,23 +2363,6 @@ browserify-aes@^1.2.0: inherits "^2.0.1" safe-buffer "^5.0.1" -browserslist@^4.21.3, browserslist@^4.21.5: - version "4.21.9" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.9.tgz#e11bdd3c313d7e2a9e87e8b4b0c7872b13897635" - integrity sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg== - dependencies: - caniuse-lite "^1.0.30001503" - electron-to-chromium "^1.4.431" - node-releases "^2.0.12" - update-browserslist-db "^1.0.11" - -bs-logger@0.x: - version "0.2.6" - resolved "https://registry.yarnpkg.com/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8" - integrity sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog== - dependencies: - fast-json-stable-stringify "2.x" - bs58@^4.0.0, bs58@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a" @@ -4591,32 +2379,7 @@ bs58check@^2.1.2: create-hash "^1.1.0" safe-buffer "^5.1.2" -bser@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" - integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== - dependencies: - node-int64 "^0.4.0" - -buffer-alloc-unsafe@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0" - integrity sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg== - -buffer-alloc@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/buffer-alloc/-/buffer-alloc-1.2.0.tgz#890dd90d923a873e08e10e5fd51a57e5b7cce0ec" - integrity sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow== - dependencies: - buffer-alloc-unsafe "^1.1.0" - buffer-fill "^1.0.0" - -buffer-fill@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c" - integrity sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ== - -buffer-from@1.x, buffer-from@^1.0.0: +buffer-from@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== @@ -4656,13 +2419,6 @@ buffer@^5.0.5, buffer@^5.5.0, buffer@^5.6.0: base64-js "^1.3.1" ieee754 "^1.1.13" -bufferutil@4.0.5: - version "4.0.5" - resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.5.tgz#da9ea8166911cc276bf677b8aed2d02d31f59028" - integrity sha512-HTm14iMQKK2FjFLRTM5lAVcyaUzOnqbPtesFIvREgXpJHdQm8bWS+GkQgIkfaBYRHuCnea7w8UVNfwiAQhlr9A== - dependencies: - node-gyp-build "^4.3.0" - bufferutil@^4.0.1: version "4.0.7" resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.7.tgz#60c0d19ba2c992dd8273d3f73772ffc894c153ad" @@ -4670,11 +2426,6 @@ bufferutil@^4.0.1: dependencies: node-gyp-build "^4.3.0" -builtin-modules@^3.1.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.3.0.tgz#cae62812b89801e9656336e46223e030386be7b6" - integrity sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw== - busboy@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/busboy/-/busboy-1.6.0.tgz#966ea36a9502e43cdb9146962523b92f531f6893" @@ -4682,31 +2433,11 @@ busboy@^1.6.0: dependencies: streamsearch "^1.1.0" -bytes-iec@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/bytes-iec/-/bytes-iec-3.1.1.tgz#94cd36bf95c2c22a82002c247df8772d1d591083" - integrity sha512-fey6+4jDK7TFtFg/klGSvNKJctyU7n2aQdnM+CO0ruLPbqqMOM8Tio0Pc+deqUeVKX1tL5DQep1zQ7+37aTAsA== - bytes@3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== -cache-base@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" - integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== - dependencies: - collection-visit "^1.0.0" - component-emitter "^1.2.1" - get-value "^2.0.6" - has-value "^1.0.0" - isobject "^3.0.1" - set-value "^2.0.0" - to-object-path "^0.3.0" - union-value "^1.0.0" - unset-value "^1.0.0" - cacheable-lookup@^5.0.3: version "5.0.4" resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz#5a6b865b2c44357be3d5ebc2a467b032719a7005" @@ -4761,7 +2492,7 @@ camelcase@^4.1.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" integrity sha512-FxAv7HpHrXbh3aPo4o2qxHay2lkLY3x5Mw3KeE4KQE8ysVfziWeRZDwcjauvwBSGEC/nXUPzZy8zeh4HokqOnw== -camelcase@^5.0.0, camelcase@^5.3.1: +camelcase@^5.0.0: version "5.3.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== @@ -4771,26 +2502,6 @@ camelcase@^6.0.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== -caniuse-lite@^1.0.30001503: - version "1.0.30001503" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001503.tgz#88b6ff1b2cf735f1f3361dc1a15b59f0561aa398" - integrity sha512-Sf9NiF+wZxPfzv8Z3iS0rXM1Do+iOy2Lxvib38glFX+08TCYYYGR5fRJXk4d77C4AYwhUjgYgMsMudbh2TqCKw== - -capture-exit@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" - integrity sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g== - dependencies: - rsvp "^4.8.4" - -cardinal@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/cardinal/-/cardinal-2.1.1.tgz#7cc1055d822d212954d07b085dea251cc7bc5505" - integrity sha512-JSr5eOgoEymtYHBjNWyjrMqet9Am2miJhlfKNdqLp6zoeAh0KN5dRAcxlecj5mAJrmQomgiOBj35xHLrFjqBpw== - dependencies: - ansicolors "~0.3.2" - redeyed "~2.1.0" - case@^1.6.3: version "1.6.3" resolved "https://registry.yarnpkg.com/case/-/case-1.6.3.tgz#0a4386e3e9825351ca2e6216c60467ff5f1ea1c9" @@ -4801,7 +2512,7 @@ caseless@^0.12.0, caseless@~0.12.0: resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw== -catering@^2.0.0, catering@^2.1.0, catering@^2.1.1: +catering@^2.1.0, catering@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/catering/-/catering-2.1.1.tgz#66acba06ed5ee28d5286133982a927de9a04b510" integrity sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w== @@ -4821,7 +2532,7 @@ cbor@^8.0.0, cbor@^8.1.0: dependencies: nofilter "^3.1.0" -cborg@^1.5.4, cborg@^1.6.0: +cborg@^1.5.4: version "1.10.2" resolved "https://registry.yarnpkg.com/cborg/-/cborg-1.10.2.tgz#83cd581b55b3574c816f82696307c7512db759a1" integrity sha512-b3tFPA9pUr2zCUiCfRd2+wok2/LBSNUMKOuRRok+WlvvAgEt/PlbgPTsZUcwCOs53IJvLgTp0eotwtosE6njug== @@ -4846,15 +2557,7 @@ chai@^4.2.0, chai@^4.3.7: pathval "^1.1.1" type-detect "^4.0.5" -chalk@3.0.0, chalk@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" - integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chalk@^2.0.0, chalk@^2.1.0, chalk@^2.3.2, chalk@^2.4.1, chalk@^2.4.2: +chalk@^2.0.0, chalk@^2.3.2, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -4863,7 +2566,7 @@ chalk@^2.0.0, chalk@^2.1.0, chalk@^2.3.2, chalk@^2.4.1, chalk@^2.4.2: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.2: +chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -4895,11 +2598,6 @@ change-case@3.0.2: upper-case "^1.1.1" upper-case-first "^1.1.0" -chardet@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" - integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== - "charenc@>= 0.0.1": version "0.0.2" resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" @@ -4950,7 +2648,7 @@ chokidar@3.3.0: optionalDependencies: fsevents "~2.1.1" -chokidar@3.5.3, chokidar@^3.4.0, chokidar@^3.5.2, chokidar@^3.5.3: +chokidar@3.5.3, chokidar@^3.4.0, chokidar@^3.5.2: version "3.5.3" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== @@ -4965,31 +2663,16 @@ chokidar@3.5.3, chokidar@^3.4.0, chokidar@^3.5.2, chokidar@^3.5.3: optionalDependencies: fsevents "~2.3.2" -chownr@^1.0.1, chownr@^1.1.4: +chownr@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== -chownr@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" - integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== - ci-info@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== -ci-info@^3.2.0: - version "3.8.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.8.0.tgz#81408265a5380c929f0bc665d62256628ce9ef91" - integrity sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw== - -ci-job-number@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/ci-job-number/-/ci-job-number-1.2.2.tgz#f4e5918fcaeeda95b604f214be7d7d4a961fe0c0" - integrity sha512-CLOGsVDrVamzv8sXJGaILUVI6dsuAkouJP/n6t+OxLPeeA4DDby7zn9SB6EUpa1H7oIKoE+rMmkW80zYsFfUjA== - cids@^0.7.1: version "0.7.5" resolved "https://registry.yarnpkg.com/cids/-/cids-0.7.5.tgz#60a08138a99bfb69b6be4ceb63bfef7a396b28b2" @@ -5014,16 +2697,6 @@ class-is@^1.1.0: resolved "https://registry.yarnpkg.com/class-is/-/class-is-1.1.0.tgz#9d3c0fba0440d211d843cec3dedfa48055005825" integrity sha512-rhjH9AG1fvabIDoGRVH587413LPjTZgmDF9fOFCbFJQV4yuocX1mHxxvXI4g3cGwbVY9wAYIoKlg1N79frJKQw== -class-utils@^0.3.5: - version "0.3.6" - resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" - integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== - dependencies: - arr-union "^3.1.0" - define-property "^0.2.5" - isobject "^3.0.0" - static-extend "^0.1.1" - classic-level@^1.2.0: version "1.3.0" resolved "https://registry.yarnpkg.com/classic-level/-/classic-level-1.3.0.tgz#5e36680e01dc6b271775c093f2150844c5edd5c8" @@ -5040,54 +2713,6 @@ clean-stack@^2.0.0: resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== -clean-stack@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-3.0.1.tgz#155bf0b2221bf5f4fba89528d24c5953f17fe3a8" - integrity sha512-lR9wNiMRcVQjSB3a7xXGLuz4cr4wJuuXlaAEbRutGowQTmlp7R72/DOgN21e8jdwblMWl9UOJMJXarX94pzKdg== - dependencies: - escape-string-regexp "4.0.0" - -cli-cursor@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" - integrity sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw== - dependencies: - restore-cursor "^2.0.0" - -cli-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" - integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== - dependencies: - restore-cursor "^3.1.0" - -cli-progress@^3.12.0: - version "3.12.0" - resolved "https://registry.yarnpkg.com/cli-progress/-/cli-progress-3.12.0.tgz#807ee14b66bcc086258e444ad0f19e7d42577942" - integrity sha512-tRkV3HJ1ASwm19THiiLIXLO7Im7wlTuKnvkYaTkyoAPefqjNg7W7DHKUlGRxy9vxDvbyCYQkQozvptuMkGCg8A== - dependencies: - string-width "^4.2.3" - -cli-spinners@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-1.3.1.tgz#002c1990912d0d59580c93bd36c056de99e4259a" - integrity sha512-1QL4544moEsDVH9T/l6Cemov/37iv1RtoKf7NJ04A60+4MREXNfx/QvavbH6QoGdsD4N4Mwy49cmaINR/o2mdg== - -cli-spinners@^2.2.0: - version "2.9.0" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.9.0.tgz#5881d0ad96381e117bbe07ad91f2008fe6ffd8db" - integrity sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g== - -cli-table3@0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.0.tgz#b7b1bc65ca8e7b5cef9124e13dc2b21e2ce4faee" - integrity sha512-gnB85c3MGC7Nm9I/FkiasNBOKjOiO1RNuXXarQms37q4QMpWdlbBgD/VnOStA2faG1dpXMv31RFApjX1/QdgWQ== - dependencies: - object-assign "^4.1.0" - string-width "^4.2.0" - optionalDependencies: - colors "^1.1.2" - cli-table3@^0.5.0: version "0.5.1" resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.5.1.tgz#0252372d94dfc40dbd8df06005f48f31f656f202" @@ -5098,11 +2723,6 @@ cli-table3@^0.5.0: optionalDependencies: colors "^1.1.2" -cli-width@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" - integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== - cliui@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" @@ -5121,15 +2741,6 @@ cliui@^5.0.0: strip-ansi "^5.2.0" wrap-ansi "^5.1.0" -cliui@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" - integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.0" - wrap-ansi "^6.2.0" - cliui@^7.0.2: version "7.0.4" resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" @@ -5146,39 +2757,11 @@ clone-response@^1.0.2: dependencies: mimic-response "^1.0.0" -clone@^1.0.2: - version "1.0.4" - resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" - integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== - -co@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" - integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== - -code-block-writer@^11.0.3: - version "11.0.3" - resolved "https://registry.yarnpkg.com/code-block-writer/-/code-block-writer-11.0.3.tgz#9eec2993edfb79bfae845fbc093758c0a0b73b76" - integrity sha512-NiujjUFB4SwScJq2bwbYUtXbZhBSlY6vYzm++3Q6oC+U+injTqfPYFK8wS9COOmb2lueqp0ZRB4nK1VYeHgNyw== - code-point-at@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" integrity sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA== -collect-v8-coverage@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59" - integrity sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg== - -collection-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" - integrity sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw== - dependencies: - map-visit "^1.0.0" - object-visit "^1.0.0" - color-convert@^1.9.0: version "1.9.3" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" @@ -5255,32 +2838,17 @@ commander@^10.0.0: resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06" integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug== -commander@^2.20.0, commander@^2.20.3: - version "2.20.3" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" - integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== - -commondir@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" - integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== - compare-versions@^5.0.0: version "5.0.3" resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-5.0.3.tgz#a9b34fea217472650ef4a2651d905f42c28ebfd7" integrity sha512-4UZlZP8Z99MGEY+Ovg/uJxJuvoXuN4M6B3hKaiackiHrgzQFEe3diJi1mf1PNHbFujM7FvLrK2bpgIaImbtZ1A== -component-emitter@^1.2.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" - integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== - concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== -concat-stream@^1.6.0, concat-stream@^1.6.2, concat-stream@~1.6.2: +concat-stream@^1.6.0, concat-stream@^1.6.2: version "1.6.2" resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== @@ -5290,11 +2858,6 @@ concat-stream@^1.6.0, concat-stream@^1.6.2, concat-stream@~1.6.2: readable-stream "^2.2.2" typedarray "^0.0.6" -confusing-browser-globals@^1.0.9: - version "1.0.11" - resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz#ae40e9b57cdd3915408a2805ebd3a5585608dc81" - integrity sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA== - constant-case@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/constant-case/-/constant-case-2.0.0.tgz#4175764d389d3fa9c8ecd29186ed6005243b6a46" @@ -5324,11 +2887,6 @@ content-type@~1.0.4, content-type@~1.0.5: resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== -convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" - integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== - cookie-signature@1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" @@ -5344,18 +2902,6 @@ cookie@^0.4.1: resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== -copy-descriptor@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" - integrity sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw== - -core-js-compat@^3.30.1, core-js-compat@^3.30.2: - version "3.31.0" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.31.0.tgz#4030847c0766cc0e803dcdfb30055d7ef2064bf1" - integrity sha512-hM7YCu1cU6Opx7MXNu0NuumM0ezNeAeRKadixyiQELWY3vT3De9S4J5ZBMraWV2vZnrE1Cirl0GtFtDtMUXzPw== - dependencies: - browserslist "^4.21.5" - core-util-is@1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" @@ -5374,28 +2920,6 @@ cors@^2.8.1: object-assign "^4" vary "^1" -cosmiconfig@7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.0.1.tgz#714d756522cace867867ccb4474c5d01bbae5d6d" - integrity sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ== - dependencies: - "@types/parse-json" "^4.0.0" - import-fresh "^3.2.1" - parse-json "^5.0.0" - path-type "^4.0.0" - yaml "^1.10.0" - -cosmiconfig@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-6.0.0.tgz#da4fee853c52f6b1e6935f41c1a2fc50bd4a9982" - integrity sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg== - dependencies: - "@types/parse-json" "^4.0.0" - import-fresh "^3.1.0" - parse-json "^5.0.0" - path-type "^4.0.0" - yaml "^1.7.2" - cosmiconfig@^8.0.0: version "8.2.0" resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-8.2.0.tgz#f7d17c56a590856cd1e7cee98734dca272b0d8fd" @@ -5446,14 +2970,14 @@ cross-env@^7.0.3: dependencies: cross-spawn "^7.0.1" -cross-fetch@^3.1.4, cross-fetch@^3.1.5: +cross-fetch@^3.1.4: version "3.1.6" resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.6.tgz#bae05aa31a4da760969756318feeee6e70f15d6c" integrity sha512-riRvo06crlE8HiqOwIpQhxwdOk4fOeR7FVM/wXoxchFEqMNUjvbs3bfo4OTgMEMHzppd4DxFBDbyySj8Cv781g== dependencies: node-fetch "^2.6.11" -cross-spawn@7.0.3, cross-spawn@^7.0.0, cross-spawn@^7.0.1, cross-spawn@^7.0.2, cross-spawn@^7.0.3: +cross-spawn@^7.0.0, cross-spawn@^7.0.1, cross-spawn@^7.0.2: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== @@ -5462,17 +2986,6 @@ cross-spawn@7.0.3, cross-spawn@^7.0.0, cross-spawn@^7.0.1, cross-spawn@^7.0.2, c shebang-command "^2.0.0" which "^2.0.1" -cross-spawn@^6.0.0, cross-spawn@^6.0.5: - version "6.0.5" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" - integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== - dependencies: - nice-try "^1.0.4" - path-key "^2.0.1" - semver "^5.5.0" - shebang-command "^1.2.0" - which "^1.2.9" - "crypt@>= 0.0.1": version "0.0.2" resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" @@ -5507,23 +3020,6 @@ css-what@^6.1.0: resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== -cssom@^0.4.1: - version "0.4.4" - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10" - integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw== - -cssom@~0.3.6: - version "0.3.8" - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" - integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== - -cssstyle@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852" - integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== - dependencies: - cssom "~0.3.6" - d@1, d@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a" @@ -5532,11 +3028,6 @@ d@1, d@^1.0.1: es5-ext "^0.10.50" type "^1.0.1" -damerau-levenshtein@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz#b43d286ccbd36bc5b2f7ed41caf2d0aba1f8a6e7" - integrity sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA== - dashdash@^1.12.0: version "1.14.1" resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" @@ -5544,26 +3035,12 @@ dashdash@^1.12.0: dependencies: assert-plus "^1.0.0" -data-uri-to-buffer@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz#594b8973938c5bc2c33046535785341abc4f3636" - integrity sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og== - -data-urls@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-1.1.0.tgz#15ee0582baa5e22bb59c77140da8f9c76963bbfe" - integrity sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ== - dependencies: - abab "^2.0.0" - whatwg-mimetype "^2.2.0" - whatwg-url "^7.0.0" - death@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/death/-/death-1.1.0.tgz#01aa9c401edd92750514470b8266390c66c67318" integrity sha512-vsV6S4KVHvTGxbEcij7hkWRv0It+sGGWVOM67dQde/o5Xjnr+KmLjxWJii2uEObIrt1CcM9w0Yaovx+iOlIL+w== -debug@2.6.9, debug@^2.2.0, debug@^2.3.3: +debug@2.6.9, debug@^2.2.0: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== @@ -5577,20 +3054,13 @@ debug@3.2.6: dependencies: ms "^2.1.1" -debug@4, debug@4.3.4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4: +debug@4, debug@4.3.4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== dependencies: ms "2.1.2" -debug@^3.2.6, debug@^3.2.7: - version "3.2.7" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" - integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== - dependencies: - ms "^2.1.1" - decamelize@^1.1.1, decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" @@ -5637,18 +3107,6 @@ deep-is@^0.1.3, deep-is@~0.1.3: resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== -deepmerge@^4.2.2: - version "4.3.1" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" - integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== - -defaults@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.4.tgz#b0b02062c1e2aa62ff5d9528f0f98baa90978d7a" - integrity sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A== - dependencies: - clone "^1.0.2" - defer-to-connect@^2.0.0, defer-to-connect@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587" @@ -5662,33 +3120,6 @@ define-properties@^1.1.2, define-properties@^1.1.3, define-properties@^1.1.4, de has-property-descriptors "^1.0.0" object-keys "^1.1.1" -define-property@^0.2.5: - version "0.2.5" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" - integrity sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA== - dependencies: - is-descriptor "^0.1.0" - -define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" - integrity sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA== - dependencies: - is-descriptor "^1.0.0" - -define-property@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" - integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== - dependencies: - is-descriptor "^1.0.2" - isobject "^3.0.1" - -delay@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/delay/-/delay-5.0.0.tgz#137045ef1b96e5071060dd5be60bf9334436bd1d" - integrity sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw== - delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" @@ -5699,11 +3130,6 @@ depd@2.0.0: resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== -dequal@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" - integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== - destroy@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" @@ -5714,11 +3140,6 @@ detect-indent@^5.0.0: resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d" integrity sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g== -detect-newline@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" - integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== - detect-port@^1.3.0: version "1.5.1" resolved "https://registry.yarnpkg.com/detect-port/-/detect-port-1.5.1.tgz#451ca9b6eaf20451acb0799b8ab40dff7718727b" @@ -5727,16 +3148,6 @@ detect-port@^1.3.0: address "^1.0.1" debug "4" -diff-sequences@^25.2.6: - version "25.2.6" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-25.2.6.tgz#5f467c00edd35352b7bca46d7927d60e687a76dd" - integrity sha512-Hq8o7+6GaZeoFjtpgvRBUknSXNeJiCx7V9Fr94ZMljNiCr9n9L8H8aJqgWOQiDDGdyn29fRNcDdRVJ5fdyihfg== - -diff-sequences@^29.4.3: - version "29.4.3" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.4.3.tgz#9314bc1fabe09267ffeca9cbafc457d8499a13f2" - integrity sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA== - diff@3.5.0: version "3.5.0" resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" @@ -5782,39 +3193,6 @@ dns-packet@^5.3.0: dependencies: "@leichtgewicht/ip-codec" "^2.0.1" -docker-compose@0.23.19: - version "0.23.19" - resolved "https://registry.yarnpkg.com/docker-compose/-/docker-compose-0.23.19.tgz#9947726e2fe67bdfa9e8efe1ff15aa0de2e10eb8" - integrity sha512-v5vNLIdUqwj4my80wxFDkNH+4S85zsRuH29SO7dCWVWPCMt/ohZBsGN6g6KXWifT0pzQ7uOxqEKCYCDPJ8Vz4g== - dependencies: - yaml "^1.10.2" - -docker-modem@^1.0.8: - version "1.0.9" - resolved "https://registry.yarnpkg.com/docker-modem/-/docker-modem-1.0.9.tgz#a1f13e50e6afb6cf3431b2d5e7aac589db6aaba8" - integrity sha512-lVjqCSCIAUDZPAZIeyM125HXfNvOmYYInciphNrLrylUtKyW66meAjSPXWchKVzoIYZx69TPnAepVSSkeawoIw== - dependencies: - JSONStream "1.3.2" - debug "^3.2.6" - readable-stream "~1.0.26-4" - split-ca "^1.0.0" - -dockerode@2.5.8: - version "2.5.8" - resolved "https://registry.yarnpkg.com/dockerode/-/dockerode-2.5.8.tgz#1b661e36e1e4f860e25f56e0deabe9f87f1d0acc" - integrity sha512-+7iOUYBeDTScmOmQqpUYQaE7F4vvIt6+gIZNHWhqAQEI887tiPFB9OvXI/HzQYqfUNvukMK+9myLW63oTJPZpw== - dependencies: - concat-stream "~1.6.2" - docker-modem "^1.0.8" - tar-fs "~1.16.3" - -doctrine@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" - integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== - dependencies: - esutils "^2.0.2" - doctrine@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" @@ -5841,13 +3219,6 @@ domelementtype@^2.3.0: resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== -domexception@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/domexception/-/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90" - integrity sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug== - dependencies: - webidl-conversions "^4.0.2" - domhandler@^5.0.2, domhandler@^5.0.3: version "5.0.3" resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31" @@ -5894,20 +3265,6 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== -ejs@3.1.6: - version "3.1.6" - resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.6.tgz#5bfd0a0689743bb5268b3550cceeebbc1702822a" - integrity sha512-9lt9Zse4hPucPkoP7FHDF0LQAlGyF9JVpnClFLFH3aSSbxmyoqINRpp/9wePWJTUl4KOQwRL72Iw3InHPDkoGw== - dependencies: - jake "^10.6.1" - -ejs@^3.1.8: - version "3.1.9" - resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.9.tgz#03c9e8777fe12686a9effcef22303ca3d8eeb361" - integrity sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ== - dependencies: - jake "^10.8.5" - electron-fetch@^1.7.2: version "1.9.1" resolved "https://registry.yarnpkg.com/electron-fetch/-/electron-fetch-1.9.1.tgz#e28bfe78d467de3f2dec884b1d72b8b05322f30f" @@ -5915,11 +3272,6 @@ electron-fetch@^1.7.2: dependencies: encoding "^0.1.13" -electron-to-chromium@^1.4.431: - version "1.4.432" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.432.tgz#154a69d5ead974347f534aea4d28b03c7149fd7b" - integrity sha512-yz3U/khQgAFT2HURJA3/F4fKIyO2r5eK09BQzBZFd6BvBSSaRuzKc2ZNBHtJcO75/EKiRYbVYJZ2RB0P4BuD2g== - elliptic@6.5.4, elliptic@^6.4.0, elliptic@^6.5.2, elliptic@^6.5.4: version "6.5.4" resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" @@ -5933,11 +3285,6 @@ elliptic@6.5.4, elliptic@^6.4.0, elliptic@^6.5.2, elliptic@^6.5.4: minimalistic-assert "^1.0.1" minimalistic-crypto-utils "^1.0.1" -emittery@0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.10.0.tgz#bb373c660a9d421bb44706ec4967ed50c02a8026" - integrity sha512-AGvFfs+d0JKCJQ4o01ASQLGPmSCxgfU9RFXvzPvZdjKK8oscynksuJhWrSTSw7j7Ep/sZct5b5ZhYCi8S/t0HQ== - emoji-regex@^7.0.1: version "7.0.3" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" @@ -5970,14 +3317,14 @@ encoding@^0.1.13: dependencies: iconv-lite "^0.6.2" -end-of-stream@^1.0.0, end-of-stream@^1.1.0: +end-of-stream@^1.1.0: version "1.4.4" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== dependencies: once "^1.4.0" -enquirer@2.3.6, enquirer@^2.3.0, enquirer@^2.3.4, enquirer@^2.3.6: +enquirer@^2.3.0, enquirer@^2.3.6: version "2.3.6" resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== @@ -6060,13 +3407,6 @@ es-set-tostringtag@^2.0.1: has "^1.0.3" has-tostringtag "^1.0.0" -es-shim-unscopables@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz#702e632193201e3edf8713635d083d378e510241" - integrity sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w== - dependencies: - has "^1.0.3" - es-to-primitive@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" @@ -6094,18 +3434,11 @@ es6-iterator@^2.0.3: es5-ext "^0.10.35" es6-symbol "^3.1.1" -es6-promise@^4.0.3, es6-promise@^4.2.8: +es6-promise@^4.2.8: version "4.2.8" resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== -es6-promisify@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" - integrity sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ== - dependencies: - es6-promise "^4.0.3" - es6-symbol@^3.1.1, es6-symbol@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18" @@ -6114,133 +3447,6 @@ es6-symbol@^3.1.1, es6-symbol@^3.1.3: d "^1.0.1" ext "^1.1.2" -esbuild-android-64@0.14.54: - version "0.14.54" - resolved "https://registry.yarnpkg.com/esbuild-android-64/-/esbuild-android-64-0.14.54.tgz#505f41832884313bbaffb27704b8bcaa2d8616be" - integrity sha512-Tz2++Aqqz0rJ7kYBfz+iqyE3QMycD4vk7LBRyWaAVFgFtQ/O8EJOnVmTOiDWYZ/uYzB4kvP+bqejYdVKzE5lAQ== - -esbuild-android-arm64@0.14.54: - version "0.14.54" - resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.14.54.tgz#8ce69d7caba49646e009968fe5754a21a9871771" - integrity sha512-F9E+/QDi9sSkLaClO8SOV6etqPd+5DgJje1F9lOWoNncDdOBL2YF59IhsWATSt0TLZbYCf3pNlTHvVV5VfHdvg== - -esbuild-darwin-64@0.14.54: - version "0.14.54" - resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.14.54.tgz#24ba67b9a8cb890a3c08d9018f887cc221cdda25" - integrity sha512-jtdKWV3nBviOd5v4hOpkVmpxsBy90CGzebpbO9beiqUYVMBtSc0AL9zGftFuBon7PNDcdvNCEuQqw2x0wP9yug== - -esbuild-darwin-arm64@0.14.54: - version "0.14.54" - resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.54.tgz#3f7cdb78888ee05e488d250a2bdaab1fa671bf73" - integrity sha512-OPafJHD2oUPyvJMrsCvDGkRrVCar5aVyHfWGQzY1dWnzErjrDuSETxwA2HSsyg2jORLY8yBfzc1MIpUkXlctmw== - -esbuild-freebsd-64@0.14.54: - version "0.14.54" - resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.54.tgz#09250f997a56ed4650f3e1979c905ffc40bbe94d" - integrity sha512-OKwd4gmwHqOTp4mOGZKe/XUlbDJ4Q9TjX0hMPIDBUWWu/kwhBAudJdBoxnjNf9ocIB6GN6CPowYpR/hRCbSYAg== - -esbuild-freebsd-arm64@0.14.54: - version "0.14.54" - resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.54.tgz#bafb46ed04fc5f97cbdb016d86947a79579f8e48" - integrity sha512-sFwueGr7OvIFiQT6WeG0jRLjkjdqWWSrfbVwZp8iMP+8UHEHRBvlaxL6IuKNDwAozNUmbb8nIMXa7oAOARGs1Q== - -esbuild-linux-32@0.14.54: - version "0.14.54" - resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.14.54.tgz#e2a8c4a8efdc355405325033fcebeb941f781fe5" - integrity sha512-1ZuY+JDI//WmklKlBgJnglpUL1owm2OX+8E1syCD6UAxcMM/XoWd76OHSjl/0MR0LisSAXDqgjT3uJqT67O3qw== - -esbuild-linux-64@0.14.54: - version "0.14.54" - resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.14.54.tgz#de5fdba1c95666cf72369f52b40b03be71226652" - integrity sha512-EgjAgH5HwTbtNsTqQOXWApBaPVdDn7XcK+/PtJwZLT1UmpLoznPd8c5CxqsH2dQK3j05YsB3L17T8vE7cp4cCg== - -esbuild-linux-arm64@0.14.54: - version "0.14.54" - resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.54.tgz#dae4cd42ae9787468b6a5c158da4c84e83b0ce8b" - integrity sha512-WL71L+0Rwv+Gv/HTmxTEmpv0UgmxYa5ftZILVi2QmZBgX3q7+tDeOQNqGtdXSdsL8TQi1vIaVFHUPDe0O0kdig== - -esbuild-linux-arm@0.14.54: - version "0.14.54" - resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.14.54.tgz#a2c1dff6d0f21dbe8fc6998a122675533ddfcd59" - integrity sha512-qqz/SjemQhVMTnvcLGoLOdFpCYbz4v4fUo+TfsWG+1aOu70/80RV6bgNpR2JCrppV2moUQkww+6bWxXRL9YMGw== - -esbuild-linux-mips64le@0.14.54: - version "0.14.54" - resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.54.tgz#d9918e9e4cb972f8d6dae8e8655bf9ee131eda34" - integrity sha512-qTHGQB8D1etd0u1+sB6p0ikLKRVuCWhYQhAHRPkO+OF3I/iSlTKNNS0Lh2Oc0g0UFGguaFZZiPJdJey3AGpAlw== - -esbuild-linux-ppc64le@0.14.54: - version "0.14.54" - resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.54.tgz#3f9a0f6d41073fb1a640680845c7de52995f137e" - integrity sha512-j3OMlzHiqwZBDPRCDFKcx595XVfOfOnv68Ax3U4UKZ3MTYQB5Yz3X1mn5GnodEVYzhtZgxEBidLWeIs8FDSfrQ== - -esbuild-linux-riscv64@0.14.54: - version "0.14.54" - resolved "https://registry.yarnpkg.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.54.tgz#618853c028178a61837bc799d2013d4695e451c8" - integrity sha512-y7Vt7Wl9dkOGZjxQZnDAqqn+XOqFD7IMWiewY5SPlNlzMX39ocPQlOaoxvT4FllA5viyV26/QzHtvTjVNOxHZg== - -esbuild-linux-s390x@0.14.54: - version "0.14.54" - resolved "https://registry.yarnpkg.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.54.tgz#d1885c4c5a76bbb5a0fe182e2c8c60eb9e29f2a6" - integrity sha512-zaHpW9dziAsi7lRcyV4r8dhfG1qBidQWUXweUjnw+lliChJqQr+6XD71K41oEIC3Mx1KStovEmlzm+MkGZHnHA== - -esbuild-netbsd-64@0.14.54: - version "0.14.54" - resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.54.tgz#69ae917a2ff241b7df1dbf22baf04bd330349e81" - integrity sha512-PR01lmIMnfJTgeU9VJTDY9ZerDWVFIUzAtJuDHwwceppW7cQWjBBqP48NdeRtoP04/AtO9a7w3viI+PIDr6d+w== - -esbuild-openbsd-64@0.14.54: - version "0.14.54" - resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.54.tgz#db4c8495287a350a6790de22edea247a57c5d47b" - integrity sha512-Qyk7ikT2o7Wu76UsvvDS5q0amJvmRzDyVlL0qf5VLsLchjCa1+IAvd8kTBgUxD7VBUUVgItLkk609ZHUc1oCaw== - -esbuild-sunos-64@0.14.54: - version "0.14.54" - resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.14.54.tgz#54287ee3da73d3844b721c21bc80c1dc7e1bf7da" - integrity sha512-28GZ24KmMSeKi5ueWzMcco6EBHStL3B6ubM7M51RmPwXQGLe0teBGJocmWhgwccA1GeFXqxzILIxXpHbl9Q/Kw== - -esbuild-windows-32@0.14.54: - version "0.14.54" - resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.14.54.tgz#f8aaf9a5667630b40f0fb3aa37bf01bbd340ce31" - integrity sha512-T+rdZW19ql9MjS7pixmZYVObd9G7kcaZo+sETqNH4RCkuuYSuv9AGHUVnPoP9hhuE1WM1ZimHz1CIBHBboLU7w== - -esbuild-windows-64@0.14.54: - version "0.14.54" - resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.14.54.tgz#bf54b51bd3e9b0f1886ffdb224a4176031ea0af4" - integrity sha512-AoHTRBUuYwXtZhjXZbA1pGfTo8cJo3vZIcWGLiUcTNgHpJJMC1rVA44ZereBHMJtotyN71S8Qw0npiCIkW96cQ== - -esbuild-windows-arm64@0.14.54: - version "0.14.54" - resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.54.tgz#937d15675a15e4b0e4fafdbaa3a01a776a2be982" - integrity sha512-M0kuUvXhot1zOISQGXwWn6YtS+Y/1RT9WrVIOywZnJHo3jCDyewAc79aKNQWFCQm+xNHVTq9h8dZKvygoXQQRg== - -esbuild@^0.14.18: - version "0.14.54" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.14.54.tgz#8b44dcf2b0f1a66fc22459943dccf477535e9aa2" - integrity sha512-Cy9llcy8DvET5uznocPyqL3BFRrFXSVqbgpMJ9Wz8oVjZlh/zUSNbPRbov0VX7VxN2JH1Oa0uNxZ7eLRb62pJA== - optionalDependencies: - "@esbuild/linux-loong64" "0.14.54" - esbuild-android-64 "0.14.54" - esbuild-android-arm64 "0.14.54" - esbuild-darwin-64 "0.14.54" - esbuild-darwin-arm64 "0.14.54" - esbuild-freebsd-64 "0.14.54" - esbuild-freebsd-arm64 "0.14.54" - esbuild-linux-32 "0.14.54" - esbuild-linux-64 "0.14.54" - esbuild-linux-arm "0.14.54" - esbuild-linux-arm64 "0.14.54" - esbuild-linux-mips64le "0.14.54" - esbuild-linux-ppc64le "0.14.54" - esbuild-linux-riscv64 "0.14.54" - esbuild-linux-s390x "0.14.54" - esbuild-netbsd-64 "0.14.54" - esbuild-openbsd-64 "0.14.54" - esbuild-sunos-64 "0.14.54" - esbuild-windows-32 "0.14.54" - esbuild-windows-64 "0.14.54" - esbuild-windows-arm64 "0.14.54" - escalade@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" @@ -6261,154 +3467,24 @@ escape-string-regexp@4.0.0, escape-string-regexp@^4.0.0: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== -escape-string-regexp@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" - integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== - -escodegen@1.8.x: - version "1.8.1" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.8.1.tgz#5a5b53af4693110bebb0867aa3430dd3b70a1018" - integrity sha512-yhi5S+mNTOuRvyW4gWlg5W1byMaQGWWSYHXsuFZ7GBo7tpyOwi2EdzMP/QWxh9hwkD2m+wDVHJsxhRIj+v/b/A== - dependencies: - esprima "^2.7.1" - estraverse "^1.9.1" - esutils "^2.0.2" - optionator "^0.8.1" - optionalDependencies: - source-map "~0.2.0" - -escodegen@^1.11.1: - version "1.14.3" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503" - integrity sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw== - dependencies: - esprima "^4.0.1" - estraverse "^4.2.0" - esutils "^2.0.2" - optionator "^0.8.1" - optionalDependencies: - source-map "~0.6.1" - -eslint-config-prettier@^6.0.0: - version "6.15.0" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-6.15.0.tgz#7f93f6cb7d45a92f1537a70ecc06366e1ac6fed9" - integrity sha512-a1+kOYLR8wMGustcgAjdydMsQ2A/2ipRPwRKUmfYaSxc9ZPcrku080Ctl6zrZzZNs/U82MjSv+qKREkoq3bJaw== - dependencies: - get-stdin "^6.0.0" - -eslint-config-prettier@^8.8.0: - version "8.8.0" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.8.0.tgz#bfda738d412adc917fd7b038857110efe98c9348" - integrity sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA== - -eslint-config-react-app@^5.2.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/eslint-config-react-app/-/eslint-config-react-app-5.2.1.tgz#698bf7aeee27f0cea0139eaef261c7bf7dd623df" - integrity sha512-pGIZ8t0mFLcV+6ZirRgYK6RVqUIKRIi9MmgzUEmrIknsn3AdO0I32asO86dJgloHq+9ZPl8UIg8mYrvgP5u2wQ== - dependencies: - confusing-browser-globals "^1.0.9" - -eslint-import-resolver-node@^0.3.7: - version "0.3.7" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz#83b375187d412324a1963d84fa664377a23eb4d7" - integrity sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA== - dependencies: - debug "^3.2.7" - is-core-module "^2.11.0" - resolve "^1.22.1" - -eslint-module-utils@^2.7.4: - version "2.8.0" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz#e439fee65fc33f6bba630ff621efc38ec0375c49" - integrity sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw== - dependencies: - debug "^3.2.7" - -eslint-plugin-flowtype@^3.13.0: - version "3.13.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-flowtype/-/eslint-plugin-flowtype-3.13.0.tgz#e241ebd39c0ce519345a3f074ec1ebde4cf80f2c" - integrity sha512-bhewp36P+t7cEV0b6OdmoRWJCBYRiHFlqPZAG1oS3SF+Y0LQkeDvFSM4oxoxvczD1OdONCXMlJfQFiWLcV9urw== - dependencies: - lodash "^4.17.15" - -eslint-plugin-import@^2.18.2: - version "2.27.5" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz#876a6d03f52608a3e5bb439c2550588e51dd6c65" - integrity sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow== - dependencies: - array-includes "^3.1.6" - array.prototype.flat "^1.3.1" - array.prototype.flatmap "^1.3.1" - debug "^3.2.7" - doctrine "^2.1.0" - eslint-import-resolver-node "^0.3.7" - eslint-module-utils "^2.7.4" - has "^1.0.3" - is-core-module "^2.11.0" - is-glob "^4.0.3" - minimatch "^3.1.2" - object.values "^1.1.6" - resolve "^1.22.1" - semver "^6.3.0" - tsconfig-paths "^3.14.1" - -eslint-plugin-jsx-a11y@^6.2.3: - version "6.7.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.7.1.tgz#fca5e02d115f48c9a597a6894d5bcec2f7a76976" - integrity sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA== - dependencies: - "@babel/runtime" "^7.20.7" - aria-query "^5.1.3" - array-includes "^3.1.6" - array.prototype.flatmap "^1.3.1" - ast-types-flow "^0.0.7" - axe-core "^4.6.2" - axobject-query "^3.1.1" - damerau-levenshtein "^1.0.8" - emoji-regex "^9.2.2" - has "^1.0.3" - jsx-ast-utils "^3.3.3" - language-tags "=1.0.5" - minimatch "^3.1.2" - object.entries "^1.1.6" - object.fromentries "^2.0.6" - semver "^6.3.0" - -eslint-plugin-prettier@^3.1.0: - version "3.4.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.1.tgz#e9ddb200efb6f3d05ffe83b1665a716af4a387e5" - integrity sha512-htg25EUYUeIhKHXjOinK4BgCcDwtLHjqaxCDsMy5nbnUMkKFvIhMVCp+5GFUXQ4Nr8lBsPqtGAqBenbpFqAA2g== +escodegen@1.8.x: + version "1.8.1" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.8.1.tgz#5a5b53af4693110bebb0867aa3430dd3b70a1018" + integrity sha512-yhi5S+mNTOuRvyW4gWlg5W1byMaQGWWSYHXsuFZ7GBo7tpyOwi2EdzMP/QWxh9hwkD2m+wDVHJsxhRIj+v/b/A== dependencies: - prettier-linter-helpers "^1.0.0" + esprima "^2.7.1" + estraverse "^1.9.1" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.2.0" -eslint-plugin-react-hooks@^2.2.0: - version "2.5.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-2.5.1.tgz#4ef5930592588ce171abeb26f400c7fbcbc23cd0" - integrity sha512-Y2c4b55R+6ZzwtTppKwSmK/Kar8AdLiC2f9NADCuxbcTgPPg41Gyqa6b9GppgXSvCtkRw43ZE86CT5sejKC6/g== - -eslint-plugin-react@^7.14.3: - version "7.32.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.32.2.tgz#e71f21c7c265ebce01bcbc9d0955170c55571f10" - integrity sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg== - dependencies: - array-includes "^3.1.6" - array.prototype.flatmap "^1.3.1" - array.prototype.tosorted "^1.1.1" - doctrine "^2.1.0" - estraverse "^5.3.0" - jsx-ast-utils "^2.4.1 || ^3.0.0" - minimatch "^3.1.2" - object.entries "^1.1.6" - object.fromentries "^2.0.6" - object.hasown "^1.1.2" - object.values "^1.1.6" - prop-types "^15.8.1" - resolve "^2.0.0-next.4" - semver "^6.3.0" - string.prototype.matchall "^4.0.8" +eslint-config-prettier@^8.8.0: + version "8.8.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.8.0.tgz#bfda738d412adc917fd7b038857110efe98c9348" + integrity sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA== -eslint-scope@^5.0.0, eslint-scope@^5.1.1: +eslint-scope@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== @@ -6424,73 +3500,11 @@ eslint-scope@^7.2.0: esrecurse "^4.3.0" estraverse "^5.2.0" -eslint-utils@^1.4.3: - version "1.4.3" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f" - integrity sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q== - dependencies: - eslint-visitor-keys "^1.1.0" - -eslint-utils@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" - integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== - dependencies: - eslint-visitor-keys "^1.1.0" - -eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" - integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== - eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1: version "3.4.1" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz#c22c48f48942d08ca824cc526211ae400478a994" integrity sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA== -eslint@^6.1.0: - version "6.8.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.8.0.tgz#62262d6729739f9275723824302fb227c8c93ffb" - integrity sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig== - dependencies: - "@babel/code-frame" "^7.0.0" - ajv "^6.10.0" - chalk "^2.1.0" - cross-spawn "^6.0.5" - debug "^4.0.1" - doctrine "^3.0.0" - eslint-scope "^5.0.0" - eslint-utils "^1.4.3" - eslint-visitor-keys "^1.1.0" - espree "^6.1.2" - esquery "^1.0.1" - esutils "^2.0.2" - file-entry-cache "^5.0.1" - functional-red-black-tree "^1.0.1" - glob-parent "^5.0.0" - globals "^12.1.0" - ignore "^4.0.6" - import-fresh "^3.0.0" - imurmurhash "^0.1.4" - inquirer "^7.0.0" - is-glob "^4.0.0" - js-yaml "^3.13.1" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.3.0" - lodash "^4.17.14" - minimatch "^3.0.4" - mkdirp "^0.5.1" - natural-compare "^1.4.0" - optionator "^0.8.3" - progress "^2.0.0" - regexpp "^2.0.1" - semver "^6.1.2" - strip-ansi "^5.2.0" - strip-json-comments "^3.0.1" - table "^5.2.3" - text-table "^0.2.0" - v8-compile-cache "^2.0.3" - eslint@^8.41.0: version "8.43.0" resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.43.0.tgz#3e8c6066a57097adfd9d390b8fc93075f257a094" @@ -6536,15 +3550,6 @@ eslint@^8.41.0: strip-json-comments "^3.1.0" text-table "^0.2.0" -espree@^6.1.2: - version "6.2.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-6.2.1.tgz#77fc72e1fd744a2052c20f38a5b575832e82734a" - integrity sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw== - dependencies: - acorn "^7.1.1" - acorn-jsx "^5.2.0" - eslint-visitor-keys "^1.1.0" - espree@^9.5.2: version "9.5.2" resolved "https://registry.yarnpkg.com/espree/-/espree-9.5.2.tgz#e994e7dc33a082a7a82dceaf12883a829353215b" @@ -6559,12 +3564,12 @@ esprima@2.7.x, esprima@^2.7.1: resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" integrity sha512-OarPfz0lFCiW4/AV2Oy1Rp9qu0iusTKqykwTspGCZtPxmF81JR4MmIebvF1F9+UOKth2ZubLQ4XGGaU+hSn99A== -esprima@^4.0.0, esprima@^4.0.1, esprima@~4.0.0: +esprima@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== -esquery@^1.0.1, esquery@^1.4.2: +esquery@^1.4.2: version "1.5.0" resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== @@ -6583,21 +3588,16 @@ estraverse@^1.9.1: resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44" integrity sha512-25w1fMXQrGdoquWnScXZGckOv+Wes+JDnuN/+7ex3SauFRS72r2lFDec0EKPt2YD1wUJ/IrfEex+9yp4hfSOJA== -estraverse@^4.1.1, estraverse@^4.2.0: +estraverse@^4.1.1: version "4.3.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== -estraverse@^5.1.0, estraverse@^5.2.0, estraverse@^5.3.0: +estraverse@^5.1.0, estraverse@^5.2.0: version "5.3.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== -estree-walker@^0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.6.1.tgz#53049143f40c6eb918b23671d1fe3219f3a1b362" - integrity sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w== - estree-walker@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700" @@ -6830,112 +3830,6 @@ evp_bytestokey@^1.0.3: md5.js "^1.3.4" safe-buffer "^5.1.1" -exec-sh@^0.3.2: - version "0.3.6" - resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.6.tgz#ff264f9e325519a60cb5e273692943483cca63bc" - integrity sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w== - -execa@5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" - integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== - dependencies: - cross-spawn "^7.0.3" - get-stream "^6.0.0" - human-signals "^2.1.0" - is-stream "^2.0.0" - merge-stream "^2.0.0" - npm-run-path "^4.0.1" - onetime "^5.1.2" - signal-exit "^3.0.3" - strip-final-newline "^2.0.0" - -execa@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" - integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== - dependencies: - cross-spawn "^6.0.0" - get-stream "^4.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" - -execa@^3.2.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-3.4.0.tgz#c08ed4550ef65d858fac269ffc8572446f37eb89" - integrity sha512-r9vdGQk4bmCuK1yKQu1KTwcT2zwfWdbdaXfCtAh+5nU/4fSX+JAb7vZGvI5naJrQlvONrEB20jeruESI69530g== - dependencies: - cross-spawn "^7.0.0" - get-stream "^5.0.0" - human-signals "^1.1.1" - is-stream "^2.0.0" - merge-stream "^2.0.0" - npm-run-path "^4.0.0" - onetime "^5.1.0" - p-finally "^2.0.0" - signal-exit "^3.0.2" - strip-final-newline "^2.0.0" - -execa@^4.0.3: - version "4.1.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a" - integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== - dependencies: - cross-spawn "^7.0.0" - get-stream "^5.0.0" - human-signals "^1.1.1" - is-stream "^2.0.0" - merge-stream "^2.0.0" - npm-run-path "^4.0.0" - onetime "^5.1.0" - signal-exit "^3.0.2" - strip-final-newline "^2.0.0" - -exit@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" - integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== - -expand-brackets@^2.1.4: - version "2.1.4" - resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" - integrity sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA== - dependencies: - debug "^2.3.3" - define-property "^0.2.5" - extend-shallow "^2.0.1" - posix-character-classes "^0.1.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -expect@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/expect/-/expect-25.5.0.tgz#f07f848712a2813bb59167da3fb828ca21f58bba" - integrity sha512-w7KAXo0+6qqZZhovCaBVPSIqQp7/UTcx4M9uKt2m6pd2VB1voyC8JizLRqeEqud3AAVP02g+hbErDu5gu64tlA== - dependencies: - "@jest/types" "^25.5.0" - ansi-styles "^4.0.0" - jest-get-type "^25.2.6" - jest-matcher-utils "^25.5.0" - jest-message-util "^25.5.0" - jest-regex-util "^25.2.6" - -expect@^29.0.0: - version "29.6.1" - resolved "https://registry.yarnpkg.com/expect/-/expect-29.6.1.tgz#64dd1c8f75e2c0b209418f2b8d36a07921adfdf1" - integrity sha512-XEdDLonERCU1n9uR56/Stx9OqojaLAQtZf9PrCHH9Hl8YXiEIka3H4NXJ3NOIBmQJTg7+j7buh34PMHfJujc8g== - dependencies: - "@jest/expect-utils" "^29.6.1" - "@types/node" "*" - jest-get-type "^29.4.3" - jest-matcher-utils "^29.6.1" - jest-message-util "^29.6.1" - jest-util "^29.6.1" - express@^4.14.0: version "4.18.2" resolved "https://registry.yarnpkg.com/express/-/express-4.18.2.tgz#3fabe08296e930c796c19e3c516979386ba9fd59" @@ -6980,54 +3874,11 @@ ext@^1.1.2: dependencies: type "^2.7.2" -extend-shallow@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" - integrity sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug== - dependencies: - is-extendable "^0.1.0" - -extend-shallow@^3.0.0, extend-shallow@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" - integrity sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q== - dependencies: - assign-symbols "^1.0.0" - is-extendable "^1.0.1" - extend@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== -external-editor@^3.0.3: - version "3.1.0" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" - integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== - dependencies: - chardet "^0.7.0" - iconv-lite "^0.4.24" - tmp "^0.0.33" - -extglob@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" - integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== - dependencies: - array-unique "^0.3.2" - define-property "^1.0.0" - expand-brackets "^2.1.4" - extend-shallow "^2.0.1" - fragment-cache "^0.2.1" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -extract-files@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/extract-files/-/extract-files-9.0.0.tgz#8a7744f2437f81f5ed3250ed9f1550de902fe54a" - integrity sha512-CvdFfHkC95B4bBBk36hcEmvdR2awOdhhVUYH6S/zrVj3477zven/fJMYg7121h4T1xHZC+tetUpubpAhxwI7hQ== - extsprintf@1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" @@ -7038,11 +3889,6 @@ extsprintf@^1.2.0: resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07" integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA== -eyes@^0.1.8: - version "0.1.8" - resolved "https://registry.yarnpkg.com/eyes/-/eyes-0.1.8.tgz#62cf120234c683785d902348a800ef3e0cc20bc0" - integrity sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ== - fast-base64-decode@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fast-base64-decode/-/fast-base64-decode-1.0.0.tgz#b434a0dd7d92b12b43f26819300d2dafb83ee418" @@ -7055,11 +3901,6 @@ fast-check@3.1.1: dependencies: pure-rand "^5.0.1" -fast-decode-uri-component@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/fast-decode-uri-component/-/fast-decode-uri-component-1.0.1.tgz#46f8b6c22b30ff7a81357d4f59abfae938202543" - integrity sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg== - fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" @@ -7075,7 +3916,7 @@ fast-fifo@^1.0.0: resolved "https://registry.yarnpkg.com/fast-fifo/-/fast-fifo-1.2.0.tgz#2ee038da2468e8623066dee96958b0c1763aa55a" integrity sha512-NcvQXt7Cky1cNau15FWy64IjuO8X0JijhTBBrJj1YlxlDfRkJXNaK9RFUjwpfDPzMdv7wB38jr53l9tkNLxnWg== -fast-glob@^3.0.3, fast-glob@^3.2.12, fast-glob@^3.2.9: +fast-glob@^3.0.3, fast-glob@^3.2.9: version "3.2.12" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80" integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== @@ -7086,7 +3927,7 @@ fast-glob@^3.0.3, fast-glob@^3.2.12, fast-glob@^3.2.9: merge2 "^1.3.0" micromatch "^4.0.4" -fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0: +fast-json-stable-stringify@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== @@ -7096,20 +3937,6 @@ fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== -fast-querystring@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/fast-querystring/-/fast-querystring-1.1.2.tgz#a6d24937b4fc6f791b4ee31dcb6f53aeafb89f53" - integrity sha512-g6KuKWmFXc0fID8WWH0jit4g0AGBoJhCkJMb1RmbsSEUNvQ+ZC8D6CUZ+GtF8nMzSPXnhiePyyqqipzNNEnHjg== - dependencies: - fast-decode-uri-component "^1.0.1" - -fast-url-parser@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/fast-url-parser/-/fast-url-parser-1.1.3.tgz#f4af3ea9f34d8a271cf58ad2b3759f431f0b318d" - integrity sha512-5jOCVXADYNuRkKFzNJ0dCCewsZiYo0dz8QNYljkOpFC6r2U4OBmKtvm/Tsuh4w1YYdDqDb31a8TVhBJ2OJKdqQ== - dependencies: - punycode "^1.3.2" - fastq@^1.6.0: version "1.15.0" resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" @@ -7117,27 +3944,6 @@ fastq@^1.6.0: dependencies: reusify "^1.0.4" -fb-watchman@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.2.tgz#e9524ee6b5c77e9e5001af0f85f3adbb8623255c" - integrity sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA== - dependencies: - bser "2.1.1" - -figures@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" - integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== - dependencies: - escape-string-regexp "^1.0.5" - -file-entry-cache@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" - integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g== - dependencies: - flat-cache "^2.0.1" - file-entry-cache@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" @@ -7145,23 +3951,6 @@ file-entry-cache@^6.0.1: dependencies: flat-cache "^3.0.4" -filelist@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.4.tgz#f78978a1e944775ff9e62e744424f215e58352b5" - integrity sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q== - dependencies: - minimatch "^5.0.1" - -fill-range@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" - integrity sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ== - dependencies: - extend-shallow "^2.0.1" - is-number "^3.0.0" - repeat-string "^1.6.1" - to-regex-range "^2.1.0" - fill-range@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" @@ -7182,15 +3971,6 @@ finalhandler@1.2.0: statuses "2.0.1" unpipe "~1.0.0" -find-cache-dir@^3.3.1: - version "3.3.2" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.2.tgz#b30c5b6eff0730731aea9bbd9dbecbd80256d64b" - integrity sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig== - dependencies: - commondir "^1.0.1" - make-dir "^3.0.2" - pkg-dir "^4.1.0" - find-replace@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/find-replace/-/find-replace-3.0.0.tgz#3e7e23d3b05167a76f770c9fbd5258b0def68c38" @@ -7228,23 +4008,6 @@ find-up@^2.1.0: dependencies: locate-path "^2.0.0" -find-up@^4.0.0, find-up@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" - integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== - dependencies: - locate-path "^5.0.0" - path-exists "^4.0.0" - -flat-cache@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" - integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA== - dependencies: - flatted "^2.0.0" - rimraf "2.6.3" - write "1.0.3" - flat-cache@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" @@ -7265,11 +4028,6 @@ flat@^5.0.2: resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== -flatted@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" - integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA== - flatted@^3.1.0: version "3.2.7" resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" @@ -7294,11 +4052,6 @@ for-each@^0.3.3: dependencies: is-callable "^1.1.3" -for-in@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" - integrity sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ== - foreground-child@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d" @@ -7326,15 +4079,6 @@ form-data@^2.2.0: combined-stream "^1.0.6" mime-types "^2.1.12" -form-data@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" - integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.8" - mime-types "^2.1.12" - form-data@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" @@ -7368,42 +4112,11 @@ fp-ts@^1.0.0: resolved "https://registry.yarnpkg.com/fp-ts/-/fp-ts-1.19.5.tgz#3da865e585dfa1fdfd51785417357ac50afc520a" integrity sha512-wDNqTimnzs8QqpldiId9OavWK2NptormjXnRJTQecNjzwfyp6P/8s/zG8e4h3ja3oqkKaY72UlTjQYt/1yXf9A== -fragment-cache@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" - integrity sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA== - dependencies: - map-cache "^0.2.2" - fresh@0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== -fs-constants@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" - integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== - -fs-extra@8.1.0, fs-extra@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" - integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^4.0.0" - universalify "^0.1.0" - -fs-extra@9.1.0, fs-extra@^9.0.0, fs-extra@^9.1.0: - version "9.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" - integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== - dependencies: - at-least-node "^1.0.0" - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - fs-extra@^0.30.0: version "0.30.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-0.30.0.tgz#f233ffcc08d4da7d432daa449776989db1df93f0" @@ -7442,13 +4155,24 @@ fs-extra@^7.0.0, fs-extra@^7.0.1: jsonfile "^4.0.0" universalify "^0.1.0" -fs-jetpack@4.3.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/fs-jetpack/-/fs-jetpack-4.3.1.tgz#cdfd4b64e6bfdec7c7dc55c76b39efaa7853bb20" - integrity sha512-dbeOK84F6BiQzk2yqqCVwCPWTxAvVGJ3fMQc6E2wuEohS28mR6yHngbrKuVCK1KHRx/ccByDylqu4H5PCP2urQ== +fs-extra@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" + integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-extra@^9.1.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" + integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== dependencies: - minimatch "^3.0.2" - rimraf "^2.6.3" + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" fs-minipass@^1.2.7: version "1.2.7" @@ -7457,13 +4181,6 @@ fs-minipass@^1.2.7: dependencies: minipass "^2.6.0" -fs-minipass@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" - integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== - dependencies: - minipass "^3.0.0" - fs-readdir-recursive@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz#e32fc030a2ccee44a6b5371308da54be0b397d27" @@ -7474,16 +4191,16 @@ fs.realpath@^1.0.0: resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== -fsevents@^2.1.2, fsevents@~2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" - integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== - fsevents@~2.1.1: version "2.1.3" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== +fsevents@~2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" @@ -7509,32 +4226,6 @@ functions-have-names@^1.2.2, functions-have-names@^1.2.3: resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== -ganache@^7.8.0: - version "7.8.0" - resolved "https://registry.yarnpkg.com/ganache/-/ganache-7.8.0.tgz#02154384f246b66e98974cbcbb18e8372df3c2e0" - integrity sha512-IrUYvsaE/m2/NaVIZ7D/gCnsmyU/buechnH6MhUipzG1qJcZIwIp/DoP/LZUcHyhy0Bv0NKZD2pGOjpRhn7l7A== - dependencies: - "@trufflesuite/bigint-buffer" "1.1.10" - "@trufflesuite/uws-js-unofficial" "20.10.0-unofficial.2" - "@types/bn.js" "^5.1.0" - "@types/lru-cache" "5.1.1" - "@types/seedrandom" "3.0.1" - abstract-level "1.0.3" - abstract-leveldown "7.2.0" - async-eventemitter "0.2.4" - emittery "0.10.0" - keccak "3.0.2" - leveldown "6.1.0" - secp256k1 "4.0.3" - optionalDependencies: - bufferutil "4.0.5" - utf-8-validate "5.0.7" - -gensync@^1.0.0-beta.2: - version "1.0.0-beta.2" - resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" - integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== - get-caller-file@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" @@ -7565,36 +4256,19 @@ get-iterator@^1.0.2: resolved "https://registry.yarnpkg.com/get-iterator/-/get-iterator-1.0.2.tgz#cd747c02b4c084461fac14f48f6b45a80ed25c82" integrity sha512-v+dm9bNVfOYsY1OrhaCrmyOcYoSeVvbt+hHZ0Au+T+p1y+0Uyj9aMaGIeUTT6xdpRbWzDeYKvfOslPhggQMcsg== -get-package-type@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" - integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== - get-port@^3.1.0: version "3.2.0" resolved "https://registry.yarnpkg.com/get-port/-/get-port-3.2.0.tgz#dd7ce7de187c06c8bf353796ac71e099f0980ebc" integrity sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg== -get-stdin@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b" - integrity sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g== - -get-stream@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" - integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== - dependencies: - pump "^3.0.0" - -get-stream@^5.0.0, get-stream@^5.1.0: +get-stream@^5.1.0: version "5.2.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== dependencies: pump "^3.0.0" -get-stream@^6.0.0, get-stream@^6.0.1: +get-stream@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== @@ -7607,11 +4281,6 @@ get-symbol-description@^1.0.0: call-bind "^1.0.2" get-intrinsic "^1.1.1" -get-value@^2.0.3, get-value@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" - integrity sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA== - getpass@^0.1.1: version "0.1.7" resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" @@ -7627,7 +4296,7 @@ ghost-testrpc@^0.0.2: chalk "^2.4.2" node-emoji "^1.10.0" -glob-parent@^5.0.0, glob-parent@^5.1.2, glob-parent@~5.1.0, glob-parent@~5.1.2: +glob-parent@^5.1.2, glob-parent@~5.1.0, glob-parent@~5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== @@ -7677,16 +4346,6 @@ glob@7.2.0: once "^1.3.0" path-is-absolute "^1.0.0" -glob@9.3.5: - version "9.3.5" - resolved "https://registry.yarnpkg.com/glob/-/glob-9.3.5.tgz#ca2ed8ca452781a3009685607fdf025a899dfe21" - integrity sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q== - dependencies: - fs.realpath "^1.0.0" - minimatch "^8.0.2" - minipass "^4.2.4" - path-scurry "^1.6.1" - glob@^10.2.5: version "10.2.7" resolved "https://registry.yarnpkg.com/glob/-/glob-10.2.7.tgz#9dd2828cd5bc7bd861e7738d91e7113dda41d7d8" @@ -7709,7 +4368,7 @@ glob@^5.0.15: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.0.0, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: +glob@^7.0.0, glob@^7.1.3: version "7.2.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== @@ -7761,13 +4420,6 @@ globals@^11.1.0: resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== -globals@^12.1.0: - version "12.4.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-12.4.0.tgz#a18813576a41b00a24a97e7f815918c2e19925f8" - integrity sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg== - dependencies: - type-fest "^0.8.1" - globals@^13.19.0: version "13.20.0" resolved "https://registry.yarnpkg.com/globals/-/globals-13.20.0.tgz#ea276a1e508ffd4f1612888f9d1bad1e2717bf82" @@ -7782,11 +4434,6 @@ globalthis@^1.0.3: dependencies: define-properties "^1.1.3" -globalyzer@0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/globalyzer/-/globalyzer-0.1.0.tgz#cb76da79555669a1519d5a8edf093afaa0bf1465" - integrity sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q== - globby@10.0.1: version "10.0.1" resolved "https://registry.yarnpkg.com/globby/-/globby-10.0.1.tgz#4782c34cb75dd683351335c5829cc3420e606b22" @@ -7827,47 +4474,6 @@ globby@^11.1.0: merge2 "^1.4.1" slash "^3.0.0" -globrex@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/globrex/-/globrex-0.1.2.tgz#dd5d9ec826232730cd6793a5e33a9302985e6098" - integrity sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg== - -gluegun@5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/gluegun/-/gluegun-5.1.2.tgz#ffa0beda0fb6bbc089a867157b08602beae2c8cf" - integrity sha512-Cwx/8S8Z4YQg07a6AFsaGnnnmd8mN17414NcPS3OoDtZRwxgsvwRNJNg69niD6fDa8oNwslCG0xH7rEpRNNE/g== - dependencies: - apisauce "^2.1.5" - app-module-path "^2.2.0" - cli-table3 "0.6.0" - colors "1.4.0" - cosmiconfig "7.0.1" - cross-spawn "7.0.3" - ejs "3.1.6" - enquirer "2.3.6" - execa "5.1.1" - fs-jetpack "4.3.1" - lodash.camelcase "^4.3.0" - lodash.kebabcase "^4.1.1" - lodash.lowercase "^4.3.0" - lodash.lowerfirst "^4.3.1" - lodash.pad "^4.5.1" - lodash.padend "^4.6.1" - lodash.padstart "^4.6.1" - lodash.repeat "^4.1.0" - lodash.snakecase "^4.1.1" - lodash.startcase "^4.4.0" - lodash.trim "^4.5.1" - lodash.trimend "^4.5.1" - lodash.trimstart "^4.5.1" - lodash.uppercase "^4.3.0" - lodash.upperfirst "^4.3.1" - ora "4.0.2" - pluralize "^8.0.0" - semver "7.3.5" - which "2.0.2" - yargs-parser "^21.0.0" - gopd@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" @@ -7911,7 +4517,7 @@ got@^11.8.5: p-cancelable "^2.0.0" responselike "^2.0.0" -graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.9: +graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0, graceful-fs@^4.2.4: version "4.2.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== @@ -7926,40 +4532,11 @@ graphemer@^1.4.0: resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== -graphql-import-node@^0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/graphql-import-node/-/graphql-import-node-0.0.5.tgz#caf76a6cece10858b14f27cce935655398fc1bf0" - integrity sha512-OXbou9fqh9/Lm7vwXT0XoRN9J5+WCYKnbiTalgFDvkQERITRmcfncZs6aVABedd5B85yQU5EULS4a5pnbpuI0Q== - -graphql-request@4.3.0, graphql-request@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/graphql-request/-/graphql-request-4.3.0.tgz#b934e08fcae764aa2cdc697d3c821f046cb5dbf2" - integrity sha512-2v6hQViJvSsifK606AliqiNiijb1uwWp6Re7o0RTyH+uRTv/u7Uqm2g4Fjq/LgZIzARB38RZEvVBFOQOVdlBow== - dependencies: - cross-fetch "^3.1.5" - extract-files "^9.0.0" - form-data "^3.0.0" - -graphql@15.5.0: - version "15.5.0" - resolved "https://registry.yarnpkg.com/graphql/-/graphql-15.5.0.tgz#39d19494dbe69d1ea719915b578bf920344a69d5" - integrity sha512-OmaM7y0kaK31NKG31q4YbD2beNYa6jBBKtMFT6gLYJljHLJr42IqJ8KX08u3Li/0ifzTU5HjmoOOrwa5BRLeDA== - -graphql@^16.5.0, graphql@^16.6.0: - version "16.6.0" - resolved "https://registry.yarnpkg.com/graphql/-/graphql-16.6.0.tgz#c2dcffa4649db149f6282af726c8c83f1c7c5fdb" - integrity sha512-KPIBPDlW7NxrbT/eh4qPXz5FiFdL5UbaA0XUNz2Rp3Z3hqBSkbj0GVjwFDztsWVauZUWsbKHgMg++sk8UX0bkw== - growl@1.10.5: version "1.10.5" resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== -growly@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" - integrity sha512-+xGQY0YyAWCnqy7Cd++hc2JqMYzlm0dG30Jd0beaA64sROr8C4nt8Yc9V5Ro3avlSUDTN0ulqP/VBKi1/lLygw== - handlebars@^4.0.1: version "4.7.7" resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.7.tgz#9ce33416aad02dbd6c8fafa8240d5d98004945a1" @@ -8124,37 +4701,6 @@ has-tostringtag@^1.0.0: dependencies: has-symbols "^1.0.2" -has-value@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" - integrity sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q== - dependencies: - get-value "^2.0.3" - has-values "^0.1.4" - isobject "^2.0.0" - -has-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" - integrity sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw== - dependencies: - get-value "^2.0.6" - has-values "^1.0.0" - isobject "^3.0.0" - -has-values@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" - integrity sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ== - -has-values@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" - integrity sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ== - dependencies: - is-number "^3.0.0" - kind-of "^4.0.0" - has@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" @@ -8234,18 +4780,6 @@ hosted-git-info@^2.1.4: resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== -html-encoding-sniffer@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8" - integrity sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw== - dependencies: - whatwg-encoding "^1.0.1" - -html-escaper@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" - integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== - htmlparser2@^8.0.1: version "8.0.2" resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-8.0.2.tgz#f002151705b383e62433b5cf466f5b716edaec21" @@ -8327,32 +4861,7 @@ https-proxy-agent@^5.0.0: agent-base "6" debug "4" -human-signals@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" - integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== - -human-signals@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" - integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== - -humanize-duration@^3.15.3: - version "3.28.0" - resolved "https://registry.yarnpkg.com/humanize-duration/-/humanize-duration-3.28.0.tgz#f79770c0bec34d3bfd4899338cc40643bc04df72" - integrity sha512-jMAxraOOmHuPbffLVDKkEKi/NeG8dMqP8lGRd6Tbf7JgAeG33jjgPWDbXXU7ypCI0o+oNKJFgbSB9FKVdWNI2A== - -husky@^7.0.4: - version "7.0.4" - resolved "https://registry.yarnpkg.com/husky/-/husky-7.0.4.tgz#242048245dc49c8fb1bf0cc7cfb98dd722531535" - integrity sha512-vbaCKN2QLtP/vD4yvs6iz6hBEo6wkSzs8HpRah1Z6aGmF2KW5PdYuAd7uX5a+OyBZHBhd+TFLqgjUgytQr4RvQ== - -hyperlinker@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/hyperlinker/-/hyperlinker-1.0.0.tgz#23dc9e38a206b208ee49bc2d6c8ef47027df0c0e" - integrity sha512-Ty8UblRWFEcfSuIaajM34LdPXIhbs1ajEX/BBPv24J+enSVaEVY63xQ6lTO9VRYS5LAoghIG0IDJ+p+IPzKUQQ== - -iconv-lite@0.4.24, iconv-lite@^0.4.24: +iconv-lite@0.4.24: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== @@ -8378,27 +4887,17 @@ ieee754@^1.1.13, ieee754@^1.1.4, ieee754@^1.2.1: resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== -ignore@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" - integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== - ignore@^5.1.1, ignore@^5.2.0, ignore@^5.2.4: version "5.2.4" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== -immutable@4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.2.1.tgz#8a4025691018c560a40c67e43d698f816edc44d4" - integrity sha512-7WYV7Q5BTs0nlQm7tl92rDYYoyELLKHoDMBKhrxEoiV4mrfVdRz8hzPiYOzH7yWjzoVEamxRuAqhxL2PLRwZYQ== - immutable@^4.0.0-rc.12: version "4.3.0" resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.0.tgz#eb1738f14ffb39fd068b1dbe1296117484dd34be" integrity sha512-0AOCmOip+xgJwEVTQj1EfiDDOkPmuyllDuTuEX+DDXUgapLAsBIfkg3sxCYyCEA8mQqZrrxPUGjcOQ2JS3WLkg== -import-fresh@^3.0.0, import-fresh@^3.1.0, import-fresh@^3.2.1: +import-fresh@^3.0.0, import-fresh@^3.2.1: version "3.3.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== @@ -8406,14 +4905,6 @@ import-fresh@^3.0.0, import-fresh@^3.1.0, import-fresh@^3.2.1: parent-module "^1.0.0" resolve-from "^4.0.0" -import-local@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" - integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== - dependencies: - pkg-dir "^4.2.0" - resolve-cwd "^3.0.0" - imul@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/imul/-/imul-1.0.1.tgz#9d5867161e8b3de96c2c38d5dc7cb102f35e2ac9" @@ -8437,35 +4928,16 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -ini@^1.3.5: - version "1.3.8" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" - integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== - -inquirer@^7.0.0: - version "7.3.3" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.3.3.tgz#04d176b2af04afc157a83fd7c100e98ee0aad003" - integrity sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA== - dependencies: - ansi-escapes "^4.2.1" - chalk "^4.1.0" - cli-cursor "^3.1.0" - cli-width "^3.0.0" - external-editor "^3.0.3" - figures "^3.0.0" - lodash "^4.17.19" - mute-stream "0.0.8" - run-async "^2.4.0" - rxjs "^6.6.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - through "^2.3.6" - +ini@^1.3.5: + version "1.3.8" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + interface-datastore@^5.0.0: version "5.2.0" resolved "https://registry.yarnpkg.com/interface-datastore/-/interface-datastore-5.2.0.tgz#9341b13a8babbfb23961ca7c732c0263f85e5007" @@ -8481,26 +4953,12 @@ interface-datastore@^5.0.0: nanoid "^3.0.2" uint8arrays "^3.0.0" -interface-datastore@^6.0.2: - version "6.1.1" - resolved "https://registry.yarnpkg.com/interface-datastore/-/interface-datastore-6.1.1.tgz#5150a00de2e7513eaadba58bcafd059cb50004c1" - integrity sha512-AmCS+9CT34pp2u0QQVXjKztkuq3y5T+BIciuiHDDtDZucZD8VudosnSdUyXJV6IsRkN5jc4RFDhCk1O6Q3Gxjg== - dependencies: - interface-store "^2.0.2" - nanoid "^3.0.2" - uint8arrays "^3.0.0" - interface-store@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/interface-store/-/interface-store-1.0.2.tgz#1ebd6cbbae387039a3a2de0cae665da52474800f" integrity sha512-rUBLYsgoWwxuUpnQoSUr+DR/3dH3reVeIu5aOHFZK31lAexmb++kR6ZECNRgrx6WvoaM3Akdo0A7TDrqgCzZaQ== -interface-store@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/interface-store/-/interface-store-2.0.2.tgz#83175fd2b0c501585ed96db54bb8ba9d55fce34c" - integrity sha512-rScRlhDcz6k199EkHqT8NpM87ebN89ICOzILoBHgaG36/WX50N32BnU/kpZgCGPLhARRAWUUX5/cyaIjt7Kipg== - -internal-slot@^1.0.3, internal-slot@^1.0.5: +internal-slot@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.5.tgz#f2a2ee21f668f8627a4667f309dc0f4fb6674986" integrity sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ== @@ -8526,11 +4984,6 @@ io-ts@1.10.4: dependencies: fp-ts "^1.0.0" -ip-regex@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" - integrity sha512-58yWmlHpp7VYfcdTwMTvwMmqx/Elfxjd9RXTDyMsbL7lLWmhMylLEqiYVLKuLzOZqVgiWXD9MfR62Vv89VRxkw== - ip-regex@^4.0.0: version "4.3.0" resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-4.3.0.tgz#687275ab0f57fa76978ff8f4dddc8a23d5990db5" @@ -8550,41 +5003,6 @@ ipfs-core-types@^0.6.1: multiaddr "^10.0.0" multiformats "^9.4.1" -ipfs-core-types@^0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/ipfs-core-types/-/ipfs-core-types-0.9.0.tgz#cb201ff7a9470651ba14c4e7fae56661a55bf37e" - integrity sha512-VJ8vJSHvI1Zm7/SxsZo03T+zzpsg8pkgiIi5hfwSJlsrJ1E2v68QPlnLshGHUSYw89Oxq0IbETYl2pGTFHTWfg== - dependencies: - interface-datastore "^6.0.2" - multiaddr "^10.0.0" - multiformats "^9.4.13" - -ipfs-core-utils@^0.13.0: - version "0.13.0" - resolved "https://registry.yarnpkg.com/ipfs-core-utils/-/ipfs-core-utils-0.13.0.tgz#8f0ec9aaa7c24f6f307e6e76e7bdc1cefd829894" - integrity sha512-HP5EafxU4/dLW3U13CFsgqVO5Ika8N4sRSIb/dTg16NjLOozMH31TXV0Grtu2ZWo1T10ahTzMvrfT5f4mhioXw== - dependencies: - any-signal "^2.1.2" - blob-to-it "^1.0.1" - browser-readablestream-to-it "^1.0.1" - debug "^4.1.1" - err-code "^3.0.1" - ipfs-core-types "^0.9.0" - ipfs-unixfs "^6.0.3" - ipfs-utils "^9.0.2" - it-all "^1.0.4" - it-map "^1.0.4" - it-peekable "^1.0.2" - it-to-stream "^1.0.0" - merge-options "^3.0.4" - multiaddr "^10.0.0" - multiaddr-to-uri "^8.0.0" - multiformats "^9.4.13" - nanoid "^3.1.23" - parse-duration "^1.0.0" - timeout-abort-controller "^2.0.0" - uint8arrays "^3.0.0" - ipfs-core-utils@^0.9.1: version "0.9.1" resolved "https://registry.yarnpkg.com/ipfs-core-utils/-/ipfs-core-utils-0.9.1.tgz#d8aad52e6e77c4e9f4c212055e1c04d16f95b566" @@ -8607,31 +5025,6 @@ ipfs-core-utils@^0.9.1: timeout-abort-controller "^1.1.1" uint8arrays "^2.1.6" -ipfs-http-client@55.0.0: - version "55.0.0" - resolved "https://registry.yarnpkg.com/ipfs-http-client/-/ipfs-http-client-55.0.0.tgz#8b713c5fa318e873b7d7ad099a4eb14320a5b0ce" - integrity sha512-GpvEs7C7WL9M6fN/kZbjeh4Y8YN7rY8b18tVWZnKxRsVwM25cIFrRI8CwNt3Ugin9yShieI3i9sPyzYGMrLNnQ== - dependencies: - "@ipld/dag-cbor" "^7.0.0" - "@ipld/dag-json" "^8.0.1" - "@ipld/dag-pb" "^2.1.3" - abort-controller "^3.0.0" - any-signal "^2.1.2" - debug "^4.1.1" - err-code "^3.0.1" - ipfs-core-types "^0.9.0" - ipfs-core-utils "^0.13.0" - ipfs-utils "^9.0.2" - it-first "^1.0.6" - it-last "^1.0.4" - merge-options "^3.0.4" - multiaddr "^10.0.0" - multiformats "^9.4.13" - native-abort-controller "^1.0.3" - parse-duration "^1.0.0" - stream-to-it "^0.2.2" - uint8arrays "^3.0.0" - ipfs-http-client@^51.0.0: version "51.0.1" resolved "https://registry.yarnpkg.com/ipfs-http-client/-/ipfs-http-client-51.0.1.tgz#c4b64d0d032b83a4d5fa3ca7a9793e6d3233fb4c" @@ -8669,14 +5062,6 @@ ipfs-unixfs@^5.0.0: err-code "^3.0.1" protobufjs "^6.10.2" -ipfs-unixfs@^6.0.3: - version "6.0.9" - resolved "https://registry.yarnpkg.com/ipfs-unixfs/-/ipfs-unixfs-6.0.9.tgz#f6613b8e081d83faa43ed96e016a694c615a9374" - integrity sha512-0DQ7p0/9dRB6XCb0mVCTli33GzIzSVx5udpJuVM47tGcD+W+Bl4LsnoLswd3ggNnNEakMv1FdoFITiEnchXDqQ== - dependencies: - err-code "^3.0.1" - protobufjs "^6.10.2" - ipfs-utils@^8.1.2, ipfs-utils@^8.1.4: version "8.1.6" resolved "https://registry.yarnpkg.com/ipfs-utils/-/ipfs-utils-8.1.6.tgz#431cb1711e3b666fbc7e4ff830c758e2527da308" @@ -8699,42 +5084,6 @@ ipfs-utils@^8.1.2, ipfs-utils@^8.1.4: react-native-fetch-api "^2.0.0" stream-to-it "^0.2.2" -ipfs-utils@^9.0.2: - version "9.0.14" - resolved "https://registry.yarnpkg.com/ipfs-utils/-/ipfs-utils-9.0.14.tgz#24f5fda1f4567685eb32bca2543d518f95fd8704" - integrity sha512-zIaiEGX18QATxgaS0/EOQNoo33W0islREABAcxXE8n7y2MGAlB+hdsxXn4J0hGZge8IqVQhW8sWIb+oJz2yEvg== - dependencies: - any-signal "^3.0.0" - browser-readablestream-to-it "^1.0.0" - buffer "^6.0.1" - electron-fetch "^1.7.2" - err-code "^3.0.1" - is-electron "^2.2.0" - iso-url "^1.1.5" - it-all "^1.0.4" - it-glob "^1.0.1" - it-to-stream "^1.0.0" - merge-options "^3.0.4" - nanoid "^3.1.20" - native-fetch "^3.0.0" - node-fetch "^2.6.8" - react-native-fetch-api "^3.0.0" - stream-to-it "^0.2.2" - -is-accessor-descriptor@^0.1.6: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" - integrity sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A== - dependencies: - kind-of "^3.0.2" - -is-accessor-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" - integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== - dependencies: - kind-of "^6.0.0" - is-arguments@^1.0.4: version "1.1.1" resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" @@ -8779,11 +5128,6 @@ is-boolean-object@^1.1.0: call-bind "^1.0.2" has-tostringtag "^1.0.0" -is-buffer@^1.1.5: - version "1.1.6" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" - integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== - is-buffer@^2.0.5, is-buffer@~2.0.3: version "2.0.5" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" @@ -8794,34 +5138,13 @@ is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== -is-ci@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" - integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== - dependencies: - ci-info "^2.0.0" - -is-core-module@^2.11.0, is-core-module@^2.9.0: +is-core-module@^2.11.0: version "2.12.1" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.12.1.tgz#0c0b6885b6f80011c71541ce15c8d66cf5a4f9fd" integrity sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg== dependencies: has "^1.0.3" -is-data-descriptor@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" - integrity sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg== - dependencies: - kind-of "^3.0.2" - -is-data-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" - integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== - dependencies: - kind-of "^6.0.0" - is-date-object@^1.0.1: version "1.0.5" resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" @@ -8829,46 +5152,11 @@ is-date-object@^1.0.1: dependencies: has-tostringtag "^1.0.0" -is-descriptor@^0.1.0: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" - integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== - dependencies: - is-accessor-descriptor "^0.1.6" - is-data-descriptor "^0.1.4" - kind-of "^5.0.0" - -is-descriptor@^1.0.0, is-descriptor@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" - integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== - dependencies: - is-accessor-descriptor "^1.0.0" - is-data-descriptor "^1.0.0" - kind-of "^6.0.2" - -is-docker@^2.0.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" - integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== - is-electron@^2.2.0: version "2.2.2" resolved "https://registry.yarnpkg.com/is-electron/-/is-electron-2.2.2.tgz#3778902a2044d76de98036f5dc58089ac4d80bb9" integrity sha512-FO/Rhvz5tuw4MCWkpMzHFKWD2LsfHzIb7i6MdPYZ/KW7AlxawyLkqdy+jPZP1WubqEADE3O4FUENlJHDfQASRg== -is-extendable@^0.1.0, is-extendable@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" - integrity sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw== - -is-extendable@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" - integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== - dependencies: - is-plain-object "^2.0.4" - is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" @@ -8896,11 +5184,6 @@ is-function@^1.0.1: resolved "https://registry.yarnpkg.com/is-function/-/is-function-1.0.2.tgz#4f097f30abf6efadac9833b17ca5dc03f8144e08" integrity sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ== -is-generator-fn@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" - integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== - is-generator-function@^1.0.7: version "1.0.10" resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72" @@ -8920,11 +5203,6 @@ is-hex-prefixed@1.0.0: resolved "https://registry.yarnpkg.com/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz#7d8d37e6ad77e5d127148913c573e082d777f554" integrity sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA== -is-interactive@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" - integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== - is-ip@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/is-ip/-/is-ip-3.1.0.tgz#2ae5ddfafaf05cb8008a62093cf29734f657c5d8" @@ -8939,11 +5217,6 @@ is-lower-case@^1.1.0: dependencies: lower-case "^1.1.0" -is-module@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" - integrity sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g== - is-negative-zero@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" @@ -8956,13 +5229,6 @@ is-number-object@^1.0.4: dependencies: has-tostringtag "^1.0.0" -is-number@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" - integrity sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg== - dependencies: - kind-of "^3.0.2" - is-number@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" @@ -8978,25 +5244,11 @@ is-plain-obj@^2.1.0: resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== -is-plain-object@^2.0.3, is-plain-object@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" - integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== - dependencies: - isobject "^3.0.1" - is-plain-object@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-3.0.1.tgz#662d92d24c0aa4302407b0d45d21f2251c85f85b" integrity sha512-Xnpx182SBMrr/aBik8y+GuR4U1L9FqMSojwDQwPMmxyC6bvEqly9UBCxhauBF5vNh2gwWJNX6oDV7O+OM4z34g== -is-reference@^1.1.2: - version "1.2.1" - resolved "https://registry.yarnpkg.com/is-reference/-/is-reference-1.2.1.tgz#8b2dac0b371f4bc994fdeaba9eb542d03002d0b7" - integrity sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ== - dependencies: - "@types/estree" "*" - is-regex@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" @@ -9012,16 +5264,6 @@ is-shared-array-buffer@^1.0.2: dependencies: call-bind "^1.0.2" -is-stream@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" - integrity sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ== - -is-stream@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" - integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== - is-string@^1.0.5, is-string@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" @@ -9076,24 +5318,7 @@ is-weakref@^1.0.2: dependencies: call-bind "^1.0.2" -is-windows@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" - integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== - -is-wsl@^2.1.1, is-wsl@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" - integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== - dependencies: - is-docker "^2.0.0" - -isarray@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" - integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ== - -isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: +isarray@^1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== @@ -9118,19 +5343,7 @@ iso-url@^1.1.5: resolved "https://registry.yarnpkg.com/iso-url/-/iso-url-1.2.1.tgz#db96a49d8d9a64a1c889fc07cc525d093afb1811" integrity sha512-9JPDgCN4B7QPkLtYAAOrEuAWvP9rWvR5offAr0/SeF046wIkglqH3VXgYYP6NcsKslH80UIVgmPqNe3j7tG2ng== -isobject@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" - integrity sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA== - dependencies: - isarray "1.0.0" - -isobject@^3.0.0, isobject@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" - integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== - -isomorphic-unfetch@^3.0.0, isomorphic-unfetch@^3.1.0: +isomorphic-unfetch@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/isomorphic-unfetch/-/isomorphic-unfetch-3.1.0.tgz#87341d5f4f7b63843d468438128cb087b7c3e98f" integrity sha512-geDJjpoZ8N0kWexiwkX8F9NkTsXhetLPVbZFQ+JTW239QNOwvB0gniuR1Wc6f0AMTn7/mFGyXvHTifrCp/GH8Q== @@ -9138,68 +5351,11 @@ isomorphic-unfetch@^3.0.0, isomorphic-unfetch@^3.1.0: node-fetch "^2.6.1" unfetch "^4.2.0" -isomorphic-ws@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz#55fd4cd6c5e6491e76dc125938dd863f5cd4f2dc" - integrity sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w== - isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g== -istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" - integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== - -istanbul-lib-instrument@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz#873c6fff897450118222774696a3f28902d77c1d" - integrity sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ== - dependencies: - "@babel/core" "^7.7.5" - "@istanbuljs/schema" "^0.1.2" - istanbul-lib-coverage "^3.0.0" - semver "^6.3.0" - -istanbul-lib-instrument@^5.0.4: - version "5.2.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz#d10c8885c2125574e1c231cacadf955675e1ce3d" - integrity sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg== - dependencies: - "@babel/core" "^7.12.3" - "@babel/parser" "^7.14.7" - "@istanbuljs/schema" "^0.1.2" - istanbul-lib-coverage "^3.2.0" - semver "^6.3.0" - -istanbul-lib-report@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" - integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== - dependencies: - istanbul-lib-coverage "^3.0.0" - make-dir "^3.0.0" - supports-color "^7.1.0" - -istanbul-lib-source-maps@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551" - integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== - dependencies: - debug "^4.1.1" - istanbul-lib-coverage "^3.0.0" - source-map "^0.6.1" - -istanbul-reports@^3.0.2: - version "3.1.5" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.5.tgz#cc9a6ab25cb25659810e4785ed9d9fb742578bae" - integrity sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w== - dependencies: - html-escaper "^2.0.0" - istanbul-lib-report "^3.0.0" - it-all@^1.0.2, it-all@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/it-all/-/it-all-1.0.6.tgz#852557355367606295c4c3b7eff0136f07749335" @@ -9227,14 +5383,6 @@ it-first@^1.0.6: resolved "https://registry.yarnpkg.com/it-first/-/it-first-1.0.7.tgz#a4bef40da8be21667f7d23e44dae652f5ccd7ab1" integrity sha512-nvJKZoBpZD/6Rtde6FXqwDqDZGF1sCADmr2Zoc0hZsIvnE449gRFnGctxDf09Bzc/FWnHXAdaHVIetY6lrE0/g== -it-glob@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/it-glob/-/it-glob-1.0.2.tgz#bab9b04d6aaac42884502f3a0bfee84c7a29e15e" - integrity sha512-Ch2Dzhw4URfB9L/0ZHyY+uqOnKvBNeS/SMcRiPmJfpHiM0TsUZn+GkpcZxAoF3dJVdPm/PuIk3A4wlV7SUo23Q== - dependencies: - "@types/minimatch" "^3.0.4" - minimatch "^3.0.4" - it-glob@~0.0.11: version "0.0.14" resolved "https://registry.yarnpkg.com/it-glob/-/it-glob-0.0.14.tgz#24f5e7fa48f9698ce7dd410355f327470c91eb90" @@ -9256,527 +5404,57 @@ it-map@^1.0.4: it-peekable@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/it-peekable/-/it-peekable-1.0.3.tgz#8ebe933767d9c5aa0ae4ef8e9cb3a47389bced8c" - integrity sha512-5+8zemFS+wSfIkSZyf0Zh5kNN+iGyccN02914BY4w/Dj+uoFEoPSvj5vaWn8pNZJNSxzjW0zHRxC3LUb2KWJTQ== - -it-reader@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/it-reader/-/it-reader-3.0.0.tgz#56596c7742ec7c63b7f7998f6bfa3f712e333d0e" - integrity sha512-NxR40odATeaBmSefn6Xn43DplYvn2KtEKQzn4jrTRuPYXMky5M4e+KQ7aTJh0k0vkytLyeenGO1I1GXlGm4laQ== - dependencies: - bl "^5.0.0" - -it-take@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/it-take/-/it-take-1.0.2.tgz#b5f1570014db7c3454897898b69bb7ac9c3bffc1" - integrity sha512-u7I6qhhxH7pSevcYNaMECtkvZW365ARqAIt9K+xjdK1B2WUDEjQSfETkOCT8bxFq/59LqrN3cMLUtTgmDBaygw== - -it-tar@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/it-tar/-/it-tar-3.0.0.tgz#d25f2777c0da4d4bec1b01a1ab9d79495f459f4f" - integrity sha512-VhD1Hnx4IXDcQgYJnJgltkn+w5F8kiJaB46lqovh+YWfty2JGW7i40QQjWbSvcg1QfaU8is8AVX8xwx/Db9oOg== - dependencies: - bl "^5.0.0" - buffer "^6.0.3" - iso-constants "^0.1.2" - it-concat "^2.0.0" - it-reader "^3.0.0" - p-defer "^3.0.0" - -it-to-stream@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/it-to-stream/-/it-to-stream-1.0.0.tgz#6c47f91d5b5df28bda9334c52782ef8e97fe3a4a" - integrity sha512-pLULMZMAB/+vbdvbZtebC0nWBTbG581lk6w8P7DfIIIKUfa8FbY7Oi0FxZcFPbxvISs7A9E+cMpLDBc1XhpAOA== - dependencies: - buffer "^6.0.3" - fast-fifo "^1.0.0" - get-iterator "^1.0.2" - p-defer "^3.0.0" - p-fifo "^1.0.0" - readable-stream "^3.6.0" - -jackspeak@^2.0.3: - version "2.2.1" - resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.2.1.tgz#655e8cf025d872c9c03d3eb63e8f0c024fef16a6" - integrity sha512-MXbxovZ/Pm42f6cDIDkl3xpwv1AGwObKwfmjs2nQePiy85tP3fatofl3FC1aBsOtP/6fq5SbtgHwWcMsLP+bDw== - dependencies: - "@isaacs/cliui" "^8.0.2" - optionalDependencies: - "@pkgjs/parseargs" "^0.11.0" - -jake@^10.6.1, jake@^10.8.5: - version "10.8.7" - resolved "https://registry.yarnpkg.com/jake/-/jake-10.8.7.tgz#63a32821177940c33f356e0ba44ff9d34e1c7d8f" - integrity sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w== - dependencies: - async "^3.2.3" - chalk "^4.0.2" - filelist "^1.0.4" - minimatch "^3.1.2" - -javascript-natural-sort@0.7.1: - version "0.7.1" - resolved "https://registry.yarnpkg.com/javascript-natural-sort/-/javascript-natural-sort-0.7.1.tgz#f9e2303d4507f6d74355a73664d1440fb5a0ef59" - integrity sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw== - -jayson@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/jayson/-/jayson-4.0.0.tgz#145a0ced46f900934c9b307e1332bcb0c7dbdb17" - integrity sha512-v2RNpDCMu45fnLzSk47vx7I+QUaOsox6f5X0CUlabAFwxoP+8MfAY0NQRFwOEYXIxm8Ih5y6OaEa5KYiQMkyAA== - dependencies: - "@types/connect" "^3.4.33" - "@types/node" "^12.12.54" - "@types/ws" "^7.4.4" - JSONStream "^1.3.5" - commander "^2.20.3" - delay "^5.0.0" - es6-promisify "^5.0.0" - eyes "^0.1.8" - isomorphic-ws "^4.0.1" - json-stringify-safe "^5.0.1" - uuid "^8.3.2" - ws "^7.4.5" - -jest-changed-files@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-25.5.0.tgz#141cc23567ceb3f534526f8614ba39421383634c" - integrity sha512-EOw9QEqapsDT7mKF162m8HFzRPbmP8qJQny6ldVOdOVBz3ACgPm/1nAn5fPQ/NDaYhX/AHkrGwwkCncpAVSXcw== - dependencies: - "@jest/types" "^25.5.0" - execa "^3.2.0" - throat "^5.0.0" - -jest-cli@^25.5.4: - version "25.5.4" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-25.5.4.tgz#b9f1a84d1301a92c5c217684cb79840831db9f0d" - integrity sha512-rG8uJkIiOUpnREh1768/N3n27Cm+xPFkSNFO91tgg+8o2rXeVLStz+vkXkGr4UtzH6t1SNbjwoiswd7p4AhHTw== - dependencies: - "@jest/core" "^25.5.4" - "@jest/test-result" "^25.5.0" - "@jest/types" "^25.5.0" - chalk "^3.0.0" - exit "^0.1.2" - graceful-fs "^4.2.4" - import-local "^3.0.2" - is-ci "^2.0.0" - jest-config "^25.5.4" - jest-util "^25.5.0" - jest-validate "^25.5.0" - prompts "^2.0.1" - realpath-native "^2.0.0" - yargs "^15.3.1" - -jest-config@^25.5.4: - version "25.5.4" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-25.5.4.tgz#38e2057b3f976ef7309b2b2c8dcd2a708a67f02c" - integrity sha512-SZwR91SwcdK6bz7Gco8qL7YY2sx8tFJYzvg216DLihTWf+LKY/DoJXpM9nTzYakSyfblbqeU48p/p7Jzy05Atg== - dependencies: - "@babel/core" "^7.1.0" - "@jest/test-sequencer" "^25.5.4" - "@jest/types" "^25.5.0" - babel-jest "^25.5.1" - chalk "^3.0.0" - deepmerge "^4.2.2" - glob "^7.1.1" - graceful-fs "^4.2.4" - jest-environment-jsdom "^25.5.0" - jest-environment-node "^25.5.0" - jest-get-type "^25.2.6" - jest-jasmine2 "^25.5.4" - jest-regex-util "^25.2.6" - jest-resolve "^25.5.1" - jest-util "^25.5.0" - jest-validate "^25.5.0" - micromatch "^4.0.2" - pretty-format "^25.5.0" - realpath-native "^2.0.0" - -jest-diff@^25.2.1, jest-diff@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-25.5.0.tgz#1dd26ed64f96667c068cef026b677dfa01afcfa9" - integrity sha512-z1kygetuPiREYdNIumRpAHY6RXiGmp70YHptjdaxTWGmA085W3iCnXNx0DhflK3vwrKmrRWyY1wUpkPMVxMK7A== - dependencies: - chalk "^3.0.0" - diff-sequences "^25.2.6" - jest-get-type "^25.2.6" - pretty-format "^25.5.0" - -jest-diff@^29.6.1: - version "29.6.1" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.6.1.tgz#13df6db0a89ee6ad93c747c75c85c70ba941e545" - integrity sha512-FsNCvinvl8oVxpNLttNQX7FAq7vR+gMDGj90tiP7siWw1UdakWUGqrylpsYrpvj908IYckm5Y0Q7azNAozU1Kg== - dependencies: - chalk "^4.0.0" - diff-sequences "^29.4.3" - jest-get-type "^29.4.3" - pretty-format "^29.6.1" - -jest-docblock@^25.3.0: - version "25.3.0" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-25.3.0.tgz#8b777a27e3477cd77a168c05290c471a575623ef" - integrity sha512-aktF0kCar8+zxRHxQZwxMy70stc9R1mOmrLsT5VO3pIT0uzGRSDAXxSlz4NqQWpuLjPpuMhPRl7H+5FRsvIQAg== - dependencies: - detect-newline "^3.0.0" - -jest-each@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-25.5.0.tgz#0c3c2797e8225cb7bec7e4d249dcd96b934be516" - integrity sha512-QBogUxna3D8vtiItvn54xXde7+vuzqRrEeaw8r1s+1TG9eZLVJE5ZkKoSUlqFwRjnlaA4hyKGiu9OlkFIuKnjA== - dependencies: - "@jest/types" "^25.5.0" - chalk "^3.0.0" - jest-get-type "^25.2.6" - jest-util "^25.5.0" - pretty-format "^25.5.0" - -jest-environment-jsdom@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-25.5.0.tgz#dcbe4da2ea997707997040ecf6e2560aec4e9834" - integrity sha512-7Jr02ydaq4jaWMZLY+Skn8wL5nVIYpWvmeatOHL3tOcV3Zw8sjnPpx+ZdeBfc457p8jCR9J6YCc+Lga0oIy62A== - dependencies: - "@jest/environment" "^25.5.0" - "@jest/fake-timers" "^25.5.0" - "@jest/types" "^25.5.0" - jest-mock "^25.5.0" - jest-util "^25.5.0" - jsdom "^15.2.1" - -jest-environment-node@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-25.5.0.tgz#0f55270d94804902988e64adca37c6ce0f7d07a1" - integrity sha512-iuxK6rQR2En9EID+2k+IBs5fCFd919gVVK5BeND82fYeLWPqvRcFNPKu9+gxTwfB5XwBGBvZ0HFQa+cHtIoslA== - dependencies: - "@jest/environment" "^25.5.0" - "@jest/fake-timers" "^25.5.0" - "@jest/types" "^25.5.0" - jest-mock "^25.5.0" - jest-util "^25.5.0" - semver "^6.3.0" - -jest-get-type@^25.2.6: - version "25.2.6" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-25.2.6.tgz#0b0a32fab8908b44d508be81681487dbabb8d877" - integrity sha512-DxjtyzOHjObRM+sM1knti6or+eOgcGU4xVSb2HNP1TqO4ahsT+rqZg+nyqHWJSvWgKC5cG3QjGFBqxLghiF/Ig== - -jest-get-type@^29.4.3: - version "29.4.3" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.4.3.tgz#1ab7a5207c995161100b5187159ca82dd48b3dd5" - integrity sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg== - -jest-haste-map@^25.5.1: - version "25.5.1" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-25.5.1.tgz#1df10f716c1d94e60a1ebf7798c9fb3da2620943" - integrity sha512-dddgh9UZjV7SCDQUrQ+5t9yy8iEgKc1AKqZR9YDww8xsVOtzPQSMVLDChc21+g29oTRexb9/B0bIlZL+sWmvAQ== - dependencies: - "@jest/types" "^25.5.0" - "@types/graceful-fs" "^4.1.2" - anymatch "^3.0.3" - fb-watchman "^2.0.0" - graceful-fs "^4.2.4" - jest-serializer "^25.5.0" - jest-util "^25.5.0" - jest-worker "^25.5.0" - micromatch "^4.0.2" - sane "^4.0.3" - walker "^1.0.7" - which "^2.0.2" - optionalDependencies: - fsevents "^2.1.2" - -jest-jasmine2@^25.5.4: - version "25.5.4" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-25.5.4.tgz#66ca8b328fb1a3c5364816f8958f6970a8526968" - integrity sha512-9acbWEfbmS8UpdcfqnDO+uBUgKa/9hcRh983IHdM+pKmJPL77G0sWAAK0V0kr5LK3a8cSBfkFSoncXwQlRZfkQ== - dependencies: - "@babel/traverse" "^7.1.0" - "@jest/environment" "^25.5.0" - "@jest/source-map" "^25.5.0" - "@jest/test-result" "^25.5.0" - "@jest/types" "^25.5.0" - chalk "^3.0.0" - co "^4.6.0" - expect "^25.5.0" - is-generator-fn "^2.0.0" - jest-each "^25.5.0" - jest-matcher-utils "^25.5.0" - jest-message-util "^25.5.0" - jest-runtime "^25.5.4" - jest-snapshot "^25.5.1" - jest-util "^25.5.0" - pretty-format "^25.5.0" - throat "^5.0.0" - -jest-leak-detector@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-25.5.0.tgz#2291c6294b0ce404241bb56fe60e2d0c3e34f0bb" - integrity sha512-rV7JdLsanS8OkdDpZtgBf61L5xZ4NnYLBq72r6ldxahJWWczZjXawRsoHyXzibM5ed7C2QRjpp6ypgwGdKyoVA== - dependencies: - jest-get-type "^25.2.6" - pretty-format "^25.5.0" - -jest-matcher-utils@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-25.5.0.tgz#fbc98a12d730e5d2453d7f1ed4a4d948e34b7867" - integrity sha512-VWI269+9JS5cpndnpCwm7dy7JtGQT30UHfrnM3mXl22gHGt/b7NkjBqXfbhZ8V4B7ANUsjK18PlSBmG0YH7gjw== - dependencies: - chalk "^3.0.0" - jest-diff "^25.5.0" - jest-get-type "^25.2.6" - pretty-format "^25.5.0" - -jest-matcher-utils@^29.6.1: - version "29.6.1" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.6.1.tgz#6c60075d84655d6300c5d5128f46531848160b53" - integrity sha512-SLaztw9d2mfQQKHmJXKM0HCbl2PPVld/t9Xa6P9sgiExijviSp7TnZZpw2Fpt+OI3nwUO/slJbOfzfUMKKC5QA== - dependencies: - chalk "^4.0.0" - jest-diff "^29.6.1" - jest-get-type "^29.4.3" - pretty-format "^29.6.1" - -jest-message-util@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-25.5.0.tgz#ea11d93204cc7ae97456e1d8716251185b8880ea" - integrity sha512-ezddz3YCT/LT0SKAmylVyWWIGYoKHOFOFXx3/nA4m794lfVUskMcwhip6vTgdVrOtYdjeQeis2ypzes9mZb4EA== - dependencies: - "@babel/code-frame" "^7.0.0" - "@jest/types" "^25.5.0" - "@types/stack-utils" "^1.0.1" - chalk "^3.0.0" - graceful-fs "^4.2.4" - micromatch "^4.0.2" - slash "^3.0.0" - stack-utils "^1.0.1" - -jest-message-util@^29.6.1: - version "29.6.1" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.6.1.tgz#d0b21d87f117e1b9e165e24f245befd2ff34ff8d" - integrity sha512-KoAW2zAmNSd3Gk88uJ56qXUWbFk787QKmjjJVOjtGFmmGSZgDBrlIL4AfQw1xyMYPNVD7dNInfIbur9B2rd/wQ== - dependencies: - "@babel/code-frame" "^7.12.13" - "@jest/types" "^29.6.1" - "@types/stack-utils" "^2.0.0" - chalk "^4.0.0" - graceful-fs "^4.2.9" - micromatch "^4.0.4" - pretty-format "^29.6.1" - slash "^3.0.0" - stack-utils "^2.0.3" - -jest-mock@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-25.5.0.tgz#a91a54dabd14e37ecd61665d6b6e06360a55387a" - integrity sha512-eXWuTV8mKzp/ovHc5+3USJMYsTBhyQ+5A1Mak35dey/RG8GlM4YWVylZuGgVXinaW6tpvk/RSecmF37FKUlpXA== - dependencies: - "@jest/types" "^25.5.0" - -jest-pnp-resolver@^1.2.1: - version "1.2.3" - resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz#930b1546164d4ad5937d5540e711d4d38d4cad2e" - integrity sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w== - -jest-regex-util@^25.2.1, jest-regex-util@^25.2.6: - version "25.2.6" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-25.2.6.tgz#d847d38ba15d2118d3b06390056028d0f2fd3964" - integrity sha512-KQqf7a0NrtCkYmZZzodPftn7fL1cq3GQAFVMn5Hg8uKx/fIenLEobNanUxb7abQ1sjADHBseG/2FGpsv/wr+Qw== - -jest-resolve-dependencies@^25.5.4: - version "25.5.4" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-25.5.4.tgz#85501f53957c8e3be446e863a74777b5a17397a7" - integrity sha512-yFmbPd+DAQjJQg88HveObcGBA32nqNZ02fjYmtL16t1xw9bAttSn5UGRRhzMHIQbsep7znWvAvnD4kDqOFM0Uw== - dependencies: - "@jest/types" "^25.5.0" - jest-regex-util "^25.2.6" - jest-snapshot "^25.5.1" - -jest-resolve@^25.5.1: - version "25.5.1" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-25.5.1.tgz#0e6fbcfa7c26d2a5fe8f456088dc332a79266829" - integrity sha512-Hc09hYch5aWdtejsUZhA+vSzcotf7fajSlPA6EZPE1RmPBAD39XtJhvHWFStid58iit4IPDLI/Da4cwdDmAHiQ== - dependencies: - "@jest/types" "^25.5.0" - browser-resolve "^1.11.3" - chalk "^3.0.0" - graceful-fs "^4.2.4" - jest-pnp-resolver "^1.2.1" - read-pkg-up "^7.0.1" - realpath-native "^2.0.0" - resolve "^1.17.0" - slash "^3.0.0" - -jest-runner@^25.5.4: - version "25.5.4" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-25.5.4.tgz#ffec5df3875da5f5c878ae6d0a17b8e4ecd7c71d" - integrity sha512-V/2R7fKZo6blP8E9BL9vJ8aTU4TH2beuqGNxHbxi6t14XzTb+x90B3FRgdvuHm41GY8ch4xxvf0ATH4hdpjTqg== - dependencies: - "@jest/console" "^25.5.0" - "@jest/environment" "^25.5.0" - "@jest/test-result" "^25.5.0" - "@jest/types" "^25.5.0" - chalk "^3.0.0" - exit "^0.1.2" - graceful-fs "^4.2.4" - jest-config "^25.5.4" - jest-docblock "^25.3.0" - jest-haste-map "^25.5.1" - jest-jasmine2 "^25.5.4" - jest-leak-detector "^25.5.0" - jest-message-util "^25.5.0" - jest-resolve "^25.5.1" - jest-runtime "^25.5.4" - jest-util "^25.5.0" - jest-worker "^25.5.0" - source-map-support "^0.5.6" - throat "^5.0.0" - -jest-runtime@^25.5.4: - version "25.5.4" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-25.5.4.tgz#dc981fe2cb2137abcd319e74ccae7f7eeffbfaab" - integrity sha512-RWTt8LeWh3GvjYtASH2eezkc8AehVoWKK20udV6n3/gC87wlTbE1kIA+opCvNWyyPeBs6ptYsc6nyHUb1GlUVQ== - dependencies: - "@jest/console" "^25.5.0" - "@jest/environment" "^25.5.0" - "@jest/globals" "^25.5.2" - "@jest/source-map" "^25.5.0" - "@jest/test-result" "^25.5.0" - "@jest/transform" "^25.5.1" - "@jest/types" "^25.5.0" - "@types/yargs" "^15.0.0" - chalk "^3.0.0" - collect-v8-coverage "^1.0.0" - exit "^0.1.2" - glob "^7.1.3" - graceful-fs "^4.2.4" - jest-config "^25.5.4" - jest-haste-map "^25.5.1" - jest-message-util "^25.5.0" - jest-mock "^25.5.0" - jest-regex-util "^25.2.6" - jest-resolve "^25.5.1" - jest-snapshot "^25.5.1" - jest-util "^25.5.0" - jest-validate "^25.5.0" - realpath-native "^2.0.0" - slash "^3.0.0" - strip-bom "^4.0.0" - yargs "^15.3.1" - -jest-serializer@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-25.5.0.tgz#a993f484e769b4ed54e70e0efdb74007f503072b" - integrity sha512-LxD8fY1lByomEPflwur9o4e2a5twSQ7TaVNLlFUuToIdoJuBt8tzHfCsZ42Ok6LkKXWzFWf3AGmheuLAA7LcCA== - dependencies: - graceful-fs "^4.2.4" - -jest-snapshot@^25.5.1: - version "25.5.1" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-25.5.1.tgz#1a2a576491f9961eb8d00c2e5fd479bc28e5ff7f" - integrity sha512-C02JE1TUe64p2v1auUJ2ze5vcuv32tkv9PyhEb318e8XOKF7MOyXdJ7kdjbvrp3ChPLU2usI7Rjxs97Dj5P0uQ== - dependencies: - "@babel/types" "^7.0.0" - "@jest/types" "^25.5.0" - "@types/prettier" "^1.19.0" - chalk "^3.0.0" - expect "^25.5.0" - graceful-fs "^4.2.4" - jest-diff "^25.5.0" - jest-get-type "^25.2.6" - jest-matcher-utils "^25.5.0" - jest-message-util "^25.5.0" - jest-resolve "^25.5.1" - make-dir "^3.0.0" - natural-compare "^1.4.0" - pretty-format "^25.5.0" - semver "^6.3.0" - -jest-util@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-25.5.0.tgz#31c63b5d6e901274d264a4fec849230aa3fa35b0" - integrity sha512-KVlX+WWg1zUTB9ktvhsg2PXZVdkI1NBevOJSkTKYAyXyH4QSvh+Lay/e/v+bmaFfrkfx43xD8QTfgobzlEXdIA== - dependencies: - "@jest/types" "^25.5.0" - chalk "^3.0.0" - graceful-fs "^4.2.4" - is-ci "^2.0.0" - make-dir "^3.0.0" + integrity sha512-5+8zemFS+wSfIkSZyf0Zh5kNN+iGyccN02914BY4w/Dj+uoFEoPSvj5vaWn8pNZJNSxzjW0zHRxC3LUb2KWJTQ== -jest-util@^29.6.1: - version "29.6.1" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.6.1.tgz#c9e29a87a6edbf1e39e6dee2b4689b8a146679cb" - integrity sha512-NRFCcjc+/uO3ijUVyNOQJluf8PtGCe/W6cix36+M3cTFgiYqFOOW5MgN4JOOcvbUhcKTYVd1CvHz/LWi8d16Mg== - dependencies: - "@jest/types" "^29.6.1" - "@types/node" "*" - chalk "^4.0.0" - ci-info "^3.2.0" - graceful-fs "^4.2.9" - picomatch "^2.2.3" - -jest-validate@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-25.5.0.tgz#fb4c93f332c2e4cf70151a628e58a35e459a413a" - integrity sha512-okUFKqhZIpo3jDdtUXUZ2LxGUZJIlfdYBvZb1aczzxrlyMlqdnnws9MOxezoLGhSaFc2XYaHNReNQfj5zPIWyQ== - dependencies: - "@jest/types" "^25.5.0" - camelcase "^5.3.1" - chalk "^3.0.0" - jest-get-type "^25.2.6" - leven "^3.1.0" - pretty-format "^25.5.0" - -jest-watch-typeahead@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/jest-watch-typeahead/-/jest-watch-typeahead-0.5.0.tgz#903dba6112f22daae7e90b0a271853f7ff182008" - integrity sha512-4r36w9vU8+rdg48hj0Z7TvcSqVP6Ao8dk04grlHQNgduyCB0SqrI0xWIl85ZhXrzYvxQ0N5H+rRLAejkQzEHeQ== +it-reader@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/it-reader/-/it-reader-3.0.0.tgz#56596c7742ec7c63b7f7998f6bfa3f712e333d0e" + integrity sha512-NxR40odATeaBmSefn6Xn43DplYvn2KtEKQzn4jrTRuPYXMky5M4e+KQ7aTJh0k0vkytLyeenGO1I1GXlGm4laQ== dependencies: - ansi-escapes "^4.2.1" - chalk "^3.0.0" - jest-regex-util "^25.2.1" - jest-watcher "^25.2.4" - slash "^3.0.0" - string-length "^3.1.0" - strip-ansi "^6.0.0" + bl "^5.0.0" -jest-watcher@^25.2.4, jest-watcher@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-25.5.0.tgz#d6110d101df98badebe435003956fd4a465e8456" - integrity sha512-XrSfJnVASEl+5+bb51V0Q7WQx65dTSk7NL4yDdVjPnRNpM0hG+ncFmDYJo9O8jaSRcAitVbuVawyXCRoxGrT5Q== - dependencies: - "@jest/test-result" "^25.5.0" - "@jest/types" "^25.5.0" - ansi-escapes "^4.2.1" - chalk "^3.0.0" - jest-util "^25.5.0" - string-length "^3.1.0" +it-take@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/it-take/-/it-take-1.0.2.tgz#b5f1570014db7c3454897898b69bb7ac9c3bffc1" + integrity sha512-u7I6qhhxH7pSevcYNaMECtkvZW365ARqAIt9K+xjdK1B2WUDEjQSfETkOCT8bxFq/59LqrN3cMLUtTgmDBaygw== -jest-worker@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-24.9.0.tgz#5dbfdb5b2d322e98567898238a9697bcce67b3e5" - integrity sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw== +it-tar@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/it-tar/-/it-tar-3.0.0.tgz#d25f2777c0da4d4bec1b01a1ab9d79495f459f4f" + integrity sha512-VhD1Hnx4IXDcQgYJnJgltkn+w5F8kiJaB46lqovh+YWfty2JGW7i40QQjWbSvcg1QfaU8is8AVX8xwx/Db9oOg== dependencies: - merge-stream "^2.0.0" - supports-color "^6.1.0" + bl "^5.0.0" + buffer "^6.0.3" + iso-constants "^0.1.2" + it-concat "^2.0.0" + it-reader "^3.0.0" + p-defer "^3.0.0" -jest-worker@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-25.5.0.tgz#2611d071b79cea0f43ee57a3d118593ac1547db1" - integrity sha512-/dsSmUkIy5EBGfv/IjjqmFxrNAUpBERfGs1oHROyD7yxjG/w+t0GOJDX8O1k32ySmd7+a5IhnJU2qQFcJ4n1vw== +it-to-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/it-to-stream/-/it-to-stream-1.0.0.tgz#6c47f91d5b5df28bda9334c52782ef8e97fe3a4a" + integrity sha512-pLULMZMAB/+vbdvbZtebC0nWBTbG581lk6w8P7DfIIIKUfa8FbY7Oi0FxZcFPbxvISs7A9E+cMpLDBc1XhpAOA== dependencies: - merge-stream "^2.0.0" - supports-color "^7.0.0" + buffer "^6.0.3" + fast-fifo "^1.0.0" + get-iterator "^1.0.2" + p-defer "^3.0.0" + p-fifo "^1.0.0" + readable-stream "^3.6.0" -jest@^25.3.0: - version "25.5.4" - resolved "https://registry.yarnpkg.com/jest/-/jest-25.5.4.tgz#f21107b6489cfe32b076ce2adcadee3587acb9db" - integrity sha512-hHFJROBTqZahnO+X+PMtT6G2/ztqAZJveGqz//FnWWHurizkD05PQGzRZOhF3XP6z7SJmL+5tCfW8qV06JypwQ== +jackspeak@^2.0.3: + version "2.2.1" + resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.2.1.tgz#655e8cf025d872c9c03d3eb63e8f0c024fef16a6" + integrity sha512-MXbxovZ/Pm42f6cDIDkl3xpwv1AGwObKwfmjs2nQePiy85tP3fatofl3FC1aBsOtP/6fq5SbtgHwWcMsLP+bDw== dependencies: - "@jest/core" "^25.5.4" - import-local "^3.0.2" - jest-cli "^25.5.4" + "@isaacs/cliui" "^8.0.2" + optionalDependencies: + "@pkgjs/parseargs" "^0.11.0" -jpjs@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/jpjs/-/jpjs-1.2.1.tgz#f343833de8838a5beba1f42d5a219be0114c44b7" - integrity sha512-GxJWybWU4NV0RNKi6EIqk6IRPOTqd/h+U7sbtyuD7yUISUzV78LdHnq2xkevJsTlz/EImux4sWj+wfMiwKLkiw== +javascript-natural-sort@0.7.1: + version "0.7.1" + resolved "https://registry.yarnpkg.com/javascript-natural-sort/-/javascript-natural-sort-0.7.1.tgz#f9e2303d4507f6d74355a73664d1440fb5a0ef59" + integrity sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw== js-cookie@^2.2.1: version "2.2.1" @@ -9798,7 +5476,7 @@ js-sha3@0.8.0, js-sha3@^0.8.0: resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== -"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: +js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== @@ -9811,7 +5489,7 @@ js-yaml@3.13.1: argparse "^1.0.7" esprima "^4.0.0" -js-yaml@3.14.1, js-yaml@3.x, js-yaml@^3.13.1, js-yaml@^3.14.1: +js-yaml@3.x: version "3.14.1" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== @@ -9831,48 +5509,11 @@ jsbn@~0.1.0: resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg== -jsdom@^15.2.1: - version "15.2.1" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-15.2.1.tgz#d2feb1aef7183f86be521b8c6833ff5296d07ec5" - integrity sha512-fAl1W0/7T2G5vURSyxBzrJ1LSdQn6Tr5UX/xD4PXDx/PDgwygedfW6El/KIj3xJ7FU61TTYnc/l/B7P49Eqt6g== - dependencies: - abab "^2.0.0" - acorn "^7.1.0" - acorn-globals "^4.3.2" - array-equal "^1.0.0" - cssom "^0.4.1" - cssstyle "^2.0.0" - data-urls "^1.1.0" - domexception "^1.0.1" - escodegen "^1.11.1" - html-encoding-sniffer "^1.0.2" - nwsapi "^2.2.0" - parse5 "5.1.0" - pn "^1.1.0" - request "^2.88.0" - request-promise-native "^1.0.7" - saxes "^3.1.9" - symbol-tree "^3.2.2" - tough-cookie "^3.0.1" - w3c-hr-time "^1.0.1" - w3c-xmlserializer "^1.1.2" - webidl-conversions "^4.0.2" - whatwg-encoding "^1.0.5" - whatwg-mimetype "^2.3.0" - whatwg-url "^7.0.0" - ws "^7.0.0" - xml-name-validator "^3.0.0" - jsesc@^2.5.1: version "2.5.2" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== -jsesc@~0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" - integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA== - json-buffer@3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" @@ -9903,23 +5544,11 @@ json-stable-stringify-without-jsonify@^1.0.1: resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== -json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: +json-stringify-safe@~5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== -json5@2.x, json5@^2.2.2: - version "2.2.3" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" - integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== - -json5@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" - integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== - dependencies: - minimist "^1.2.0" - jsonfile@^2.1.0: version "2.4.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" @@ -9943,11 +5572,6 @@ jsonfile@^6.0.1: optionalDependencies: graceful-fs "^4.1.6" -jsonparse@^1.2.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" - integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== - jsonschema@^1.2.4: version "1.4.1" resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.4.1.tgz#cc4c3f0077fb4542982973d8a083b6b34f482dab" @@ -9963,23 +5587,6 @@ jsprim@^1.2.2: json-schema "0.4.0" verror "1.10.0" -"jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.3.3: - version "3.3.3" - resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz#76b3e6e6cece5c69d49a5792c3d01bd1a0cdc7ea" - integrity sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw== - dependencies: - array-includes "^3.1.5" - object.assign "^4.1.3" - -keccak@3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.2.tgz#4c2c6e8c54e04f2670ee49fa734eb9da152206e0" - integrity sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ== - dependencies: - node-addon-api "^2.0.0" - node-gyp-build "^4.2.0" - readable-stream "^3.6.0" - keccak@^3.0.0, keccak@^3.0.2: version "3.0.3" resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.3.tgz#4bc35ad917be1ef54ff246f904c2bbbf9ac61276" @@ -9996,26 +5603,7 @@ keyv@^4.0.0: dependencies: json-buffer "3.0.1" -kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: - version "3.2.2" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" - integrity sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ== - dependencies: - is-buffer "^1.1.5" - -kind-of@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" - integrity sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw== - dependencies: - is-buffer "^1.1.5" - -kind-of@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" - integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== - -kind-of@^6.0.0, kind-of@^6.0.2: +kind-of@^6.0.2: version "6.0.3" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== @@ -10027,23 +5615,6 @@ klaw@^1.0.0: optionalDependencies: graceful-fs "^4.1.9" -kleur@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" - integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== - -language-subtag-registry@~0.3.2: - version "0.3.22" - resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz#2e1500861b2e457eba7e7ae86877cbd08fa1fd1d" - integrity sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w== - -language-tags@=1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/language-tags/-/language-tags-1.0.5.tgz#d321dbc4da30ba8bf3024e040fa5c14661f9193a" - integrity sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ== - dependencies: - language-subtag-registry "~0.3.2" - lcid@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" @@ -10051,18 +5622,6 @@ lcid@^1.0.0: dependencies: invert-kv "^1.0.0" -level-concat-iterator@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/level-concat-iterator/-/level-concat-iterator-3.1.0.tgz#5235b1f744bc34847ed65a50548aa88d22e881cf" - integrity sha512-BWRCMHBxbIqPxJ8vHOvKUsaO0v1sLYZtjN3K2iZJsRBYtp+ONsY6Jfi6hy9K3+zolgQRryhIn2NRZjZnWJ9NmQ== - dependencies: - catering "^2.1.0" - -level-supports@^2.0.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/level-supports/-/level-supports-2.1.0.tgz#9af908d853597ecd592293b2fad124375be79c5f" - integrity sha512-E486g1NCjW5cF78KGPrMDRBYzPuueMZ6VBXHT6gC7A8UYWGiM14fGgp+s/L1oFfDWSPV/+SFkYCmZ0SiESkRKA== - level-supports@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/level-supports/-/level-supports-4.0.1.tgz#431546f9d81f10ff0fea0e74533a0e875c08c66a" @@ -10084,28 +5643,6 @@ level@^8.0.0: browser-level "^1.0.1" classic-level "^1.2.0" -leveldown@6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/leveldown/-/leveldown-6.1.0.tgz#7ab1297706f70c657d1a72b31b40323aa612b9ee" - integrity sha512-8C7oJDT44JXxh04aSSsfcMI8YiaGRhOFI9/pMEL7nWJLVsWajDPTRxsSHTM2WcTVY5nXM+SuRHzPPi0GbnDX+w== - dependencies: - abstract-leveldown "^7.2.0" - napi-macros "~2.0.0" - node-gyp-build "^4.3.0" - -leven@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" - integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== - -levn@^0.3.0, levn@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" - integrity sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA== - dependencies: - prelude-ls "~1.1.2" - type-check "~0.3.2" - levn@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" @@ -10114,10 +5651,13 @@ levn@^0.4.1: prelude-ls "^1.2.1" type-check "~0.4.0" -lilconfig@^2.0.4: - version "2.1.0" - resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.1.0.tgz#78e23ac89ebb7e1bfbf25b18043de756548e7f52" - integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ== +levn@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + integrity sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA== + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" lines-and-columns@^1.1.6: version "1.2.4" @@ -10151,13 +5691,6 @@ locate-path@^3.0.0: p-locate "^3.0.0" path-exists "^3.0.0" -locate-path@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" - integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== - dependencies: - p-locate "^4.1.0" - locate-path@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" @@ -10175,107 +5708,22 @@ lodash.camelcase@^4.3.0: resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA== -lodash.debounce@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" - integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== - -lodash.kebabcase@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz#8489b1cb0d29ff88195cceca448ff6d6cc295c36" - integrity sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g== - -lodash.lowercase@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/lodash.lowercase/-/lodash.lowercase-4.3.0.tgz#46515aced4acb0b7093133333af068e4c3b14e9d" - integrity sha512-UcvP1IZYyDKyEL64mmrwoA1AbFu5ahojhTtkOUr1K9dbuxzS9ev8i4TxMMGCqRC9TE8uDaSoufNAXxRPNTseVA== - -lodash.lowerfirst@^4.3.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/lodash.lowerfirst/-/lodash.lowerfirst-4.3.1.tgz#de3c7b12e02c6524a0059c2f6cb7c5c52655a13d" - integrity sha512-UUKX7VhP1/JL54NXg2aq/E1Sfnjjes8fNYTNkPU8ZmsaVeBvPHKdbNaN79Re5XRL01u6wbq3j0cbYZj71Fcu5w== - -lodash.memoize@4.x: - version "4.1.2" - resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" - integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== - lodash.merge@^4.6.2: version "4.6.2" resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== -lodash.pad@^4.5.1: - version "4.5.1" - resolved "https://registry.yarnpkg.com/lodash.pad/-/lodash.pad-4.5.1.tgz#4330949a833a7c8da22cc20f6a26c4d59debba70" - integrity sha512-mvUHifnLqM+03YNzeTBS1/Gr6JRFjd3rRx88FHWUvamVaT9k2O/kXha3yBSOwB9/DTQrSTLJNHvLBBt2FdX7Mg== - -lodash.padend@^4.6.1: - version "4.6.1" - resolved "https://registry.yarnpkg.com/lodash.padend/-/lodash.padend-4.6.1.tgz#53ccba047d06e158d311f45da625f4e49e6f166e" - integrity sha512-sOQs2aqGpbl27tmCS1QNZA09Uqp01ZzWfDUoD+xzTii0E7dSQfRKcRetFwa+uXaxaqL+TKm7CgD2JdKP7aZBSw== - -lodash.padstart@^4.6.1: - version "4.6.1" - resolved "https://registry.yarnpkg.com/lodash.padstart/-/lodash.padstart-4.6.1.tgz#d2e3eebff0d9d39ad50f5cbd1b52a7bce6bb611b" - integrity sha512-sW73O6S8+Tg66eY56DBk85aQzzUJDtpoXFBgELMd5P/SotAguo+1kYO6RuYgXxA4HJH3LFTFPASX6ET6bjfriw== - -lodash.repeat@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/lodash.repeat/-/lodash.repeat-4.1.0.tgz#fc7de8131d8c8ac07e4b49f74ffe829d1f2bec44" - integrity sha512-eWsgQW89IewS95ZOcr15HHCX6FVDxq3f2PNUIng3fyzsPev9imFQxIYdFZ6crl8L56UR6ZlGDLcEb3RZsCSSqw== - -lodash.snakecase@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz#39d714a35357147837aefd64b5dcbb16becd8f8d" - integrity sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw== - -lodash.sortby@^4.7.0: - version "4.7.0" - resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" - integrity sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA== - -lodash.startcase@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.startcase/-/lodash.startcase-4.4.0.tgz#9436e34ed26093ed7ffae1936144350915d9add8" - integrity sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg== - -lodash.trim@^4.5.1: - version "4.5.1" - resolved "https://registry.yarnpkg.com/lodash.trim/-/lodash.trim-4.5.1.tgz#36425e7ee90be4aa5e27bcebb85b7d11ea47aa57" - integrity sha512-nJAlRl/K+eiOehWKDzoBVrSMhK0K3A3YQsUNXHQa5yIrKBAhsZgSu3KoAFoFT+mEgiyBHddZ0pRk1ITpIp90Wg== - -lodash.trimend@^4.5.1: - version "4.5.1" - resolved "https://registry.yarnpkg.com/lodash.trimend/-/lodash.trimend-4.5.1.tgz#12804437286b98cad8996b79414e11300114082f" - integrity sha512-lsD+k73XztDsMBKPKvzHXRKFNMohTjoTKIIo4ADLn5dA65LZ1BqlAvSXhR2rPEC3BgAUQnzMnorqDtqn2z4IHA== - -lodash.trimstart@^4.5.1: - version "4.5.1" - resolved "https://registry.yarnpkg.com/lodash.trimstart/-/lodash.trimstart-4.5.1.tgz#8ff4dec532d82486af59573c39445914e944a7f1" - integrity sha512-b/+D6La8tU76L/61/aN0jULWHkT0EeJCmVstPBn/K9MtD2qBW83AsBNrr63dKuWYwVMO7ucv13QNO/Ek/2RKaQ== - lodash.truncate@^4.4.2: version "4.4.2" resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" integrity sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw== -lodash.uppercase@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/lodash.uppercase/-/lodash.uppercase-4.3.0.tgz#c404abfd1469f93931f9bb24cf6cc7d57059bc73" - integrity sha512-+Nbnxkj7s8K5U8z6KnEYPGUOGp3woZbB7Ecs7v3LkkjLQSm2kP9SKIILitN1ktn2mB/tmM9oSlku06I+/lH7QA== - -lodash.upperfirst@^4.3.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz#1365edf431480481ef0d1c68957a5ed99d49f7ce" - integrity sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg== - lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.21: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== -log-symbols@3.0.0, log-symbols@^3.0.0: +log-symbols@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-3.0.0.tgz#f3a08516a5dea893336a7dee14d18a1cfdab77c4" integrity sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ== @@ -10290,39 +5738,11 @@ log-symbols@4.1.0: chalk "^4.1.0" is-unicode-supported "^0.1.0" -log-update@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/log-update/-/log-update-2.3.0.tgz#88328fd7d1ce7938b29283746f0b1bc126b24708" - integrity sha512-vlP11XfFGyeNQlmEn9tJ66rEW1coA/79m5z6BCkudjbAGE83uhAcGYrBFwfs3AdLiLzGRusRPAbSPK9xZteCmg== - dependencies: - ansi-escapes "^3.0.0" - cli-cursor "^2.0.0" - wrap-ansi "^3.0.1" - -lolex@^5.0.0: - version "5.1.2" - resolved "https://registry.yarnpkg.com/lolex/-/lolex-5.1.2.tgz#953694d098ce7c07bc5ed6d0e42bc6c0c6d5a367" - integrity sha512-h4hmjAvHTmd+25JSwrtTIuwbKdwg5NzZVRMLn9saij4SZaepCrTCxPr35H/3bjwfMJtN+t3CX8672UIkglz28A== - dependencies: - "@sinonjs/commons" "^1.7.0" - long@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28" integrity sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA== -long@^5.2.0: - version "5.2.3" - resolved "https://registry.yarnpkg.com/long/-/long-5.2.3.tgz#a3ba97f3877cf1d778eccbcb048525ebb77499e1" - integrity sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q== - -loose-envify@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" - integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== - dependencies: - js-tokens "^3.0.0 || ^4.0.0" - loupe@^2.3.1: version "2.3.6" resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.6.tgz#76e4af498103c532d1ecc9be102036a21f787b53" @@ -10342,13 +5762,6 @@ lower-case@^1.1.0, lower-case@^1.1.1, lower-case@^1.1.2: resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac" integrity sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA== -lower-case@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" - integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== - dependencies: - tslib "^2.0.3" - lowercase-keys@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" @@ -10383,13 +5796,6 @@ lru_map@^0.3.3: resolved "https://registry.yarnpkg.com/lru_map/-/lru_map-0.3.3.tgz#b5c8351b9464cbd750335a79650a0ec0e56118dd" integrity sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ== -magic-string@^0.25.2, magic-string@^0.25.7: - version "0.25.9" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.9.tgz#de7f9faf91ef8a1c91d02c2e5314c8277dbcdd1c" - integrity sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ== - dependencies: - sourcemap-codec "^1.4.8" - magic-string@^0.26.6: version "0.26.7" resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.26.7.tgz#caf7daf61b34e9982f8228c4527474dac8981d6f" @@ -10397,37 +5803,11 @@ magic-string@^0.26.6: dependencies: sourcemap-codec "^1.4.8" -make-dir@^3.0.0, make-dir@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" - integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== - dependencies: - semver "^6.0.0" - -make-error@1.x, make-error@^1.1.1: +make-error@^1.1.1: version "1.3.6" resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== -makeerror@1.0.12: - version "1.0.12" - resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" - integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== - dependencies: - tmpl "1.0.5" - -map-cache@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" - integrity sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg== - -map-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" - integrity sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w== - dependencies: - object-visit "^1.0.0" - markdown-table@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-1.1.3.tgz#9fcb69bcfdb8717bfd0398c6ec2d93036ef8de60" @@ -10438,13 +5818,6 @@ match-all@^1.2.6: resolved "https://registry.yarnpkg.com/match-all/-/match-all-1.2.6.tgz#66d276ad6b49655551e63d3a6ee53e8be0566f8d" integrity sha512-0EESkXiTkWzrQQntBu2uzKvLu6vVkUGz40nGPbSZuegcfE5UuSzNjLaIu76zJWuaT/2I3Z/8M06OlUOZLGwLlQ== -matchstick-as@^0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/matchstick-as/-/matchstick-as-0.5.2.tgz#6a6dde02d1d939c32458bd67bac688891a07a34c" - integrity sha512-fb1OVphDKEvJY06Ue02Eh1CNncuW95vp6b8tNAP7UIqplICSLoU/zgN6U7ge7R0upsoO78C7CRi4EyK/7Jxz7g== - dependencies: - wabt "1.0.24" - mcl-wasm@^0.7.1: version "0.7.9" resolved "https://registry.yarnpkg.com/mcl-wasm/-/mcl-wasm-0.7.9.tgz#c1588ce90042a8700c3b60e40efb339fc07ab87f" @@ -10490,11 +5863,6 @@ merge-options@^3.0.4: dependencies: is-plain-obj "^2.1.0" -merge-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" - integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== - merge2@^1.2.3, merge2@^1.3.0, merge2@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" @@ -10505,7 +5873,7 @@ methods@~1.1.2: resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== -micromatch@4.x, micromatch@^4.0.2, micromatch@^4.0.4: +micromatch@^4.0.4: version "4.0.5" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== @@ -10513,25 +5881,6 @@ micromatch@4.x, micromatch@^4.0.2, micromatch@^4.0.4: braces "^3.0.2" picomatch "^2.3.1" -micromatch@^3.1.4: - version "3.1.10" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" - integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - braces "^2.3.1" - define-property "^2.0.2" - extend-shallow "^3.0.2" - extglob "^2.0.4" - fragment-cache "^0.2.1" - kind-of "^6.0.2" - nanomatch "^1.2.9" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.2" - mime-db@1.52.0: version "1.52.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" @@ -10549,16 +5898,6 @@ mime@1.6.0: resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== -mimic-fn@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" - integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== - -mimic-fn@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== - mimic-response@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" @@ -10586,7 +5925,7 @@ minimalistic-crypto-utils@^1.0.1: resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== -"minimatch@2 || 3", minimatch@^3.0.2, minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: +"minimatch@2 || 3", minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== @@ -10607,20 +5946,13 @@ minimatch@5.0.1: dependencies: brace-expansion "^2.0.1" -minimatch@^5.0.1, minimatch@^5.1.0: +minimatch@^5.0.1: version "5.1.6" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== dependencies: brace-expansion "^2.0.1" -minimatch@^8.0.2: - version "8.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-8.0.4.tgz#847c1b25c014d4e9a7f68aaf63dedd668a626229" - integrity sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA== - dependencies: - brace-expansion "^2.0.1" - minimatch@^9.0.1: version "9.0.1" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.1.tgz#8a555f541cf976c622daf078bb28f29fb927c253" @@ -10628,7 +5960,7 @@ minimatch@^9.0.1: dependencies: brace-expansion "^2.0.1" -minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6, minimist@^1.2.7: +minimist@^1.2.5, minimist@^1.2.6, minimist@^1.2.7: version "1.2.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== @@ -10641,23 +5973,6 @@ minipass@^2.6.0, minipass@^2.9.0: safe-buffer "^5.1.2" yallist "^3.0.0" -minipass@^3.0.0: - version "3.3.6" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a" - integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== - dependencies: - yallist "^4.0.0" - -minipass@^4.2.4: - version "4.2.8" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-4.2.8.tgz#f0010f64393ecfc1d1ccb5f582bcaf45f48e1a3a" - integrity sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ== - -minipass@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" - integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== - "minipass@^5.0.0 || ^6.0.2": version "6.0.2" resolved "https://registry.yarnpkg.com/minipass/-/minipass-6.0.2.tgz#542844b6c4ce95b202c0995b0a471f1229de4c81" @@ -10670,22 +5985,6 @@ minizlib@^1.3.3: dependencies: minipass "^2.9.0" -minizlib@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" - integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== - dependencies: - minipass "^3.0.0" - yallist "^4.0.0" - -mixin-deep@^1.2.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" - integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== - dependencies: - for-in "^1.0.2" - is-extendable "^1.0.1" - mkdirp-promise@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz#e9b8f68e552c68a9c1713b84883f7a1dd039b8a1" @@ -10705,14 +6004,14 @@ mkdirp@0.5.5: dependencies: minimist "^1.2.5" -mkdirp@0.5.x, mkdirp@0.x, mkdirp@^0.5.1, mkdirp@^0.5.5: +mkdirp@0.5.x, mkdirp@^0.5.5: version "0.5.6" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== dependencies: minimist "^1.2.6" -mkdirp@^1.0.3, mkdirp@^1.0.4: +mkdirp@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== @@ -10821,16 +6120,6 @@ module-error@^1.0.1, module-error@^1.0.2: resolved "https://registry.yarnpkg.com/module-error/-/module-error-1.0.2.tgz#8d1a48897ca883f47a45816d4fb3e3c6ba404d86" integrity sha512-0yuvsqSCv8LbaOKhnsQ/T5JhyFlCYLPXK3U2sgV10zoKQwzs/MyfuQUOZQ1V/6OCOJsK/TRgNVrPuPDqtdMFtA== -mri@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/mri/-/mri-1.2.0.tgz#6721480fec2a11a4889861115a48b6cbe7cc8f0b" - integrity sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA== - -mrmime@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/mrmime/-/mrmime-1.0.1.tgz#5f90c825fad4bdd41dc914eff5d1a8cfdaf24f27" - integrity sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw== - ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" @@ -10901,7 +6190,7 @@ multicodec@^1.0.0: buffer "^5.6.0" varint "^5.0.0" -multiformats@^9.4.1, multiformats@^9.4.13, multiformats@^9.4.2, multiformats@^9.4.5, multiformats@^9.5.4: +multiformats@^9.4.1, multiformats@^9.4.2, multiformats@^9.4.5, multiformats@^9.5.4: version "9.9.0" resolved "https://registry.yarnpkg.com/multiformats/-/multiformats-9.9.0.tgz#c68354e7d21037a8f1f8833c8ccd68618e8f1d37" integrity sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg== @@ -10924,16 +6213,6 @@ murmur-128@^0.2.1: fmix "^0.1.0" imul "^1.0.0" -mustache@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/mustache/-/mustache-4.2.0.tgz#e5892324d60a12ec9c2a73359edca52972bf6f64" - integrity sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ== - -mute-stream@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" - integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== - nano-base32@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/nano-base32/-/nano-base32-1.0.1.tgz#ba548c879efcfb90da1c4d9e097db4a46c9255ef" @@ -10949,46 +6228,17 @@ nanoid@3.3.3: resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.3.tgz#fd8e8b7aa761fe807dba2d1b98fb7241bb724a25" integrity sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w== -nanoid@^3.0.2, nanoid@^3.1.12, nanoid@^3.1.20, nanoid@^3.1.23, nanoid@^3.2.0: +nanoid@^3.0.2, nanoid@^3.1.12, nanoid@^3.1.20: version "3.3.6" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c" integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA== -nanomatch@^1.2.9: - version "1.2.13" - resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" - integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - define-property "^2.0.2" - extend-shallow "^3.0.2" - fragment-cache "^0.2.1" - is-windows "^1.0.2" - kind-of "^6.0.2" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -nanospinner@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/nanospinner/-/nanospinner-1.1.0.tgz#d17ff621cb1784b0a206b400da88a0ef6db39b97" - integrity sha512-yFvNYMig4AthKYfHFl1sLj7B2nkHL4lzdig4osvl9/LdGbXwrdFRoqBS98gsEsOakr0yH+r5NZ/1Y9gdVB8trA== - dependencies: - picocolors "^1.0.0" - napi-macros@^2.2.2: version "2.2.2" resolved "https://registry.yarnpkg.com/napi-macros/-/napi-macros-2.2.2.tgz#817fef20c3e0e40a963fbf7b37d1600bd0201044" integrity sha512-hmEVtAGYzVQpCKdbQea4skABsdXW4RUh5t5mJ2zzqowJS2OyXZTU1KhDVFhx+NlWZ4ap9mqR9TcDO3LTTttd+g== -napi-macros@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/napi-macros/-/napi-macros-2.0.0.tgz#2b6bae421e7b96eb687aa6c77a7858640670001b" - integrity sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg== - -native-abort-controller@^1.0.3, native-abort-controller@^1.0.4: +native-abort-controller@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/native-abort-controller/-/native-abort-controller-1.0.4.tgz#39920155cc0c18209ff93af5bc90be856143f251" integrity sha512-zp8yev7nxczDJMoP6pDxyD20IU0T22eX8VwN2ztDccKvSZhRaV33yP1BGwKSZfXuqWUzsXopVFjBdau9OOAwMQ== @@ -11008,11 +6258,6 @@ natural-compare@^1.4.0: resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== -natural-orderby@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/natural-orderby/-/natural-orderby-2.0.3.tgz#8623bc518ba162f8ff1cdb8941d74deb0fdcc016" - integrity sha512-p7KTHxU0CUrcOXe62Zfrb5Z13nLvPhSWR/so3kFulUQU0sgUll2Z0LwpsLN351eOOD+hRGu/F1g+6xDfPeD++Q== - negotiator@0.6.3: version "0.6.3" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" @@ -11028,11 +6273,6 @@ next-tick@^1.1.0: resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.1.0.tgz#1836ee30ad56d67ef281b22bd199f709449b35eb" integrity sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ== -nice-try@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" - integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== - no-case@^2.2.0, no-case@^2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/no-case/-/no-case-2.3.2.tgz#60b813396be39b3f1288a4c1ed5d1e7d28b464ac" @@ -11040,14 +6280,6 @@ no-case@^2.2.0, no-case@^2.3.2: dependencies: lower-case "^1.1.1" -no-case@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" - integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== - dependencies: - lower-case "^2.0.2" - tslib "^2.0.3" - node-addon-api@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-2.0.2.tgz#432cfa82962ce494b132e9d72a15b29f71ff5d32" @@ -11068,7 +6300,7 @@ node-environment-flags@1.0.6: object.getownpropertydescriptors "^2.0.3" semver "^5.7.0" -node-fetch@^2.6.0, node-fetch@^2.6.1, node-fetch@^2.6.11, node-fetch@^2.6.8: +node-fetch@^2.6.0, node-fetch@^2.6.1, node-fetch@^2.6.11: version "2.6.11" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.11.tgz#cde7fc71deef3131ef80a738919f999e6edfff25" integrity sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w== @@ -11079,37 +6311,11 @@ node-fetch@^2.6.0, node-fetch@^2.6.1, node-fetch@^2.6.11, node-fetch@^2.6.8: version "2.6.7" resolved "https://registry.npmjs.org/@achingbrain/node-fetch/-/node-fetch-2.6.7.tgz#1b5d62978f2ed07b99444f64f0df39f960a6d34d" -node-gyp-build@4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.4.0.tgz#42e99687ce87ddeaf3a10b99dc06abc11021f3f4" - integrity sha512-amJnQCcgtRVw9SvoebO3BKGESClrfXGCUTX9hSn1OuGQTQBOZmVd0Z0OlecpuRksKvbsUqALE8jls/ErClAPuQ== - node-gyp-build@^4.2.0, node-gyp-build@^4.3.0: version "4.6.0" resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.6.0.tgz#0c52e4cbf54bbd28b709820ef7b6a3c2d6209055" integrity sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ== -node-int64@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" - integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== - -node-notifier@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-6.0.0.tgz#cea319e06baa16deec8ce5cd7f133c4a46b68e12" - integrity sha512-SVfQ/wMw+DesunOm5cKqr6yDcvUTDl/yc97ybGHMrteNEY6oekXpNpS3lZwgLlwz0FLgHoiW28ZpmBHUDg37cw== - dependencies: - growly "^1.3.0" - is-wsl "^2.1.1" - semver "^6.3.0" - shellwords "^0.1.1" - which "^1.3.1" - -node-releases@^2.0.12: - version "2.0.12" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.12.tgz#35627cc224a23bfb06fb3380f2b3afaaa7eb1039" - integrity sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ== - nofilter@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/nofilter/-/nofilter-1.0.4.tgz#78d6f4b6a613e7ced8b015cec534625f7667006e" @@ -11127,7 +6333,7 @@ nopt@3.x: dependencies: abbrev "1" -normalize-package-data@^2.3.2, normalize-package-data@^2.5.0: +normalize-package-data@^2.3.2: version "2.5.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== @@ -11137,13 +6343,6 @@ normalize-package-data@^2.3.2, normalize-package-data@^2.5.0: semver "2 || 3 || 4 || 5" validate-npm-package-license "^3.0.1" -normalize-path@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" - integrity sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w== - dependencies: - remove-trailing-separator "^1.0.1" - normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" @@ -11154,20 +6353,6 @@ normalize-url@^6.0.1: resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== -npm-run-path@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" - integrity sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw== - dependencies: - path-key "^2.0.0" - -npm-run-path@^4.0.0, npm-run-path@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" - integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== - dependencies: - path-key "^3.0.0" - nth-check@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" @@ -11188,11 +6373,6 @@ number-to-bn@1.7.0: bn.js "4.11.6" strip-hex-prefix "1.0.0" -nwsapi@^2.2.0: - version "2.2.5" - resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.5.tgz#a52744c61b3889dd44b0a158687add39b8d935e2" - integrity sha512-6xpotnECFy/og7tKSBVmUNft7J3jyXAka4XvG6AUhFWRz+Q/Ljus7znJAA3bxColfQLdS+XsjoodtJfCgeTEFQ== - oauth-sign@~0.9.0: version "0.9.0" resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" @@ -11203,15 +6383,6 @@ object-assign@^4, object-assign@^4.1.0, object-assign@^4.1.1: resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== -object-copy@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" - integrity sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ== - dependencies: - copy-descriptor "^0.1.0" - define-property "^0.2.5" - kind-of "^3.0.3" - object-inspect@^1.12.3, object-inspect@^1.9.0: version "1.12.3" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" @@ -11222,18 +6393,6 @@ object-keys@^1.0.11, object-keys@^1.1.1: resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== -object-treeify@^1.1.33: - version "1.1.33" - resolved "https://registry.yarnpkg.com/object-treeify/-/object-treeify-1.1.33.tgz#f06fece986830a3cba78ddd32d4c11d1f76cdf40" - integrity sha512-EFVjAYfzWqWsBMRHPMAXLCDIJnpMhdWAqR7xG6M6a2cs6PMFpl/+Z20w9zDW4vkxOFfddegBKq9Rehd0bxWE7A== - -object-visit@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" - integrity sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA== - dependencies: - isobject "^3.0.0" - object.assign@4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" @@ -11244,7 +6403,7 @@ object.assign@4.1.0: has-symbols "^1.0.0" object-keys "^1.0.11" -object.assign@^4.1.3, object.assign@^4.1.4: +object.assign@^4.1.4: version "4.1.4" resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== @@ -11252,25 +6411,7 @@ object.assign@^4.1.3, object.assign@^4.1.4: call-bind "^1.0.2" define-properties "^1.1.4" has-symbols "^1.0.3" - object-keys "^1.1.1" - -object.entries@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.6.tgz#9737d0e5b8291edd340a3e3264bb8a3b00d5fa23" - integrity sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - -object.fromentries@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.6.tgz#cdb04da08c539cffa912dcd368b886e0904bfa73" - integrity sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" + object-keys "^1.1.1" object.getownpropertydescriptors@^2.0.3: version "2.1.6" @@ -11283,30 +6424,6 @@ object.getownpropertydescriptors@^2.0.3: es-abstract "^1.21.2" safe-array-concat "^1.0.0" -object.hasown@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.2.tgz#f919e21fad4eb38a57bc6345b3afd496515c3f92" - integrity sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw== - dependencies: - define-properties "^1.1.4" - es-abstract "^1.20.4" - -object.pick@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" - integrity sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ== - dependencies: - isobject "^3.0.1" - -object.values@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.6.tgz#4abbaa71eba47d63589d402856f908243eea9b1d" - integrity sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - obliterator@^2.0.0: version "2.0.4" resolved "https://registry.yarnpkg.com/obliterator/-/obliterator-2.0.4.tgz#fa650e019b2d075d745e44f1effeb13a2adbe816" @@ -11333,21 +6450,7 @@ once@1.x, once@^1.3.0, once@^1.3.1, once@^1.4.0: dependencies: wrappy "1" -onetime@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" - integrity sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ== - dependencies: - mimic-fn "^1.0.0" - -onetime@^5.1.0, onetime@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" - integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== - dependencies: - mimic-fn "^2.1.0" - -optionator@^0.8.1, optionator@^0.8.3: +optionator@^0.8.1: version "0.8.3" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== @@ -11371,33 +6474,6 @@ optionator@^0.9.1: type-check "^0.4.0" word-wrap "^1.2.3" -ora@4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/ora/-/ora-4.0.2.tgz#0e1e68fd45b135d28648b27cf08081fa6e8a297d" - integrity sha512-YUOZbamht5mfLxPmk4M35CD/5DuOkAacxlEUbStVXpBAt4fyhBf+vZHI/HRkI++QUp3sNoeA2Gw4C+hi4eGSig== - dependencies: - chalk "^2.4.2" - cli-cursor "^3.1.0" - cli-spinners "^2.2.0" - is-interactive "^1.0.0" - log-symbols "^3.0.0" - strip-ansi "^5.2.0" - wcwidth "^1.0.1" - -ora@^4.0.3: - version "4.1.1" - resolved "https://registry.yarnpkg.com/ora/-/ora-4.1.1.tgz#566cc0348a15c36f5f0e979612842e02ba9dddbc" - integrity sha512-sjYP8QyVWBpBZWD6Vr1M/KwknSw6kJOz41tvGMlwWeClHBtYKTbHMki1PsLZnxKpXMPbTKv9b3pjQu3REib96A== - dependencies: - chalk "^3.0.0" - cli-cursor "^3.1.0" - cli-spinners "^2.2.0" - is-interactive "^1.0.0" - log-symbols "^3.0.0" - mute-stream "0.0.8" - strip-ansi "^6.0.0" - wcwidth "^1.0.1" - ordinal@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/ordinal/-/ordinal-1.0.3.tgz#1a3c7726a61728112f50944ad7c35c06ae3a0d4d" @@ -11415,13 +6491,6 @@ os-tmpdir@~1.0.2: resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== -"osx-ethersV120@npm:@aragon/osx-ethers@1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@aragon/osx-ethers/-/osx-ethers-1.2.1.tgz#a442048137153ed5a3ca4eff3f3927b45a5134b5" - integrity sha512-3Fscq8C9elIktiI6OT7fR5iaAvim+ghU6IUvZF3P/phvWm9roNp/GXAROhA/Vx41NQxeqmfXokgFo6KOWt4drA== - dependencies: - ethers "^5.6.2" - p-cancelable@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-2.1.1.tgz#aab7fbd416582fa32a3db49859c122487c5ed2cf" @@ -11437,11 +6506,6 @@ p-defer@^3.0.0: resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-3.0.0.tgz#d1dceb4ee9b2b604b1d94ffec83760175d4e6f83" integrity sha512-ugZxsxmtTln604yeYd29EGrNhazN2lywetzpKhfmQjW/VJmhpDmWbiX+h0zL8V91R0UXkhb3KtPmyq9PZw3aYw== -p-each-series@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-2.2.0.tgz#105ab0357ce72b202a8a8b94933672657b5e2a9a" - integrity sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA== - p-fifo@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-fifo/-/p-fifo-1.0.0.tgz#e29d5cf17c239ba87f51dde98c1d26a9cfe20a63" @@ -11450,16 +6514,6 @@ p-fifo@^1.0.0: fast-fifo "^1.0.0" p-defer "^3.0.0" -p-finally@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" - integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow== - -p-finally@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-2.0.1.tgz#bd6fcaa9c559a096b680806f4d657b3f0f240561" - integrity sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw== - p-limit@^1.1.0: version "1.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" @@ -11467,7 +6521,7 @@ p-limit@^1.1.0: dependencies: p-try "^1.0.0" -p-limit@^2.0.0, p-limit@^2.2.0: +p-limit@^2.0.0: version "2.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== @@ -11495,13 +6549,6 @@ p-locate@^3.0.0: dependencies: p-limit "^2.0.0" -p-locate@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" - integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== - dependencies: - p-limit "^2.2.0" - p-locate@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" @@ -11585,11 +6632,6 @@ parse5-htmlparser2-tree-adapter@^7.0.0: domhandler "^5.0.2" parse5 "^7.0.0" -parse5@5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.0.tgz#c59341c9723f414c452975564c7c00a68d58acd2" - integrity sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ== - parse5@^7.0.0: version "7.1.2" resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.1.2.tgz#0736bebbfd77793823240a23b7fc5e010b7f8e32" @@ -11610,32 +6652,6 @@ pascal-case@^2.0.0: camel-case "^3.0.0" upper-case-first "^1.1.0" -pascal-case@^3.1.1: - version "3.1.2" - resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.2.tgz#b48e0ef2b98e205e7c1dae747d0b1508237660eb" - integrity sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g== - dependencies: - no-case "^3.0.4" - tslib "^2.0.3" - -pascalcase@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" - integrity sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw== - -password-prompt@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/password-prompt/-/password-prompt-1.1.2.tgz#85b2f93896c5bd9e9f2d6ff0627fa5af3dc00923" - integrity sha512-bpuBhROdrhuN3E7G/koAju0WjVw9/uQOG5Co5mokNj0MiOSBVZS1JTwM4zl55hu0WFmIEFvO9cU9sJQiBIYeIA== - dependencies: - ansi-escapes "^3.1.0" - cross-spawn "^6.0.5" - -path-browserify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-1.0.1.tgz#d98454a9c3753d5790860f16f68867b9e46be1fd" - integrity sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g== - path-case@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/path-case/-/path-case-2.1.1.tgz#94b8037c372d3fe2906e465bb45e25d226e8eea5" @@ -11665,12 +6681,7 @@ path-is-absolute@^1.0.0: resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== -path-key@^2.0.0, path-key@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" - integrity sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw== - -path-key@^3.0.0, path-key@^3.1.0: +path-key@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== @@ -11680,7 +6691,7 @@ path-parse@^1.0.6, path-parse@^1.0.7: resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== -path-scurry@^1.6.1, path-scurry@^1.7.0: +path-scurry@^1.7.0: version "1.9.2" resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.9.2.tgz#90f9d296ac5e37e608028e28a447b11d385b3f63" integrity sha512-qSDLy2aGFPm8i4rsbHd4MNyTcrzHFsLQykrtbuGRknZZCBBVXSv2tSCDN2Cg6Rt/GFRw8GoW9y9Ecw5rIPG1sg== @@ -11728,12 +6739,7 @@ performance-now@^2.1.0: resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow== -picocolors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" - integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== - -picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.2.3, picomatch@^2.3.1: +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== @@ -11760,33 +6766,11 @@ pinkie@^2.0.0: resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" integrity sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg== -pirates@^4.0.1: - version "4.0.5" - resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b" - integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ== - -pkg-dir@^4.1.0, pkg-dir@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" - integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== - dependencies: - find-up "^4.0.0" - pluralize@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-8.0.0.tgz#1a6fa16a38d12a1901e0320fa017051c539ce3b1" integrity sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA== -pn@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb" - integrity sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA== - -posix-character-classes@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" - integrity sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg== - prelude-ls@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" @@ -11813,35 +6797,11 @@ prettier-plugin-solidity@^1.1.3: semver "^7.3.8" solidity-comments-extractor "^0.0.7" -prettier@1.19.1, prettier@^1.19.1: - version "1.19.1" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb" - integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew== - prettier@^2.3.1, prettier@^2.8.3, prettier@^2.8.8: version "2.8.8" resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== -pretty-format@^25.2.1, pretty-format@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-25.5.0.tgz#7873c1d774f682c34b8d48b6743a2bf2ac55791a" - integrity sha512-kbo/kq2LQ/A/is0PQwsEHM7Ca6//bGPPvU6UnsdDRSKTWxT/ru/xb88v4BJf6a69H+uTytOEsTusT9ksd/1iWQ== - dependencies: - "@jest/types" "^25.5.0" - ansi-regex "^5.0.0" - ansi-styles "^4.0.0" - react-is "^16.12.0" - -pretty-format@^29.0.0, pretty-format@^29.6.1: - version "29.6.1" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.6.1.tgz#ec838c288850b7c4f9090b867c2d4f4edbfb0f3e" - integrity sha512-7jRj+yXO0W7e4/tSJKoR7HRIHLPPjtNaUGG2xxKQnGvPNRkgWcQ0AZX6P4KBRJN4FcTBWb3sa7DVUJmocYuoog== - dependencies: - "@jest/schemas" "^29.6.0" - ansi-styles "^5.0.0" - react-is "^18.0.0" - process-nextick-args@~2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" @@ -11852,21 +6812,6 @@ process@^0.11.10: resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== -progress-estimator@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/progress-estimator/-/progress-estimator-0.2.2.tgz#1c3947a5782ea56e40c8fccc290ac7ceeb1b91cb" - integrity sha512-GF76Ac02MTJD6o2nMNtmtOFjwWCnHcvXyn5HOWPQnEMO8OTLw7LAvNmrwe8LmdsB+eZhwUu9fX/c9iQnBxWaFA== - dependencies: - chalk "^2.4.1" - cli-spinners "^1.3.1" - humanize-duration "^3.15.3" - log-update "^2.3.0" - -progress@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" - integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== - promise@^8.0.0: version "8.3.0" resolved "https://registry.yarnpkg.com/promise/-/promise-8.3.0.tgz#8cb333d1edeb61ef23869fbb8a4ea0279ab60e0a" @@ -11874,23 +6819,6 @@ promise@^8.0.0: dependencies: asap "~2.0.6" -prompts@^2.0.1: - version "2.4.2" - resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" - integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== - dependencies: - kleur "^3.0.3" - sisteransi "^1.0.5" - -prop-types@^15.8.1: - version "15.8.1" - resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" - integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== - dependencies: - loose-envify "^1.4.0" - object-assign "^4.1.1" - react-is "^16.13.1" - proper-lockfile@^4.1.1: version "4.1.2" resolved "https://registry.yarnpkg.com/proper-lockfile/-/proper-lockfile-4.1.2.tgz#c8b9de2af6b2f1601067f98e01ac66baa223141f" @@ -11932,14 +6860,6 @@ psl@^1.1.28: resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== -pump@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/pump/-/pump-1.0.3.tgz#5dfe8311c33bbf6fc18261f9f34702c47c08a954" - integrity sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - pump@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" @@ -11953,11 +6873,6 @@ punycode@2.1.0: resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.0.tgz#5f863edc89b96db09074bad7947bf09056ca4e7d" integrity sha512-Yxz2kRwT90aPiWEMHVYnEf4+rhwF1tBmmZ4KepCP+Wkium9JxtWnUm1nqGwpiAHr/tnTSeHqr3wb++jgSkXjhA== -punycode@^1.3.2: - version "1.4.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" - integrity sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ== - punycode@^2.1.0, punycode@^2.1.1: version "2.3.0" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" @@ -11968,18 +6883,6 @@ pure-rand@^5.0.1: resolved "https://registry.yarnpkg.com/pure-rand/-/pure-rand-5.0.5.tgz#bda2a7f6a1fc0f284d78d78ca5902f26f2ad35cf" integrity sha512-BwQpbqxSCBJVpamI6ydzcKqyFmnd5msMWUGvzXLm1aXvusbbgkbOto/EUPM00hjveJEaJtdbhUjKSzWRhQVkaw== -pvtsutils@^1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/pvtsutils/-/pvtsutils-1.3.2.tgz#9f8570d132cdd3c27ab7d51a2799239bf8d8d5de" - integrity sha512-+Ipe2iNUyrZz+8K/2IOo+kKikdtfhRKzNpQbruF2URmqPtoqAs8g3xS7TJvFF2GcPXjh7DkqMnpVveRFq4PgEQ== - dependencies: - tslib "^2.4.0" - -pvutils@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/pvutils/-/pvutils-1.1.3.tgz#f35fc1d27e7cd3dfbd39c0826d173e806a03f5a3" - integrity sha512-pMpnA0qRdFp32b1sJl1wOJNxZLQ2cbQx+k6tjNtZ8CpvVhNqEPRgivZ2WOUev2YMajecdH7ctUPDvEe87nariQ== - qs@6.11.0: version "6.11.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" @@ -12050,16 +6953,6 @@ raw-body@2.5.2, raw-body@^2.4.1: iconv-lite "0.4.24" unpipe "1.0.0" -react-is@^16.12.0, react-is@^16.13.1: - version "16.13.1" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" - integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== - -react-is@^18.0.0: - version "18.2.0" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" - integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== - react-native-fetch-api@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/react-native-fetch-api/-/react-native-fetch-api-2.0.0.tgz#c4af188b4fce3f3eaf1f1ff4e61dae1a00d4ffa0" @@ -12067,13 +6960,6 @@ react-native-fetch-api@^2.0.0: dependencies: p-defer "^3.0.0" -react-native-fetch-api@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/react-native-fetch-api/-/react-native-fetch-api-3.0.0.tgz#81e1bb6562c292521bc4eca52fe1097f4c1ebab5" - integrity sha512-g2rtqPjdroaboDKTsJCTlcmtw54E25OjyaunUP0anOZn4Fuo2IKs8BVfe02zVggA/UysbmfSnRJIqtNkAgggNA== - dependencies: - p-defer "^3.0.0" - read-pkg-up@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" @@ -12082,15 +6968,6 @@ read-pkg-up@^1.0.1: find-up "^1.0.0" read-pkg "^1.0.0" -read-pkg-up@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" - integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== - dependencies: - find-up "^4.1.0" - read-pkg "^5.2.0" - type-fest "^0.8.1" - read-pkg@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" @@ -12100,17 +6977,7 @@ read-pkg@^1.0.0: normalize-package-data "^2.3.2" path-type "^1.0.0" -read-pkg@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" - integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== - dependencies: - "@types/normalize-package-data" "^2.4.0" - normalize-package-data "^2.5.0" - parse-json "^5.0.0" - type-fest "^0.6.0" - -readable-stream@^2.2.2, readable-stream@^2.3.0, readable-stream@^2.3.5: +readable-stream@^2.2.2: version "2.3.8" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== @@ -12132,16 +6999,6 @@ readable-stream@^3.4.0, readable-stream@^3.6.0: string_decoder "^1.1.1" util-deprecate "^1.0.1" -readable-stream@~1.0.26-4: - version "1.0.34" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" - integrity sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" - readdirp@~3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.2.0.tgz#c30c33352b12c96dfb4b895421a49fd5a9593839" @@ -12156,11 +7013,6 @@ readdirp@~3.6.0: dependencies: picomatch "^2.2.1" -realpath-native@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/realpath-native/-/realpath-native-2.0.0.tgz#7377ac429b6e1fd599dc38d08ed942d0d7beb866" - integrity sha512-v1SEYUOXXdbBZK8ZuNgO4TBjamPsiSgcFr0aP+tEKpQZK8vooEUqV6nm6Cv502mX4NF2EfsnVqtNAHG+/6Ur1Q== - receptacle@^1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/receptacle/-/receptacle-1.3.2.tgz#a7994c7efafc7a01d0e2041839dab6c4951360d2" @@ -12182,50 +7034,16 @@ recursive-readdir@^2.2.2: dependencies: minimatch "^3.0.5" -redeyed@~2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/redeyed/-/redeyed-2.1.1.tgz#8984b5815d99cb220469c99eeeffe38913e6cc0b" - integrity sha512-FNpGGo1DycYAdnrKFxCMmKYgo/mILAqtRYbkdQD8Ep/Hk2PQ5+aEAEx+IU713RTDmuBaH0c8P5ZozurNu5ObRQ== - dependencies: - esprima "~4.0.0" - reduce-flatten@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/reduce-flatten/-/reduce-flatten-2.0.0.tgz#734fd84e65f375d7ca4465c69798c25c9d10ae27" integrity sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w== -regenerate-unicode-properties@^10.1.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz#7c3192cab6dd24e21cb4461e5ddd7dd24fa8374c" - integrity sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ== - dependencies: - regenerate "^1.4.2" - -regenerate@^1.4.2: - version "1.4.2" - resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" - integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== - -regenerator-runtime@^0.13.11, regenerator-runtime@^0.13.7: +regenerator-runtime@^0.13.11: version "0.13.11" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== -regenerator-transform@^0.15.1: - version "0.15.1" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.1.tgz#f6c4e99fc1b4591f780db2586328e4d9a9d8dc56" - integrity sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg== - dependencies: - "@babel/runtime" "^7.8.4" - -regex-not@^1.0.0, regex-not@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" - integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== - dependencies: - extend-shallow "^3.0.2" - safe-regex "^1.1.0" - regexp.prototype.flags@^1.4.3: version "1.5.0" resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz#fe7ce25e7e4cca8db37b6634c8a2c7009199b9cb" @@ -12235,50 +7053,6 @@ regexp.prototype.flags@^1.4.3: define-properties "^1.2.0" functions-have-names "^1.2.3" -regexpp@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" - integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw== - -regexpp@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" - integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== - -regexpu-core@^5.3.1: - version "5.3.2" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.3.2.tgz#11a2b06884f3527aec3e93dbbf4a3b958a95546b" - integrity sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ== - dependencies: - "@babel/regjsgen" "^0.8.0" - regenerate "^1.4.2" - regenerate-unicode-properties "^10.1.0" - regjsparser "^0.9.1" - unicode-match-property-ecmascript "^2.0.0" - unicode-match-property-value-ecmascript "^2.1.0" - -regjsparser@^0.9.1: - version "0.9.1" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.9.1.tgz#272d05aa10c7c1f67095b1ff0addae8442fc5709" - integrity sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ== - dependencies: - jsesc "~0.5.0" - -remove-trailing-separator@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" - integrity sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw== - -repeat-element@^1.1.2: - version "1.1.4" - resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.4.tgz#be681520847ab58c7568ac75fbfad28ed42d39e9" - integrity sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ== - -repeat-string@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" - integrity sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w== - req-cwd@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/req-cwd/-/req-cwd-2.0.0.tgz#d4082b4d44598036640fb73ddea01ed53db49ebc" @@ -12300,7 +7074,7 @@ request-promise-core@1.1.4: dependencies: lodash "^4.17.19" -request-promise-native@^1.0.5, request-promise-native@^1.0.7: +request-promise-native@^1.0.5: version "1.0.9" resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.9.tgz#e407120526a5efdc9a39b28a5679bf47b9d9dc28" integrity sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g== @@ -12309,7 +7083,7 @@ request-promise-native@^1.0.5, request-promise-native@^1.0.7: stealthy-require "^1.1.1" tough-cookie "^2.3.3" -request@2.88.2, request@^2.79.0, request@^2.88.0: +request@^2.79.0, request@^2.88.0: version "2.88.2" resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== @@ -12365,13 +7139,6 @@ resolve-alpn@^1.0.0, resolve-alpn@^1.2.0: resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.2.1.tgz#b7adbdac3546aaaec20b45e7d8265927072726f9" integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g== -resolve-cwd@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" - integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== - dependencies: - resolve-from "^5.0.0" - resolve-from@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" @@ -12382,17 +7149,7 @@ resolve-from@^4.0.0: resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== -resolve-from@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" - integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== - -resolve-url@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" - integrity sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg== - -resolve@1.1.7, resolve@1.1.x: +resolve@1.1.x: version "1.1.7" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" integrity sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg== @@ -12404,7 +7161,7 @@ resolve@1.17.0: dependencies: path-parse "^1.0.6" -resolve@^1.1.6, resolve@^1.10.0, resolve@^1.11.0, resolve@^1.12.0, resolve@^1.14.2, resolve@^1.17.0, resolve@^1.22.1: +resolve@^1.1.6, resolve@^1.10.0, resolve@^1.17.0: version "1.22.2" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.2.tgz#0ed0943d4e301867955766c9f3e1ae6d01c6845f" integrity sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g== @@ -12413,15 +7170,6 @@ resolve@^1.1.6, resolve@^1.10.0, resolve@^1.11.0, resolve@^1.12.0, resolve@^1.14 path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" -resolve@^2.0.0-next.4: - version "2.0.0-next.4" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.4.tgz#3d37a113d6429f496ec4752d2a2e58efb1fd4660" - integrity sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ== - dependencies: - is-core-module "^2.9.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - responselike@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/responselike/-/responselike-2.0.1.tgz#9a0bc8fdc252f3fb1cca68b016591059ba1422bc" @@ -12429,37 +7177,11 @@ responselike@^2.0.0: dependencies: lowercase-keys "^2.0.0" -restore-cursor@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" - integrity sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q== - dependencies: - onetime "^2.0.0" - signal-exit "^3.0.2" - -restore-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" - integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== - dependencies: - onetime "^5.1.0" - signal-exit "^3.0.2" - -ret@~0.1.10: - version "0.1.15" - resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" - integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== - retimer@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/retimer/-/retimer-2.0.0.tgz#e8bd68c5e5a8ec2f49ccb5c636db84c04063bbca" integrity sha512-KLXY85WkEq2V2bKex/LOO1ViXVn2KGYe4PYysAdYdjmraYIUsVkXu8O4am+8+5UbaaGl1qho4aqAAPHNQ4GSbg== -retimer@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/retimer/-/retimer-3.0.0.tgz#98b751b1feaf1af13eb0228f8ea68b8f9da530df" - integrity sha512-WKE0j11Pa0ZJI5YIk0nflGI7SQsfl2ljihVy7ogh7DeQSeYAUi0ubZ/yEueGtDfUPk6GH5LRw1hBdLq4IwUBWA== - retry@0.13.1: version "0.13.1" resolved "https://registry.yarnpkg.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658" @@ -12475,14 +7197,7 @@ reusify@^1.0.4: resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== -rimraf@2.6.3: - version "2.6.3" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" - integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== - dependencies: - glob "^7.1.3" - -rimraf@^2.2.8, rimraf@^2.6.3: +rimraf@^2.2.8: version "2.7.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== @@ -12543,52 +7258,6 @@ rollup-plugin-dts@^4.2.0: optionalDependencies: "@babel/code-frame" "^7.18.6" -rollup-plugin-sourcemaps@^0.6.2: - version "0.6.3" - resolved "https://registry.yarnpkg.com/rollup-plugin-sourcemaps/-/rollup-plugin-sourcemaps-0.6.3.tgz#bf93913ffe056e414419607f1d02780d7ece84ed" - integrity sha512-paFu+nT1xvuO1tPFYXGe+XnQvg4Hjqv/eIhG8i5EspfYYPBKL57X7iVbfv55aNVASg3dzWvES9dmWsL2KhfByw== - dependencies: - "@rollup/pluginutils" "^3.0.9" - source-map-resolve "^0.6.0" - -rollup-plugin-terser@^5.1.2: - version "5.3.1" - resolved "https://registry.yarnpkg.com/rollup-plugin-terser/-/rollup-plugin-terser-5.3.1.tgz#8c650062c22a8426c64268548957463bf981b413" - integrity sha512-1pkwkervMJQGFYvM9nscrUoncPwiKR/K+bHdjv6PFgRo3cgPHoRT83y2Aa3GvINj4539S15t/tpFPb775TDs6w== - dependencies: - "@babel/code-frame" "^7.5.5" - jest-worker "^24.9.0" - rollup-pluginutils "^2.8.2" - serialize-javascript "^4.0.0" - terser "^4.6.2" - -rollup-plugin-typescript2@^0.27.3: - version "0.27.3" - resolved "https://registry.yarnpkg.com/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.27.3.tgz#cd9455ac026d325b20c5728d2cc54a08a771b68b" - integrity sha512-gmYPIFmALj9D3Ga1ZbTZAKTXq1JKlTQBtj299DXhqYz9cL3g/AQfUvbb2UhH+Nf++cCq941W2Mv7UcrcgLzJJg== - dependencies: - "@rollup/pluginutils" "^3.1.0" - find-cache-dir "^3.3.1" - fs-extra "8.1.0" - resolve "1.17.0" - tslib "2.0.1" - -rollup-pluginutils@^2.8.2: - version "2.8.2" - resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz#72f2af0748b592364dbd3389e600e5a9444a351e" - integrity sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ== - dependencies: - estree-walker "^0.6.1" - -rollup@^1.32.1: - version "1.32.1" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-1.32.1.tgz#4480e52d9d9e2ae4b46ba0d9ddeaf3163940f9c4" - integrity sha512-/2HA0Ec70TvQnXdzynFffkjA6XN+1e2pEv/uKS5Ulca40g2L7KuOE3riasHoNVHOsFD5KKZgDsMk1CP3Tw9s+A== - dependencies: - "@types/estree" "*" - "@types/node" "*" - acorn "^7.1.0" - rollup@^2.70.1: version "2.79.1" resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.79.1.tgz#bedee8faef7c9f93a2647ac0108748f497f081c7" @@ -12596,16 +7265,6 @@ rollup@^2.70.1: optionalDependencies: fsevents "~2.3.2" -rsvp@^4.8.4: - version "4.8.5" - resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" - integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== - -run-async@^2.4.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" - integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== - run-parallel-limit@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/run-parallel-limit/-/run-parallel-limit-1.1.0.tgz#be80e936f5768623a38a963262d6bef8ff11e7ba" @@ -12625,20 +7284,6 @@ rustbn.js@~0.2.0: resolved "https://registry.yarnpkg.com/rustbn.js/-/rustbn.js-0.2.0.tgz#8082cb886e707155fd1cb6f23bd591ab8d55d0ca" integrity sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA== -rxjs@^6.6.0: - version "6.6.7" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9" - integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== - dependencies: - tslib "^1.9.0" - -sade@^1.4.2: - version "1.8.1" - resolved "https://registry.yarnpkg.com/sade/-/sade-1.8.1.tgz#0a78e81d658d394887be57d2a409bf703a3b2701" - integrity sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A== - dependencies: - mri "^1.1.0" - safe-array-concat@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.0.0.tgz#2064223cba3c08d2ee05148eedbc563cd6d84060" @@ -12668,40 +7313,11 @@ safe-regex-test@^1.0.0: get-intrinsic "^1.1.3" is-regex "^1.1.4" -safe-regex@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" - integrity sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg== - dependencies: - ret "~0.1.10" - "safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -sane@^4.0.3: - version "4.1.0" - resolved "https://registry.yarnpkg.com/sane/-/sane-4.1.0.tgz#ed881fd922733a6c461bc189dc2b6c006f3ffded" - integrity sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA== - dependencies: - "@cnakazawa/watch" "^1.0.3" - anymatch "^2.0.0" - capture-exit "^2.0.0" - exec-sh "^0.3.2" - execa "^1.0.0" - fb-watchman "^2.0.0" - micromatch "^3.1.4" - minimist "^1.1.1" - walker "~1.0.5" - -saxes@^3.1.9: - version "3.1.11" - resolved "https://registry.yarnpkg.com/saxes/-/saxes-3.1.11.tgz#d59d1fd332ec92ad98a2e0b2ee644702384b1c5b" - integrity sha512-Ydydq3zC+WYDJK1+gRxRapLIED9PWeSuuS41wqyoRmzvhhh9nc+QQrVMKJYzJFULazeGhzSV0QleN2wD3boh2g== - dependencies: - xmlchars "^2.1.1" - sc-istanbul@^0.4.5: version "0.4.6" resolved "https://registry.yarnpkg.com/sc-istanbul/-/sc-istanbul-0.4.6.tgz#cf6784355ff2076f92d70d59047d71c13703e839" @@ -12732,7 +7348,7 @@ scrypt-js@3.0.1, scrypt-js@^3.0.0, scrypt-js@^3.0.1: resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-3.0.1.tgz#d314a57c2aef69d1ad98a138a21fe9eafa9ee312" integrity sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA== -secp256k1@4.0.3, secp256k1@^4.0.1: +secp256k1@^4.0.1: version "4.0.3" resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-4.0.3.tgz#c4559ecd1b8d3c1827ed2d1b94190d69ce267303" integrity sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA== @@ -12746,18 +7362,6 @@ secp256k1@4.0.3, secp256k1@^4.0.1: resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== -semver@6.x, semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" - integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== - -semver@7.3.5: - version "7.3.5" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" - integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== - dependencies: - lru-cache "^6.0.0" - semver@7.3.7: version "7.3.7" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f" @@ -12765,14 +7369,12 @@ semver@7.3.7: dependencies: lru-cache "^6.0.0" -semver@7.4.0: - version "7.4.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.4.0.tgz#8481c92feffc531ab1e012a8ffc15bdd3a0f4318" - integrity sha512-RgOxM8Mw+7Zus0+zcLEUn8+JfoLpj/huFTItQy2hsM4khuC1HYRDp0cU482Ewn/Fcy6bCjufD8vAj7voC66KQw== - dependencies: - lru-cache "^6.0.0" +semver@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -semver@^7.1.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.7: +semver@^7.3.4, semver@^7.3.7: version "7.5.2" resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.2.tgz#5b851e66d1be07c1cdaf37dfc856f543325a2beb" integrity sha512-SoftuTROv/cRjCze/scjGyiDtcUyxw1rgYQSZY7XTmtR5hX+dm76iDbTH8TkLPHCQmlbQVSSbNZCPM2hb0knnQ== @@ -12820,13 +7422,6 @@ serialize-javascript@6.0.0: dependencies: randombytes "^2.1.0" -serialize-javascript@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa" - integrity sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw== - dependencies: - randombytes "^2.1.0" - serve-static@1.15.0: version "1.15.0" resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" @@ -12853,16 +7448,6 @@ set-blocking@^2.0.0: resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== -set-value@^2.0.0, set-value@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" - integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== - dependencies: - extend-shallow "^2.0.1" - is-extendable "^0.1.1" - is-plain-object "^2.0.3" - split-string "^3.0.1" - setimmediate@1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.4.tgz#20e81de622d4a02588ce0c8da8973cbcf1d3138f" @@ -12901,13 +7486,6 @@ sha3@^2.1.1: dependencies: buffer "6.0.3" -shebang-command@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" - integrity sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg== - dependencies: - shebang-regex "^1.0.0" - shebang-command@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" @@ -12915,11 +7493,6 @@ shebang-command@^2.0.0: dependencies: shebang-regex "^3.0.0" -shebang-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" - integrity sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ== - shebang-regex@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" @@ -12934,11 +7507,6 @@ shelljs@^0.8.3: interpret "^1.0.0" rechoir "^0.6.2" -shellwords@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" - integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww== - side-channel@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" @@ -12948,7 +7516,7 @@ side-channel@^1.0.4: get-intrinsic "^1.0.2" object-inspect "^1.9.0" -signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3: +signal-exit@^3.0.2: version "3.0.7" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== @@ -12972,39 +7540,11 @@ simple-get@^2.7.0: once "^1.3.1" simple-concat "^1.0.0" -sisteransi@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" - integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== - -size-limit@^7.0.8: - version "7.0.8" - resolved "https://registry.yarnpkg.com/size-limit/-/size-limit-7.0.8.tgz#bf0c656da9e6bc3b8eb5b8a5a634df4634309811" - integrity sha512-3h76c9E0e/nNhYLSR7IBI/bSoXICeo7EYkYjlyVqNIsu7KvN/PQmMbIXeyd2QKIF8iZKhaiZQoXLkGWbyPDtvQ== - dependencies: - bytes-iec "^3.1.1" - chokidar "^3.5.3" - ci-job-number "^1.2.2" - globby "^11.1.0" - lilconfig "^2.0.4" - mkdirp "^1.0.4" - nanospinner "^1.0.0" - picocolors "^1.0.0" - slash@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== -slice-ansi@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" - integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== - dependencies: - ansi-styles "^3.2.0" - astral-regex "^1.0.0" - is-fullwidth-code-point "^2.0.0" - slice-ansi@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" @@ -13021,36 +7561,6 @@ snake-case@^2.1.0: dependencies: no-case "^2.2.0" -snapdragon-node@^2.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" - integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== - dependencies: - define-property "^1.0.0" - isobject "^3.0.0" - snapdragon-util "^3.0.1" - -snapdragon-util@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" - integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== - dependencies: - kind-of "^3.2.0" - -snapdragon@^0.8.1: - version "0.8.2" - resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" - integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== - dependencies: - base "^0.11.1" - debug "^2.2.0" - define-property "^0.2.5" - extend-shallow "^2.0.1" - map-cache "^0.2.2" - source-map "^0.5.6" - source-map-resolve "^0.5.0" - use "^3.1.0" - solc@0.7.3: version "0.7.3" resolved "https://registry.yarnpkg.com/solc/-/solc-0.7.3.tgz#04646961bd867a744f63d2b4e3c0701ffdc7d78a" @@ -13140,31 +7650,12 @@ solidity-coverage@^0.8.2: node-emoji "^1.10.0" pify "^4.0.1" recursive-readdir "^2.2.2" - sc-istanbul "^0.4.5" - semver "^7.3.4" - shelljs "^0.8.3" - web3-utils "^1.3.6" - -source-map-resolve@^0.5.0: - version "0.5.3" - resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" - integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== - dependencies: - atob "^2.1.2" - decode-uri-component "^0.2.0" - resolve-url "^0.2.1" - source-map-url "^0.4.0" - urix "^0.1.0" - -source-map-resolve@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.6.0.tgz#3d9df87e236b53f16d01e58150fc7711138e5ed2" - integrity sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w== - dependencies: - atob "^2.1.2" - decode-uri-component "^0.2.0" + sc-istanbul "^0.4.5" + semver "^7.3.4" + shelljs "^0.8.3" + web3-utils "^1.3.6" -source-map-support@^0.5.13, source-map-support@^0.5.19, source-map-support@^0.5.20, source-map-support@^0.5.6, source-map-support@~0.5.12: +source-map-support@^0.5.13, source-map-support@^0.5.19: version "0.5.21" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== @@ -13172,26 +7663,16 @@ source-map-support@^0.5.13, source-map-support@^0.5.19, source-map-support@^0.5. buffer-from "^1.0.0" source-map "^0.6.0" -source-map-url@^0.4.0: - version "0.4.1" - resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56" - integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw== - -source-map@^0.5.0, source-map@^0.5.6: +source-map@^0.5.0: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== -source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: +source-map@^0.6.0, source-map@^0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== -source-map@^0.7.3: - version "0.7.4" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656" - integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== - source-map@~0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.2.0.tgz#dab73fbcfc2ba819b4de03bd6f6eaa48164b3f9d" @@ -13230,18 +7711,6 @@ spdx-license-ids@^3.0.0: resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz#7189a474c46f8d47c7b0da4b987bb45e908bd2d5" integrity sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w== -split-ca@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/split-ca/-/split-ca-1.0.1.tgz#6c83aff3692fa61256e0cd197e05e9de157691a6" - integrity sha512-Q5thBSxp5t8WPTTJQS59LrGqOZqOsrhDGDVm8azCqIBjSBd7nd9o2PM+mDulQQkh8h//4U6hFZnc/mul8t5pWQ== - -split-string@^3.0.1, split-string@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" - integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== - dependencies: - extend-shallow "^3.0.0" - sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" @@ -13262,20 +7731,6 @@ sshpk@^1.7.0: safer-buffer "^2.0.2" tweetnacl "~0.14.0" -stack-utils@^1.0.1: - version "1.0.5" - resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.5.tgz#a19b0b01947e0029c8e451d5d61a498f5bb1471b" - integrity sha512-KZiTzuV3CnSnSvgMRrARVCj+Ht7rMbauGDK0LdVFRGyenwdylpajAp4Q0i6SX8rEmbTpMMf6ryq2gb8pPq2WgQ== - dependencies: - escape-string-regexp "^2.0.0" - -stack-utils@^2.0.3: - version "2.0.6" - resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.6.tgz#aaf0748169c02fc33c8232abccf933f54a1cc34f" - integrity sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ== - dependencies: - escape-string-regexp "^2.0.0" - stacktrace-parser@^0.1.10: version "0.1.10" resolved "https://registry.yarnpkg.com/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz#29fb0cae4e0d0b85155879402857a1639eb6051a" @@ -13283,14 +7738,6 @@ stacktrace-parser@^0.1.10: dependencies: type-fest "^0.7.1" -static-extend@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" - integrity sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g== - dependencies: - define-property "^0.2.5" - object-copy "^0.1.0" - statuses@2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" @@ -13323,15 +7770,7 @@ string-format@^2.0.0: resolved "https://registry.yarnpkg.com/string-format/-/string-format-2.0.0.tgz#f2df2e7097440d3b65de31b6d40d54c96eaffb9b" integrity sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA== -string-length@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/string-length/-/string-length-3.1.0.tgz#107ef8c23456e187a8abd4a61162ff4ac6e25837" - integrity sha512-Ttp5YvkGm5v9Ijagtaz1BnN+k9ObpvS0eIBblPMp2YWL8FBmi9qblQ9fexc2k/CXFgrTIteU3jAw3payCnwSTA== - dependencies: - astral-regex "^1.0.0" - strip-ansi "^5.2.0" - -"string-width-cjs@npm:string-width@^4.2.0", string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: +"string-width-cjs@npm:string-width@^4.2.0", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: name string-width-cjs version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" @@ -13376,20 +7815,6 @@ string-width@^5.0.1, string-width@^5.1.2: emoji-regex "^9.2.2" strip-ansi "^7.0.1" -string.prototype.matchall@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz#3bf85722021816dcd1bf38bb714915887ca79fd3" - integrity sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - get-intrinsic "^1.1.3" - has-symbols "^1.0.3" - internal-slot "^1.0.3" - regexp.prototype.flags "^1.4.3" - side-channel "^1.0.4" - string.prototype.trim@^1.2.7: version "1.2.7" resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz#a68352740859f6893f14ce3ef1bb3037f7a90533" @@ -13424,11 +7849,6 @@ string_decoder@^1.1.1: dependencies: safe-buffer "~5.2.0" -string_decoder@~0.10.x: - version "0.10.31" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" - integrity sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ== - string_decoder@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" @@ -13479,26 +7899,6 @@ strip-bom@^2.0.0: dependencies: is-utf8 "^0.2.0" -strip-bom@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" - integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== - -strip-bom@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" - integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== - -strip-eof@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" - integrity sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q== - -strip-final-newline@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" - integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== - strip-hex-prefix@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz#0c5f155fef1151373377de9dbb588da05500e36f" @@ -13516,7 +7916,7 @@ strip-json-comments@2.0.1: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== -strip-json-comments@3.1.1, strip-json-comments@^3.0.1, strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: +strip-json-comments@3.1.1, strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== @@ -13528,7 +7928,7 @@ supports-color@6.0.0: dependencies: has-flag "^3.0.0" -supports-color@8.1.1, supports-color@^8.1.1: +supports-color@8.1.1: version "8.1.1" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== @@ -13549,28 +7949,13 @@ supports-color@^5.3.0: dependencies: has-flag "^3.0.0" -supports-color@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" - integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== - dependencies: - has-flag "^3.0.0" - -supports-color@^7.0.0, supports-color@^7.1.0: +supports-color@^7.1.0: version "7.2.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== dependencies: has-flag "^4.0.0" -supports-hyperlinks@^2.0.0, supports-hyperlinks@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz#3943544347c1ff90b15effb03fc14ae45ec10624" - integrity sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA== - dependencies: - has-flag "^4.0.0" - supports-color "^7.0.0" - supports-preserve-symlinks-flag@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" @@ -13601,12 +7986,7 @@ swarm-js@^0.1.40: tar "^4.0.2" xhr-request "^1.0.1" -symbol-tree@^3.2.2: - version "3.2.4" - resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" - integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== - -sync-request@6.1.0, sync-request@^6.0.0: +sync-request@^6.0.0: version "6.1.0" resolved "https://registry.yarnpkg.com/sync-request/-/sync-request-6.1.0.tgz#e96217565b5e50bbffe179868ba75532fb597e68" integrity sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw== @@ -13632,16 +8012,6 @@ table-layout@^1.0.2: typical "^5.2.0" wordwrapjs "^4.0.0" -table@^5.2.3: - version "5.4.6" - resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" - integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug== - dependencies: - ajv "^6.10.2" - lodash "^4.17.14" - slice-ansi "^2.1.0" - string-width "^3.0.0" - table@^6.8.0, table@^6.8.1: version "6.8.1" resolved "https://registry.yarnpkg.com/table/-/table-6.8.1.tgz#ea2b71359fe03b017a5fbc296204471158080bdf" @@ -13653,29 +8023,6 @@ table@^6.8.0, table@^6.8.1: string-width "^4.2.3" strip-ansi "^6.0.1" -tar-fs@~1.16.3: - version "1.16.3" - resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-1.16.3.tgz#966a628841da2c4010406a82167cbd5e0c72d509" - integrity sha512-NvCeXpYx7OsmOh8zIOP/ebG55zZmxLE0etfWRbWok+q2Qo8x/vOR/IJT1taADXPe+jsiu9axDb3X4B+iIgNlKw== - dependencies: - chownr "^1.0.1" - mkdirp "^0.5.1" - pump "^1.0.0" - tar-stream "^1.1.2" - -tar-stream@^1.1.2: - version "1.6.2" - resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-1.6.2.tgz#8ea55dab37972253d9a9af90fdcd559ae435c555" - integrity sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A== - dependencies: - bl "^1.0.0" - buffer-alloc "^1.2.0" - end-of-stream "^1.0.0" - fs-constants "^1.0.0" - readable-stream "^2.3.0" - to-buffer "^1.1.1" - xtend "^4.0.0" - tar@^4.0.2: version "4.4.19" resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.19.tgz#2e4d7263df26f2b914dee10c825ab132123742f3" @@ -13689,44 +8036,6 @@ tar@^4.0.2: safe-buffer "^5.2.1" yallist "^3.1.1" -tar@^6.1.0: - version "6.1.15" - resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.15.tgz#c9738b0b98845a3b344d334b8fa3041aaba53a69" - integrity sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A== - dependencies: - chownr "^2.0.0" - fs-minipass "^2.0.0" - minipass "^5.0.0" - minizlib "^2.1.1" - mkdirp "^1.0.3" - yallist "^4.0.0" - -terminal-link@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" - integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ== - dependencies: - ansi-escapes "^4.2.1" - supports-hyperlinks "^2.0.0" - -terser@^4.6.2: - version "4.8.1" - resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.1.tgz#a00e5634562de2239fd404c649051bf6fc21144f" - integrity sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw== - dependencies: - commander "^2.20.0" - source-map "~0.6.1" - source-map-support "~0.5.12" - -test-exclude@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" - integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== - dependencies: - "@istanbuljs/schema" "^0.1.2" - glob "^7.1.4" - minimatch "^3.0.4" - testrpc@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/testrpc/-/testrpc-0.0.1.tgz#83e2195b1f5873aec7be1af8cbe6dcf39edb7aed" @@ -13754,16 +8063,6 @@ then-request@^6.0.0: promise "^8.0.0" qs "^6.4.0" -throat@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/throat/-/throat-5.0.0.tgz#c5199235803aad18754a667d659b5e72ce16764b" - integrity sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA== - -"through@>=2.2.7 <3", through@^2.3.6: - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== - timed-out@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" @@ -13777,23 +8076,6 @@ timeout-abort-controller@^1.1.1: abort-controller "^3.0.0" retimer "^2.0.0" -timeout-abort-controller@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/timeout-abort-controller/-/timeout-abort-controller-2.0.0.tgz#d6a59209132e520413092dd4b4d71eaaf5887feb" - integrity sha512-2FAPXfzTPYEgw27bQGTHc0SzrbmnU2eso4qo172zMLZzaGqeu09PFa5B2FCUHM1tflgRqPgn5KQgp6+Vex4uNA== - dependencies: - abort-controller "^3.0.0" - native-abort-controller "^1.0.4" - retimer "^3.0.0" - -tiny-glob@^0.2.6: - version "0.2.9" - resolved "https://registry.yarnpkg.com/tiny-glob/-/tiny-glob-0.2.9.tgz#2212d441ac17928033b110f8b3640683129d31e2" - integrity sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg== - dependencies: - globalyzer "0.1.0" - globrex "^0.1.2" - title-case@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/title-case/-/title-case-2.1.1.tgz#3e127216da58d2bc5becf137ab91dae3a7cd8faa" @@ -13802,14 +8084,14 @@ title-case@^2.1.0: no-case "^2.2.0" upper-case "^1.0.3" -tmp-promise@3.0.3, tmp-promise@^3.0.3: +tmp-promise@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/tmp-promise/-/tmp-promise-3.0.3.tgz#60a1a1cc98c988674fcbfd23b6e3367bdeac4ce7" integrity sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ== dependencies: tmp "^0.2.0" -tmp@0.0.33, tmp@^0.0.33: +tmp@0.0.33: version "0.0.33" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== @@ -13823,36 +8105,11 @@ tmp@^0.2.0: dependencies: rimraf "^3.0.0" -tmpl@1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" - integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== - -to-buffer@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/to-buffer/-/to-buffer-1.1.1.tgz#493bd48f62d7c43fcded313a03dcadb2e1213a80" - integrity sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg== - to-fast-properties@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== -to-object-path@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" - integrity sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg== - dependencies: - kind-of "^3.0.2" - -to-regex-range@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" - integrity sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg== - dependencies: - is-number "^3.0.0" - repeat-string "^1.6.1" - to-regex-range@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" @@ -13860,16 +8117,6 @@ to-regex-range@^5.0.1: dependencies: is-number "^7.0.0" -to-regex@^3.0.1, to-regex@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" - integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== - dependencies: - define-property "^2.0.2" - extend-shallow "^3.0.2" - regex-not "^1.0.2" - safe-regex "^1.1.0" - toidentifier@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" @@ -13883,22 +8130,6 @@ tough-cookie@^2.3.3, tough-cookie@~2.5.0: psl "^1.1.28" punycode "^2.1.1" -tough-cookie@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-3.0.1.tgz#9df4f57e739c26930a018184887f4adb7dca73b2" - integrity sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg== - dependencies: - ip-regex "^2.1.0" - psl "^1.1.28" - punycode "^2.1.1" - -tr46@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" - integrity sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA== - dependencies: - punycode "^2.1.0" - tr46@~0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" @@ -13919,30 +8150,6 @@ ts-essentials@^7.0.1: resolved "https://registry.yarnpkg.com/ts-essentials/-/ts-essentials-7.0.3.tgz#686fd155a02133eedcc5362dc8b5056cde3e5a38" integrity sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ== -ts-jest@^25.3.1: - version "25.5.1" - resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-25.5.1.tgz#2913afd08f28385d54f2f4e828be4d261f4337c7" - integrity sha512-kHEUlZMK8fn8vkxDjwbHlxXRB9dHYpyzqKIGDNxbzs+Rz+ssNDSDNusEK8Fk/sDd4xE6iKoQLfFkFVaskmTJyw== - dependencies: - bs-logger "0.x" - buffer-from "1.x" - fast-json-stable-stringify "2.x" - json5 "2.x" - lodash.memoize "4.x" - make-error "1.x" - micromatch "4.x" - mkdirp "0.x" - semver "6.x" - yargs-parser "18.x" - -ts-morph@^17.0.1: - version "17.0.1" - resolved "https://registry.yarnpkg.com/ts-morph/-/ts-morph-17.0.1.tgz#d85df4fcf9a1fcda1b331d52c00655f381c932d1" - integrity sha512-10PkHyXmrtsTvZSL+cqtJLTgFXkU43Gd0JCc0Rw6GchWbqKe0Rwgt1v3ouobTZwQzF1mGhDeAlWYBMGRV7y+3g== - dependencies: - "@ts-morph/common" "~0.18.0" - code-block-writer "^11.0.3" - ts-node@^10.9.1: version "10.9.1" resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b" @@ -13962,104 +8169,27 @@ ts-node@^10.9.1: v8-compile-cache-lib "^3.0.1" yn "3.1.1" -tsconfig-paths@^3.14.1: - version "3.14.2" - resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz#6e32f1f79412decd261f92d633a9dc1cfa99f088" - integrity sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g== - dependencies: - "@types/json5" "^0.0.29" - json5 "^1.0.2" - minimist "^1.2.6" - strip-bom "^3.0.0" - -tsdx@^0.14.1: - version "0.14.1" - resolved "https://registry.yarnpkg.com/tsdx/-/tsdx-0.14.1.tgz#8771d509b6fc523ad971bae3a63ebe3a88355ab3" - integrity sha512-keHmFdCL2kx5nYFlBdbE3639HQ2v9iGedAFAajobrUTH2wfX0nLPdDhbHv+GHLQZqf0c5ur1XteE8ek/+Eyj5w== - dependencies: - "@babel/core" "^7.4.4" - "@babel/helper-module-imports" "^7.0.0" - "@babel/parser" "^7.11.5" - "@babel/plugin-proposal-class-properties" "^7.4.4" - "@babel/preset-env" "^7.11.0" - "@babel/traverse" "^7.11.5" - "@rollup/plugin-babel" "^5.1.0" - "@rollup/plugin-commonjs" "^11.0.0" - "@rollup/plugin-json" "^4.0.0" - "@rollup/plugin-node-resolve" "^9.0.0" - "@rollup/plugin-replace" "^2.2.1" - "@types/jest" "^25.2.1" - "@typescript-eslint/eslint-plugin" "^2.12.0" - "@typescript-eslint/parser" "^2.12.0" - ansi-escapes "^4.2.1" - asyncro "^3.0.0" - babel-eslint "^10.0.3" - babel-plugin-annotate-pure-calls "^0.4.0" - babel-plugin-dev-expression "^0.2.1" - babel-plugin-macros "^2.6.1" - babel-plugin-polyfill-regenerator "^0.0.4" - babel-plugin-transform-rename-import "^2.3.0" - camelcase "^6.0.0" - chalk "^4.0.0" - enquirer "^2.3.4" - eslint "^6.1.0" - eslint-config-prettier "^6.0.0" - eslint-config-react-app "^5.2.1" - eslint-plugin-flowtype "^3.13.0" - eslint-plugin-import "^2.18.2" - eslint-plugin-jsx-a11y "^6.2.3" - eslint-plugin-prettier "^3.1.0" - eslint-plugin-react "^7.14.3" - eslint-plugin-react-hooks "^2.2.0" - execa "^4.0.3" - fs-extra "^9.0.0" - jest "^25.3.0" - jest-watch-typeahead "^0.5.0" - jpjs "^1.2.1" - lodash.merge "^4.6.2" - ora "^4.0.3" - pascal-case "^3.1.1" - prettier "^1.19.1" - progress-estimator "^0.2.2" - regenerator-runtime "^0.13.7" - rollup "^1.32.1" - rollup-plugin-sourcemaps "^0.6.2" - rollup-plugin-terser "^5.1.2" - rollup-plugin-typescript2 "^0.27.3" - sade "^1.4.2" - semver "^7.1.1" - shelljs "^0.8.3" - tiny-glob "^0.2.6" - ts-jest "^25.3.1" - tslib "^1.9.3" - typescript "^3.7.3" - -tslib@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.0.1.tgz#410eb0d113e5b6356490eec749603725b021b43e" - integrity sha512-SgIkNheinmEBgx1IUNirK0TUD4X9yjjBRTqqjggWCU3pUEqIk3/Uwl3yRixYKT6WjQuGiwDv4NomL3wqRCj+CQ== - -tslib@^1.11.1, tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3: +tslib@^1.11.1, tslib@^1.8.1, tslib@^1.9.3: version "1.14.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.0.0, tslib@^2.0.3, tslib@^2.4.0, tslib@^2.5.0: - version "2.5.3" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.3.tgz#24944ba2d990940e6e982c4bea147aba80209913" - integrity sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w== - tslib@^2.3.1: version "2.5.2" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.2.tgz#1b6f07185c881557b0ffa84b111a0106989e8338" integrity sha512-5svOrSA2w3iGFDs1HibEVBGbDrAY82bFQ3HZ3ixB+88nsbsWQoKqDRb5UBYAUPEzbBn6dAp5gRNXglySbx1MlA== +tslib@^2.5.0: + version "2.5.3" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.3.tgz#24944ba2d990940e6e982c4bea147aba80209913" + integrity sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w== + tsort@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/tsort/-/tsort-0.0.1.tgz#e2280f5e817f8bf4275657fd0f9aebd44f5a2786" integrity sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw== -tsutils@^3.17.1, tsutils@^3.21.0: +tsutils@^3.21.0: version "3.21.0" resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== @@ -14102,7 +8232,7 @@ type-check@~0.3.2: dependencies: prelude-ls "~1.1.2" -type-detect@4.0.8, type-detect@^4.0.0, type-detect@^4.0.5: +type-detect@^4.0.0, type-detect@^4.0.5: version "4.0.8" resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== @@ -14117,21 +8247,11 @@ type-fest@^0.21.3: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== -type-fest@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" - integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== - type-fest@^0.7.1: version "0.7.1" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.7.1.tgz#8dda65feaf03ed78f0a3f9678f1869147f7c5c48" integrity sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg== -type-fest@^0.8.1: - version "0.8.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" - integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== - type-is@~1.6.18: version "1.6.18" resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" @@ -14192,16 +8312,6 @@ typescript@5.0.4: resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.0.4.tgz#b217fd20119bd61a94d4011274e0ab369058da3b" integrity sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw== -typescript@^3.7.3: - version "3.9.10" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.10.tgz#70f3910ac7a51ed6bef79da7800690b19bf778b8" - integrity sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q== - -typescript@^4.6.2, typescript@^4.9.5: - version "4.9.5" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" - integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== - typical@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/typical/-/typical-4.0.0.tgz#cbeaff3b9d7ae1e2bbfaf5a4e6f11eccfde94fc4" @@ -14263,39 +8373,6 @@ unfetch@^4.2.0: resolved "https://registry.yarnpkg.com/unfetch/-/unfetch-4.2.0.tgz#7e21b0ef7d363d8d9af0fb929a5555f6ef97a3be" integrity sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA== -unicode-canonical-property-names-ecmascript@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" - integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ== - -unicode-match-property-ecmascript@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3" - integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q== - dependencies: - unicode-canonical-property-names-ecmascript "^2.0.0" - unicode-property-aliases-ecmascript "^2.0.0" - -unicode-match-property-value-ecmascript@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz#cb5fffdcd16a05124f5a4b0bf7c3770208acbbe0" - integrity sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA== - -unicode-property-aliases-ecmascript@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz#43d41e3be698bd493ef911077c9b131f827e8ccd" - integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w== - -union-value@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" - integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== - dependencies: - arr-union "^3.1.0" - get-value "^2.0.6" - is-extendable "^0.1.1" - set-value "^2.0.1" - universalify@^0.1.0: version "0.1.2" resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" @@ -14311,22 +8388,6 @@ unpipe@1.0.0, unpipe@~1.0.0: resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== -unset-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" - integrity sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ== - dependencies: - has-value "^0.3.1" - isobject "^3.0.0" - -update-browserslist-db@^1.0.11: - version "1.0.11" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz#9a2a641ad2907ae7b3616506f4b977851db5b940" - integrity sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA== - dependencies: - escalade "^3.1.1" - picocolors "^1.0.0" - upper-case-first@^1.1.0, upper-case-first@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/upper-case-first/-/upper-case-first-1.1.2.tgz#5d79bedcff14419518fd2edb0a0507c9b6859115" @@ -14346,33 +8407,11 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" -urix@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" - integrity sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg== - url-set-query@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/url-set-query/-/url-set-query-1.0.0.tgz#016e8cfd7c20ee05cafe7795e892bd0702faa339" integrity sha512-3AChu4NiXquPfeckE5R5cGdiHCMWJx1dwCWOmWIL4KHAziJNOFIYJlpGFeKDvwLPHovZRCxK3cYlwzqI9Vp+Gg== -urlpattern-polyfill@^8.0.0: - version "8.0.2" - resolved "https://registry.yarnpkg.com/urlpattern-polyfill/-/urlpattern-polyfill-8.0.2.tgz#99f096e35eff8bf4b5a2aa7d58a1523d6ebc7ce5" - integrity sha512-Qp95D4TPJl1kC9SKigDcqgyM2VDVO4RiJc2d4qe5GrYm+zbIQCWWKAFaJNQ4BhdFeDGwBmAxqJBwWSJDb9T3BQ== - -use@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" - integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== - -utf-8-validate@5.0.7: - version "5.0.7" - resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.7.tgz#c15a19a6af1f7ad9ec7ddc425747ca28c3644922" - integrity sha512-vLt1O5Pp+flcArHGIyKEQq883nBt8nN8tVBcoL0qUXj2XT1n7p70yGIq2VK98I5FdZ1YHc0wk/koOnHjnXWk1Q== - dependencies: - node-gyp-build "^4.3.0" - utf-8-validate@^5.0.2: version "5.0.10" resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.10.tgz#d7d10ea39318171ca982718b6b96a8d2442571a2" @@ -14390,7 +8429,7 @@ util-deprecate@^1.0.1, util-deprecate@~1.0.1: resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== -util@^0.12.3, util@^0.12.5: +util@^0.12.5: version "0.12.5" resolved "https://registry.yarnpkg.com/util/-/util-0.12.5.tgz#5f17a6059b73db61a875668781a1c2b136bd6fbc" integrity sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA== @@ -14431,20 +8470,6 @@ v8-compile-cache-lib@^3.0.1: resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== -v8-compile-cache@^2.0.3: - version "2.3.0" - resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" - integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== - -v8-to-istanbul@^4.1.3: - version "4.1.4" - resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-4.1.4.tgz#b97936f21c0e2d9996d4985e5c5156e9d4e49cd6" - integrity sha512-Rw6vJHj1mbdK8edjR7+zuJrpDtKIgNdAvTSAcpYfgMIw+u2dPDntD3dgN4XQFLU2/fvFQdzj+EeSGfd/jnY5fQ== - dependencies: - "@types/istanbul-lib-coverage" "^2.0.1" - convert-source-map "^1.6.0" - source-map "^0.7.3" - validate-npm-package-license@^3.0.1: version "3.0.4" resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" @@ -14477,55 +8502,6 @@ verror@1.10.0: core-util-is "1.0.2" extsprintf "^1.2.0" -w3c-hr-time@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" - integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== - dependencies: - browser-process-hrtime "^1.0.0" - -w3c-xmlserializer@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-1.1.2.tgz#30485ca7d70a6fd052420a3d12fd90e6339ce794" - integrity sha512-p10l/ayESzrBMYWRID6xbuCKh2Fp77+sA0doRuGn4tTIMrrZVeqfpKjXHY+oDh3K4nLdPgNwMTVP6Vp4pvqbNg== - dependencies: - domexception "^1.0.1" - webidl-conversions "^4.0.2" - xml-name-validator "^3.0.0" - -wabt@1.0.24: - version "1.0.24" - resolved "https://registry.yarnpkg.com/wabt/-/wabt-1.0.24.tgz#c02e0b5b4503b94feaf4a30a426ef01c1bea7c6c" - integrity sha512-8l7sIOd3i5GWfTWciPL0+ff/FK/deVK2Q6FN+MPz4vfUcD78i2M/49XJTwF6aml91uIiuXJEsLKWMB2cw/mtKg== - -walker@^1.0.7, walker@~1.0.5: - version "1.0.8" - resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" - integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== - dependencies: - makeerror "1.0.12" - -wcwidth@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" - integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg== - dependencies: - defaults "^1.0.3" - -web-encoding@1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/web-encoding/-/web-encoding-1.1.5.tgz#fc810cf7667364a6335c939913f5051d3e0c4864" - integrity sha512-HYLeVCdJ0+lBYV2FvNZmv3HJ2Nt0QYXqZojk3d9FJOLkwnuhzM9tmamh8d7HPM8QqjKH8DeHkFTx+CFlWpZZDA== - dependencies: - util "^0.12.3" - optionalDependencies: - "@zxing/text-encoding" "0.9.0" - -web-streams-polyfill@^3.1.1, web-streams-polyfill@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz#71c2718c52b45fd49dbeee88634b3a60ceab42a6" - integrity sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q== - web3-bzz@1.10.0: version "1.10.0" resolved "https://registry.yarnpkg.com/web3-bzz/-/web3-bzz-1.10.0.tgz#ac74bc71cdf294c7080a79091079192f05c5baed" @@ -14601,14 +8577,6 @@ web3-eth-abi@1.10.0: "@ethersproject/abi" "^5.6.3" web3-utils "1.10.0" -web3-eth-abi@1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.7.0.tgz#4fac9c7d9e5a62b57f8884b37371f515c766f3f4" - integrity sha512-heqR0bWxgCJwjWIhq2sGyNj9bwun5+Xox/LdZKe+WMyTSy0cXDXEAgv3XKNkXC4JqdDt/ZlbTEx4TWak4TRMSg== - dependencies: - "@ethersproject/abi" "5.0.7" - web3-utils "1.7.0" - web3-eth-accounts@1.10.0: version "1.10.0" resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.10.0.tgz#2942beca0a4291455f32cf09de10457a19a48117" @@ -14750,19 +8718,6 @@ web3-utils@1.10.0, web3-utils@^1.0.0-beta.31, web3-utils@^1.3.6: randombytes "^2.1.0" utf8 "3.0.0" -web3-utils@1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.7.0.tgz#c59f0fd43b2449357296eb54541810b99b1c771c" - integrity sha512-O8Tl4Ky40Sp6pe89Olk2FsaUkgHyb5QAXuaKo38ms3CxZZ4d3rPGfjP9DNKGm5+IUgAZBNpF1VmlSmNCqfDI1w== - dependencies: - bn.js "^4.11.9" - ethereum-bloom-filters "^1.0.6" - ethereumjs-util "^7.1.0" - ethjs-unit "0.1.6" - number-to-bn "1.7.0" - randombytes "^2.1.0" - utf8 "3.0.0" - web3@1.10.0, web3@^1.0.0-beta.34: version "1.10.0" resolved "https://registry.yarnpkg.com/web3/-/web3-1.10.0.tgz#2fde0009f59aa756c93e07ea2a7f3ab971091274" @@ -14776,27 +8731,11 @@ web3@1.10.0, web3@^1.0.0-beta.34: web3-shh "1.10.0" web3-utils "1.10.0" -webcrypto-core@^1.7.7: - version "1.7.7" - resolved "https://registry.yarnpkg.com/webcrypto-core/-/webcrypto-core-1.7.7.tgz#06f24b3498463e570fed64d7cab149e5437b162c" - integrity sha512-7FjigXNsBfopEj+5DV2nhNpfic2vumtjjgPmeDKk45z+MJwXKKfhPB7118Pfzrmh4jqOMST6Ch37iPAHoImg5g== - dependencies: - "@peculiar/asn1-schema" "^2.3.6" - "@peculiar/json-schema" "^1.1.12" - asn1js "^3.0.1" - pvtsutils "^1.3.2" - tslib "^2.4.0" - webidl-conversions@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== -webidl-conversions@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" - integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== - websocket@^1.0.32: version "1.0.34" resolved "https://registry.yarnpkg.com/websocket/-/websocket-1.0.34.tgz#2bdc2602c08bf2c82253b730655c0ef7dcab3111" @@ -14809,18 +8748,6 @@ websocket@^1.0.32: utf-8-validate "^5.0.2" yaeti "^0.0.6" -whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" - integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== - dependencies: - iconv-lite "0.4.24" - -whatwg-mimetype@^2.2.0, whatwg-mimetype@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" - integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== - whatwg-url@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" @@ -14829,15 +8756,6 @@ whatwg-url@^5.0.0: tr46 "~0.0.3" webidl-conversions "^3.0.0" -whatwg-url@^7.0.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06" - integrity sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg== - dependencies: - lodash.sortby "^4.7.0" - tr46 "^1.0.1" - webidl-conversions "^4.0.2" - which-boxed-primitive@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" @@ -14871,14 +8789,14 @@ which-typed-array@^1.1.2, which-typed-array@^1.1.9: has-tostringtag "^1.0.0" is-typed-array "^1.1.10" -which@1.3.1, which@^1.1.1, which@^1.2.9, which@^1.3.1: +which@1.3.1, which@^1.1.1, which@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== dependencies: isexe "^2.0.0" -which@2.0.2, which@^2.0.1, which@^2.0.2: +which@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== @@ -14892,13 +8810,6 @@ wide-align@1.1.3: dependencies: string-width "^1.0.2 || 2" -widest-line@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca" - integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg== - dependencies: - string-width "^4.0.0" - window-size@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.2.0.tgz#b4315bb4214a3d7058ebeee892e13fa24d98b075" @@ -14945,14 +8856,6 @@ wrap-ansi@^2.0.0: string-width "^1.0.1" strip-ansi "^3.0.1" -wrap-ansi@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-3.0.1.tgz#288a04d87eda5c286e060dfe8f135ce8d007f8ba" - integrity sha512-iXR3tDXpbnTpzjKSylUJRkLuOrEC7hwEB221cgn6wtF8wpmz28puFXAEfPT5zrjM3wahygB//VuWEr1vTkDcNQ== - dependencies: - string-width "^2.1.1" - strip-ansi "^4.0.0" - wrap-ansi@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" @@ -14962,15 +8865,6 @@ wrap-ansi@^5.1.0: string-width "^3.0.0" strip-ansi "^5.0.0" -wrap-ansi@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" - integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - wrap-ansi@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" @@ -14985,33 +8879,11 @@ wrappy@1: resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== -write-file-atomic@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" - integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== - dependencies: - imurmurhash "^0.1.4" - is-typedarray "^1.0.0" - signal-exit "^3.0.2" - typedarray-to-buffer "^3.1.5" - -write@1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" - integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig== - dependencies: - mkdirp "^0.5.1" - ws@7.4.6: version "7.4.6" resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== -ws@8.2.3: - version "8.2.3" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.2.3.tgz#63a56456db1b04367d0b721a0b80cae6d8becbba" - integrity sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA== - ws@^3.0.0: version "3.3.3" resolved "https://registry.yarnpkg.com/ws/-/ws-3.3.3.tgz#f1cf84fe2d5e901ebce94efaece785f187a228f2" @@ -15021,7 +8893,7 @@ ws@^3.0.0: safe-buffer "~5.1.0" ultron "~1.1.0" -ws@^7.0.0, ws@^7.4.5, ws@^7.4.6: +ws@^7.4.6: version "7.5.9" resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== @@ -15056,16 +8928,6 @@ xhr@^2.0.4, xhr@^2.3.3: parse-headers "^2.0.0" xtend "^4.0.0" -xml-name-validator@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" - integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== - -xmlchars@^2.1.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" - integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== - xmlhttprequest@1.8.0: version "1.8.0" resolved "https://registry.yarnpkg.com/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz#67fe075c5c24fef39f9d65f5f7b7fe75171968fc" @@ -15106,11 +8968,6 @@ yallist@^4.0.0: resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== -yaml@1.10.2, yaml@^1.10.0, yaml@^1.10.2, yaml@^1.7.2: - version "1.10.2" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" - integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== - yargs-parser@13.1.2, yargs-parser@^13.1.2: version "13.1.2" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" @@ -15119,14 +8976,6 @@ yargs-parser@13.1.2, yargs-parser@^13.1.2: camelcase "^5.0.0" decamelize "^1.2.0" -yargs-parser@18.x, yargs-parser@^18.1.2: - version "18.1.3" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" - integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" - yargs-parser@20.2.4: version "20.2.4" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" @@ -15145,11 +8994,6 @@ yargs-parser@^20.2.2: resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== -yargs-parser@^21.0.0: - version "21.1.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" - integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== - yargs-unparser@1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-1.6.0.tgz#ef25c2c769ff6bd09e4b0f9d7c605fb27846ea9f" @@ -15198,23 +9042,6 @@ yargs@16.2.0: y18n "^5.0.5" yargs-parser "^20.2.2" -yargs@^15.3.1: - version "15.4.1" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" - integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== - dependencies: - 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" - yargs@^4.7.1: version "4.8.1" resolved "https://registry.yarnpkg.com/yargs/-/yargs-4.8.1.tgz#c0c42924ca4aaa6b0e6da1739dfb216439f9ddc0" From 378708672f4ac805d09613e5738a9a265a86ec2b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8r=E2=88=82=C2=A1?= Date: Wed, 3 Jan 2024 19:27:04 +0100 Subject: [PATCH 14/29] E2E pluginUpgrader test (WIP) --- .../governance-plugins-setup.ts | 318 +++++++++++++++--- 1 file changed, 278 insertions(+), 40 deletions(-) diff --git a/packages/contracts/test/integration-testing/governance-plugins-setup.ts b/packages/contracts/test/integration-testing/governance-plugins-setup.ts index d6f86ff..88b9bde 100644 --- a/packages/contracts/test/integration-testing/governance-plugins-setup.ts +++ b/packages/contracts/test/integration-testing/governance-plugins-setup.ts @@ -10,39 +10,61 @@ import { PluginRepo, } from '../../typechain'; import {PluginSetupRefStruct} from '../../typechain/@aragon/osx/framework/dao/DAOFactory'; -import {osxContracts} from '../../utils/helpers'; +import {UpdatePreparedEvent} from '../../typechain/@aragon/osx/framework/plugin/setup/PluginSetupProcessor'; +import { + findEvent, + findEventTopicLog, + getPluginRepoFactoryAddress, + hashHelpers, + osxContracts, +} from '../../utils/helpers'; +import {toHex} from '../../utils/ipfs'; import {getPluginRepoInfo} from '../../utils/plugin-repo-info'; import {installPlugin, uninstallPlugin} from '../helpers/setup'; import {deployTestDao} from '../helpers/test-dao'; -import {ADDRESS_ZERO} from '../unit-testing/common'; +import { + ADDRESS_ZERO, + UPGRADE_PLUGIN_PERMISSION_ID, +} from '../unit-testing/common'; // import { getNamedTypesFromMetadata } from "../helpers/types"; import { DAO, PluginRepo__factory, PluginSetupProcessor, PluginSetupProcessor__factory, + PluginRepoFactory__factory, + PluginRepoRegistry__factory, + DAO__factory, } from '@aragon/osx-ethers'; import {SignerWithAddress} from '@nomiclabs/hardhat-ethers/signers'; import {expect} from 'chai'; -import {BigNumber} from 'ethers'; -import {ethers} from 'hardhat'; +import {ethers, network} from 'hardhat'; + +const release = 1; +const hardhatForkNetwork = process.env.NETWORK_NAME ?? 'mainnet'; +const pluginRepoInfo = getPluginRepoInfo( + GovernancePluginsSetupParams.PLUGIN_REPO_ENS_NAME, + 'hardhat' +); +const pluginSettings: MajorityVotingBase.VotingSettingsStruct = { + minDuration: 60 * 60 * 24, + minParticipation: 1, + supportThreshold: 1, + minProposerVotingPower: 0, + votingMode: 0, +}; +const minMemberAccessProposalDuration = 60 * 60 * 24; describe('GovernancePluginsSetup processing', function () { - let alice: SignerWithAddress; + let deployer: SignerWithAddress; let psp: PluginSetupProcessor; let dao: DAO; let pluginRepo: PluginRepo; before(async () => { - [alice] = await ethers.getSigners(); + [deployer] = await ethers.getSigners(); - const hardhatForkNetwork = process.env.NETWORK_NAME ?? 'mainnet'; - - const pluginRepoInfo = getPluginRepoInfo( - GovernancePluginsSetupParams.PLUGIN_REPO_ENS_NAME, - 'hardhat' - ); if (!pluginRepoInfo) { throw new Error('The plugin setup details are not available'); } @@ -50,11 +72,11 @@ describe('GovernancePluginsSetup processing', function () { // PSP psp = PluginSetupProcessor__factory.connect( osxContracts[hardhatForkNetwork]['PluginSetupProcessor'], - alice + deployer ); // Deploy DAO. - dao = await deployTestDao(alice); + dao = await deployTestDao(deployer); await dao.grant( dao.address, @@ -63,21 +85,21 @@ describe('GovernancePluginsSetup processing', function () { ); await dao.grant( psp.address, - alice.address, + deployer.address, ethers.utils.id('APPLY_INSTALLATION_PERMISSION') ); await dao.grant( psp.address, - alice.address, + deployer.address, ethers.utils.id('APPLY_UNINSTALLATION_PERMISSION') ); await dao.grant( psp.address, - alice.address, + deployer.address, ethers.utils.id('APPLY_UPDATE_PERMISSION') ); - pluginRepo = PluginRepo__factory.connect(pluginRepoInfo.address, alice); + pluginRepo = PluginRepo__factory.connect(pluginRepoInfo.address, deployer); }); context('Build 1', async () => { @@ -88,49 +110,38 @@ describe('GovernancePluginsSetup processing', function () { const pluginUpgrader = ADDRESS_ZERO; before(async () => { - const release = 1; - // Deploy setups. setup = GovernancePluginsSetup__factory.connect( (await pluginRepo['getLatestVersion(uint8)'](release)).pluginSetup, - alice + deployer ); pluginSetupRef = { versionTag: { - release: BigNumber.from(release), - build: BigNumber.from(1), + release, + build: 1, }, pluginSetupRepo: pluginRepo.address, }; }); beforeEach(async () => { - const settings: MajorityVotingBase.VotingSettingsStruct = { - minDuration: 60 * 60 * 24, - minParticipation: 1, - supportThreshold: 1, - minProposerVotingPower: 0, - votingMode: 0, - }; - const minMemberAccessProposalDuration = 60 * 60 * 24; - // Install build 1. const data = await setup.encodeInstallationParams( - settings, - [alice.address], + pluginSettings, + [deployer.address], minMemberAccessProposalDuration, pluginUpgrader ); const installation = await installPlugin(psp, dao, pluginSetupRef, data); - const mvAddress = installation.preparedEvent.args.plugin; - mainVotingPlugin = MainVotingPlugin__factory.connect(mvAddress, alice); - const mapAddress = - installation.preparedEvent.args.preparedSetupData.helpers[0]; + mainVotingPlugin = MainVotingPlugin__factory.connect( + installation.preparedEvent.args.plugin, + deployer + ); memberAccessPlugin = MemberAccessPlugin__factory.connect( - mapAddress, - alice + installation.preparedEvent.args.preparedSetupData.helpers[0], + deployer ); }); @@ -152,3 +163,230 @@ describe('GovernancePluginsSetup processing', function () { }); }); }); + +describe('GovernancePluginsSetup with pluginUpgrader', () => { + let deployer: SignerWithAddress; + let pluginUpgrader: SignerWithAddress; + let pSetupBuild1: GovernancePluginsSetup; + + let psp: PluginSetupProcessor; + let dao: DAO; + let pluginRepo: PluginRepo; + let gpsFactory: GovernancePluginsSetup__factory; + + before(async () => { + [deployer, pluginUpgrader] = await ethers.getSigners(); + + // PSP + psp = PluginSetupProcessor__factory.connect( + osxContracts[hardhatForkNetwork]['PluginSetupProcessor'], + deployer + ); + + // Deploy DAO. + dao = await deployTestDao(deployer); + + await dao.grant( + dao.address, + psp.address, + ethers.utils.id('ROOT_PERMISSION') + ); + await dao.grant( + psp.address, + deployer.address, + ethers.utils.id('APPLY_INSTALLATION_PERMISSION') + ); + + // Get the PluginRepoFactory address + const pluginRepoFactoryAddr: string = getPluginRepoFactoryAddress( + network.name + ); + + const pluginRepoFactory = PluginRepoFactory__factory.connect( + pluginRepoFactoryAddr, + deployer + ); + + // Create a new PluginRepo + let tx = await pluginRepoFactory.createPluginRepo( + 'testing-governance-plugin', + deployer.address + ); + const eventLog = await findEventTopicLog( + tx, + PluginRepoRegistry__factory.createInterface(), + 'PluginRepoRegistered' + ); + if (!eventLog) { + throw new Error('Failed to get PluginRepoRegistered event log'); + } + + pluginRepo = PluginRepo__factory.connect( + eventLog.args.pluginRepo, + deployer + ); + + // Deploy PluginSetup build 1 + gpsFactory = new GovernancePluginsSetup__factory().connect(deployer); + pSetupBuild1 = await gpsFactory.deploy(psp.address); + + // Publish build 1 + tx = await pluginRepo.createVersion( + 1, + pSetupBuild1.address, + toHex('build'), + toHex('release') + ); + }); + + it('Allows pluginUpgrader to call applyUpdate', async () => { + const pluginSetupRef1: PluginSetupRefStruct = { + versionTag: { + release, + build: 1, + }, + pluginSetupRepo: pluginRepo.address, + }; + const pluginSetupRef2: PluginSetupRefStruct = { + versionTag: { + release, + build: 2, + }, + pluginSetupRepo: pluginRepo.address, + }; + + // Install build 1 + const data1 = await pSetupBuild1.encodeInstallationParams( + pluginSettings, + [deployer.address], + minMemberAccessProposalDuration, + pluginUpgrader.address + ); + const installation1 = await installPlugin(psp, dao, pluginSetupRef1, data1); + + // Deployed plugin and helper + const mainVotingPlugin = MainVotingPlugin__factory.connect( + installation1.preparedEvent.args.plugin, + deployer + ); + const memberAccessPlugin = MemberAccessPlugin__factory.connect( + installation1.preparedEvent.args.preparedSetupData.helpers[0], + deployer + ); + + // Check implementations build 1 + expect(await mainVotingPlugin.implementation()).to.be.eq( + await pSetupBuild1.implementation() + ); + expect(await memberAccessPlugin.implementation()).to.be.eq( + await pSetupBuild1.memberAccessPluginImplementation() + ); + + // Deploy PluginSetup build 2 (new instance, disregarding the lack of changes) + const pSetupBuild2 = await gpsFactory.deploy(psp.address); + + // Publish build 2 + let tx = await pluginRepo.createVersion( + 1, + pSetupBuild2.address, + toHex('build'), + toHex('release') + ); + + // Upgrade to build 2 + tx = await psp.prepareUpdate(dao.address, { + currentVersionTag: { + release: release, + build: 1, + }, + newVersionTag: { + release: release, + build: 2, + }, + pluginSetupRepo: pluginRepo.address, + setupPayload: { + currentHelpers: [memberAccessPlugin.address], + data: toHex(''), + plugin: mainVotingPlugin.address, + }, + }); + const preparedEvent = await findEvent( + tx, + 'UpdatePrepared' + ); + if (!preparedEvent) { + throw new Error('Failed to get UpdatePrepared event'); + } + + // Params + const applyUpdateParams: PluginSetupProcessor.ApplyUpdateParamsStruct = { + plugin: mainVotingPlugin.address, + pluginSetupRef: { + pluginSetupRepo: pluginRepo.address, + versionTag: { + release, + build: 2, + }, + }, + initData: preparedEvent.args.initData, + permissions: preparedEvent.args.preparedSetupData.permissions, + helpersHash: hashHelpers(preparedEvent.args.preparedSetupData.helpers), + }; + + // Execute grant + applyUpdate + revoke + dao.connect(pluginUpgrader).execute( + toHex(Date.now().toString()), + [ + // Grant permission to the PSP + { + to: dao.address, + value: 0, + data: DAO__factory.createInterface().encodeFunctionData('grant', [ + mainVotingPlugin.address, + psp.address, + UPGRADE_PLUGIN_PERMISSION_ID, + ]), + }, + // Execute psp.applyUpdate() from the DAO to the plugin + { + to: psp.address, + value: 0, + data: PluginSetupProcessor__factory.createInterface().encodeFunctionData( + 'applyUpdate', + [dao.address, applyUpdateParams] + ), + }, + // Revoke permission to the PSP + { + to: dao.address, + value: 0, + data: DAO__factory.createInterface().encodeFunctionData('revoke', [ + mainVotingPlugin.address, + psp.address, + UPGRADE_PLUGIN_PERMISSION_ID, + ]), + }, + ], + 0 + ); + + // Check implementations build 2 + expect(await mainVotingPlugin.implementation()).to.not.be.eq( + await pSetupBuild1.implementation(), + "Implementation shouldn't be build 1" + ); + expect(await memberAccessPlugin.implementation()).to.not.be.eq( + await pSetupBuild1.memberAccessPluginImplementation(), + "Implementation shouldn't be build 1" + ); + + expect(await mainVotingPlugin.implementation()).to.be.eq( + await pSetupBuild2.implementation(), + 'Implementation should be build 2' + ); + expect(await memberAccessPlugin.implementation()).to.be.eq( + await pSetupBuild2.memberAccessPluginImplementation(), + 'Implementation should be build 2' + ); + }); +}); From 9b41d6657b5287785dec34ee0cb405b180855b98 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8r=E2=88=82=C2=A1?= Date: Thu, 4 Jan 2024 12:32:30 +0100 Subject: [PATCH 15/29] E2E test fixes --- .../contracts/src/GovernancePluginsSetup.sol | 4 +- .../src/OnlyPluginUpgraderCondition.sol | 4 +- .../governance-plugins-setup.ts | 46 ++++++++++++++----- 3 files changed, 38 insertions(+), 16 deletions(-) diff --git a/packages/contracts/src/GovernancePluginsSetup.sol b/packages/contracts/src/GovernancePluginsSetup.sol index 025ca59..d6fc786 100644 --- a/packages/contracts/src/GovernancePluginsSetup.sol +++ b/packages/contracts/src/GovernancePluginsSetup.sol @@ -104,7 +104,7 @@ contract GovernancePluginsSetup is PluginSetup { // The member access plugin needs to execute on the DAO permissions[3] = PermissionLib.MultiTargetPermission({ - operation: PermissionLib.Operation.Grant, + operation: PermissionLib.Operation.GrantWithCondition, where: _dao, who: _memberAccessPlugin, condition: _memberAccessExecuteCondition, @@ -135,7 +135,7 @@ contract GovernancePluginsSetup is PluginSetup { _targetPluginAddresses ); permissions[5] = PermissionLib.MultiTargetPermission({ - operation: PermissionLib.Operation.Grant, + operation: PermissionLib.Operation.GrantWithCondition, where: _dao, who: _pluginUpgrader, condition: address(_onlyPluginUpgraderCondition), diff --git a/packages/contracts/src/OnlyPluginUpgraderCondition.sol b/packages/contracts/src/OnlyPluginUpgraderCondition.sol index 9446c20..f2a5bcc 100644 --- a/packages/contracts/src/OnlyPluginUpgraderCondition.sol +++ b/packages/contracts/src/OnlyPluginUpgraderCondition.sol @@ -139,9 +139,9 @@ contract OnlyPluginUpgraderCondition is PermissionCondition { ) = decodeGrantRevokeCalldata(_grantData); if (_grantSelector != PermissionManager.grant.selector) return false; + else if (!allowedPluginAddresses[_grantWhere]) return false; else if (_grantWho != psp) return false; else if (_grantPermission != UPGRADE_PLUGIN_PERMISSION_ID) return false; - else if (!allowedPluginAddresses[_grantWhere]) return false; // Revoke checks ( @@ -152,9 +152,9 @@ contract OnlyPluginUpgraderCondition is PermissionCondition { ) = decodeGrantRevokeCalldata(_revokeData); if (_revokeSelector != PermissionManager.revoke.selector) return false; + else if (!allowedPluginAddresses[_revokeWhere]) return false; else if (_revokeWho != psp) return false; else if (_revokePermission != UPGRADE_PLUGIN_PERMISSION_ID) return false; - else if (!allowedPluginAddresses[_revokeWhere]) return false; // Combined checks if (_grantWhere != _revokeWhere) return false; diff --git a/packages/contracts/test/integration-testing/governance-plugins-setup.ts b/packages/contracts/test/integration-testing/governance-plugins-setup.ts index 88b9bde..1b71928 100644 --- a/packages/contracts/test/integration-testing/governance-plugins-setup.ts +++ b/packages/contracts/test/integration-testing/governance-plugins-setup.ts @@ -10,7 +10,10 @@ import { PluginRepo, } from '../../typechain'; import {PluginSetupRefStruct} from '../../typechain/@aragon/osx/framework/dao/DAOFactory'; -import {UpdatePreparedEvent} from '../../typechain/@aragon/osx/framework/plugin/setup/PluginSetupProcessor'; +import { + UpdateAppliedEvent, + UpdatePreparedEvent, +} from '../../typechain/@aragon/osx/framework/plugin/setup/PluginSetupProcessor'; import { findEvent, findEventTopicLog, @@ -186,6 +189,7 @@ describe('GovernancePluginsSetup with pluginUpgrader', () => { // Deploy DAO. dao = await deployTestDao(deployer); + // Permissions (build 1 install) await dao.grant( dao.address, psp.address, @@ -239,7 +243,7 @@ describe('GovernancePluginsSetup with pluginUpgrader', () => { ); }); - it('Allows pluginUpgrader to call applyUpdate', async () => { + it('Allows pluginUpgrader to execute psp.applyUpdate()', async () => { const pluginSetupRef1: PluginSetupRefStruct = { versionTag: { release, @@ -247,13 +251,6 @@ describe('GovernancePluginsSetup with pluginUpgrader', () => { }, pluginSetupRepo: pluginRepo.address, }; - const pluginSetupRef2: PluginSetupRefStruct = { - versionTag: { - release, - build: 2, - }, - pluginSetupRepo: pluginRepo.address, - }; // Install build 1 const data1 = await pSetupBuild1.encodeInstallationParams( @@ -285,6 +282,12 @@ describe('GovernancePluginsSetup with pluginUpgrader', () => { // Deploy PluginSetup build 2 (new instance, disregarding the lack of changes) const pSetupBuild2 = await gpsFactory.deploy(psp.address); + // Check + expect(await pSetupBuild1.implementation()).to.not.be.eq( + await pSetupBuild2.implementation(), + 'Builds 1-2 implementation should differ' + ); + // Publish build 2 let tx = await pluginRepo.createVersion( 1, @@ -292,6 +295,7 @@ describe('GovernancePluginsSetup with pluginUpgrader', () => { toHex('build'), toHex('release') ); + await tx.wait(); // Upgrade to build 2 tx = await psp.prepareUpdate(dao.address, { @@ -306,7 +310,7 @@ describe('GovernancePluginsSetup with pluginUpgrader', () => { pluginSetupRepo: pluginRepo.address, setupPayload: { currentHelpers: [memberAccessPlugin.address], - data: toHex(''), + data: '0x', plugin: mainVotingPlugin.address, }, }); @@ -318,6 +322,24 @@ describe('GovernancePluginsSetup with pluginUpgrader', () => { throw new Error('Failed to get UpdatePrepared event'); } + // Should not allow to execute other than the expected 3 actions + await expect(dao.execute(toHex('01234123412341234123412341234123'), [], 0)) + .to.be.reverted; + await expect( + dao + .connect(pluginUpgrader) + .execute(toHex('01234123412341234123412341234123'), [], 0) + ).to.be.reverted; + await expect( + dao + .connect(pluginUpgrader) + .execute( + toHex('01234123412341234123412341234123'), + [{to: dao.address, value: 0, data: '0x'}], + 0 + ) + ).to.be.reverted; + // Params const applyUpdateParams: PluginSetupProcessor.ApplyUpdateParamsStruct = { plugin: mainVotingPlugin.address, @@ -334,8 +356,8 @@ describe('GovernancePluginsSetup with pluginUpgrader', () => { }; // Execute grant + applyUpdate + revoke - dao.connect(pluginUpgrader).execute( - toHex(Date.now().toString()), + await dao.connect(pluginUpgrader).execute( + toHex('12341234123412341234123412341234'), [ // Grant permission to the PSP { From d325aab866a7ffaba43a7fd18a9aca60cd8ef664 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8r=E2=88=82=C2=A1?= Date: Thu, 4 Jan 2024 16:14:38 +0100 Subject: [PATCH 16/29] Governance E2E test passing --- .../governance-plugins-setup.ts | 123 +++++++++++++----- 1 file changed, 89 insertions(+), 34 deletions(-) diff --git a/packages/contracts/test/integration-testing/governance-plugins-setup.ts b/packages/contracts/test/integration-testing/governance-plugins-setup.ts index 1b71928..356b762 100644 --- a/packages/contracts/test/integration-testing/governance-plugins-setup.ts +++ b/packages/contracts/test/integration-testing/governance-plugins-setup.ts @@ -9,6 +9,10 @@ import { MemberAccessPlugin__factory, PluginRepo, } from '../../typechain'; +import { + ExecutedEvent, + UpgradedEvent, +} from '../../typechain/@aragon/osx/core/dao/DAO'; import {PluginSetupRefStruct} from '../../typechain/@aragon/osx/framework/dao/DAOFactory'; import { UpdateAppliedEvent, @@ -28,6 +32,7 @@ import {deployTestDao} from '../helpers/test-dao'; import { ADDRESS_ZERO, UPGRADE_PLUGIN_PERMISSION_ID, + ZERO_BYTES32, } from '../unit-testing/common'; // import { getNamedTypesFromMetadata } from "../helpers/types"; import { @@ -57,6 +62,8 @@ const pluginSettings: MajorityVotingBase.VotingSettingsStruct = { votingMode: 0, }; const minMemberAccessProposalDuration = 60 * 60 * 24; +const daoInterface = DAO__factory.createInterface(); +const pspInterface = PluginSetupProcessor__factory.createInterface(); describe('GovernancePluginsSetup processing', function () { let deployer: SignerWithAddress; @@ -189,17 +196,12 @@ describe('GovernancePluginsSetup with pluginUpgrader', () => { // Deploy DAO. dao = await deployTestDao(deployer); - // Permissions (build 1 install) + // The DAO is root on itself await dao.grant( dao.address, - psp.address, + dao.address, ethers.utils.id('ROOT_PERMISSION') ); - await dao.grant( - psp.address, - deployer.address, - ethers.utils.id('APPLY_INSTALLATION_PERMISSION') - ); // Get the PluginRepoFactory address const pluginRepoFactoryAddr: string = getPluginRepoFactoryAddress( @@ -252,6 +254,18 @@ describe('GovernancePluginsSetup with pluginUpgrader', () => { pluginSetupRepo: pluginRepo.address, }; + // Temporary permissions for installing + await dao.grant( + dao.address, + psp.address, + ethers.utils.id('ROOT_PERMISSION') + ); + await dao.grant( + psp.address, + deployer.address, + ethers.utils.id('APPLY_INSTALLATION_PERMISSION') + ); + // Install build 1 const data1 = await pSetupBuild1.encodeInstallationParams( pluginSettings, @@ -261,6 +275,18 @@ describe('GovernancePluginsSetup with pluginUpgrader', () => { ); const installation1 = await installPlugin(psp, dao, pluginSetupRef1, data1); + // Drop temp permissions + await dao.revoke( + dao.address, + psp.address, + ethers.utils.id('ROOT_PERMISSION') + ); + await dao.revoke( + psp.address, + deployer.address, + ethers.utils.id('APPLY_INSTALLATION_PERMISSION') + ); + // Deployed plugin and helper const mainVotingPlugin = MainVotingPlugin__factory.connect( installation1.preparedEvent.args.plugin, @@ -323,22 +349,41 @@ describe('GovernancePluginsSetup with pluginUpgrader', () => { } // Should not allow to execute other than the expected 3 actions - await expect(dao.execute(toHex('01234123412341234123412341234123'), [], 0)) - .to.be.reverted; - await expect( - dao - .connect(pluginUpgrader) - .execute(toHex('01234123412341234123412341234123'), [], 0) - ).to.be.reverted; - await expect( - dao - .connect(pluginUpgrader) - .execute( + { + await expect( + dao.execute(toHex('01234123412341234123412341234123'), [], 0) + ).to.be.reverted; + await expect( + dao + .connect(pluginUpgrader) + .execute(toHex('01234123412341234123412341234123'), [], 0) + ).to.be.reverted; + await expect( + dao + .connect(pluginUpgrader) + .execute( + toHex('01234123412341234123412341234123'), + [{to: dao.address, value: 0, data: '0x'}], + 0 + ) + ).to.be.reverted; + await expect( + dao.connect(pluginUpgrader).execute( toHex('01234123412341234123412341234123'), - [{to: dao.address, value: 0, data: '0x'}], + [ + { + to: mainVotingPlugin.address, + value: 0, + data: MainVotingPlugin__factory.createInterface().encodeFunctionData( + 'addAddresses', + [[pluginUpgrader.address]] + ), + }, + ], 0 ) - ).to.be.reverted; + ).to.be.reverted; + } // Params const applyUpdateParams: PluginSetupProcessor.ApplyUpdateParamsStruct = { @@ -356,14 +401,14 @@ describe('GovernancePluginsSetup with pluginUpgrader', () => { }; // Execute grant + applyUpdate + revoke - await dao.connect(pluginUpgrader).execute( - toHex('12341234123412341234123412341234'), + tx = await dao.connect(pluginUpgrader).execute( + ZERO_BYTES32, [ // Grant permission to the PSP { to: dao.address, value: 0, - data: DAO__factory.createInterface().encodeFunctionData('grant', [ + data: daoInterface.encodeFunctionData('grant', [ mainVotingPlugin.address, psp.address, UPGRADE_PLUGIN_PERMISSION_ID, @@ -373,16 +418,16 @@ describe('GovernancePluginsSetup with pluginUpgrader', () => { { to: psp.address, value: 0, - data: PluginSetupProcessor__factory.createInterface().encodeFunctionData( - 'applyUpdate', - [dao.address, applyUpdateParams] - ), + data: pspInterface.encodeFunctionData('applyUpdate', [ + dao.address, + applyUpdateParams, + ]), }, // Revoke permission to the PSP { to: dao.address, value: 0, - data: DAO__factory.createInterface().encodeFunctionData('revoke', [ + data: daoInterface.encodeFunctionData('revoke', [ mainVotingPlugin.address, psp.address, UPGRADE_PLUGIN_PERMISSION_ID, @@ -392,23 +437,33 @@ describe('GovernancePluginsSetup with pluginUpgrader', () => { 0 ); + const receipt = await tx.wait(); + const executedEvent: ExecutedEvent | undefined = ( + receipt.events || [] + ).find(event => event.event === 'Executed') as any; + if (!executedEvent) { + throw new Error('Failed to get Executed event'); + } + + const upgradedEvent = await findEvent(tx, 'Upgraded'); + if (!upgradedEvent) { + throw new Error('Failed to get Upgraded event'); + } + // Check implementations build 2 expect(await mainVotingPlugin.implementation()).to.not.be.eq( await pSetupBuild1.implementation(), "Implementation shouldn't be build 1" ); - expect(await memberAccessPlugin.implementation()).to.not.be.eq( - await pSetupBuild1.memberAccessPluginImplementation(), - "Implementation shouldn't be build 1" - ); expect(await mainVotingPlugin.implementation()).to.be.eq( await pSetupBuild2.implementation(), 'Implementation should be build 2' ); + expect(await memberAccessPlugin.implementation()).to.be.eq( - await pSetupBuild2.memberAccessPluginImplementation(), - 'Implementation should be build 2' + await pSetupBuild1.memberAccessPluginImplementation(), + 'Implementation reamain as build 1' ); }); }); From 28402b56c880649e1af848407b4b0ea171fceb6b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8r=E2=88=82=C2=A1?= Date: Thu, 4 Jan 2024 16:37:39 +0100 Subject: [PATCH 17/29] E2E pluginUpgrader tests ready --- packages/contracts/src/SpacePluginSetup.sol | 2 +- .../governance-plugins-setup.ts | 5 +- .../test/integration-testing/space-setup.ts | 331 +++++++++++++++++- 3 files changed, 320 insertions(+), 18 deletions(-) diff --git a/packages/contracts/src/SpacePluginSetup.sol b/packages/contracts/src/SpacePluginSetup.sol index 2a92e08..c95a3e5 100644 --- a/packages/contracts/src/SpacePluginSetup.sol +++ b/packages/contracts/src/SpacePluginSetup.sol @@ -79,7 +79,7 @@ contract SpacePluginSetup is PluginSetup { _targetPluginAddresses ); permissions[2] = PermissionLib.MultiTargetPermission({ - operation: PermissionLib.Operation.Grant, + operation: PermissionLib.Operation.GrantWithCondition, where: _dao, who: _pluginUpgrader, condition: address(_onlyPluginUpgraderCondition), diff --git a/packages/contracts/test/integration-testing/governance-plugins-setup.ts b/packages/contracts/test/integration-testing/governance-plugins-setup.ts index 356b762..6ed77c4 100644 --- a/packages/contracts/test/integration-testing/governance-plugins-setup.ts +++ b/packages/contracts/test/integration-testing/governance-plugins-setup.ts @@ -14,10 +14,7 @@ import { UpgradedEvent, } from '../../typechain/@aragon/osx/core/dao/DAO'; import {PluginSetupRefStruct} from '../../typechain/@aragon/osx/framework/dao/DAOFactory'; -import { - UpdateAppliedEvent, - UpdatePreparedEvent, -} from '../../typechain/@aragon/osx/framework/plugin/setup/PluginSetupProcessor'; +import {UpdatePreparedEvent} from '../../typechain/@aragon/osx/framework/plugin/setup/PluginSetupProcessor'; import { findEvent, findEventTopicLog, diff --git a/packages/contracts/test/integration-testing/space-setup.ts b/packages/contracts/test/integration-testing/space-setup.ts index fd36f9f..87ee68f 100644 --- a/packages/contracts/test/integration-testing/space-setup.ts +++ b/packages/contracts/test/integration-testing/space-setup.ts @@ -6,34 +6,58 @@ import { SpacePluginSetup, SpacePluginSetup__factory, } from '../../typechain'; +import { + ExecutedEvent, + UpgradedEvent, +} from '../../typechain/@aragon/osx/core/dao/DAO'; import {PluginSetupRefStruct} from '../../typechain/@aragon/osx/framework/dao/DAOFactory'; -import {osxContracts} from '../../utils/helpers'; +import {UpdatePreparedEvent} from '../../typechain/@aragon/osx/framework/plugin/setup/PluginSetupProcessor'; +import { + findEvent, + findEventTopicLog, + getPluginRepoFactoryAddress, + hashHelpers, + osxContracts, +} from '../../utils/helpers'; import {toHex} from '../../utils/ipfs'; import {getPluginRepoInfo} from '../../utils/plugin-repo-info'; import {installPlugin, uninstallPlugin} from '../helpers/setup'; import {deployTestDao} from '../helpers/test-dao'; -import {ADDRESS_ZERO} from '../unit-testing/common'; +import { + ADDRESS_ONE, + ADDRESS_ZERO, + UPGRADE_PLUGIN_PERMISSION_ID, + ZERO_BYTES32, +} from '../unit-testing/common'; // import { getNamedTypesFromMetadata } from "../helpers/types"; import { DAO, + DAO__factory, PluginRepo__factory, + PluginRepoFactory__factory, + PluginRepoRegistry__factory, PluginSetupProcessor, PluginSetupProcessor__factory, } from '@aragon/osx-ethers'; import {SignerWithAddress} from '@nomiclabs/hardhat-ethers/signers'; import {expect} from 'chai'; import {BigNumber} from 'ethers'; -import {ethers} from 'hardhat'; +import {ethers, network} from 'hardhat'; + +const release = 1; +const hardhatForkNetwork = process.env.NETWORK_NAME ?? 'mainnet'; +const daoInterface = DAO__factory.createInterface(); +const pspInterface = PluginSetupProcessor__factory.createInterface(); describe('SpacePluginSetup processing', function () { - let alice: SignerWithAddress; + let deployer: SignerWithAddress; let psp: PluginSetupProcessor; let dao: DAO; let pluginRepo: PluginRepo; before(async () => { - [alice] = await ethers.getSigners(); + [deployer] = await ethers.getSigners(); const hardhatForkNetwork = process.env.NETWORK_NAME ?? 'mainnet'; @@ -48,11 +72,11 @@ describe('SpacePluginSetup processing', function () { // PSP psp = PluginSetupProcessor__factory.connect( osxContracts[hardhatForkNetwork]['PluginSetupProcessor'], - alice + deployer ); // Deploy DAO. - dao = await deployTestDao(alice); + dao = await deployTestDao(deployer); await dao.grant( dao.address, @@ -61,21 +85,21 @@ describe('SpacePluginSetup processing', function () { ); await dao.grant( psp.address, - alice.address, + deployer.address, ethers.utils.id('APPLY_INSTALLATION_PERMISSION') ); await dao.grant( psp.address, - alice.address, + deployer.address, ethers.utils.id('APPLY_UNINSTALLATION_PERMISSION') ); await dao.grant( psp.address, - alice.address, + deployer.address, ethers.utils.id('APPLY_UPDATE_PERMISSION') ); - pluginRepo = PluginRepo__factory.connect(pluginRepoInfo.address, alice); + pluginRepo = PluginRepo__factory.connect(pluginRepoInfo.address, deployer); }); context('Build 1', async () => { @@ -90,7 +114,7 @@ describe('SpacePluginSetup processing', function () { // Deploy setups. setup = SpacePluginSetup__factory.connect( (await pluginRepo['getLatestVersion(uint8)'](release)).pluginSetup, - alice + deployer ); pluginSetupRef = { @@ -113,7 +137,7 @@ describe('SpacePluginSetup processing', function () { plugin = SpacePlugin__factory.connect( results.preparedEvent.args.plugin, - alice + deployer ); }); @@ -129,3 +153,284 @@ describe('SpacePluginSetup processing', function () { }); }); }); + +describe('SpacePluginSetup with pluginUpgrader', () => { + let deployer: SignerWithAddress; + let pluginUpgrader: SignerWithAddress; + let pSetupBuild1: SpacePluginSetup; + + let psp: PluginSetupProcessor; + let dao: DAO; + let pluginRepo: PluginRepo; + let spFactory: SpacePluginSetup__factory; + + before(async () => { + [deployer, pluginUpgrader] = await ethers.getSigners(); + + // PSP + psp = PluginSetupProcessor__factory.connect( + osxContracts[hardhatForkNetwork]['PluginSetupProcessor'], + deployer + ); + + // Deploy DAO. + dao = await deployTestDao(deployer); + + // The DAO is root on itself + await dao.grant( + dao.address, + dao.address, + ethers.utils.id('ROOT_PERMISSION') + ); + + // Get the PluginRepoFactory address + const pluginRepoFactoryAddr: string = getPluginRepoFactoryAddress( + network.name + ); + + const pluginRepoFactory = PluginRepoFactory__factory.connect( + pluginRepoFactoryAddr, + deployer + ); + + // Create a new PluginRepo + let tx = await pluginRepoFactory.createPluginRepo( + 'testing-space-plugin', + deployer.address + ); + const eventLog = await findEventTopicLog( + tx, + PluginRepoRegistry__factory.createInterface(), + 'PluginRepoRegistered' + ); + if (!eventLog) { + throw new Error('Failed to get PluginRepoRegistered event log'); + } + + pluginRepo = PluginRepo__factory.connect( + eventLog.args.pluginRepo, + deployer + ); + + // Deploy PluginSetup build 1 + spFactory = new SpacePluginSetup__factory().connect(deployer); + pSetupBuild1 = await spFactory.deploy(psp.address); + + // Publish build 1 + tx = await pluginRepo.createVersion( + 1, + pSetupBuild1.address, + toHex('build'), + toHex('release') + ); + }); + + it('Allows pluginUpgrader to execute psp.applyUpdate()', async () => { + const pluginSetupRef1: PluginSetupRefStruct = { + versionTag: { + release, + build: 1, + }, + pluginSetupRepo: pluginRepo.address, + }; + + // Temporary permissions for installing + await dao.grant( + dao.address, + psp.address, + ethers.utils.id('ROOT_PERMISSION') + ); + await dao.grant( + psp.address, + deployer.address, + ethers.utils.id('APPLY_INSTALLATION_PERMISSION') + ); + + // Install build 1 + const data1 = await pSetupBuild1.encodeInstallationParams( + toHex('ipfs://1234'), + ADDRESS_ZERO, + pluginUpgrader.address + ); + const installation1 = await installPlugin(psp, dao, pluginSetupRef1, data1); + + // Drop temp permissions + await dao.revoke( + dao.address, + psp.address, + ethers.utils.id('ROOT_PERMISSION') + ); + await dao.revoke( + psp.address, + deployer.address, + ethers.utils.id('APPLY_INSTALLATION_PERMISSION') + ); + + // Deployed plugin + const spacePlugin = SpacePlugin__factory.connect( + installation1.preparedEvent.args.plugin, + deployer + ); + + // Check implementations build 1 + expect(await spacePlugin.implementation()).to.be.eq( + await pSetupBuild1.implementation() + ); + + // Deploy PluginSetup build 2 (new instance, disregarding the lack of changes) + const pSetupBuild2 = await spFactory.deploy(psp.address); + + // Check + expect(await pSetupBuild1.implementation()).to.not.be.eq( + await pSetupBuild2.implementation(), + 'Builds 1-2 implementation should differ' + ); + + // Publish build 2 + let tx = await pluginRepo.createVersion( + 1, + pSetupBuild2.address, + toHex('build'), + toHex('release') + ); + await tx.wait(); + + // Upgrade to build 2 + tx = await psp.prepareUpdate(dao.address, { + currentVersionTag: { + release: release, + build: 1, + }, + newVersionTag: { + release: release, + build: 2, + }, + pluginSetupRepo: pluginRepo.address, + setupPayload: { + currentHelpers: [], + data: '0x', + plugin: spacePlugin.address, + }, + }); + const preparedEvent = await findEvent( + tx, + 'UpdatePrepared' + ); + if (!preparedEvent) { + throw new Error('Failed to get UpdatePrepared event'); + } + + // Should not allow to execute other than the expected 3 actions + { + await expect( + dao.execute(toHex('23412341234123412341234123412341'), [], 0) + ).to.be.reverted; + await expect( + dao + .connect(pluginUpgrader) + .execute(toHex('23412341234123412341234123412341'), [], 0) + ).to.be.reverted; + await expect( + dao + .connect(pluginUpgrader) + .execute( + toHex('23412341234123412341234123412341'), + [{to: dao.address, value: 0, data: '0x'}], + 0 + ) + ).to.be.reverted; + await expect( + dao.connect(pluginUpgrader).execute( + toHex('23412341234123412341234123412341'), + [ + { + to: spacePlugin.address, + value: 0, + data: SpacePlugin__factory.createInterface().encodeFunctionData( + 'removeSubspace', + [ADDRESS_ONE] + ), + }, + ], + 0 + ) + ).to.be.reverted; + } + + // Params + const applyUpdateParams: PluginSetupProcessor.ApplyUpdateParamsStruct = { + plugin: spacePlugin.address, + pluginSetupRef: { + pluginSetupRepo: pluginRepo.address, + versionTag: { + release, + build: 2, + }, + }, + initData: preparedEvent.args.initData, + permissions: preparedEvent.args.preparedSetupData.permissions, + helpersHash: hashHelpers(preparedEvent.args.preparedSetupData.helpers), + }; + + // Execute grant + applyUpdate + revoke + tx = await dao.connect(pluginUpgrader).execute( + ZERO_BYTES32, + [ + // Grant permission to the PSP + { + to: dao.address, + value: 0, + data: daoInterface.encodeFunctionData('grant', [ + spacePlugin.address, + psp.address, + UPGRADE_PLUGIN_PERMISSION_ID, + ]), + }, + // Execute psp.applyUpdate() from the DAO to the plugin + { + to: psp.address, + value: 0, + data: pspInterface.encodeFunctionData('applyUpdate', [ + dao.address, + applyUpdateParams, + ]), + }, + // Revoke permission to the PSP + { + to: dao.address, + value: 0, + data: daoInterface.encodeFunctionData('revoke', [ + spacePlugin.address, + psp.address, + UPGRADE_PLUGIN_PERMISSION_ID, + ]), + }, + ], + 0 + ); + + const receipt = await tx.wait(); + const executedEvent: ExecutedEvent | undefined = ( + receipt.events || [] + ).find(event => event.event === 'Executed') as any; + if (!executedEvent) { + throw new Error('Failed to get Executed event'); + } + + const upgradedEvent = await findEvent(tx, 'Upgraded'); + if (!upgradedEvent) { + throw new Error('Failed to get Upgraded event'); + } + + // Check implementations build 2 + expect(await spacePlugin.implementation()).to.not.be.eq( + await pSetupBuild1.implementation(), + "Implementation shouldn't be build 1" + ); + + expect(await spacePlugin.implementation()).to.be.eq( + await pSetupBuild2.implementation(), + 'Implementation should be build 2' + ); + }); +}); From fdc577169bbc25d5b734943518b9f9c5aa7c4133 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8r=E2=88=82=C2=A1?= Date: Fri, 5 Jan 2024 14:10:34 +0100 Subject: [PATCH 18/29] Adding an E2E test for the member access condition --- packages/contracts/src/MemberAccessPlugin.sol | 2 +- .../src/test/TestGovernancePluginsSetup.sol | 287 ++++++++ .../src/test/TestMemberAccessPlugin.sol | 26 + .../governance-plugins-setup.ts | 319 +-------- .../member-access-condition.ts | 407 +++++++++++ .../integration-testing/plugin-upgrader.ts | 647 ++++++++++++++++++ .../test/integration-testing/space-setup.ts | 311 +-------- .../contracts/test/unit-testing/common.ts | 2 + 8 files changed, 1376 insertions(+), 625 deletions(-) create mode 100644 packages/contracts/src/test/TestGovernancePluginsSetup.sol create mode 100644 packages/contracts/src/test/TestMemberAccessPlugin.sol create mode 100644 packages/contracts/test/integration-testing/member-access-condition.ts create mode 100644 packages/contracts/test/integration-testing/plugin-upgrader.ts diff --git a/packages/contracts/src/MemberAccessPlugin.sol b/packages/contracts/src/MemberAccessPlugin.sol index bd22e29..939e41b 100644 --- a/packages/contracts/src/MemberAccessPlugin.sol +++ b/packages/contracts/src/MemberAccessPlugin.sol @@ -133,7 +133,7 @@ contract MemberAccessPlugin is IMultisig, PluginUUPSUpgradeable, ProposalUpgrade function initialize( IDAO _dao, MultisigSettings calldata _multisigSettings - ) external initializer { + ) external virtual initializer { __PluginUUPSUpgradeable_init(_dao); _updateMultisigSettings(_multisigSettings); diff --git a/packages/contracts/src/test/TestGovernancePluginsSetup.sol b/packages/contracts/src/test/TestGovernancePluginsSetup.sol new file mode 100644 index 0000000..adf9aea --- /dev/null +++ b/packages/contracts/src/test/TestGovernancePluginsSetup.sol @@ -0,0 +1,287 @@ +// SPDX-License-Identifier: AGPL-3.0-or-later + +pragma solidity ^0.8.8; + +import {PermissionLib} from "@aragon/osx/core/permission/PermissionLib.sol"; +import {DAO} from "@aragon/osx/core/dao/DAO.sol"; +import {IDAO} from "@aragon/osx/core/dao/IDAO.sol"; +import {PluginSetup, IPluginSetup} from "@aragon/osx/framework/plugin/setup/PluginSetup.sol"; +import {PluginSetupProcessor} from "@aragon/osx/framework/plugin/setup/PluginSetupProcessor.sol"; +import {TestMemberAccessPlugin} from "./TestMemberAccessPlugin.sol"; +import {MemberAccessExecuteCondition} from "../MemberAccessExecuteCondition.sol"; +import {OnlyPluginUpgraderCondition} from "../OnlyPluginUpgraderCondition.sol"; +import {MainVotingPlugin} from "../MainVotingPlugin.sol"; +import {MajorityVotingBase} from "@aragon/osx/plugins/governance/majority-voting/MajorityVotingBase.sol"; + +// Not ideal, but to test this E2E, the contract needs to be cloned +contract TestGovernancePluginsSetup is PluginSetup { + address private immutable mainVotingPluginImplementationAddr; + address public immutable memberAccessPluginImplementationAddr; + address private immutable pluginSetupProcessor; + + /// @notice Thrown when the array of helpers does not have the correct size + error InvalidHelpers(uint256 actualLength); + + /// @notice Initializes the setup contract + /// @param pluginSetupProcessorAddress The address of the PluginSetupProcessor contract deployed by Aragon on that chain + constructor(PluginSetupProcessor pluginSetupProcessorAddress) { + pluginSetupProcessor = address(pluginSetupProcessorAddress); + mainVotingPluginImplementationAddr = address(new MainVotingPlugin()); + memberAccessPluginImplementationAddr = address(new TestMemberAccessPlugin()); + } + + /// @inheritdoc IPluginSetup + /// @notice Prepares the installation of the two governance plugins in one go + function prepareInstallation( + address _dao, + bytes memory _data + ) external returns (address mainVotingPlugin, PreparedSetupData memory preparedSetupData) { + // Decode the custom installation parameters + ( + MajorityVotingBase.VotingSettings memory _votingSettings, + address[] memory _initialEditors, + uint64 _memberAccessProposalDuration, + address _pluginUpgrader + ) = decodeInstallationParams(_data); + + // Deploy the main voting plugin + mainVotingPlugin = createERC1967Proxy( + mainVotingPluginImplementationAddr, + abi.encodeCall( + MainVotingPlugin.initialize, + (IDAO(_dao), _votingSettings, _initialEditors) + ) + ); + + // Deploy the member access plugin + TestMemberAccessPlugin.MultisigSettings memory _multisigSettings; + _multisigSettings.proposalDuration = _memberAccessProposalDuration; + _multisigSettings.mainVotingPlugin = MainVotingPlugin(mainVotingPlugin); + + address _memberAccessPlugin = createERC1967Proxy( + memberAccessPluginImplementation(), + abi.encodeCall(TestMemberAccessPlugin.initialize, (IDAO(_dao), _multisigSettings)) + ); + + // Condition contract (member access plugin execute) + address _memberAccessExecuteCondition = address( + new MemberAccessExecuteCondition(mainVotingPlugin) + ); + + // List the requested permissions + PermissionLib.MultiTargetPermission[] + memory permissions = new PermissionLib.MultiTargetPermission[]( + _pluginUpgrader == address(0x0) ? 5 : 6 + ); + + // The main voting plugin can execute on the DAO + permissions[0] = PermissionLib.MultiTargetPermission({ + operation: PermissionLib.Operation.Grant, + where: _dao, + who: mainVotingPlugin, + condition: PermissionLib.NO_CONDITION, + permissionId: DAO(payable(_dao)).EXECUTE_PERMISSION_ID() + }); + // The DAO can update the main voting plugin settings + permissions[1] = PermissionLib.MultiTargetPermission({ + operation: PermissionLib.Operation.Grant, + where: mainVotingPlugin, + who: _dao, + condition: PermissionLib.NO_CONDITION, + permissionId: MainVotingPlugin(mainVotingPluginImplementationAddr) + .UPDATE_VOTING_SETTINGS_PERMISSION_ID() + }); + // The DAO can manage the list of addresses + permissions[2] = PermissionLib.MultiTargetPermission({ + operation: PermissionLib.Operation.Grant, + where: mainVotingPlugin, + who: _dao, + condition: PermissionLib.NO_CONDITION, + permissionId: MainVotingPlugin(mainVotingPluginImplementationAddr) + .UPDATE_ADDRESSES_PERMISSION_ID() + }); + + // The member access plugin needs to execute on the DAO + permissions[3] = PermissionLib.MultiTargetPermission({ + operation: PermissionLib.Operation.GrantWithCondition, + where: _dao, + who: _memberAccessPlugin, + condition: _memberAccessExecuteCondition, + permissionId: DAO(payable(_dao)).EXECUTE_PERMISSION_ID() + }); + // The DAO needs to be able to update the member access plugin settings + permissions[4] = PermissionLib.MultiTargetPermission({ + operation: PermissionLib.Operation.Grant, + where: _memberAccessPlugin, + who: _dao, + condition: PermissionLib.NO_CONDITION, + permissionId: TestMemberAccessPlugin(_memberAccessPlugin) + .UPDATE_MULTISIG_SETTINGS_PERMISSION_ID() + }); + + // The DAO doesn't need APPLY_UPDATE_PERMISSION_ID on the PSP + + // pluginUpgrader permissions + if (_pluginUpgrader != address(0x0)) { + // pluginUpgrader can make the DAO execute applyUpdate + // pluginUpgrader can make the DAO execute grant/revoke + address[] memory _targetPluginAddresses = new address[](2); + _targetPluginAddresses[0] = mainVotingPlugin; + _targetPluginAddresses[1] = _memberAccessPlugin; + OnlyPluginUpgraderCondition _onlyPluginUpgraderCondition = new OnlyPluginUpgraderCondition( + DAO(payable(_dao)), + PluginSetupProcessor(pluginSetupProcessor), + _targetPluginAddresses + ); + permissions[5] = PermissionLib.MultiTargetPermission({ + operation: PermissionLib.Operation.GrantWithCondition, + where: _dao, + who: _pluginUpgrader, + condition: address(_onlyPluginUpgraderCondition), + permissionId: DAO(payable(_dao)).EXECUTE_PERMISSION_ID() + }); + } + + preparedSetupData.permissions = permissions; + preparedSetupData.helpers = new address[](1); + preparedSetupData.helpers[0] = _memberAccessPlugin; + } + + /// @inheritdoc IPluginSetup + function prepareUninstallation( + address _dao, + SetupPayload calldata _payload + ) external view returns (PermissionLib.MultiTargetPermission[] memory permissionChanges) { + if (_payload.currentHelpers.length != 1) { + revert InvalidHelpers(_payload.currentHelpers.length); + } + + // Decode incoming params + address _pluginUpgrader = decodeUninstallationParams(_payload.data); + address _memberAccessPlugin = _payload.currentHelpers[0]; + + permissionChanges = new PermissionLib.MultiTargetPermission[]( + _pluginUpgrader == address(0x0) ? 5 : 6 + ); + + // Main voting plugin permissions + + // The plugin can no longer execute on the DAO + permissionChanges[0] = PermissionLib.MultiTargetPermission({ + operation: PermissionLib.Operation.Revoke, + where: _dao, + who: _payload.plugin, + condition: address(0), + permissionId: DAO(payable(_dao)).EXECUTE_PERMISSION_ID() + }); + // The DAO can no longer update the plugin settings + permissionChanges[1] = PermissionLib.MultiTargetPermission({ + operation: PermissionLib.Operation.Revoke, + where: _payload.plugin, + who: _dao, + condition: address(0), + permissionId: MainVotingPlugin(mainVotingPluginImplementationAddr) + .UPDATE_VOTING_SETTINGS_PERMISSION_ID() + }); + // The DAO can no longer manage the list of addresses + permissionChanges[2] = PermissionLib.MultiTargetPermission({ + operation: PermissionLib.Operation.Revoke, + where: _payload.plugin, + who: _dao, + condition: address(0), + permissionId: MainVotingPlugin(mainVotingPluginImplementationAddr) + .UPDATE_ADDRESSES_PERMISSION_ID() + }); + + // Member access plugin permissions + + // The plugin can no longer execute on the DAO + permissionChanges[3] = PermissionLib.MultiTargetPermission({ + operation: PermissionLib.Operation.Revoke, + where: _dao, + who: _memberAccessPlugin, + condition: address(0), + permissionId: DAO(payable(_dao)).EXECUTE_PERMISSION_ID() + }); + // The DAO can no longer update the plugin settings + permissionChanges[4] = PermissionLib.MultiTargetPermission({ + operation: PermissionLib.Operation.Revoke, + where: _memberAccessPlugin, + who: _dao, + condition: address(0), + permissionId: TestMemberAccessPlugin(memberAccessPluginImplementation()) + .UPDATE_MULTISIG_SETTINGS_PERMISSION_ID() + }); + + if (_pluginUpgrader != address(0x0)) { + // pluginUpgrader can no longer make the DAO execute applyUpdate + // pluginUpgrader can no longer make the DAO execute grant/revoke + permissionChanges[5] = PermissionLib.MultiTargetPermission({ + operation: PermissionLib.Operation.Revoke, + where: _dao, + who: _pluginUpgrader, + condition: address(0), + permissionId: DAO(payable(_dao)).EXECUTE_PERMISSION_ID() + }); + } + } + + /// @inheritdoc IPluginSetup + function implementation() external view virtual returns (address) { + return mainVotingPluginImplementationAddr; + } + + /// @notice Returns the address of the MemberAccessPlugin implementation + function memberAccessPluginImplementation() public view returns (address) { + return memberAccessPluginImplementationAddr; + } + + /// @notice Encodes the given installation parameters into a byte array + function encodeInstallationParams( + MajorityVotingBase.VotingSettings calldata _votingSettings, + address[] calldata _initialEditors, + uint64 _memberAccessProposalDuration, + address _pluginUpgrader + ) public pure returns (bytes memory) { + return + abi.encode( + _votingSettings, + _initialEditors, + _memberAccessProposalDuration, + _pluginUpgrader + ); + } + + /// @notice Decodes the given byte array into the original installation parameters + function decodeInstallationParams( + bytes memory _data + ) + public + pure + returns ( + MajorityVotingBase.VotingSettings memory votingSettings, + address[] memory initialEditors, + uint64 memberAccessProposalDuration, + address pluginUpgrader + ) + { + (votingSettings, initialEditors, memberAccessProposalDuration, pluginUpgrader) = abi.decode( + _data, + (MajorityVotingBase.VotingSettings, address[], uint64, address) + ); + } + + /// @notice Encodes the given uninstallation parameters into a byte array + function encodeUninstallationParams( + address _pluginUpgrader + ) public pure returns (bytes memory) { + return abi.encode(_pluginUpgrader); + } + + /// @notice Decodes the given byte array into the original uninstallation parameters + function decodeUninstallationParams( + bytes memory _data + ) public pure returns (address pluginUpgrader) { + (pluginUpgrader) = abi.decode(_data, (address)); + } +} diff --git a/packages/contracts/src/test/TestMemberAccessPlugin.sol b/packages/contracts/src/test/TestMemberAccessPlugin.sol new file mode 100644 index 0000000..8eb3da4 --- /dev/null +++ b/packages/contracts/src/test/TestMemberAccessPlugin.sol @@ -0,0 +1,26 @@ +// SPDX-License-Identifier: AGPL-3.0-or-later + +pragma solidity ^0.8.8; + +import {IDAO} from "@aragon/osx/core/dao/IDAO.sol"; +import {MemberAccessPlugin} from "../MemberAccessPlugin.sol"; + +/// @notice A clone of the MemberAccessPlugin contract, just to test +contract TestMemberAccessPlugin is MemberAccessPlugin { + function createArbitraryProposal( + bytes calldata _metadata, + IDAO.Action[] memory _actions + ) public returns (uint256 proposalId) { + // Exposing createProposal for E2E testing + return createProposal(_metadata, _actions); + } + + function initialize( + IDAO _dao, + MultisigSettings calldata _multisigSettings + ) public override initializer { + __PluginUUPSUpgradeable_init(_dao); + + _updateMultisigSettings(_multisigSettings); + } +} diff --git a/packages/contracts/test/integration-testing/governance-plugins-setup.ts b/packages/contracts/test/integration-testing/governance-plugins-setup.ts index 6ed77c4..f140977 100644 --- a/packages/contracts/test/integration-testing/governance-plugins-setup.ts +++ b/packages/contracts/test/integration-testing/governance-plugins-setup.ts @@ -9,41 +9,22 @@ import { MemberAccessPlugin__factory, PluginRepo, } from '../../typechain'; -import { - ExecutedEvent, - UpgradedEvent, -} from '../../typechain/@aragon/osx/core/dao/DAO'; import {PluginSetupRefStruct} from '../../typechain/@aragon/osx/framework/dao/DAOFactory'; -import {UpdatePreparedEvent} from '../../typechain/@aragon/osx/framework/plugin/setup/PluginSetupProcessor'; -import { - findEvent, - findEventTopicLog, - getPluginRepoFactoryAddress, - hashHelpers, - osxContracts, -} from '../../utils/helpers'; -import {toHex} from '../../utils/ipfs'; +import {osxContracts} from '../../utils/helpers'; import {getPluginRepoInfo} from '../../utils/plugin-repo-info'; import {installPlugin, uninstallPlugin} from '../helpers/setup'; import {deployTestDao} from '../helpers/test-dao'; -import { - ADDRESS_ZERO, - UPGRADE_PLUGIN_PERMISSION_ID, - ZERO_BYTES32, -} from '../unit-testing/common'; -// import { getNamedTypesFromMetadata } from "../helpers/types"; +import {ADDRESS_ZERO} from '../unit-testing/common'; import { DAO, PluginRepo__factory, PluginSetupProcessor, PluginSetupProcessor__factory, - PluginRepoFactory__factory, - PluginRepoRegistry__factory, DAO__factory, } from '@aragon/osx-ethers'; import {SignerWithAddress} from '@nomiclabs/hardhat-ethers/signers'; import {expect} from 'chai'; -import {ethers, network} from 'hardhat'; +import {ethers} from 'hardhat'; const release = 1; const hardhatForkNetwork = process.env.NETWORK_NAME ?? 'mainnet'; @@ -170,297 +151,3 @@ describe('GovernancePluginsSetup processing', function () { }); }); }); - -describe('GovernancePluginsSetup with pluginUpgrader', () => { - let deployer: SignerWithAddress; - let pluginUpgrader: SignerWithAddress; - let pSetupBuild1: GovernancePluginsSetup; - - let psp: PluginSetupProcessor; - let dao: DAO; - let pluginRepo: PluginRepo; - let gpsFactory: GovernancePluginsSetup__factory; - - before(async () => { - [deployer, pluginUpgrader] = await ethers.getSigners(); - - // PSP - psp = PluginSetupProcessor__factory.connect( - osxContracts[hardhatForkNetwork]['PluginSetupProcessor'], - deployer - ); - - // Deploy DAO. - dao = await deployTestDao(deployer); - - // The DAO is root on itself - await dao.grant( - dao.address, - dao.address, - ethers.utils.id('ROOT_PERMISSION') - ); - - // Get the PluginRepoFactory address - const pluginRepoFactoryAddr: string = getPluginRepoFactoryAddress( - network.name - ); - - const pluginRepoFactory = PluginRepoFactory__factory.connect( - pluginRepoFactoryAddr, - deployer - ); - - // Create a new PluginRepo - let tx = await pluginRepoFactory.createPluginRepo( - 'testing-governance-plugin', - deployer.address - ); - const eventLog = await findEventTopicLog( - tx, - PluginRepoRegistry__factory.createInterface(), - 'PluginRepoRegistered' - ); - if (!eventLog) { - throw new Error('Failed to get PluginRepoRegistered event log'); - } - - pluginRepo = PluginRepo__factory.connect( - eventLog.args.pluginRepo, - deployer - ); - - // Deploy PluginSetup build 1 - gpsFactory = new GovernancePluginsSetup__factory().connect(deployer); - pSetupBuild1 = await gpsFactory.deploy(psp.address); - - // Publish build 1 - tx = await pluginRepo.createVersion( - 1, - pSetupBuild1.address, - toHex('build'), - toHex('release') - ); - }); - - it('Allows pluginUpgrader to execute psp.applyUpdate()', async () => { - const pluginSetupRef1: PluginSetupRefStruct = { - versionTag: { - release, - build: 1, - }, - pluginSetupRepo: pluginRepo.address, - }; - - // Temporary permissions for installing - await dao.grant( - dao.address, - psp.address, - ethers.utils.id('ROOT_PERMISSION') - ); - await dao.grant( - psp.address, - deployer.address, - ethers.utils.id('APPLY_INSTALLATION_PERMISSION') - ); - - // Install build 1 - const data1 = await pSetupBuild1.encodeInstallationParams( - pluginSettings, - [deployer.address], - minMemberAccessProposalDuration, - pluginUpgrader.address - ); - const installation1 = await installPlugin(psp, dao, pluginSetupRef1, data1); - - // Drop temp permissions - await dao.revoke( - dao.address, - psp.address, - ethers.utils.id('ROOT_PERMISSION') - ); - await dao.revoke( - psp.address, - deployer.address, - ethers.utils.id('APPLY_INSTALLATION_PERMISSION') - ); - - // Deployed plugin and helper - const mainVotingPlugin = MainVotingPlugin__factory.connect( - installation1.preparedEvent.args.plugin, - deployer - ); - const memberAccessPlugin = MemberAccessPlugin__factory.connect( - installation1.preparedEvent.args.preparedSetupData.helpers[0], - deployer - ); - - // Check implementations build 1 - expect(await mainVotingPlugin.implementation()).to.be.eq( - await pSetupBuild1.implementation() - ); - expect(await memberAccessPlugin.implementation()).to.be.eq( - await pSetupBuild1.memberAccessPluginImplementation() - ); - - // Deploy PluginSetup build 2 (new instance, disregarding the lack of changes) - const pSetupBuild2 = await gpsFactory.deploy(psp.address); - - // Check - expect(await pSetupBuild1.implementation()).to.not.be.eq( - await pSetupBuild2.implementation(), - 'Builds 1-2 implementation should differ' - ); - - // Publish build 2 - let tx = await pluginRepo.createVersion( - 1, - pSetupBuild2.address, - toHex('build'), - toHex('release') - ); - await tx.wait(); - - // Upgrade to build 2 - tx = await psp.prepareUpdate(dao.address, { - currentVersionTag: { - release: release, - build: 1, - }, - newVersionTag: { - release: release, - build: 2, - }, - pluginSetupRepo: pluginRepo.address, - setupPayload: { - currentHelpers: [memberAccessPlugin.address], - data: '0x', - plugin: mainVotingPlugin.address, - }, - }); - const preparedEvent = await findEvent( - tx, - 'UpdatePrepared' - ); - if (!preparedEvent) { - throw new Error('Failed to get UpdatePrepared event'); - } - - // Should not allow to execute other than the expected 3 actions - { - await expect( - dao.execute(toHex('01234123412341234123412341234123'), [], 0) - ).to.be.reverted; - await expect( - dao - .connect(pluginUpgrader) - .execute(toHex('01234123412341234123412341234123'), [], 0) - ).to.be.reverted; - await expect( - dao - .connect(pluginUpgrader) - .execute( - toHex('01234123412341234123412341234123'), - [{to: dao.address, value: 0, data: '0x'}], - 0 - ) - ).to.be.reverted; - await expect( - dao.connect(pluginUpgrader).execute( - toHex('01234123412341234123412341234123'), - [ - { - to: mainVotingPlugin.address, - value: 0, - data: MainVotingPlugin__factory.createInterface().encodeFunctionData( - 'addAddresses', - [[pluginUpgrader.address]] - ), - }, - ], - 0 - ) - ).to.be.reverted; - } - - // Params - const applyUpdateParams: PluginSetupProcessor.ApplyUpdateParamsStruct = { - plugin: mainVotingPlugin.address, - pluginSetupRef: { - pluginSetupRepo: pluginRepo.address, - versionTag: { - release, - build: 2, - }, - }, - initData: preparedEvent.args.initData, - permissions: preparedEvent.args.preparedSetupData.permissions, - helpersHash: hashHelpers(preparedEvent.args.preparedSetupData.helpers), - }; - - // Execute grant + applyUpdate + revoke - tx = await dao.connect(pluginUpgrader).execute( - ZERO_BYTES32, - [ - // Grant permission to the PSP - { - to: dao.address, - value: 0, - data: daoInterface.encodeFunctionData('grant', [ - mainVotingPlugin.address, - psp.address, - UPGRADE_PLUGIN_PERMISSION_ID, - ]), - }, - // Execute psp.applyUpdate() from the DAO to the plugin - { - to: psp.address, - value: 0, - data: pspInterface.encodeFunctionData('applyUpdate', [ - dao.address, - applyUpdateParams, - ]), - }, - // Revoke permission to the PSP - { - to: dao.address, - value: 0, - data: daoInterface.encodeFunctionData('revoke', [ - mainVotingPlugin.address, - psp.address, - UPGRADE_PLUGIN_PERMISSION_ID, - ]), - }, - ], - 0 - ); - - const receipt = await tx.wait(); - const executedEvent: ExecutedEvent | undefined = ( - receipt.events || [] - ).find(event => event.event === 'Executed') as any; - if (!executedEvent) { - throw new Error('Failed to get Executed event'); - } - - const upgradedEvent = await findEvent(tx, 'Upgraded'); - if (!upgradedEvent) { - throw new Error('Failed to get Upgraded event'); - } - - // Check implementations build 2 - expect(await mainVotingPlugin.implementation()).to.not.be.eq( - await pSetupBuild1.implementation(), - "Implementation shouldn't be build 1" - ); - - expect(await mainVotingPlugin.implementation()).to.be.eq( - await pSetupBuild2.implementation(), - 'Implementation should be build 2' - ); - - expect(await memberAccessPlugin.implementation()).to.be.eq( - await pSetupBuild1.memberAccessPluginImplementation(), - 'Implementation reamain as build 1' - ); - }); -}); diff --git a/packages/contracts/test/integration-testing/member-access-condition.ts b/packages/contracts/test/integration-testing/member-access-condition.ts new file mode 100644 index 0000000..240c470 --- /dev/null +++ b/packages/contracts/test/integration-testing/member-access-condition.ts @@ -0,0 +1,407 @@ +import { + TestGovernancePluginsSetup, + TestGovernancePluginsSetup__factory, + MainVotingPlugin, + MainVotingPlugin__factory, + MajorityVotingBase, + TestMemberAccessPlugin, + TestMemberAccessPlugin__factory, + PluginRepo, +} from '../../typechain'; +import {PluginSetupRefStruct} from '../../typechain/@aragon/osx/framework/dao/DAOFactory'; +import { + findEventTopicLog, + getPluginRepoFactoryAddress, + osxContracts, +} from '../../utils/helpers'; +import {toHex} from '../../utils/ipfs'; +import {installPlugin} from '../helpers/setup'; +import {deployTestDao} from '../helpers/test-dao'; +import { + EXECUTE_PERMISSION_ID, + MEMBER_PERMISSION_ID, + ROOT_PERMISSION_ID, + UPGRADE_PLUGIN_PERMISSION_ID, + ONE_BYTES32, +} from '../unit-testing/common'; +import { + DAO, + PluginRepo__factory, + PluginSetupProcessor, + PluginSetupProcessor__factory, + PluginRepoFactory__factory, + PluginRepoRegistry__factory, + DAO__factory, + IDAO, +} from '@aragon/osx-ethers'; +import {SignerWithAddress} from '@nomiclabs/hardhat-ethers/signers'; +import {expect} from 'chai'; +import {ethers, network} from 'hardhat'; + +const release = 1; +const hardhatForkNetwork = process.env.NETWORK_NAME ?? 'mainnet'; +const pluginSettings: MajorityVotingBase.VotingSettingsStruct = { + minDuration: 60 * 60 * 24, + minParticipation: 1, + supportThreshold: 1, + minProposerVotingPower: 0, + votingMode: 0, +}; +const minMemberAccessProposalDuration = 60 * 60 * 24; +const daoInterface = DAO__factory.createInterface(); +const pspInterface = PluginSetupProcessor__factory.createInterface(); + +describe('Member Access Condition E2E', () => { + let deployer: SignerWithAddress; + let pluginUpgrader: SignerWithAddress; + let alice: SignerWithAddress; + let bob: SignerWithAddress; + let carol: SignerWithAddress; + + let psp: PluginSetupProcessor; + let dao: DAO; + let pluginRepo: PluginRepo; + + let pluginSetupRef: PluginSetupRefStruct; + let pluginSetup: TestGovernancePluginsSetup; + let gpsFactory: TestGovernancePluginsSetup__factory; + let mainVotingPlugin: MainVotingPlugin; + let memberAccessPlugin: TestMemberAccessPlugin; + + before(async () => { + [deployer, pluginUpgrader, alice, bob, carol] = await ethers.getSigners(); + + // Get the PluginRepoFactory address + const pluginRepoFactoryAddr: string = getPluginRepoFactoryAddress( + network.name + ); + const pluginRepoFactory = PluginRepoFactory__factory.connect( + pluginRepoFactoryAddr, + deployer + ); + + // PSP + psp = PluginSetupProcessor__factory.connect( + osxContracts[hardhatForkNetwork]['PluginSetupProcessor'], + deployer + ); + + // Create a new PluginRepo + let tx = await pluginRepoFactory.createPluginRepo( + 'testing-governance-plugin-condition', + deployer.address + ); + const eventLog = await findEventTopicLog( + tx, + PluginRepoRegistry__factory.createInterface(), + 'PluginRepoRegistered' + ); + if (!eventLog) { + throw new Error('Failed to get PluginRepoRegistered event log'); + } + + pluginRepo = PluginRepo__factory.connect( + eventLog.args.pluginRepo, + deployer + ); + + // Deploy PluginSetup build 1 + gpsFactory = new TestGovernancePluginsSetup__factory().connect(deployer); + pluginSetup = await gpsFactory.deploy(psp.address); + + // Publish build 1 + tx = await pluginRepo.createVersion( + 1, + pluginSetup.address, + toHex('build'), + toHex('release') + ); + + // Deploy setups + pluginSetupRef = { + versionTag: { + release, + build: 1, + }, + pluginSetupRepo: pluginRepo.address, + }; + }); + + beforeEach(async () => { + // Deploy DAO + dao = await deployTestDao(deployer); + + // The DAO is root on itself + await dao.grant( + dao.address, + dao.address, + ethers.utils.id('ROOT_PERMISSION') + ); + await dao.grant( + dao.address, + psp.address, + ethers.utils.id('ROOT_PERMISSION') + ); + await dao.grant( + psp.address, + deployer.address, + ethers.utils.id('APPLY_INSTALLATION_PERMISSION') + ); + + // Install plugin + const data = await pluginSetup.encodeInstallationParams( + pluginSettings, + [deployer.address], + minMemberAccessProposalDuration, + pluginUpgrader.address + ); + const installation = await installPlugin(psp, dao, pluginSetupRef, data); + + mainVotingPlugin = MainVotingPlugin__factory.connect( + installation.preparedEvent.args.plugin, + deployer + ); + memberAccessPlugin = TestMemberAccessPlugin__factory.connect( + installation.preparedEvent.args.preparedSetupData.helpers[0], + deployer + ); + }); + + it('Executing a proposal to add membership works', async () => { + expect( + await dao.isGranted( + mainVotingPlugin.address, // where + alice.address, // who + MEMBER_PERMISSION_ID, // permission + '0x' + ) + ).to.eq(false); + + await expect(memberAccessPlugin.proposeNewMember('0x', alice.address)).to + .not.be.reverted; + + expect( + await dao.isGranted( + mainVotingPlugin.address, // where + alice.address, // who + MEMBER_PERMISSION_ID, // permission + '0x' + ) + ).to.eq(true); + + // Valid grant + const actions: IDAO.ActionStruct[] = [ + { + to: dao.address, + value: 0, + data: daoInterface.encodeFunctionData('grant', [ + mainVotingPlugin.address, + bob.address, + MEMBER_PERMISSION_ID, + ]), + }, + ]; + + // Via direct create proposal + expect( + await dao.isGranted( + mainVotingPlugin.address, // where + bob.address, // who + MEMBER_PERMISSION_ID, // permission + '0x' + ) + ).to.eq(false); + + await expect(memberAccessPlugin.createArbitraryProposal('0x', actions)).to + .not.be.reverted; + + expect( + await dao.isGranted( + mainVotingPlugin.address, // where + bob.address, // who + MEMBER_PERMISSION_ID, // permission + '0x' + ) + ).to.eq(true); + }); + + it('Executing a proposal to remove membership works', async () => { + await expect(memberAccessPlugin.proposeNewMember('0x', alice.address)).to + .not.be.reverted; + await expect(memberAccessPlugin.proposeRemoveMember('0x', alice.address)).to + .not.be.reverted; + expect( + await dao.isGranted( + mainVotingPlugin.address, // where + alice.address, // who + MEMBER_PERMISSION_ID, // permission + '0x' + ) + ).to.eq(false); + + // Valid revoke + const grantAction = { + to: dao.address, + value: 0, + data: daoInterface.encodeFunctionData('grant', [ + mainVotingPlugin.address, + bob.address, + MEMBER_PERMISSION_ID, + ]), + }; + const revokeAction = { + to: dao.address, + value: 0, + data: daoInterface.encodeFunctionData('revoke', [ + mainVotingPlugin.address, + bob.address, + MEMBER_PERMISSION_ID, + ]), + }; + + // Via direct create proposal + await expect( + memberAccessPlugin.createArbitraryProposal('0x', [grantAction]) + ).to.not.be.reverted; + await expect( + memberAccessPlugin.createArbitraryProposal('0x', [revokeAction]) + ).to.not.be.reverted; + + expect( + await dao.isGranted( + mainVotingPlugin.address, // where + bob.address, // who + MEMBER_PERMISSION_ID, // permission + '0x' + ) + ).to.eq(false); + }); + + it('Executing a proposal to do something else reverts', async () => { + const validActions = [ + { + to: dao.address, + value: 0, + data: daoInterface.encodeFunctionData('grant', [ + mainVotingPlugin.address, + bob.address, + MEMBER_PERMISSION_ID, + ]), + }, + { + to: dao.address, + value: 0, + data: daoInterface.encodeFunctionData('revoke', [ + mainVotingPlugin.address, + bob.address, + MEMBER_PERMISSION_ID, + ]), + }, + ]; + const invalidActions = [ + { + to: dao.address, + value: 0, + data: daoInterface.encodeFunctionData('grant', [ + mainVotingPlugin.address, + bob.address, + EXECUTE_PERMISSION_ID, + ]), + }, + { + to: dao.address, + value: 0, + data: daoInterface.encodeFunctionData('grant', [ + dao.address, + alice.address, + EXECUTE_PERMISSION_ID, + ]), + }, + { + to: dao.address, + value: 0, + data: daoInterface.encodeFunctionData('grant', [ + dao.address, + alice.address, + ROOT_PERMISSION_ID, + ]), + }, + { + to: dao.address, + value: 0, + data: daoInterface.encodeFunctionData('grant', [ + psp.address, + alice.address, + ethers.utils.id('APPLY_INSTALLATION_PERMISSION'), + ]), + }, + { + to: dao.address, + value: 0, + data: daoInterface.encodeFunctionData('grant', [ + psp.address, + alice.address, + ethers.utils.id('APPLY_UPDATE_PERMISSION'), + ]), + }, + { + to: dao.address, + value: 0, + data: daoInterface.encodeFunctionData('grant', [ + psp.address, + alice.address, + ethers.utils.id('APPLY_UNINSTALLATION_PERMISSION'), + ]), + }, + { + to: dao.address, + value: 0, + data: daoInterface.encodeFunctionData('grant', [ + mainVotingPlugin.address, + alice.address, + UPGRADE_PLUGIN_PERMISSION_ID, + ]), + }, + { + to: dao.address, + value: 0, + data: daoInterface.encodeFunctionData('revoke', [ + mainVotingPlugin.address, + bob.address, + ROOT_PERMISSION_ID, + ]), + }, + { + to: dao.address, + value: 0, + data: daoInterface.encodeFunctionData('execute', [ + ONE_BYTES32, + validActions, + 0, + ]), + }, + { + to: dao.address, + value: 0, + data: daoInterface.encodeFunctionData('setMetadata', ['0x']), + }, + { + to: dao.address, + value: 0, + data: daoInterface.encodeFunctionData('setDaoURI', ['0x']), + }, + ]; + + // Should work + for (const action of validActions) { + await expect(memberAccessPlugin.createArbitraryProposal('0x', [action])) + .to.not.be.reverted; + } + + // Should fail + for (const action of invalidActions) { + await expect(memberAccessPlugin.createArbitraryProposal('0x', [action])) + .to.be.reverted; + } + }); +}); diff --git a/packages/contracts/test/integration-testing/plugin-upgrader.ts b/packages/contracts/test/integration-testing/plugin-upgrader.ts new file mode 100644 index 0000000..ee9cf65 --- /dev/null +++ b/packages/contracts/test/integration-testing/plugin-upgrader.ts @@ -0,0 +1,647 @@ +import { + GovernancePluginsSetup, + GovernancePluginsSetup__factory, + MainVotingPlugin__factory, + MajorityVotingBase, + MemberAccessPlugin__factory, + PluginRepo, + SpacePluginSetup, + SpacePluginSetup__factory, + SpacePlugin__factory, +} from '../../typechain'; +import { + ExecutedEvent, + UpgradedEvent, +} from '../../typechain/@aragon/osx/core/dao/DAO'; +import {PluginSetupRefStruct} from '../../typechain/@aragon/osx/framework/dao/DAOFactory'; +import {UpdatePreparedEvent} from '../../typechain/@aragon/osx/framework/plugin/setup/PluginSetupProcessor'; +import { + findEvent, + findEventTopicLog, + getPluginRepoFactoryAddress, + hashHelpers, + osxContracts, +} from '../../utils/helpers'; +import {toHex} from '../../utils/ipfs'; +import {installPlugin} from '../helpers/setup'; +import {deployTestDao} from '../helpers/test-dao'; +import { + ADDRESS_ONE, + ADDRESS_ZERO, + UPGRADE_PLUGIN_PERMISSION_ID, + ZERO_BYTES32, +} from '../unit-testing/common'; +// import { getNamedTypesFromMetadata } from "../helpers/types"; +import { + DAO, + PluginRepo__factory, + PluginSetupProcessor, + PluginSetupProcessor__factory, + PluginRepoFactory__factory, + PluginRepoRegistry__factory, + DAO__factory, +} from '@aragon/osx-ethers'; +import {SignerWithAddress} from '@nomiclabs/hardhat-ethers/signers'; +import {expect} from 'chai'; +import {ethers, network} from 'hardhat'; + +const release = 1; +const hardhatForkNetwork = process.env.NETWORK_NAME ?? 'mainnet'; +const pluginSettings: MajorityVotingBase.VotingSettingsStruct = { + minDuration: 60 * 60 * 24, + minParticipation: 1, + supportThreshold: 1, + minProposerVotingPower: 0, + votingMode: 0, +}; +const minMemberAccessProposalDuration = 60 * 60 * 24; +const daoInterface = DAO__factory.createInterface(); +const pspInterface = PluginSetupProcessor__factory.createInterface(); + +describe('Plugin upgrader', () => { + let deployer: SignerWithAddress; + let pluginUpgrader: SignerWithAddress; + + let psp: PluginSetupProcessor; + let dao: DAO; + let pluginRepo: PluginRepo; + + describe('GovernancePluginsSetup', () => { + let pSetupBuild1: GovernancePluginsSetup; + let gpsFactory: GovernancePluginsSetup__factory; + + before(async () => { + [deployer, pluginUpgrader] = await ethers.getSigners(); + + // PSP + psp = PluginSetupProcessor__factory.connect( + osxContracts[hardhatForkNetwork]['PluginSetupProcessor'], + deployer + ); + + // Deploy DAO. + dao = await deployTestDao(deployer); + + // The DAO is root on itself + await dao.grant( + dao.address, + dao.address, + ethers.utils.id('ROOT_PERMISSION') + ); + + // Get the PluginRepoFactory address + const pluginRepoFactoryAddr: string = getPluginRepoFactoryAddress( + network.name + ); + + const pluginRepoFactory = PluginRepoFactory__factory.connect( + pluginRepoFactoryAddr, + deployer + ); + + // Create a new PluginRepo + let tx = await pluginRepoFactory.createPluginRepo( + 'testing-governance-plugin', + deployer.address + ); + const eventLog = await findEventTopicLog( + tx, + PluginRepoRegistry__factory.createInterface(), + 'PluginRepoRegistered' + ); + if (!eventLog) { + throw new Error('Failed to get PluginRepoRegistered event log'); + } + + pluginRepo = PluginRepo__factory.connect( + eventLog.args.pluginRepo, + deployer + ); + + // Deploy PluginSetup build 1 + gpsFactory = new GovernancePluginsSetup__factory().connect(deployer); + pSetupBuild1 = await gpsFactory.deploy(psp.address); + + // Publish build 1 + tx = await pluginRepo.createVersion( + 1, + pSetupBuild1.address, + toHex('build'), + toHex('release') + ); + }); + + it('Allows pluginUpgrader to execute psp.applyUpdate()', async () => { + const pluginSetupRef1: PluginSetupRefStruct = { + versionTag: { + release, + build: 1, + }, + pluginSetupRepo: pluginRepo.address, + }; + + // Temporary permissions for installing + await dao.grant( + dao.address, + psp.address, + ethers.utils.id('ROOT_PERMISSION') + ); + await dao.grant( + psp.address, + deployer.address, + ethers.utils.id('APPLY_INSTALLATION_PERMISSION') + ); + + // Install build 1 + const data1 = await pSetupBuild1.encodeInstallationParams( + pluginSettings, + [deployer.address], + minMemberAccessProposalDuration, + pluginUpgrader.address + ); + const installation1 = await installPlugin( + psp, + dao, + pluginSetupRef1, + data1 + ); + + // Drop temp permissions + await dao.revoke( + dao.address, + psp.address, + ethers.utils.id('ROOT_PERMISSION') + ); + await dao.revoke( + psp.address, + deployer.address, + ethers.utils.id('APPLY_INSTALLATION_PERMISSION') + ); + + // Deployed plugin and helper + const mainVotingPlugin = MainVotingPlugin__factory.connect( + installation1.preparedEvent.args.plugin, + deployer + ); + const memberAccessPlugin = MemberAccessPlugin__factory.connect( + installation1.preparedEvent.args.preparedSetupData.helpers[0], + deployer + ); + + // Check implementations build 1 + expect(await mainVotingPlugin.implementation()).to.be.eq( + await pSetupBuild1.implementation() + ); + expect(await memberAccessPlugin.implementation()).to.be.eq( + await pSetupBuild1.memberAccessPluginImplementation() + ); + + // Deploy PluginSetup build 2 (new instance, disregarding the lack of changes) + const pSetupBuild2 = await gpsFactory.deploy(psp.address); + + // Check + expect(await pSetupBuild1.implementation()).to.not.be.eq( + await pSetupBuild2.implementation(), + 'Builds 1-2 implementation should differ' + ); + + // Publish build 2 + let tx = await pluginRepo.createVersion( + 1, + pSetupBuild2.address, + toHex('build'), + toHex('release') + ); + await tx.wait(); + + // Upgrade to build 2 + tx = await psp.prepareUpdate(dao.address, { + currentVersionTag: { + release: release, + build: 1, + }, + newVersionTag: { + release: release, + build: 2, + }, + pluginSetupRepo: pluginRepo.address, + setupPayload: { + currentHelpers: [memberAccessPlugin.address], + data: '0x', + plugin: mainVotingPlugin.address, + }, + }); + const preparedEvent = await findEvent( + tx, + 'UpdatePrepared' + ); + if (!preparedEvent) { + throw new Error('Failed to get UpdatePrepared event'); + } + + // Should not allow to execute other than the expected 3 actions + { + await expect( + dao.execute(toHex('01234123412341234123412341234123'), [], 0) + ).to.be.reverted; + await expect( + dao + .connect(pluginUpgrader) + .execute(toHex('01234123412341234123412341234123'), [], 0) + ).to.be.reverted; + await expect( + dao + .connect(pluginUpgrader) + .execute( + toHex('01234123412341234123412341234123'), + [{to: dao.address, value: 0, data: '0x'}], + 0 + ) + ).to.be.reverted; + await expect( + dao.connect(pluginUpgrader).execute( + toHex('01234123412341234123412341234123'), + [ + { + to: mainVotingPlugin.address, + value: 0, + data: MainVotingPlugin__factory.createInterface().encodeFunctionData( + 'addAddresses', + [[pluginUpgrader.address]] + ), + }, + ], + 0 + ) + ).to.be.reverted; + } + + // Params + const applyUpdateParams: PluginSetupProcessor.ApplyUpdateParamsStruct = { + plugin: mainVotingPlugin.address, + pluginSetupRef: { + pluginSetupRepo: pluginRepo.address, + versionTag: { + release, + build: 2, + }, + }, + initData: preparedEvent.args.initData, + permissions: preparedEvent.args.preparedSetupData.permissions, + helpersHash: hashHelpers(preparedEvent.args.preparedSetupData.helpers), + }; + + // Execute grant + applyUpdate + revoke + tx = await dao.connect(pluginUpgrader).execute( + ZERO_BYTES32, + [ + // Grant permission to the PSP + { + to: dao.address, + value: 0, + data: daoInterface.encodeFunctionData('grant', [ + mainVotingPlugin.address, + psp.address, + UPGRADE_PLUGIN_PERMISSION_ID, + ]), + }, + // Execute psp.applyUpdate() from the DAO to the plugin + { + to: psp.address, + value: 0, + data: pspInterface.encodeFunctionData('applyUpdate', [ + dao.address, + applyUpdateParams, + ]), + }, + // Revoke permission to the PSP + { + to: dao.address, + value: 0, + data: daoInterface.encodeFunctionData('revoke', [ + mainVotingPlugin.address, + psp.address, + UPGRADE_PLUGIN_PERMISSION_ID, + ]), + }, + ], + 0 + ); + + const receipt = await tx.wait(); + const executedEvent: ExecutedEvent | undefined = ( + receipt.events || [] + ).find(event => event.event === 'Executed') as any; + if (!executedEvent) { + throw new Error('Failed to get Executed event'); + } + + const upgradedEvent = await findEvent(tx, 'Upgraded'); + if (!upgradedEvent) { + throw new Error('Failed to get Upgraded event'); + } + + // Check implementations build 2 + expect(await mainVotingPlugin.implementation()).to.not.be.eq( + await pSetupBuild1.implementation(), + "Implementation shouldn't be build 1" + ); + + expect(await mainVotingPlugin.implementation()).to.be.eq( + await pSetupBuild2.implementation(), + 'Implementation should be build 2' + ); + + expect(await memberAccessPlugin.implementation()).to.be.eq( + await pSetupBuild1.memberAccessPluginImplementation(), + 'Implementation reamain as build 1' + ); + }); + }); + + describe('SpacePluginSetup', () => { + let deployer: SignerWithAddress; + let pluginUpgrader: SignerWithAddress; + let pSetupBuild1: SpacePluginSetup; + + let psp: PluginSetupProcessor; + let dao: DAO; + let pluginRepo: PluginRepo; + let spFactory: SpacePluginSetup__factory; + + before(async () => { + [deployer, pluginUpgrader] = await ethers.getSigners(); + + // PSP + psp = PluginSetupProcessor__factory.connect( + osxContracts[hardhatForkNetwork]['PluginSetupProcessor'], + deployer + ); + + // Deploy DAO. + dao = await deployTestDao(deployer); + + // The DAO is root on itself + await dao.grant( + dao.address, + dao.address, + ethers.utils.id('ROOT_PERMISSION') + ); + + // Get the PluginRepoFactory address + const pluginRepoFactoryAddr: string = getPluginRepoFactoryAddress( + network.name + ); + + const pluginRepoFactory = PluginRepoFactory__factory.connect( + pluginRepoFactoryAddr, + deployer + ); + + // Create a new PluginRepo + let tx = await pluginRepoFactory.createPluginRepo( + 'testing-space-plugin', + deployer.address + ); + const eventLog = await findEventTopicLog( + tx, + PluginRepoRegistry__factory.createInterface(), + 'PluginRepoRegistered' + ); + if (!eventLog) { + throw new Error('Failed to get PluginRepoRegistered event log'); + } + + pluginRepo = PluginRepo__factory.connect( + eventLog.args.pluginRepo, + deployer + ); + + // Deploy PluginSetup build 1 + spFactory = new SpacePluginSetup__factory().connect(deployer); + pSetupBuild1 = await spFactory.deploy(psp.address); + + // Publish build 1 + tx = await pluginRepo.createVersion( + 1, + pSetupBuild1.address, + toHex('build'), + toHex('release') + ); + }); + + it('Allows pluginUpgrader to execute psp.applyUpdate()', async () => { + const pluginSetupRef1: PluginSetupRefStruct = { + versionTag: { + release, + build: 1, + }, + pluginSetupRepo: pluginRepo.address, + }; + + // Temporary permissions for installing + await dao.grant( + dao.address, + psp.address, + ethers.utils.id('ROOT_PERMISSION') + ); + await dao.grant( + psp.address, + deployer.address, + ethers.utils.id('APPLY_INSTALLATION_PERMISSION') + ); + + // Install build 1 + const data1 = await pSetupBuild1.encodeInstallationParams( + toHex('ipfs://1234'), + ADDRESS_ZERO, + pluginUpgrader.address + ); + const installation1 = await installPlugin( + psp, + dao, + pluginSetupRef1, + data1 + ); + + // Drop temp permissions + await dao.revoke( + dao.address, + psp.address, + ethers.utils.id('ROOT_PERMISSION') + ); + await dao.revoke( + psp.address, + deployer.address, + ethers.utils.id('APPLY_INSTALLATION_PERMISSION') + ); + + // Deployed plugin + const spacePlugin = SpacePlugin__factory.connect( + installation1.preparedEvent.args.plugin, + deployer + ); + + // Check implementations build 1 + expect(await spacePlugin.implementation()).to.be.eq( + await pSetupBuild1.implementation() + ); + + // Deploy PluginSetup build 2 (new instance, disregarding the lack of changes) + const pSetupBuild2 = await spFactory.deploy(psp.address); + + // Check + expect(await pSetupBuild1.implementation()).to.not.be.eq( + await pSetupBuild2.implementation(), + 'Builds 1-2 implementation should differ' + ); + + // Publish build 2 + let tx = await pluginRepo.createVersion( + 1, + pSetupBuild2.address, + toHex('build'), + toHex('release') + ); + await tx.wait(); + + // Upgrade to build 2 + tx = await psp.prepareUpdate(dao.address, { + currentVersionTag: { + release: release, + build: 1, + }, + newVersionTag: { + release: release, + build: 2, + }, + pluginSetupRepo: pluginRepo.address, + setupPayload: { + currentHelpers: [], + data: '0x', + plugin: spacePlugin.address, + }, + }); + const preparedEvent = await findEvent( + tx, + 'UpdatePrepared' + ); + if (!preparedEvent) { + throw new Error('Failed to get UpdatePrepared event'); + } + + // Should not allow to execute other than the expected 3 actions + { + await expect( + dao.execute(toHex('23412341234123412341234123412341'), [], 0) + ).to.be.reverted; + await expect( + dao + .connect(pluginUpgrader) + .execute(toHex('23412341234123412341234123412341'), [], 0) + ).to.be.reverted; + await expect( + dao + .connect(pluginUpgrader) + .execute( + toHex('23412341234123412341234123412341'), + [{to: dao.address, value: 0, data: '0x'}], + 0 + ) + ).to.be.reverted; + await expect( + dao.connect(pluginUpgrader).execute( + toHex('23412341234123412341234123412341'), + [ + { + to: spacePlugin.address, + value: 0, + data: SpacePlugin__factory.createInterface().encodeFunctionData( + 'removeSubspace', + [ADDRESS_ONE] + ), + }, + ], + 0 + ) + ).to.be.reverted; + } + + // Params + const applyUpdateParams: PluginSetupProcessor.ApplyUpdateParamsStruct = { + plugin: spacePlugin.address, + pluginSetupRef: { + pluginSetupRepo: pluginRepo.address, + versionTag: { + release, + build: 2, + }, + }, + initData: preparedEvent.args.initData, + permissions: preparedEvent.args.preparedSetupData.permissions, + helpersHash: hashHelpers(preparedEvent.args.preparedSetupData.helpers), + }; + + // Execute grant + applyUpdate + revoke + tx = await dao.connect(pluginUpgrader).execute( + ZERO_BYTES32, + [ + // Grant permission to the PSP + { + to: dao.address, + value: 0, + data: daoInterface.encodeFunctionData('grant', [ + spacePlugin.address, + psp.address, + UPGRADE_PLUGIN_PERMISSION_ID, + ]), + }, + // Execute psp.applyUpdate() from the DAO to the plugin + { + to: psp.address, + value: 0, + data: pspInterface.encodeFunctionData('applyUpdate', [ + dao.address, + applyUpdateParams, + ]), + }, + // Revoke permission to the PSP + { + to: dao.address, + value: 0, + data: daoInterface.encodeFunctionData('revoke', [ + spacePlugin.address, + psp.address, + UPGRADE_PLUGIN_PERMISSION_ID, + ]), + }, + ], + 0 + ); + + const receipt = await tx.wait(); + const executedEvent: ExecutedEvent | undefined = ( + receipt.events || [] + ).find(event => event.event === 'Executed') as any; + if (!executedEvent) { + throw new Error('Failed to get Executed event'); + } + + const upgradedEvent = await findEvent(tx, 'Upgraded'); + if (!upgradedEvent) { + throw new Error('Failed to get Upgraded event'); + } + + // Check implementations build 2 + expect(await spacePlugin.implementation()).to.not.be.eq( + await pSetupBuild1.implementation(), + "Implementation shouldn't be build 1" + ); + + expect(await spacePlugin.implementation()).to.be.eq( + await pSetupBuild2.implementation(), + 'Implementation should be build 2' + ); + }); + }); +}); diff --git a/packages/contracts/test/integration-testing/space-setup.ts b/packages/contracts/test/integration-testing/space-setup.ts index 87ee68f..75e3c9e 100644 --- a/packages/contracts/test/integration-testing/space-setup.ts +++ b/packages/contracts/test/integration-testing/space-setup.ts @@ -6,48 +6,24 @@ import { SpacePluginSetup, SpacePluginSetup__factory, } from '../../typechain'; -import { - ExecutedEvent, - UpgradedEvent, -} from '../../typechain/@aragon/osx/core/dao/DAO'; import {PluginSetupRefStruct} from '../../typechain/@aragon/osx/framework/dao/DAOFactory'; -import {UpdatePreparedEvent} from '../../typechain/@aragon/osx/framework/plugin/setup/PluginSetupProcessor'; -import { - findEvent, - findEventTopicLog, - getPluginRepoFactoryAddress, - hashHelpers, - osxContracts, -} from '../../utils/helpers'; +import {osxContracts} from '../../utils/helpers'; import {toHex} from '../../utils/ipfs'; import {getPluginRepoInfo} from '../../utils/plugin-repo-info'; import {installPlugin, uninstallPlugin} from '../helpers/setup'; import {deployTestDao} from '../helpers/test-dao'; -import { - ADDRESS_ONE, - ADDRESS_ZERO, - UPGRADE_PLUGIN_PERMISSION_ID, - ZERO_BYTES32, -} from '../unit-testing/common'; +import {ADDRESS_ZERO} from '../unit-testing/common'; // import { getNamedTypesFromMetadata } from "../helpers/types"; import { DAO, - DAO__factory, PluginRepo__factory, - PluginRepoFactory__factory, - PluginRepoRegistry__factory, PluginSetupProcessor, PluginSetupProcessor__factory, } from '@aragon/osx-ethers'; import {SignerWithAddress} from '@nomiclabs/hardhat-ethers/signers'; import {expect} from 'chai'; import {BigNumber} from 'ethers'; -import {ethers, network} from 'hardhat'; - -const release = 1; -const hardhatForkNetwork = process.env.NETWORK_NAME ?? 'mainnet'; -const daoInterface = DAO__factory.createInterface(); -const pspInterface = PluginSetupProcessor__factory.createInterface(); +import {ethers} from 'hardhat'; describe('SpacePluginSetup processing', function () { let deployer: SignerWithAddress; @@ -153,284 +129,3 @@ describe('SpacePluginSetup processing', function () { }); }); }); - -describe('SpacePluginSetup with pluginUpgrader', () => { - let deployer: SignerWithAddress; - let pluginUpgrader: SignerWithAddress; - let pSetupBuild1: SpacePluginSetup; - - let psp: PluginSetupProcessor; - let dao: DAO; - let pluginRepo: PluginRepo; - let spFactory: SpacePluginSetup__factory; - - before(async () => { - [deployer, pluginUpgrader] = await ethers.getSigners(); - - // PSP - psp = PluginSetupProcessor__factory.connect( - osxContracts[hardhatForkNetwork]['PluginSetupProcessor'], - deployer - ); - - // Deploy DAO. - dao = await deployTestDao(deployer); - - // The DAO is root on itself - await dao.grant( - dao.address, - dao.address, - ethers.utils.id('ROOT_PERMISSION') - ); - - // Get the PluginRepoFactory address - const pluginRepoFactoryAddr: string = getPluginRepoFactoryAddress( - network.name - ); - - const pluginRepoFactory = PluginRepoFactory__factory.connect( - pluginRepoFactoryAddr, - deployer - ); - - // Create a new PluginRepo - let tx = await pluginRepoFactory.createPluginRepo( - 'testing-space-plugin', - deployer.address - ); - const eventLog = await findEventTopicLog( - tx, - PluginRepoRegistry__factory.createInterface(), - 'PluginRepoRegistered' - ); - if (!eventLog) { - throw new Error('Failed to get PluginRepoRegistered event log'); - } - - pluginRepo = PluginRepo__factory.connect( - eventLog.args.pluginRepo, - deployer - ); - - // Deploy PluginSetup build 1 - spFactory = new SpacePluginSetup__factory().connect(deployer); - pSetupBuild1 = await spFactory.deploy(psp.address); - - // Publish build 1 - tx = await pluginRepo.createVersion( - 1, - pSetupBuild1.address, - toHex('build'), - toHex('release') - ); - }); - - it('Allows pluginUpgrader to execute psp.applyUpdate()', async () => { - const pluginSetupRef1: PluginSetupRefStruct = { - versionTag: { - release, - build: 1, - }, - pluginSetupRepo: pluginRepo.address, - }; - - // Temporary permissions for installing - await dao.grant( - dao.address, - psp.address, - ethers.utils.id('ROOT_PERMISSION') - ); - await dao.grant( - psp.address, - deployer.address, - ethers.utils.id('APPLY_INSTALLATION_PERMISSION') - ); - - // Install build 1 - const data1 = await pSetupBuild1.encodeInstallationParams( - toHex('ipfs://1234'), - ADDRESS_ZERO, - pluginUpgrader.address - ); - const installation1 = await installPlugin(psp, dao, pluginSetupRef1, data1); - - // Drop temp permissions - await dao.revoke( - dao.address, - psp.address, - ethers.utils.id('ROOT_PERMISSION') - ); - await dao.revoke( - psp.address, - deployer.address, - ethers.utils.id('APPLY_INSTALLATION_PERMISSION') - ); - - // Deployed plugin - const spacePlugin = SpacePlugin__factory.connect( - installation1.preparedEvent.args.plugin, - deployer - ); - - // Check implementations build 1 - expect(await spacePlugin.implementation()).to.be.eq( - await pSetupBuild1.implementation() - ); - - // Deploy PluginSetup build 2 (new instance, disregarding the lack of changes) - const pSetupBuild2 = await spFactory.deploy(psp.address); - - // Check - expect(await pSetupBuild1.implementation()).to.not.be.eq( - await pSetupBuild2.implementation(), - 'Builds 1-2 implementation should differ' - ); - - // Publish build 2 - let tx = await pluginRepo.createVersion( - 1, - pSetupBuild2.address, - toHex('build'), - toHex('release') - ); - await tx.wait(); - - // Upgrade to build 2 - tx = await psp.prepareUpdate(dao.address, { - currentVersionTag: { - release: release, - build: 1, - }, - newVersionTag: { - release: release, - build: 2, - }, - pluginSetupRepo: pluginRepo.address, - setupPayload: { - currentHelpers: [], - data: '0x', - plugin: spacePlugin.address, - }, - }); - const preparedEvent = await findEvent( - tx, - 'UpdatePrepared' - ); - if (!preparedEvent) { - throw new Error('Failed to get UpdatePrepared event'); - } - - // Should not allow to execute other than the expected 3 actions - { - await expect( - dao.execute(toHex('23412341234123412341234123412341'), [], 0) - ).to.be.reverted; - await expect( - dao - .connect(pluginUpgrader) - .execute(toHex('23412341234123412341234123412341'), [], 0) - ).to.be.reverted; - await expect( - dao - .connect(pluginUpgrader) - .execute( - toHex('23412341234123412341234123412341'), - [{to: dao.address, value: 0, data: '0x'}], - 0 - ) - ).to.be.reverted; - await expect( - dao.connect(pluginUpgrader).execute( - toHex('23412341234123412341234123412341'), - [ - { - to: spacePlugin.address, - value: 0, - data: SpacePlugin__factory.createInterface().encodeFunctionData( - 'removeSubspace', - [ADDRESS_ONE] - ), - }, - ], - 0 - ) - ).to.be.reverted; - } - - // Params - const applyUpdateParams: PluginSetupProcessor.ApplyUpdateParamsStruct = { - plugin: spacePlugin.address, - pluginSetupRef: { - pluginSetupRepo: pluginRepo.address, - versionTag: { - release, - build: 2, - }, - }, - initData: preparedEvent.args.initData, - permissions: preparedEvent.args.preparedSetupData.permissions, - helpersHash: hashHelpers(preparedEvent.args.preparedSetupData.helpers), - }; - - // Execute grant + applyUpdate + revoke - tx = await dao.connect(pluginUpgrader).execute( - ZERO_BYTES32, - [ - // Grant permission to the PSP - { - to: dao.address, - value: 0, - data: daoInterface.encodeFunctionData('grant', [ - spacePlugin.address, - psp.address, - UPGRADE_PLUGIN_PERMISSION_ID, - ]), - }, - // Execute psp.applyUpdate() from the DAO to the plugin - { - to: psp.address, - value: 0, - data: pspInterface.encodeFunctionData('applyUpdate', [ - dao.address, - applyUpdateParams, - ]), - }, - // Revoke permission to the PSP - { - to: dao.address, - value: 0, - data: daoInterface.encodeFunctionData('revoke', [ - spacePlugin.address, - psp.address, - UPGRADE_PLUGIN_PERMISSION_ID, - ]), - }, - ], - 0 - ); - - const receipt = await tx.wait(); - const executedEvent: ExecutedEvent | undefined = ( - receipt.events || [] - ).find(event => event.event === 'Executed') as any; - if (!executedEvent) { - throw new Error('Failed to get Executed event'); - } - - const upgradedEvent = await findEvent(tx, 'Upgraded'); - if (!upgradedEvent) { - throw new Error('Failed to get Upgraded event'); - } - - // Check implementations build 2 - expect(await spacePlugin.implementation()).to.not.be.eq( - await pSetupBuild1.implementation(), - "Implementation shouldn't be build 1" - ); - - expect(await spacePlugin.implementation()).to.be.eq( - await pSetupBuild2.implementation(), - 'Implementation should be build 2' - ); - }); -}); diff --git a/packages/contracts/test/unit-testing/common.ts b/packages/contracts/test/unit-testing/common.ts index e292e7c..ff91be2 100644 --- a/packages/contracts/test/unit-testing/common.ts +++ b/packages/contracts/test/unit-testing/common.ts @@ -6,6 +6,8 @@ export const abiCoder = ethers.utils.defaultAbiCoder; export const EMPTY_DATA = '0x'; export const ZERO_BYTES32 = '0x0000000000000000000000000000000000000000000000000000000000000000'; +export const ONE_BYTES32 = + '0x0000000000000000000000000000000000000000000000000000000000000001'; export const DEPLOYER_PERMISSION_ID = ethers.utils.id('DEPLOYER_PERMISSION'); export const EDITOR_PERMISSION_ID = ethers.utils.id('EDITOR_PERMISSION'); From 7b6ef2084fde4654c0ea3f1630d6bcd20c927964 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8r=E2=88=82=C2=A1?= Date: Fri, 5 Jan 2024 14:17:08 +0100 Subject: [PATCH 19/29] Linting fixes --- .../test/integration-testing/governance-plugins-setup.ts | 3 --- .../test/integration-testing/member-access-condition.ts | 6 ++---- .../contracts/test/unit-testing/governance-plugins-setup.ts | 2 -- 3 files changed, 2 insertions(+), 9 deletions(-) diff --git a/packages/contracts/test/integration-testing/governance-plugins-setup.ts b/packages/contracts/test/integration-testing/governance-plugins-setup.ts index f140977..29d468c 100644 --- a/packages/contracts/test/integration-testing/governance-plugins-setup.ts +++ b/packages/contracts/test/integration-testing/governance-plugins-setup.ts @@ -20,7 +20,6 @@ import { PluginRepo__factory, PluginSetupProcessor, PluginSetupProcessor__factory, - DAO__factory, } from '@aragon/osx-ethers'; import {SignerWithAddress} from '@nomiclabs/hardhat-ethers/signers'; import {expect} from 'chai'; @@ -40,8 +39,6 @@ const pluginSettings: MajorityVotingBase.VotingSettingsStruct = { votingMode: 0, }; const minMemberAccessProposalDuration = 60 * 60 * 24; -const daoInterface = DAO__factory.createInterface(); -const pspInterface = PluginSetupProcessor__factory.createInterface(); describe('GovernancePluginsSetup processing', function () { let deployer: SignerWithAddress; diff --git a/packages/contracts/test/integration-testing/member-access-condition.ts b/packages/contracts/test/integration-testing/member-access-condition.ts index 240c470..eb17826 100644 --- a/packages/contracts/test/integration-testing/member-access-condition.ts +++ b/packages/contracts/test/integration-testing/member-access-condition.ts @@ -31,8 +31,8 @@ import { PluginSetupProcessor__factory, PluginRepoFactory__factory, PluginRepoRegistry__factory, - DAO__factory, IDAO, + DAO__factory, } from '@aragon/osx-ethers'; import {SignerWithAddress} from '@nomiclabs/hardhat-ethers/signers'; import {expect} from 'chai'; @@ -49,14 +49,12 @@ const pluginSettings: MajorityVotingBase.VotingSettingsStruct = { }; const minMemberAccessProposalDuration = 60 * 60 * 24; const daoInterface = DAO__factory.createInterface(); -const pspInterface = PluginSetupProcessor__factory.createInterface(); describe('Member Access Condition E2E', () => { let deployer: SignerWithAddress; let pluginUpgrader: SignerWithAddress; let alice: SignerWithAddress; let bob: SignerWithAddress; - let carol: SignerWithAddress; let psp: PluginSetupProcessor; let dao: DAO; @@ -69,7 +67,7 @@ describe('Member Access Condition E2E', () => { let memberAccessPlugin: TestMemberAccessPlugin; before(async () => { - [deployer, pluginUpgrader, alice, bob, carol] = await ethers.getSigners(); + [deployer, pluginUpgrader, alice, bob] = await ethers.getSigners(); // Get the PluginRepoFactory address const pluginRepoFactoryAddr: string = getPluginRepoFactoryAddress( diff --git a/packages/contracts/test/unit-testing/governance-plugins-setup.ts b/packages/contracts/test/unit-testing/governance-plugins-setup.ts index 79c6100..2c44373 100644 --- a/packages/contracts/test/unit-testing/governance-plugins-setup.ts +++ b/packages/contracts/test/unit-testing/governance-plugins-setup.ts @@ -9,7 +9,6 @@ import {deployTestDao} from '../helpers/test-dao'; import {getNamedTypesFromMetadata, Operation} from '../helpers/types'; import { abiCoder, - ADDRESS_ONE, ADDRESS_ZERO, EXECUTE_PERMISSION_ID, NO_CONDITION, @@ -17,7 +16,6 @@ import { UPDATE_ADDRESSES_PERMISSION_ID, UPDATE_MULTISIG_SETTINGS_PERMISSION_ID, UPDATE_VOTING_SETTINGS_PERMISSION_ID, - UPGRADE_PLUGIN_PERMISSION_ID, VotingMode, } from './common'; import {activeContractsList} from '@aragon/osx-ethers'; From c9101936356f2be9fdf4e0d059e8949a761245f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8r=E2=88=82=C2=A1?= Date: Mon, 8 Jan 2024 17:07:32 +0100 Subject: [PATCH 20/29] Adapted existing tests --- .../contracts/test/unit-testing/governance-plugins-setup.ts | 6 +++--- packages/contracts/test/unit-testing/space-plugin-setup.ts | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/contracts/test/unit-testing/governance-plugins-setup.ts b/packages/contracts/test/unit-testing/governance-plugins-setup.ts index 2c44373..83346bb 100644 --- a/packages/contracts/test/unit-testing/governance-plugins-setup.ts +++ b/packages/contracts/test/unit-testing/governance-plugins-setup.ts @@ -120,7 +120,7 @@ describe('Governance Plugins Setup', function () { UPDATE_ADDRESSES_PERMISSION_ID, ], [ - Operation.Grant, + Operation.GrantWithCondition, dao.address, memberAccessPlugin, anticipatedMemberAccessConditionAddress, @@ -226,7 +226,7 @@ describe('Governance Plugins Setup', function () { UPDATE_ADDRESSES_PERMISSION_ID, ], [ - Operation.Grant, + Operation.GrantWithCondition, dao.address, memberAccessPlugin, anticipatedMemberAccessConditionAddress, @@ -240,7 +240,7 @@ describe('Governance Plugins Setup', function () { UPDATE_MULTISIG_SETTINGS_PERMISSION_ID, ], [ - Operation.Grant, + Operation.GrantWithCondition, dao.address, pluginUpgrader, anticipatedOnlyPluginUpgraderConditionAddress, diff --git a/packages/contracts/test/unit-testing/space-plugin-setup.ts b/packages/contracts/test/unit-testing/space-plugin-setup.ts index a7ffcce..478004b 100644 --- a/packages/contracts/test/unit-testing/space-plugin-setup.ts +++ b/packages/contracts/test/unit-testing/space-plugin-setup.ts @@ -137,7 +137,7 @@ describe('Space Plugin Setup', function () { SUBSPACE_PERMISSION_ID, ], [ - Operation.Grant, + Operation.GrantWithCondition, dao.address, pluginUpgrader, anticipatedConditionAddress, From 67b3accd444759529456a4768e0f119a70f5c647 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8r=E2=88=82=C2=A1?= Date: Mon, 8 Jan 2024 17:35:35 +0100 Subject: [PATCH 21/29] Adapting the test --- .../governance-plugins-setup.ts | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/packages/contracts/test/integration-testing/governance-plugins-setup.ts b/packages/contracts/test/integration-testing/governance-plugins-setup.ts index 29d468c..3ae78d7 100644 --- a/packages/contracts/test/integration-testing/governance-plugins-setup.ts +++ b/packages/contracts/test/integration-testing/governance-plugins-setup.ts @@ -11,7 +11,7 @@ import { } from '../../typechain'; import {PluginSetupRefStruct} from '../../typechain/@aragon/osx/framework/dao/DAOFactory'; import {osxContracts} from '../../utils/helpers'; -import {getPluginRepoInfo} from '../../utils/plugin-repo-info'; +import {PluginRepoInfo, getPluginRepoInfo} from '../../utils/plugin-repo-info'; import {installPlugin, uninstallPlugin} from '../helpers/setup'; import {deployTestDao} from '../helpers/test-dao'; import {ADDRESS_ZERO} from '../unit-testing/common'; @@ -27,10 +27,7 @@ import {ethers} from 'hardhat'; const release = 1; const hardhatForkNetwork = process.env.NETWORK_NAME ?? 'mainnet'; -const pluginRepoInfo = getPluginRepoInfo( - GovernancePluginsSetupParams.PLUGIN_REPO_ENS_NAME, - 'hardhat' -); +let pluginRepoInfo: PluginRepoInfo; const pluginSettings: MajorityVotingBase.VotingSettingsStruct = { minDuration: 60 * 60 * 24, minParticipation: 1, @@ -50,9 +47,14 @@ describe('GovernancePluginsSetup processing', function () { before(async () => { [deployer] = await ethers.getSigners(); - if (!pluginRepoInfo) { + const pri = getPluginRepoInfo( + GovernancePluginsSetupParams.PLUGIN_REPO_ENS_NAME, + 'hardhat' + ); + if (!pri) { throw new Error('The plugin setup details are not available'); } + pluginRepoInfo = pri; // PSP psp = PluginSetupProcessor__factory.connect( From 5d4b2f96ff642b0c93dece63934b46b60096805d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8r=E2=88=82=C2=A1?= Date: Mon, 8 Jan 2024 17:37:07 +0100 Subject: [PATCH 22/29] Cosmetic improvement --- .../test/integration-testing/governance-plugins-setup.ts | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/packages/contracts/test/integration-testing/governance-plugins-setup.ts b/packages/contracts/test/integration-testing/governance-plugins-setup.ts index 3ae78d7..bc0edda 100644 --- a/packages/contracts/test/integration-testing/governance-plugins-setup.ts +++ b/packages/contracts/test/integration-testing/governance-plugins-setup.ts @@ -11,7 +11,7 @@ import { } from '../../typechain'; import {PluginSetupRefStruct} from '../../typechain/@aragon/osx/framework/dao/DAOFactory'; import {osxContracts} from '../../utils/helpers'; -import {PluginRepoInfo, getPluginRepoInfo} from '../../utils/plugin-repo-info'; +import {getPluginRepoInfo} from '../../utils/plugin-repo-info'; import {installPlugin, uninstallPlugin} from '../helpers/setup'; import {deployTestDao} from '../helpers/test-dao'; import {ADDRESS_ZERO} from '../unit-testing/common'; @@ -27,7 +27,6 @@ import {ethers} from 'hardhat'; const release = 1; const hardhatForkNetwork = process.env.NETWORK_NAME ?? 'mainnet'; -let pluginRepoInfo: PluginRepoInfo; const pluginSettings: MajorityVotingBase.VotingSettingsStruct = { minDuration: 60 * 60 * 24, minParticipation: 1, @@ -47,14 +46,13 @@ describe('GovernancePluginsSetup processing', function () { before(async () => { [deployer] = await ethers.getSigners(); - const pri = getPluginRepoInfo( + const pluginRepoInfo = getPluginRepoInfo( GovernancePluginsSetupParams.PLUGIN_REPO_ENS_NAME, 'hardhat' ); - if (!pri) { + if (!pluginRepoInfo) { throw new Error('The plugin setup details are not available'); } - pluginRepoInfo = pri; // PSP psp = PluginSetupProcessor__factory.connect( From 583231ac772178d9fa5f28d71c4a59a58c0c7b88 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8r=E2=88=82=C2=A1?= <4456749@users.noreply.github.com> Date: Thu, 18 Jan 2024 16:22:19 +0100 Subject: [PATCH 23/29] Newer dependency version --- packages/contracts/package.json | 4 ++-- yarn.lock | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/contracts/package.json b/packages/contracts/package.json index 111daf7..c1eb9bd 100644 --- a/packages/contracts/package.json +++ b/packages/contracts/package.json @@ -38,8 +38,8 @@ "dependencies": { "@aragon/osx": "^1.3.0", "@aragon/osx-ethers": "^1.3.0", - "@openzeppelin/contracts": "^4.9.3", - "@openzeppelin/contracts-upgradeable": "^4.9.3", + "@openzeppelin/contracts": "^4.9.5", + "@openzeppelin/contracts-upgradeable": "^4.9.5", "@openzeppelin/hardhat-upgrades": "^1.27.0" }, "files": [ diff --git a/yarn.lock b/yarn.lock index 5099d6b..e915dac 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1124,7 +1124,7 @@ resolved "https://registry.yarnpkg.com/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-4.8.1.tgz#363f7dd08f25f8f77e16d374350c3d6b43340a7a" integrity sha512-1wTv+20lNiC0R07jyIAbHU7TNHKRwGiTGRfiNnA8jOWjKT98g5OgLpYWOi40Vgpk8SPLA9EvfJAbAeIyVn+7Bw== -"@openzeppelin/contracts-upgradeable@^4.9.3": +"@openzeppelin/contracts-upgradeable@^4.9.5": version "4.9.5" resolved "https://registry.yarnpkg.com/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-4.9.5.tgz#572b5da102fc9be1d73f34968e0ca56765969812" integrity sha512-f7L1//4sLlflAN7fVzJLoRedrf5Na3Oal5PZfIq55NFcVZ90EpV1q5xOvL4lFvg3MNICSDr2hH0JUBxwlxcoPg== @@ -1139,7 +1139,7 @@ resolved "https://registry.yarnpkg.com/@openzeppelin/contracts/-/contracts-4.9.1.tgz#afa804d2c68398704b0175acc94d91a54f203645" integrity sha512-aLDTLu/If1qYIFW5g4ZibuQaUsFGWQPBq1mZKp/txaebUnGHDmmiBhRLY1tDNedN0m+fJtKZ1zAODS9Yk+V6uA== -"@openzeppelin/contracts@^4.9.3": +"@openzeppelin/contracts@^4.9.5": version "4.9.5" resolved "https://registry.yarnpkg.com/@openzeppelin/contracts/-/contracts-4.9.5.tgz#1eed23d4844c861a1835b5d33507c1017fa98de8" integrity sha512-ZK+W5mVhRppff9BE6YdR8CC52C8zAvsVAiWhEtQ5+oNxFE6h1WdeWo+FJSF8KKvtxxVYZ7MTP/5KoVpAU3aSWg== From 30d0e7986a25244f3693263d4fa21d5105803f3f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8r=E2=88=82=C2=A1?= <4456749@users.noreply.github.com> Date: Mon, 22 Jan 2024 13:32:20 +0100 Subject: [PATCH 24/29] Ensuring that the lack of ROOT permission for the PSP on pluginUpgrader fails --- .../src/test/TestGovernancePluginsSetup.sol | 44 +++++ .../integration-testing/plugin-upgrader.ts | 171 ++++++++++++++---- 2 files changed, 183 insertions(+), 32 deletions(-) diff --git a/packages/contracts/src/test/TestGovernancePluginsSetup.sol b/packages/contracts/src/test/TestGovernancePluginsSetup.sol index adf9aea..ca21658 100644 --- a/packages/contracts/src/test/TestGovernancePluginsSetup.sol +++ b/packages/contracts/src/test/TestGovernancePluginsSetup.sol @@ -147,6 +147,38 @@ contract TestGovernancePluginsSetup is PluginSetup { preparedSetupData.helpers[0] = _memberAccessPlugin; } + /// @notice WARNING: This test function is meant to revert when performed by the pluginUpgrader + function prepareUpdate( + address _dao, + uint16 _currentBuild, + SetupPayload calldata _payload + ) + external + view + override + returns (bytes memory initData, PreparedSetupData memory preparedSetupData) + { + (_currentBuild, _payload, initData); + bool _requestSomeNewPermission = decodeUpdateParams(_payload.data); + + if (_requestSomeNewPermission) { + PermissionLib.MultiTargetPermission[] + memory permissions = new PermissionLib.MultiTargetPermission[](1); + + // This is here to make things revert + // when requested by pluginUpgrader + permissions[0] = PermissionLib.MultiTargetPermission({ + operation: PermissionLib.Operation.Grant, + where: _dao, + who: _dao, + condition: PermissionLib.NO_CONDITION, + permissionId: DAO(payable(_dao)).SET_METADATA_PERMISSION_ID() + }); + + preparedSetupData.permissions = permissions; + } + } + /// @inheritdoc IPluginSetup function prepareUninstallation( address _dao, @@ -271,6 +303,18 @@ contract TestGovernancePluginsSetup is PluginSetup { ); } + /// @notice Encodes the given update parameters into a byte array + function encodeUpdateParams(bool _requestSomeNewPermission) public pure returns (bytes memory) { + return abi.encode(_requestSomeNewPermission); + } + + /// @notice Decodes the given byte array into the original update parameters + function decodeUpdateParams( + bytes memory _data + ) public pure returns (bool requestSomeNewPermission) { + (requestSomeNewPermission) = abi.decode(_data, (bool)); + } + /// @notice Encodes the given uninstallation parameters into a byte array function encodeUninstallationParams( address _pluginUpgrader diff --git a/packages/contracts/test/integration-testing/plugin-upgrader.ts b/packages/contracts/test/integration-testing/plugin-upgrader.ts index ee9cf65..f22ca9e 100644 --- a/packages/contracts/test/integration-testing/plugin-upgrader.ts +++ b/packages/contracts/test/integration-testing/plugin-upgrader.ts @@ -8,6 +8,8 @@ import { SpacePluginSetup, SpacePluginSetup__factory, SpacePlugin__factory, + TestGovernancePluginsSetup, + TestGovernancePluginsSetup__factory, } from '../../typechain'; import { ExecutedEvent, @@ -68,7 +70,10 @@ describe('Plugin upgrader', () => { describe('GovernancePluginsSetup', () => { let pSetupBuild1: GovernancePluginsSetup; + let pSetupBuild2: TestGovernancePluginsSetup; let gpsFactory: GovernancePluginsSetup__factory; + let tgpsFactory: TestGovernancePluginsSetup__factory; + let installation1: Awaited>; before(async () => { [deployer, pluginUpgrader] = await ethers.getSigners(); @@ -79,16 +84,6 @@ describe('Plugin upgrader', () => { deployer ); - // Deploy DAO. - dao = await deployTestDao(deployer); - - // The DAO is root on itself - await dao.grant( - dao.address, - dao.address, - ethers.utils.id('ROOT_PERMISSION') - ); - // Get the PluginRepoFactory address const pluginRepoFactoryAddr: string = getPluginRepoFactoryAddress( network.name @@ -122,6 +117,10 @@ describe('Plugin upgrader', () => { gpsFactory = new GovernancePluginsSetup__factory().connect(deployer); pSetupBuild1 = await gpsFactory.deploy(psp.address); + // Deploy PluginSetup build 2 + tgpsFactory = new TestGovernancePluginsSetup__factory().connect(deployer); + pSetupBuild2 = await tgpsFactory.deploy(psp.address); + // Publish build 1 tx = await pluginRepo.createVersion( 1, @@ -129,9 +128,27 @@ describe('Plugin upgrader', () => { toHex('build'), toHex('release') ); + // Publish build 2 + tx = await pluginRepo.createVersion( + 1, + pSetupBuild2.address, + toHex('build'), + toHex('release') + ); + await tx.wait(); }); - it('Allows pluginUpgrader to execute psp.applyUpdate()', async () => { + beforeEach(async () => { + // Deploy DAO. + dao = await deployTestDao(deployer); + + // The DAO is root on itself + await dao.grant( + dao.address, + dao.address, + ethers.utils.id('ROOT_PERMISSION') + ); + const pluginSetupRef1: PluginSetupRefStruct = { versionTag: { release, @@ -159,12 +176,7 @@ describe('Plugin upgrader', () => { minMemberAccessProposalDuration, pluginUpgrader.address ); - const installation1 = await installPlugin( - psp, - dao, - pluginSetupRef1, - data1 - ); + installation1 = await installPlugin(psp, dao, pluginSetupRef1, data1); // Drop temp permissions await dao.revoke( @@ -177,7 +189,9 @@ describe('Plugin upgrader', () => { deployer.address, ethers.utils.id('APPLY_INSTALLATION_PERMISSION') ); + }); + it('Allows pluginUpgrader to execute psp.applyUpdate()', async () => { // Deployed plugin and helper const mainVotingPlugin = MainVotingPlugin__factory.connect( installation1.preparedEvent.args.plugin, @@ -196,26 +210,15 @@ describe('Plugin upgrader', () => { await pSetupBuild1.memberAccessPluginImplementation() ); - // Deploy PluginSetup build 2 (new instance, disregarding the lack of changes) - const pSetupBuild2 = await gpsFactory.deploy(psp.address); - // Check expect(await pSetupBuild1.implementation()).to.not.be.eq( await pSetupBuild2.implementation(), 'Builds 1-2 implementation should differ' ); - // Publish build 2 - let tx = await pluginRepo.createVersion( - 1, - pSetupBuild2.address, - toHex('build'), - toHex('release') - ); - await tx.wait(); - // Upgrade to build 2 - tx = await psp.prepareUpdate(dao.address, { + const dat = await pSetupBuild2.encodeUpdateParams(false); // No new perms + let tx = await psp.prepareUpdate(dao.address, { currentVersionTag: { release: release, build: 1, @@ -227,7 +230,7 @@ describe('Plugin upgrader', () => { pluginSetupRepo: pluginRepo.address, setupPayload: { currentHelpers: [memberAccessPlugin.address], - data: '0x', + data: dat, plugin: mainVotingPlugin.address, }, }); @@ -354,7 +357,111 @@ describe('Plugin upgrader', () => { expect(await memberAccessPlugin.implementation()).to.be.eq( await pSetupBuild1.memberAccessPluginImplementation(), - 'Implementation reamain as build 1' + 'Implementation should remain as build 1' + ); + }); + + it('Reverts if pluginUpgrader calling psp.applyUpdate() requests new permissions', async () => { + // Deployed plugin and helper + const mainVotingPlugin = MainVotingPlugin__factory.connect( + installation1.preparedEvent.args.plugin, + deployer + ); + const memberAccessPlugin = MemberAccessPlugin__factory.connect( + installation1.preparedEvent.args.preparedSetupData.helpers[0], + deployer + ); + + // Prepare an update to build 2 + const dat = await pSetupBuild2.encodeUpdateParams(true); // Request new perms + let tx = await psp.prepareUpdate(dao.address, { + currentVersionTag: { + release: release, + build: 1, + }, + newVersionTag: { + release: release, + build: 2, + }, + pluginSetupRepo: pluginRepo.address, + setupPayload: { + currentHelpers: [memberAccessPlugin.address], + data: dat, + plugin: mainVotingPlugin.address, + }, + }); + const preparedEvent = await findEvent( + tx, + 'UpdatePrepared' + ); + if (!preparedEvent) { + throw new Error('Failed to get UpdatePrepared event'); + } + + // Params + const applyUpdateParams: PluginSetupProcessor.ApplyUpdateParamsStruct = { + plugin: mainVotingPlugin.address, + pluginSetupRef: { + pluginSetupRepo: pluginRepo.address, + versionTag: { + release, + build: 2, + }, + }, + initData: preparedEvent.args.initData, + permissions: preparedEvent.args.preparedSetupData.permissions, + helpersHash: hashHelpers(preparedEvent.args.preparedSetupData.helpers), + }; + + // Execute grant + applyUpdate + revoke + await expect( + dao.connect(pluginUpgrader).execute( + ZERO_BYTES32, + [ + // Grant permission to the PSP + { + to: dao.address, + value: 0, + data: daoInterface.encodeFunctionData('grant', [ + mainVotingPlugin.address, + psp.address, + UPGRADE_PLUGIN_PERMISSION_ID, + ]), + }, + // Execute psp.applyUpdate() from the DAO to the plugin + { + to: psp.address, + value: 0, + data: pspInterface.encodeFunctionData('applyUpdate', [ + dao.address, + applyUpdateParams, + ]), + }, + // Revoke permission to the PSP + { + to: dao.address, + value: 0, + data: daoInterface.encodeFunctionData('revoke', [ + mainVotingPlugin.address, + psp.address, + UPGRADE_PLUGIN_PERMISSION_ID, + ]), + }, + ], + 0 + ) + // The PSP lacking ROOT permission on the DAO should make this fail + ).to.revertedWithCustomError(dao, 'ActionFailed'); + + // Check implementations build 1 + expect(await mainVotingPlugin.implementation()).to.be.eq( + await pSetupBuild1.implementation(), + 'Implementation should be build 1' + ); + + expect(await memberAccessPlugin.implementation()).to.be.eq( + await pSetupBuild1.memberAccessPluginImplementation(), + 'Implementation should remain as build 1' ); }); }); From 09f504a5d1090ecb447f737b8fccce362248af39 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8r=E2=88=82=C2=A1?= Date: Wed, 24 Jan 2024 13:09:22 +0100 Subject: [PATCH 25/29] Improved readme with diagrams --- .gitignore | 2 + README.md | 28 +++ img/Geo Diagrams.drawio | 206 ++++++++++++++++++ img/personal-1.svg | 4 + img/std-1.svg | 4 + img/std-2.svg | 4 + img/std-3.svg | 4 + img/upgrader-1.svg | 4 + packages/contracts/src/MemberAccessPlugin.sol | 18 +- 9 files changed, 265 insertions(+), 9 deletions(-) create mode 100644 img/Geo Diagrams.drawio create mode 100644 img/personal-1.svg create mode 100644 img/std-1.svg create mode 100644 img/std-2.svg create mode 100644 img/std-3.svg create mode 100644 img/upgrader-1.svg diff --git a/.gitignore b/.gitignore index d1a0991..23a3f3e 100644 --- a/.gitignore +++ b/.gitignore @@ -27,3 +27,5 @@ packages/subgraph/deploy-output.txt packages/subgraph/subgraph.yaml packages/subgraph/tests/.latest.json packages/subgraph/tests/helpers/extended-schema.ts + +*.bkp diff --git a/README.md b/README.md index 4f47f03..26fb143 100644 --- a/README.md +++ b/README.md @@ -33,6 +33,34 @@ The current repository provides the plugins necessary to cover two use cases: - Space plugin - Personal Space Admin plugin +### Standard Space + +In standard spaces, _members_ can create proposals while _editors_ can vote whether they should pass. Proposals eventually approved can be executed by anyone and this will make the DAO call the predefined proposal actions. + +The most typical case will be telling the Space Plugin to emit the event of a proposal being processed. + + + +The Main Voting Plugin can also pass proposals that change its own settings. + + + +To add new members, the Member Access Plugin allows anyone to request the permission. Editors can approve or reject it. + + + +### Personal Space + +Personal spaces are a simplified version, where anyone defined as editor can immediatelly execute proposals. Typically to edit the contents of a space. + + + +### Plugin Upgrader + +There's an optional case, where a predefined address can execute the actions to upgrade a plugin to the latest published version. + + + ## Global lifecycle ### Space genesis diff --git a/img/Geo Diagrams.drawio b/img/Geo Diagrams.drawio new file mode 100644 index 0000000..0a3ec45 --- /dev/null +++ b/img/Geo Diagrams.drawio @@ -0,0 +1,206 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/img/personal-1.svg b/img/personal-1.svg new file mode 100644 index 0000000..c8e5414 --- /dev/null +++ b/img/personal-1.svg @@ -0,0 +1,4 @@ + + + +
DAO
DAO
Personal Space
Admin Plugin
Personal Space...
Space Plugin
Space Plugin
Execute Proposal
Execute Proposal
Execute actions
Execute actions
Process Geo proposal
Accept subspace
Reject subspace
Process Geo proposal...
Emit events
Emit events
Text is not SVG - cannot display
\ No newline at end of file diff --git a/img/std-1.svg b/img/std-1.svg new file mode 100644 index 0000000..53cb7af --- /dev/null +++ b/img/std-1.svg @@ -0,0 +1,4 @@ + + + +
DAO
DAO
Main Voting
Plugin
Main Voting...
Space Plugin
Space Plugin
Create Proposal
Vote
Execute
Create Proposal...
Execute actions
Execute actions
Process Geo proposal
Accept subspace
Reject subspace
Process Geo proposal...
Emit events
Emit events
Text is not SVG - cannot display
\ No newline at end of file diff --git a/img/std-2.svg b/img/std-2.svg new file mode 100644 index 0000000..48726ad --- /dev/null +++ b/img/std-2.svg @@ -0,0 +1,4 @@ + + + +
DAO
DAO
Main Voting
Plugin
Main Voting...
Create Proposal
Vote
Execute
Create Proposal...
Execute actions
Execute actions
Update voting settings
Add addresses
Remove addresses
Update voting settings...
Text is not SVG - cannot display
\ No newline at end of file diff --git a/img/std-3.svg b/img/std-3.svg new file mode 100644 index 0000000..929ab2f --- /dev/null +++ b/img/std-3.svg @@ -0,0 +1,4 @@ + + + +
DAO
DAO
Member Access Plugin
Member Access Plugin
Main Voting
Plugin
Main Voting...
Propose add/remove member
Propose add/remove editor
Approve
Reject
Propose add/remove member...
Execute actions
(condition)
Execute actions...
Is editor?
Editor count?
Is editor?...
Grant / Revoke
Grant / Revoke
Text is not SVG - cannot display
\ No newline at end of file diff --git a/img/upgrader-1.svg b/img/upgrader-1.svg new file mode 100644 index 0000000..3a6d0fa --- /dev/null +++ b/img/upgrader-1.svg @@ -0,0 +1,4 @@ + + + +
DAO
DAO
Plugin upgrader
address
Plugin upgrader...
Plugin Setup
Processor
Plugin Setup...
Grant permission to PSP
Call applyUpdate()
Revoke permission to PSP
Grant permission to PSP...
Execute actions
(condition)
Execute actions...
2) Apply update
2) Apply update
1) Grant
3) Revoke
1) Grant...
Upgrade plugins
Upgrade plugins
Text is not SVG - cannot display
\ No newline at end of file diff --git a/packages/contracts/src/MemberAccessPlugin.sol b/packages/contracts/src/MemberAccessPlugin.sol index 939e41b..48d1e42 100644 --- a/packages/contracts/src/MemberAccessPlugin.sol +++ b/packages/contracts/src/MemberAccessPlugin.sol @@ -28,14 +28,14 @@ contract MemberAccessPlugin is IMultisig, PluginUUPSUpgradeable, ProposalUpgrade bytes32 public constant UPDATE_MULTISIG_SETTINGS_PERMISSION_ID = keccak256("UPDATE_MULTISIG_SETTINGS_PERMISSION"); - /// @notice The minimum amount of approvals required for proposals created by a non-editor - uint16 internal constant MIN_APPROVALS_NON_EDITOR = uint16(1); + /// @notice The minimum total amount of approvals required for proposals created by a non-editor + uint16 internal constant MIN_APPROVALS_WHEN_CREATED_BY_NON_EDITOR = uint16(1); - /// @notice The minimum amount of approvals required for proposals created by an editor (single) - uint16 internal constant MIN_APPROVALS_EDITOR_SINGLE = uint16(1); + /// @notice The minimum total amount of approvals required for proposals created by an editor (single) + uint16 internal constant MIN_APPROVALS_WHEN_CREATED_BY_SINGLE_EDITOR = uint16(1); - /// @notice The minimum amount of approvals required for proposals created by an editor (multiple) - uint16 internal constant MIN_APPROVALS_EDITOR_MANY = uint16(2); + /// @notice The minimum total amount of approvals required for proposals created by an editor (multiple) + uint16 internal constant MIN_APPROVALS_WHEN_CREATED_BY_EDITOR_OF_MANY = uint16(2); /// @notice A container for proposal-related information. /// @param executed Whether the proposal is executed or not. @@ -223,15 +223,15 @@ contract MemberAccessPlugin is IMultisig, PluginUUPSUpgradeable, ProposalUpgrade if (isEditor(_msgSender())) { if (multisigSettings.mainVotingPlugin.addresslistLength() < 2) { - proposal_.parameters.minApprovals = MIN_APPROVALS_EDITOR_SINGLE; + proposal_.parameters.minApprovals = MIN_APPROVALS_WHEN_CREATED_BY_SINGLE_EDITOR; } else { - proposal_.parameters.minApprovals = MIN_APPROVALS_EDITOR_MANY; + proposal_.parameters.minApprovals = MIN_APPROVALS_WHEN_CREATED_BY_EDITOR_OF_MANY; } // If the creator is an editor, we assume that the editor approves approve(proposalId, false); } else { - proposal_.parameters.minApprovals = MIN_APPROVALS_NON_EDITOR; + proposal_.parameters.minApprovals = MIN_APPROVALS_WHEN_CREATED_BY_NON_EDITOR; } } From 63534607106ab5bc65ae753010138d4a842cbdca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8r=E2=88=82=C2=A1?= Date: Wed, 24 Jan 2024 15:28:57 +0100 Subject: [PATCH 26/29] Grouping plugins in folders --- packages/contracts/plugin-setup-params.ts | 12 ++++++------ .../MemberAccessExecuteCondition.sol | 2 +- .../{ => conditions}/OnlyPluginUpgraderCondition.sol | 0 .../src/{ => governance}/GovernancePluginsSetup.sol | 4 ++-- .../src/{ => governance}/MainVotingPlugin.sol | 2 +- .../src/{ => governance}/MemberAccessPlugin.sol | 2 +- .../{ => governance}/governance-build-metadata.json | 0 .../governance-release-metadata.json | 0 .../src/{ => personal}/PersonalSpaceAdminPlugin.sol | 2 +- .../{ => personal}/PersonalSpaceAdminPluginSetup.sol | 2 +- .../personal-space-admin-build-metadata.json | 0 .../personal-space-admin-release-metadata.json | 0 packages/contracts/src/{ => space}/SpacePlugin.sol | 2 +- .../contracts/src/{ => space}/SpacePluginSetup.sol | 4 ++-- .../src/{ => space}/space-build-metadata.json | 0 .../src/{ => space}/space-release-metadata.json | 0 .../src/test/PersonalSpaceAdminCloneFactory.sol | 2 +- .../src/test/TestGovernancePluginsSetup.sol | 6 +++--- .../contracts/src/test/TestMemberAccessPlugin.sol | 2 +- .../test/unit-testing/governance-plugins-setup.ts | 2 +- .../personal-space-admin-plugin-setup.ts | 2 +- .../test/unit-testing/space-plugin-setup.ts | 2 +- 22 files changed, 24 insertions(+), 24 deletions(-) rename packages/contracts/src/{ => conditions}/MemberAccessExecuteCondition.sol (98%) rename packages/contracts/src/{ => conditions}/OnlyPluginUpgraderCondition.sol (100%) rename packages/contracts/src/{ => governance}/GovernancePluginsSetup.sol (98%) rename packages/contracts/src/{ => governance}/MainVotingPlugin.sol (99%) rename packages/contracts/src/{ => governance}/MemberAccessPlugin.sol (99%) rename packages/contracts/src/{ => governance}/governance-build-metadata.json (100%) rename packages/contracts/src/{ => governance}/governance-release-metadata.json (100%) rename packages/contracts/src/{ => personal}/PersonalSpaceAdminPlugin.sol (97%) rename packages/contracts/src/{ => personal}/PersonalSpaceAdminPluginSetup.sol (98%) rename packages/contracts/src/{ => personal}/personal-space-admin-build-metadata.json (100%) rename packages/contracts/src/{ => personal}/personal-space-admin-release-metadata.json (100%) rename packages/contracts/src/{ => space}/SpacePlugin.sol (98%) rename packages/contracts/src/{ => space}/SpacePluginSetup.sol (97%) rename packages/contracts/src/{ => space}/space-build-metadata.json (100%) rename packages/contracts/src/{ => space}/space-release-metadata.json (100%) diff --git a/packages/contracts/plugin-setup-params.ts b/packages/contracts/plugin-setup-params.ts index 4a1668e..43284cc 100644 --- a/packages/contracts/plugin-setup-params.ts +++ b/packages/contracts/plugin-setup-params.ts @@ -1,9 +1,9 @@ -import governanceBuildMetadata from './src/governance-build-metadata.json'; -import governanceReleaseMetadata from './src/governance-release-metadata.json'; -import personalSpaceAdminBuildMetadata from './src/personal-space-admin-build-metadata.json'; -import personalSpaceAdminReleaseMetadata from './src/personal-space-admin-release-metadata.json'; -import spaceBuildMetadata from './src/space-build-metadata.json'; -import spaceReleaseMetadata from './src/space-release-metadata.json'; +import governanceBuildMetadata from './src/governance/governance-build-metadata.json'; +import governanceReleaseMetadata from './src/governance/governance-release-metadata.json'; +import personalSpaceAdminBuildMetadata from './src/personal/personal-space-admin-build-metadata.json'; +import personalSpaceAdminReleaseMetadata from './src/personal/personal-space-admin-release-metadata.json'; +import spaceBuildMetadata from './src/space/space-build-metadata.json'; +import spaceReleaseMetadata from './src/space/space-release-metadata.json'; export const SpacePluginSetupParams: PluginSetupParams = { PLUGIN_REPO_ENS_NAME: 'geo-browser-space', diff --git a/packages/contracts/src/MemberAccessExecuteCondition.sol b/packages/contracts/src/conditions/MemberAccessExecuteCondition.sol similarity index 98% rename from packages/contracts/src/MemberAccessExecuteCondition.sol rename to packages/contracts/src/conditions/MemberAccessExecuteCondition.sol index c27b2be..f6a784e 100644 --- a/packages/contracts/src/MemberAccessExecuteCondition.sol +++ b/packages/contracts/src/conditions/MemberAccessExecuteCondition.sol @@ -5,7 +5,7 @@ pragma solidity 0.8.17; import {IDAO} from "@aragon/osx/core/dao/IDAO.sol"; import {PermissionCondition} from "@aragon/osx/core/permission/PermissionCondition.sol"; import {PermissionManager} from "@aragon/osx/core/permission/PermissionManager.sol"; -import {MEMBER_PERMISSION_ID} from "./constants.sol"; +import {MEMBER_PERMISSION_ID} from "../constants.sol"; /// @notice The condition associated with `TestSharedPlugin` contract MemberAccessExecuteCondition is PermissionCondition { diff --git a/packages/contracts/src/OnlyPluginUpgraderCondition.sol b/packages/contracts/src/conditions/OnlyPluginUpgraderCondition.sol similarity index 100% rename from packages/contracts/src/OnlyPluginUpgraderCondition.sol rename to packages/contracts/src/conditions/OnlyPluginUpgraderCondition.sol diff --git a/packages/contracts/src/GovernancePluginsSetup.sol b/packages/contracts/src/governance/GovernancePluginsSetup.sol similarity index 98% rename from packages/contracts/src/GovernancePluginsSetup.sol rename to packages/contracts/src/governance/GovernancePluginsSetup.sol index d6fc786..7d414c1 100644 --- a/packages/contracts/src/GovernancePluginsSetup.sol +++ b/packages/contracts/src/governance/GovernancePluginsSetup.sol @@ -8,8 +8,8 @@ import {IDAO} from "@aragon/osx/core/dao/IDAO.sol"; import {PluginSetup, IPluginSetup} from "@aragon/osx/framework/plugin/setup/PluginSetup.sol"; import {PluginSetupProcessor} from "@aragon/osx/framework/plugin/setup/PluginSetupProcessor.sol"; import {MemberAccessPlugin} from "./MemberAccessPlugin.sol"; -import {MemberAccessExecuteCondition} from "./MemberAccessExecuteCondition.sol"; -import {OnlyPluginUpgraderCondition} from "./OnlyPluginUpgraderCondition.sol"; +import {MemberAccessExecuteCondition} from "../conditions/MemberAccessExecuteCondition.sol"; +import {OnlyPluginUpgraderCondition} from "../conditions/OnlyPluginUpgraderCondition.sol"; import {MainVotingPlugin} from "./MainVotingPlugin.sol"; import {MajorityVotingBase} from "@aragon/osx/plugins/governance/majority-voting/MajorityVotingBase.sol"; diff --git a/packages/contracts/src/MainVotingPlugin.sol b/packages/contracts/src/governance/MainVotingPlugin.sol similarity index 99% rename from packages/contracts/src/MainVotingPlugin.sol rename to packages/contracts/src/governance/MainVotingPlugin.sol index 1e6e739..c3e979c 100644 --- a/packages/contracts/src/MainVotingPlugin.sol +++ b/packages/contracts/src/governance/MainVotingPlugin.sol @@ -9,7 +9,7 @@ import {Addresslist} from "@aragon/osx/plugins/utils/Addresslist.sol"; import {RATIO_BASE, _applyRatioCeiled} from "@aragon/osx/plugins/utils/Ratio.sol"; import {IMajorityVoting} from "@aragon/osx/plugins/governance/majority-voting/IMajorityVoting.sol"; import {MajorityVotingBase} from "@aragon/osx/plugins/governance/majority-voting/MajorityVotingBase.sol"; -import {MEMBER_PERMISSION_ID} from "./constants.sol"; +import {MEMBER_PERMISSION_ID} from "../constants.sol"; // The [ERC-165](https://eips.ethereum.org/EIPS/eip-165) interface ID of the contract. bytes4 constant MAIN_SPACE_VOTING_INTERFACE_ID = MainVotingPlugin.initialize.selector ^ diff --git a/packages/contracts/src/MemberAccessPlugin.sol b/packages/contracts/src/governance/MemberAccessPlugin.sol similarity index 99% rename from packages/contracts/src/MemberAccessPlugin.sol rename to packages/contracts/src/governance/MemberAccessPlugin.sol index 48d1e42..22f0ae5 100644 --- a/packages/contracts/src/MemberAccessPlugin.sol +++ b/packages/contracts/src/governance/MemberAccessPlugin.sol @@ -10,7 +10,7 @@ import {PluginUUPSUpgradeable} from "@aragon/osx/core/plugin/PluginUUPSUpgradeab import {ProposalUpgradeable} from "@aragon/osx/core/plugin/proposal/ProposalUpgradeable.sol"; import {IMultisig} from "@aragon/osx/plugins/governance/multisig/IMultisig.sol"; import {MainVotingPlugin, MAIN_SPACE_VOTING_INTERFACE_ID} from "./MainVotingPlugin.sol"; -import {MEMBER_PERMISSION_ID} from "./constants.sol"; +import {MEMBER_PERMISSION_ID} from "../constants.sol"; bytes4 constant MEMBER_ACCESS_INTERFACE_ID = MemberAccessPlugin.initialize.selector ^ MemberAccessPlugin.updateMultisigSettings.selector ^ diff --git a/packages/contracts/src/governance-build-metadata.json b/packages/contracts/src/governance/governance-build-metadata.json similarity index 100% rename from packages/contracts/src/governance-build-metadata.json rename to packages/contracts/src/governance/governance-build-metadata.json diff --git a/packages/contracts/src/governance-release-metadata.json b/packages/contracts/src/governance/governance-release-metadata.json similarity index 100% rename from packages/contracts/src/governance-release-metadata.json rename to packages/contracts/src/governance/governance-release-metadata.json diff --git a/packages/contracts/src/PersonalSpaceAdminPlugin.sol b/packages/contracts/src/personal/PersonalSpaceAdminPlugin.sol similarity index 97% rename from packages/contracts/src/PersonalSpaceAdminPlugin.sol rename to packages/contracts/src/personal/PersonalSpaceAdminPlugin.sol index a0acd10..097e66d 100644 --- a/packages/contracts/src/PersonalSpaceAdminPlugin.sol +++ b/packages/contracts/src/personal/PersonalSpaceAdminPlugin.sol @@ -5,7 +5,7 @@ import {SafeCastUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/mat import {ProposalUpgradeable} from "@aragon/osx/core/plugin/proposal/ProposalUpgradeable.sol"; import {PluginCloneable} from "@aragon/osx/core/plugin/PluginCloneable.sol"; import {IDAO} from "@aragon/osx/core/dao/IDAO.sol"; -import {EDITOR_PERMISSION_ID, MEMBER_PERMISSION_ID} from "./constants.sol"; +import {EDITOR_PERMISSION_ID, MEMBER_PERMISSION_ID} from "../constants.sol"; /// @title PersonalSpaceAdminPlugin /// @author Aragon - 2023 diff --git a/packages/contracts/src/PersonalSpaceAdminPluginSetup.sol b/packages/contracts/src/personal/PersonalSpaceAdminPluginSetup.sol similarity index 98% rename from packages/contracts/src/PersonalSpaceAdminPluginSetup.sol rename to packages/contracts/src/personal/PersonalSpaceAdminPluginSetup.sol index 640519e..20dca04 100644 --- a/packages/contracts/src/PersonalSpaceAdminPluginSetup.sol +++ b/packages/contracts/src/personal/PersonalSpaceAdminPluginSetup.sol @@ -9,7 +9,7 @@ import {IDAO} from "@aragon/osx/core/dao/IDAO.sol"; import {DAO} from "@aragon/osx/core/dao/DAO.sol"; import {PermissionLib} from "@aragon/osx/core/permission/PermissionLib.sol"; import {PersonalSpaceAdminPlugin} from "./PersonalSpaceAdminPlugin.sol"; -import {EDITOR_PERMISSION_ID} from "./constants.sol"; +import {EDITOR_PERMISSION_ID} from "../constants.sol"; /// @title PersonalSpaceAdminPluginSetup /// @author Aragon - 2023 diff --git a/packages/contracts/src/personal-space-admin-build-metadata.json b/packages/contracts/src/personal/personal-space-admin-build-metadata.json similarity index 100% rename from packages/contracts/src/personal-space-admin-build-metadata.json rename to packages/contracts/src/personal/personal-space-admin-build-metadata.json diff --git a/packages/contracts/src/personal-space-admin-release-metadata.json b/packages/contracts/src/personal/personal-space-admin-release-metadata.json similarity index 100% rename from packages/contracts/src/personal-space-admin-release-metadata.json rename to packages/contracts/src/personal/personal-space-admin-release-metadata.json diff --git a/packages/contracts/src/SpacePlugin.sol b/packages/contracts/src/space/SpacePlugin.sol similarity index 98% rename from packages/contracts/src/SpacePlugin.sol rename to packages/contracts/src/space/SpacePlugin.sol index e733916..45e3218 100644 --- a/packages/contracts/src/SpacePlugin.sol +++ b/packages/contracts/src/space/SpacePlugin.sol @@ -2,7 +2,7 @@ pragma solidity ^0.8.8; import {IDAO, PluginUUPSUpgradeable} from "@aragon/osx/core/plugin/PluginUUPSUpgradeable.sol"; -import {CONTENT_PERMISSION_ID, SUBSPACE_PERMISSION_ID} from "./constants.sol"; +import {CONTENT_PERMISSION_ID, SUBSPACE_PERMISSION_ID} from "../constants.sol"; bytes4 constant SPACE_INTERFACE_ID = SpacePlugin.initialize.selector ^ SpacePlugin.processGeoProposal.selector ^ diff --git a/packages/contracts/src/SpacePluginSetup.sol b/packages/contracts/src/space/SpacePluginSetup.sol similarity index 97% rename from packages/contracts/src/SpacePluginSetup.sol rename to packages/contracts/src/space/SpacePluginSetup.sol index c95a3e5..8ad2c7e 100644 --- a/packages/contracts/src/SpacePluginSetup.sol +++ b/packages/contracts/src/space/SpacePluginSetup.sol @@ -8,8 +8,8 @@ import {PermissionLib} from "@aragon/osx/core/permission/PermissionLib.sol"; import {PluginSetup, IPluginSetup} from "@aragon/osx/framework/plugin/setup/PluginSetup.sol"; import {PluginSetupProcessor} from "@aragon/osx/framework/plugin/setup/PluginSetupProcessor.sol"; import {SpacePlugin} from "./SpacePlugin.sol"; -import {OnlyPluginUpgraderCondition} from "./OnlyPluginUpgraderCondition.sol"; -import {CONTENT_PERMISSION_ID, SUBSPACE_PERMISSION_ID} from "./constants.sol"; +import {OnlyPluginUpgraderCondition} from "../conditions/OnlyPluginUpgraderCondition.sol"; +import {CONTENT_PERMISSION_ID, SUBSPACE_PERMISSION_ID} from "../constants.sol"; /// @title SpacePluginSetup /// @dev Release 1, Build 1 diff --git a/packages/contracts/src/space-build-metadata.json b/packages/contracts/src/space/space-build-metadata.json similarity index 100% rename from packages/contracts/src/space-build-metadata.json rename to packages/contracts/src/space/space-build-metadata.json diff --git a/packages/contracts/src/space-release-metadata.json b/packages/contracts/src/space/space-release-metadata.json similarity index 100% rename from packages/contracts/src/space-release-metadata.json rename to packages/contracts/src/space/space-release-metadata.json diff --git a/packages/contracts/src/test/PersonalSpaceAdminCloneFactory.sol b/packages/contracts/src/test/PersonalSpaceAdminCloneFactory.sol index 6bd91ea..bcf9f00 100644 --- a/packages/contracts/src/test/PersonalSpaceAdminCloneFactory.sol +++ b/packages/contracts/src/test/PersonalSpaceAdminCloneFactory.sol @@ -4,7 +4,7 @@ pragma solidity 0.8.17; import {Clones} from "@openzeppelin/contracts/proxy/Clones.sol"; -import {PersonalSpaceAdminPlugin} from "../PersonalSpaceAdminPlugin.sol"; +import {PersonalSpaceAdminPlugin} from "../personal/PersonalSpaceAdminPlugin.sol"; contract PersonalSpaceAdminCloneFactory { using Clones for address; diff --git a/packages/contracts/src/test/TestGovernancePluginsSetup.sol b/packages/contracts/src/test/TestGovernancePluginsSetup.sol index ca21658..a3a2743 100644 --- a/packages/contracts/src/test/TestGovernancePluginsSetup.sol +++ b/packages/contracts/src/test/TestGovernancePluginsSetup.sol @@ -8,9 +8,9 @@ import {IDAO} from "@aragon/osx/core/dao/IDAO.sol"; import {PluginSetup, IPluginSetup} from "@aragon/osx/framework/plugin/setup/PluginSetup.sol"; import {PluginSetupProcessor} from "@aragon/osx/framework/plugin/setup/PluginSetupProcessor.sol"; import {TestMemberAccessPlugin} from "./TestMemberAccessPlugin.sol"; -import {MemberAccessExecuteCondition} from "../MemberAccessExecuteCondition.sol"; -import {OnlyPluginUpgraderCondition} from "../OnlyPluginUpgraderCondition.sol"; -import {MainVotingPlugin} from "../MainVotingPlugin.sol"; +import {MemberAccessExecuteCondition} from "../conditions/MemberAccessExecuteCondition.sol"; +import {OnlyPluginUpgraderCondition} from "../conditions/OnlyPluginUpgraderCondition.sol"; +import {MainVotingPlugin} from "../governance/MainVotingPlugin.sol"; import {MajorityVotingBase} from "@aragon/osx/plugins/governance/majority-voting/MajorityVotingBase.sol"; // Not ideal, but to test this E2E, the contract needs to be cloned diff --git a/packages/contracts/src/test/TestMemberAccessPlugin.sol b/packages/contracts/src/test/TestMemberAccessPlugin.sol index 8eb3da4..5bcdf0d 100644 --- a/packages/contracts/src/test/TestMemberAccessPlugin.sol +++ b/packages/contracts/src/test/TestMemberAccessPlugin.sol @@ -3,7 +3,7 @@ pragma solidity ^0.8.8; import {IDAO} from "@aragon/osx/core/dao/IDAO.sol"; -import {MemberAccessPlugin} from "../MemberAccessPlugin.sol"; +import {MemberAccessPlugin} from "../governance/MemberAccessPlugin.sol"; /// @notice A clone of the MemberAccessPlugin contract, just to test contract TestMemberAccessPlugin is MemberAccessPlugin { diff --git a/packages/contracts/test/unit-testing/governance-plugins-setup.ts b/packages/contracts/test/unit-testing/governance-plugins-setup.ts index 83346bb..f08a5e3 100644 --- a/packages/contracts/test/unit-testing/governance-plugins-setup.ts +++ b/packages/contracts/test/unit-testing/governance-plugins-setup.ts @@ -1,4 +1,4 @@ -import buildMetadata from '../../src/governance-build-metadata.json'; +import buildMetadata from '../../src/governance/governance-build-metadata.json'; import { DAO, GovernancePluginsSetup, diff --git a/packages/contracts/test/unit-testing/personal-space-admin-plugin-setup.ts b/packages/contracts/test/unit-testing/personal-space-admin-plugin-setup.ts index 86220de..4d38f41 100644 --- a/packages/contracts/test/unit-testing/personal-space-admin-plugin-setup.ts +++ b/packages/contracts/test/unit-testing/personal-space-admin-plugin-setup.ts @@ -1,4 +1,4 @@ -import metadata from '../../src/personal-space-admin-build-metadata.json'; +import metadata from '../../src/personal/personal-space-admin-build-metadata.json'; import { PersonalSpaceAdminPlugin__factory, PersonalSpaceAdminPluginSetup, diff --git a/packages/contracts/test/unit-testing/space-plugin-setup.ts b/packages/contracts/test/unit-testing/space-plugin-setup.ts index 478004b..337d674 100644 --- a/packages/contracts/test/unit-testing/space-plugin-setup.ts +++ b/packages/contracts/test/unit-testing/space-plugin-setup.ts @@ -1,4 +1,4 @@ -import buildMetadata from '../../src/space-build-metadata.json'; +import buildMetadata from '../../src/space/space-build-metadata.json'; import { DAO, SpacePlugin__factory, From c251a33f1269bb5885b2e3f266f43c67e4a39730 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8r=E2=88=82=C2=A1?= Date: Wed, 24 Jan 2024 15:37:38 +0100 Subject: [PATCH 27/29] Updated diagram --- img/Geo Diagrams.drawio | 31 ++++++++++++++++++++----------- img/upgrader-1.svg | 2 +- 2 files changed, 21 insertions(+), 12 deletions(-) diff --git a/img/Geo Diagrams.drawio b/img/Geo Diagrams.drawio index 0a3ec45..e61d846 100644 --- a/img/Geo Diagrams.drawio +++ b/img/Geo Diagrams.drawio @@ -1,4 +1,4 @@ - + @@ -126,7 +126,7 @@ - + @@ -144,19 +144,19 @@ - + - + - + - + @@ -173,7 +173,7 @@ - + @@ -182,8 +182,8 @@ - - + + @@ -197,8 +197,17 @@ - - + + + + + + + + + + + diff --git a/img/upgrader-1.svg b/img/upgrader-1.svg index 3a6d0fa..26ae2b2 100644 --- a/img/upgrader-1.svg +++ b/img/upgrader-1.svg @@ -1,4 +1,4 @@ -
DAO
DAO
Plugin upgrader
address
Plugin upgrader...
Plugin Setup
Processor
Plugin Setup...
Grant permission to PSP
Call applyUpdate()
Revoke permission to PSP
Grant permission to PSP...
Execute actions
(condition)
Execute actions...
2) Apply update
2) Apply update
1) Grant
3) Revoke
1) Grant...
Upgrade plugins
Upgrade plugins
Text is not SVG - cannot display
\ No newline at end of file +
DAO
DAO
Plugin upgrader
address
Plugin upgrader...
Plugin Setup
Processor
Plugin Setup...
1) Grant permission to PSP
2) Call applyUpdate()
3) Revoke permission to PSP
1) Grant permission to PSP...
Execute actions
(condition)
Execute actions...
2) Apply update
2) Apply update
1) Grant
3) Revoke
1) Grant...
Space Plugin
Space Plugin
Main Voting
Plugin
Main Voting...
Upgrade to and call
Upgrade to and call
Text is not SVG - cannot display
\ No newline at end of file From af2bd77d4066e6a9f31b2d963ccbe55f3f32f250 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8r=E2=88=82=C2=A1?= Date: Wed, 24 Jan 2024 16:21:17 +0100 Subject: [PATCH 28/29] Minor edits --- README.md | 2 +- .../test/integration-testing/member-access-condition.ts | 2 +- packages/contracts/test/integration-testing/plugin-upgrader.ts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 26fb143..8d9e7c3 100644 --- a/README.md +++ b/README.md @@ -489,7 +489,7 @@ function prepareInstallation( Convenience functions are provided within the plugin setup contracts: ```solidity -// SpacePluginSetup.sol +// governance/SpacePluginSetup.sol function encodeInstallationParams( string memory _firstBlockContentUri, diff --git a/packages/contracts/test/integration-testing/member-access-condition.ts b/packages/contracts/test/integration-testing/member-access-condition.ts index eb17826..8169997 100644 --- a/packages/contracts/test/integration-testing/member-access-condition.ts +++ b/packages/contracts/test/integration-testing/member-access-condition.ts @@ -85,7 +85,7 @@ describe('Member Access Condition E2E', () => { ); // Create a new PluginRepo - let tx = await pluginRepoFactory.createPluginRepo( + const tx = await pluginRepoFactory.createPluginRepo( 'testing-governance-plugin-condition', deployer.address ); diff --git a/packages/contracts/test/integration-testing/plugin-upgrader.ts b/packages/contracts/test/integration-testing/plugin-upgrader.ts index f22ca9e..a407021 100644 --- a/packages/contracts/test/integration-testing/plugin-upgrader.ts +++ b/packages/contracts/test/integration-testing/plugin-upgrader.ts @@ -374,7 +374,7 @@ describe('Plugin upgrader', () => { // Prepare an update to build 2 const dat = await pSetupBuild2.encodeUpdateParams(true); // Request new perms - let tx = await psp.prepareUpdate(dao.address, { + const tx = await psp.prepareUpdate(dao.address, { currentVersionTag: { release: release, build: 1, From ac8e43c519e57fbfe7e3d7f31f4f3191ed75034e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8r=E2=88=82=C2=A1?= Date: Wed, 24 Jan 2024 16:39:15 +0100 Subject: [PATCH 29/29] Minor edit --- .../test/integration-testing/member-access-condition.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/contracts/test/integration-testing/member-access-condition.ts b/packages/contracts/test/integration-testing/member-access-condition.ts index 8169997..eb17826 100644 --- a/packages/contracts/test/integration-testing/member-access-condition.ts +++ b/packages/contracts/test/integration-testing/member-access-condition.ts @@ -85,7 +85,7 @@ describe('Member Access Condition E2E', () => { ); // Create a new PluginRepo - const tx = await pluginRepoFactory.createPluginRepo( + let tx = await pluginRepoFactory.createPluginRepo( 'testing-governance-plugin-condition', deployer.address );