From cbd2142b15d19b547fc975dacfebb29ac2aa9b81 Mon Sep 17 00:00:00 2001 From: Alain Nicolas Date: Tue, 19 Sep 2023 09:54:59 +0200 Subject: [PATCH 01/36] fix: Portal should not be initializable/upgradeable (#199) --- src/PortalRegistry.sol | 3 +-- src/example/EASPortal.sol | 2 ++ src/interface/AbstractPortal.sol | 14 ++++++-------- src/portal/DefaultPortal.sol | 2 ++ test/PortalRegistry.t.sol | 2 +- test/example/EASPortal.t.sol | 7 +------ test/integration/AttestationRegistryMass.t.sol | 3 +-- test/mocks/ValidPortalMock.sol | 2 ++ test/portal/DefaultPortal.t.sol | 17 +++-------------- 9 files changed, 19 insertions(+), 33 deletions(-) diff --git a/src/PortalRegistry.sol b/src/PortalRegistry.sol index e602e2ce..e77172b3 100644 --- a/src/PortalRegistry.sol +++ b/src/PortalRegistry.sol @@ -157,8 +157,7 @@ contract PortalRegistry is OwnableUpgradeable { bool isRevocable, string memory ownerName ) external onlyIssuers(msg.sender) { - DefaultPortal defaultPortal = new DefaultPortal(); - defaultPortal.initialize(modules, address(router)); + DefaultPortal defaultPortal = new DefaultPortal(modules, address(router)); register(address(defaultPortal), name, description, isRevocable, ownerName); } diff --git a/src/example/EASPortal.sol b/src/example/EASPortal.sol index a3b22af4..6687b0ce 100644 --- a/src/example/EASPortal.sol +++ b/src/example/EASPortal.sol @@ -38,6 +38,8 @@ contract EASPortal is AbstractPortal { /// @notice Error thrown when trying to bulk revoke attestations error NoBulkRevocation(); + constructor(address[] memory modules, address router) AbstractPortal(modules, router) {} + function withdraw(address payable to, uint256 amount) external override {} function attest(AttestationRequest memory attestationRequest) public payable { diff --git a/src/interface/AbstractPortal.sol b/src/interface/AbstractPortal.sol index 11637aa0..aea0fa18 100644 --- a/src/interface/AbstractPortal.sol +++ b/src/interface/AbstractPortal.sol @@ -5,12 +5,10 @@ import { AttestationRegistry } from "../AttestationRegistry.sol"; import { ModuleRegistry } from "../ModuleRegistry.sol"; import { PortalRegistry } from "../PortalRegistry.sol"; import { AttestationPayload } from "../types/Structs.sol"; -// solhint-disable-next-line max-line-length -import { IERC165Upgradeable } from "openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol"; -import { Initializable } from "openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol"; +import { IERC165 } from "openzeppelin-contracts/contracts/utils/introspection/ERC165.sol"; import { IRouter } from "../interface/IRouter.sol"; -abstract contract AbstractPortal is Initializable, IERC165Upgradeable { +abstract contract AbstractPortal is IERC165 { IRouter public router; address[] public modules; ModuleRegistry public moduleRegistry; @@ -21,12 +19,12 @@ abstract contract AbstractPortal is Initializable, IERC165Upgradeable { error OnlyPortalOwner(); /** - * @notice Contract initialization + * @notice Contract constructor * @param _modules list of modules to use for the portal (can be empty) * @param _router Router's address + * @dev This sets the addresses for the AttestationRegistry, ModuleRegistry and PortalRegistry */ - function initialize(address[] calldata _modules, address _router) public virtual initializer { - // Store addresses for linked modules, ModuleRegistry and AttestationRegistry + constructor(address[] memory _modules, address _router) { modules = _modules; router = IRouter(_router); attestationRegistry = AttestationRegistry(router.getAttestationRegistry()); @@ -144,7 +142,7 @@ abstract contract AbstractPortal is Initializable, IERC165Upgradeable { * @return The list of modules addresses linked to the Portal */ function supportsInterface(bytes4 interfaceID) public pure virtual override returns (bool) { - return interfaceID == type(AbstractPortal).interfaceId || interfaceID == type(IERC165Upgradeable).interfaceId; + return interfaceID == type(AbstractPortal).interfaceId || interfaceID == type(IERC165).interfaceId; } /** diff --git a/src/portal/DefaultPortal.sol b/src/portal/DefaultPortal.sol index 067ac041..26674153 100644 --- a/src/portal/DefaultPortal.sol +++ b/src/portal/DefaultPortal.sol @@ -10,5 +10,7 @@ import { AbstractPortal } from "../interface/AbstractPortal.sol"; * @dev This Portal does not add any logic to the AbstractPortal */ contract DefaultPortal is AbstractPortal { + constructor(address[] memory modules, address router) AbstractPortal(modules, router) {} + function withdraw(address payable to, uint256 amount) external override {} } diff --git a/test/PortalRegistry.t.sol b/test/PortalRegistry.t.sol index 438517d4..6fc583ba 100644 --- a/test/PortalRegistry.t.sol +++ b/test/PortalRegistry.t.sol @@ -43,7 +43,7 @@ contract PortalRegistryTest is Test { vm.prank(address(0)); portalRegistry.setIssuer(user); - validPortalMock = new ValidPortalMock(); + validPortalMock = new ValidPortalMock(new address[](0), address(router)); } function test_alreadyInitialized() public { diff --git a/test/example/EASPortal.t.sol b/test/example/EASPortal.t.sol index 3205b6b4..061d1938 100644 --- a/test/example/EASPortal.t.sol +++ b/test/example/EASPortal.t.sol @@ -22,16 +22,11 @@ contract EASPortalTest is Test { event BulkAttestationsRegistered(); function setUp() public { - easPortal = new EASPortal(); router.initialize(); router.updateModuleRegistry(address(moduleRegistryMock)); router.updateAttestationRegistry(address(attestationRegistryMock)); - easPortal.initialize(modules, address(router)); - } - function test_initialize() public { - vm.expectRevert("Initializable: contract is already initialized"); - easPortal.initialize(modules, address(router)); + easPortal = new EASPortal(modules, address(router)); } function test_attest() public { diff --git a/test/integration/AttestationRegistryMass.t.sol b/test/integration/AttestationRegistryMass.t.sol index 5a661fd6..b1dfe395 100644 --- a/test/integration/AttestationRegistryMass.t.sol +++ b/test/integration/AttestationRegistryMass.t.sol @@ -57,8 +57,7 @@ contract AttestationRegistryMassTest is Test { portalRegistry.setIssuer(portalOwner); vm.prank(portalOwner); address[] memory modules = new address[](0); - defaultPortal = new DefaultPortal(); - defaultPortal.initialize(modules, address(router)); + defaultPortal = new DefaultPortal(modules, address(router)); vm.prank(portalOwner); portalRegistry.register(address(defaultPortal), "Name", "Description", true, "Linea"); diff --git a/test/mocks/ValidPortalMock.sol b/test/mocks/ValidPortalMock.sol index a9480651..5d06e065 100644 --- a/test/mocks/ValidPortalMock.sol +++ b/test/mocks/ValidPortalMock.sol @@ -4,6 +4,8 @@ pragma solidity 0.8.21; import { AbstractPortal } from "../../src/interface/AbstractPortal.sol"; contract ValidPortalMock is AbstractPortal { + constructor(address[] memory modules, address router) AbstractPortal(modules, router) {} + function test() public {} function withdraw(address payable to, uint256 amount) external override {} diff --git a/test/portal/DefaultPortal.t.sol b/test/portal/DefaultPortal.t.sol index e601cf6f..8bc83448 100644 --- a/test/portal/DefaultPortal.t.sol +++ b/test/portal/DefaultPortal.t.sol @@ -32,17 +32,16 @@ contract DefaultPortalTest is Test { event BulkAttestationsRevoked(bytes32[] attestationId); function setUp() public { - modules.push(address(correctModule)); - defaultPortal = new DefaultPortal(); router.initialize(); router.updateModuleRegistry(address(moduleRegistryMock)); router.updateAttestationRegistry(address(attestationRegistryMock)); router.updatePortalRegistry(address(portalRegistryMock)); + modules.push(address(correctModule)); + defaultPortal = new DefaultPortal(modules, address(router)); + vm.prank(portalOwner); portalRegistryMock.register(address(defaultPortal), "Name", "Description", true, "Owner name"); - - defaultPortal.initialize(modules, address(router)); } function test_setup() public { @@ -53,16 +52,6 @@ contract DefaultPortalTest is Test { assertEq(portalRegistryMock.getPortalByAddress(address(defaultPortal)).ownerAddress, portalOwner); } - function test_initialize() public { - DefaultPortal defaultPortalTest = new DefaultPortal(); - vm.expectEmit(); - emit Initialized(1); - defaultPortalTest.initialize(modules, address(router)); - - vm.expectRevert("Initializable: contract is already initialized"); - defaultPortalTest.initialize(modules, address(router)); - } - function test_getModules() public { address[] memory _modules = defaultPortal.getModules(); assertEq(_modules, modules); From fd00e0b10db8c00524106dc24847bf6965ed8633 Mon Sep 17 00:00:00 2001 From: Alain Nicolas Date: Tue, 19 Sep 2023 11:12:53 +0200 Subject: [PATCH 02/36] feat: As an Issuer, I want the context of a Schema to be optional (#213) --- src/SchemaRegistry.sol | 4 ---- test/SchemaRegistry.t.sol | 11 ++--------- 2 files changed, 2 insertions(+), 13 deletions(-) diff --git a/src/SchemaRegistry.sol b/src/SchemaRegistry.sol index 89ee16c5..1ad8c5c0 100644 --- a/src/SchemaRegistry.sol +++ b/src/SchemaRegistry.sol @@ -28,8 +28,6 @@ contract SchemaRegistry is OwnableUpgradeable { error SchemaNameMissing(); /// @notice Error thrown when attempting to add a Schema without a string to define it error SchemaStringMissing(); - /// @notice Error thrown when attempting to add a Schema without a context - error SchemaContextMissing(); /// @notice Error thrown when attempting to get a Schema that is not registered error SchemaNotRegistered(); @@ -94,7 +92,6 @@ contract SchemaRegistry is OwnableUpgradeable { ) public onlyIssuers(msg.sender) { if (bytes(name).length == 0) revert SchemaNameMissing(); if (bytes(schemaString).length == 0) revert SchemaStringMissing(); - if (bytes(context).length == 0) revert SchemaContextMissing(); bytes32 schemaId = getIdFromSchemaString(schemaString); @@ -114,7 +111,6 @@ contract SchemaRegistry is OwnableUpgradeable { */ function updateContext(bytes32 schemaId, string memory context) public onlyIssuers(msg.sender) { if (!isRegistered(schemaId)) revert SchemaNotRegistered(); - if (bytes(context).length == 0) revert SchemaContextMissing(); schemas[schemaId].context = context; } diff --git a/test/SchemaRegistry.t.sol b/test/SchemaRegistry.t.sol index ac7a48fa..d85294e1 100644 --- a/test/SchemaRegistry.t.sol +++ b/test/SchemaRegistry.t.sol @@ -93,12 +93,6 @@ contract SchemaRegistryTest is Test { schemaRegistry.createSchema(expectedName, expectedDescription, expectedContext, ""); } - function testCannotCreateSchemaWithoutContext() public { - vm.expectRevert(SchemaRegistry.SchemaContextMissing.selector); - vm.prank(user); - schemaRegistry.createSchema(expectedName, expectedDescription, "", expectedString); - } - function testCannotCreateSchemaTwice() public { vm.startPrank(user); schemaRegistry.createSchema(expectedName, expectedDescription, expectedContext, expectedString); @@ -138,12 +132,11 @@ contract SchemaRegistryTest is Test { vm.stopPrank(); } - function testCannotUpdateContextWithSchemaContextMissing() public { + function testCanUpdateContextWithEmptySchemaContext() public { vm.startPrank(user); schemaRegistry.createSchema(expectedName, expectedDescription, expectedContext, expectedString); - - vm.expectRevert(SchemaRegistry.SchemaContextMissing.selector); schemaRegistry.updateContext(expectedId, ""); + assertEq(schemaRegistry.getSchema(expectedId).context, ""); vm.stopPrank(); } From 6b1d978ae89e9772f3306df6d93f5fdb711b452c Mon Sep 17 00:00:00 2001 From: Alain Nicolas Date: Wed, 20 Sep 2023 10:39:22 +0200 Subject: [PATCH 03/36] fix: When bulk running modules, loop over attestations payloads and not modules (#218) --- src/ModuleRegistry.sol | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/ModuleRegistry.sol b/src/ModuleRegistry.sol index be12aa70..8c2c3af9 100644 --- a/src/ModuleRegistry.sol +++ b/src/ModuleRegistry.sol @@ -134,11 +134,10 @@ contract ModuleRegistry is OwnableUpgradeable { } } - /** Execute the run method for all given Modules that are registered + /** Execute the modules validation for all attestations payloads for all given Modules that are registered * @param modulesAddresses the addresses of the registered modules * @param attestationsPayloads the payloads to attest * @param validationPayloads the payloads to check for each module - * @dev check if modules are registered and execute run method for each module * @dev NOTE: Currently the bulk run modules does not handle payable modules * a default value of 0 is used. */ @@ -147,7 +146,7 @@ contract ModuleRegistry is OwnableUpgradeable { AttestationPayload[] memory attestationsPayloads, bytes[][] memory validationPayloads ) public { - for (uint32 i = 0; i < modulesAddresses.length; i++) { + for (uint32 i = 0; i < attestationsPayloads.length; i++) { runModules(modulesAddresses, attestationsPayloads[i], validationPayloads[i], 0); } } From 8e0efd65fa820240e73f75d1925f8495a64fe7e9 Mon Sep 17 00:00:00 2001 From: Alain Nicolas Date: Wed, 20 Sep 2023 10:43:46 +0200 Subject: [PATCH 04/36] fix: The mass import feature should emit an AttestationRegistered event for each attestation created (#216) --- src/AttestationRegistry.sol | 1 + test/AttestationRegistry.t.sol | 14 ++++---------- 2 files changed, 5 insertions(+), 10 deletions(-) diff --git a/src/AttestationRegistry.sol b/src/AttestationRegistry.sol index a60c9f62..085dae48 100644 --- a/src/AttestationRegistry.sol +++ b/src/AttestationRegistry.sol @@ -145,6 +145,7 @@ contract AttestationRegistry is OwnableUpgradeable { attestationsPayloads[i].subject, attestationsPayloads[i].attestationData ); + emit AttestationRegistered(id); } } diff --git a/test/AttestationRegistry.t.sol b/test/AttestationRegistry.t.sol index 342539f2..f6d3f1b2 100644 --- a/test/AttestationRegistry.t.sol +++ b/test/AttestationRegistry.t.sol @@ -164,18 +164,12 @@ contract AttestationRegistryTest is Test { payloadsToAttest[0] = attestationsPayloads[0]; payloadsToAttest[1] = attestationsPayloads[1]; - bool isRegistered1 = attestationRegistry.isRegistered(bytes32(abi.encode(1))); - assertFalse(isRegistered1); - bool isRegistered2 = attestationRegistry.isRegistered(bytes32(abi.encode(2))); - assertFalse(isRegistered2); - + vm.expectEmit(true, true, true, true); + emit AttestationRegistered(bytes32(abi.encode(1))); + vm.expectEmit(true, true, true, true); + emit AttestationRegistered(bytes32(abi.encode(2))); vm.prank(address(0)); attestationRegistry.massImport(payloadsToAttest, portal); - - isRegistered1 = attestationRegistry.isRegistered(bytes32(abi.encode(1))); - assertTrue(isRegistered1); - isRegistered2 = attestationRegistry.isRegistered(bytes32(abi.encode(2))); - assertTrue(isRegistered2); } function test_replace(AttestationPayload memory attestationPayload) public { From 578b42331e873aa53fb9bf726cf4929311b7570f Mon Sep 17 00:00:00 2001 From: Satyajeet Kolhapure <77279246+satyajeetkolhapure@users.noreply.github.com> Date: Fri, 22 Sep 2023 13:22:06 +0100 Subject: [PATCH 05/36] feat: As an attestation issuer, I would like to remain compatible with the ERC-721 standard (#220) Co-authored-by: Satyajeet Kolhapure Co-authored-by: Alain Nicolas --- src/example/NFTPortal.sol | 64 ++++++++++++++++++++++++++++++++ test/example/NFTPortal.t.sol | 71 ++++++++++++++++++++++++++++++++++++ 2 files changed, 135 insertions(+) create mode 100644 src/example/NFTPortal.sol create mode 100644 test/example/NFTPortal.t.sol diff --git a/src/example/NFTPortal.sol b/src/example/NFTPortal.sol new file mode 100644 index 00000000..38315d34 --- /dev/null +++ b/src/example/NFTPortal.sol @@ -0,0 +1,64 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.21; + +import { IERC721, ERC721 } from "openzeppelin-contracts/contracts/token/ERC721/ERC721.sol"; +import { IERC165 } from "openzeppelin-contracts/contracts/utils/introspection/ERC165.sol"; +import { AbstractPortal } from "../interface/AbstractPortal.sol"; +import { Attestation, AttestationPayload } from "../types/Structs.sol"; + +/** + * @title NFT Portal + * @author Consensys + * @notice This contract aims to provide ERC 721 compatibility + * @dev This Portal implements parts of ERC 721 - balanceOf and ownerOf functions + */ +contract NFTPortal is AbstractPortal, ERC721 { + mapping(bytes owner => uint256 numberOfAttestations) private numberOfAttestationsPerOwner; + + constructor( + address[] memory modules, + address router + ) AbstractPortal(modules, router) ERC721("NFTPortal", "NFTPortal") {} + + /** + * @notice Count all attestations assigned to an owner + * @param owner An address for whom to query the balance + * @return The number of attestations owned by `owner`, possibly zero + */ + function balanceOf(address owner) public view virtual override returns (uint256) { + return numberOfAttestationsPerOwner[abi.encode(owner)]; + } + + /** + * @notice Find the owner of an attestation + * @param tokenId The identifier for an attestation + * @return The address of the owner of the attestation + */ + function ownerOf(uint256 tokenId) public view virtual override returns (address) { + bytes32 attestationId = bytes32(tokenId); + Attestation memory attestation = attestationRegistry.getAttestation(attestationId); + return abi.decode(attestation.subject, (address)); + } + + /** + * @notice Method run before a payload is attested + * @param attestationPayload the attestation payload supposed to be attested + */ + function _onAttest(AttestationPayload memory attestationPayload) internal override { + numberOfAttestationsPerOwner[attestationPayload.subject]++; + } + + function withdraw(address payable to, uint256 amount) external override {} + + /** + * @notice Verifies that a specific interface is implemented by the Portal, following ERC-165 specification + * @param interfaceID the interface identifier checked in this call + * @return The list of modules addresses linked to the Portal + */ + function supportsInterface(bytes4 interfaceID) public pure virtual override(AbstractPortal, ERC721) returns (bool) { + return + interfaceID == type(AbstractPortal).interfaceId || + interfaceID == type(IERC165).interfaceId || + interfaceID == type(IERC721).interfaceId; + } +} diff --git a/test/example/NFTPortal.t.sol b/test/example/NFTPortal.t.sol new file mode 100644 index 00000000..6139c940 --- /dev/null +++ b/test/example/NFTPortal.t.sol @@ -0,0 +1,71 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.21; + +import { Test } from "forge-std/Test.sol"; +import { NFTPortal } from "../../src/example/NFTPortal.sol"; +import { Router } from "../../src/Router.sol"; +import { AbstractPortal } from "../../src/interface/AbstractPortal.sol"; +import { AttestationPayload } from "../../src/types/Structs.sol"; +import { AttestationRegistryMock } from "../mocks/AttestationRegistryMock.sol"; +import { ModuleRegistryMock } from "../mocks/ModuleRegistryMock.sol"; +import { IERC721 } from "openzeppelin-contracts/contracts/token/ERC721/ERC721.sol"; +import { IERC165 } from "openzeppelin-contracts/contracts/utils/introspection/ERC165.sol"; + +contract NFTPortalTest is Test { + address public attester = makeAddr("attester"); + NFTPortal public nftPortal; + address[] public modules = new address[](0); + ModuleRegistryMock public moduleRegistryMock = new ModuleRegistryMock(); + AttestationRegistryMock public attestationRegistryMock = new AttestationRegistryMock(); + Router public router = new Router(); + + event Initialized(uint8 version); + event AttestationRegistered(); + event BulkAttestationsRegistered(); + + function setUp() public { + router.initialize(); + router.updateModuleRegistry(address(moduleRegistryMock)); + router.updateAttestationRegistry(address(attestationRegistryMock)); + + nftPortal = new NFTPortal(modules, address(router)); + + // Create attestation payload + AttestationPayload memory attestationPayload = AttestationPayload( + bytes32(uint256(1)), + uint64(block.timestamp + 1 days), + abi.encode(address(1)), // Convert address(1) to bytes and use as subject + new bytes(1) + ); + // Create validation payload + bytes[] memory validationPayload = new bytes[](0); + // Create 2 attestations + vm.expectEmit(true, true, true, true); + emit AttestationRegistered(); + nftPortal.attest(attestationPayload, validationPayload); + vm.expectEmit(true, true, true, true); + emit AttestationRegistered(); + nftPortal.attest(attestationPayload, validationPayload); + } + + function test_balanceOf() public { + uint256 balance = nftPortal.balanceOf(address(1)); + assertEq(balance, 2); + } + + function test_ownerOf() public { + address ownerOfFirstAttestation = nftPortal.ownerOf(1); + address ownerOfSecondAttestation = nftPortal.ownerOf(2); + assertEq(ownerOfFirstAttestation, address(1)); + assertEq(ownerOfSecondAttestation, address(1)); + } + + function testSupportsInterface() public { + bool isIERC165Supported = nftPortal.supportsInterface(type(IERC165).interfaceId); + assertTrue(isIERC165Supported); + bool isIERC721Supported = nftPortal.supportsInterface(type(IERC721).interfaceId); + assertTrue(isIERC721Supported); + bool isEASAbstractPortalSupported = nftPortal.supportsInterface(type(AbstractPortal).interfaceId); + assertTrue(isEASAbstractPortalSupported); + } +} From 75941aedbd8979549d8367c973385a5db56baa7c Mon Sep 17 00:00:00 2001 From: ollie <67156692+0xEillo@users.noreply.github.com> Date: Fri, 22 Sep 2023 14:30:03 +0200 Subject: [PATCH 06/36] feat: add msg.value and _attester() to hooks (#221) --- src/example/EASPortal.sol | 4 ---- src/example/NFTPortal.sol | 6 +++++- src/interface/AbstractPortal.sol | 34 +++++++++++++++++++------------- test/example/EASPortal.t.sol | 6 ------ test/portal/DefaultPortal.t.sol | 7 ------- 5 files changed, 25 insertions(+), 32 deletions(-) diff --git a/src/example/EASPortal.sol b/src/example/EASPortal.sol index 6687b0ce..058c2cdd 100644 --- a/src/example/EASPortal.sol +++ b/src/example/EASPortal.sol @@ -83,8 +83,4 @@ contract EASPortal is AbstractPortal { function _onBulkRevoke(bytes32[] memory /*attestationIds*/) internal pure override { revert NoBulkRevocation(); } - - function _getAttester() public view override returns (address) { - return msg.sender; - } } diff --git a/src/example/NFTPortal.sol b/src/example/NFTPortal.sol index 38315d34..8e7a9963 100644 --- a/src/example/NFTPortal.sol +++ b/src/example/NFTPortal.sol @@ -44,7 +44,11 @@ contract NFTPortal is AbstractPortal, ERC721 { * @notice Method run before a payload is attested * @param attestationPayload the attestation payload supposed to be attested */ - function _onAttest(AttestationPayload memory attestationPayload) internal override { + function _onAttest( + AttestationPayload memory attestationPayload, + address /*attester*/, + uint256 /*value*/ + ) internal override { numberOfAttestationsPerOwner[attestationPayload.subject]++; } diff --git a/src/interface/AbstractPortal.sol b/src/interface/AbstractPortal.sol index aea0fa18..85a37e2a 100644 --- a/src/interface/AbstractPortal.sol +++ b/src/interface/AbstractPortal.sol @@ -48,9 +48,9 @@ abstract contract AbstractPortal is IERC165 { function attest(AttestationPayload memory attestationPayload, bytes[] memory validationPayloads) public payable { moduleRegistry.runModules(modules, attestationPayload, validationPayloads, msg.value); - _onAttest(attestationPayload); + _onAttest(attestationPayload, getAttester(), msg.value); - attestationRegistry.attest(attestationPayload, _getAttester()); + attestationRegistry.attest(attestationPayload, getAttester()); } /** @@ -58,15 +58,12 @@ abstract contract AbstractPortal is IERC165 { * @param attestationsPayloads the payloads to attest * @param validationPayloads the payloads to validate via the modules to issue the attestations */ - function bulkAttest( - AttestationPayload[] memory attestationsPayloads, - bytes[][] memory validationPayloads - ) public payable { + function bulkAttest(AttestationPayload[] memory attestationsPayloads, bytes[][] memory validationPayloads) public { moduleRegistry.bulkRunModules(modules, attestationsPayloads, validationPayloads); _onBulkAttest(attestationsPayloads, validationPayloads); - attestationRegistry.bulkAttest(attestationsPayloads, _getAttester()); + attestationRegistry.bulkAttest(attestationsPayloads, getAttester()); } /** @@ -83,9 +80,9 @@ abstract contract AbstractPortal is IERC165 { ) public payable { moduleRegistry.runModules(modules, attestationPayload, validationPayloads, msg.value); - _onReplace(attestationId, attestationPayload); + _onReplace(attestationId, attestationPayload, getAttester(), msg.value); - attestationRegistry.replace(attestationId, attestationPayload, _getAttester()); + attestationRegistry.replace(attestationId, attestationPayload, getAttester()); } /** @@ -98,12 +95,12 @@ abstract contract AbstractPortal is IERC165 { bytes32[] memory attestationIds, AttestationPayload[] memory attestationsPayloads, bytes[][] memory validationPayloads - ) public payable { + ) public { moduleRegistry.bulkRunModules(modules, attestationsPayloads, validationPayloads); _onBulkReplace(attestationIds, attestationsPayloads, validationPayloads); - attestationRegistry.bulkReplace(attestationIds, attestationsPayloads, _getAttester()); + attestationRegistry.bulkReplace(attestationIds, attestationsPayloads, getAttester()); } /** @@ -149,22 +146,31 @@ abstract contract AbstractPortal is IERC165 { * @notice Defines the address of the entity issuing attestations to the subject * @dev We strongly encourage a reflection when overriding this rule: who should be set as the attester? */ - function _getAttester() public view virtual returns (address) { + function getAttester() public view virtual returns (address) { return msg.sender; } /** * @notice Optional method run before a payload is attested * @param attestationPayload the attestation payload supposed to be attested + * @param attester the address of the attester + * @param value the value sent with the attestation */ - function _onAttest(AttestationPayload memory attestationPayload) internal virtual {} + function _onAttest(AttestationPayload memory attestationPayload, address attester, uint256 value) internal virtual {} /** * @notice Optional method run when an attestation is replaced * @param attestationId the ID of the attestation being replaced * @param attestationPayload the attestation payload to create attestation and register it + * @param attester the address of the attester + * @param value the value sent with the attestation */ - function _onReplace(bytes32 attestationId, AttestationPayload memory attestationPayload) internal virtual {} + function _onReplace( + bytes32 attestationId, + AttestationPayload memory attestationPayload, + address attester, + uint256 value + ) internal virtual {} /** * @notice Optional method run when attesting a batch of payloads diff --git a/test/example/EASPortal.t.sol b/test/example/EASPortal.t.sol index 061d1938..f765ca5e 100644 --- a/test/example/EASPortal.t.sol +++ b/test/example/EASPortal.t.sol @@ -156,10 +156,4 @@ contract EASPortalTest is Test { bool isEASAbstractPortalSupported = easPortal.supportsInterface(type(AbstractPortal).interfaceId); assertEq(isEASAbstractPortalSupported, true); } - - function test_getAttester() public { - vm.prank(attester); - address registeredAttester = easPortal._getAttester(); - assertEq(registeredAttester, attester); - } } diff --git a/test/portal/DefaultPortal.t.sol b/test/portal/DefaultPortal.t.sol index 8bc83448..868d9774 100644 --- a/test/portal/DefaultPortal.t.sol +++ b/test/portal/DefaultPortal.t.sol @@ -201,11 +201,4 @@ contract DefaultPortalTest is Test { bool isAbstractPortalSupported = defaultPortal.supportsInterface(type(AbstractPortal).interfaceId); assertEq(isAbstractPortalSupported, true); } - - function test_getAttester() public { - address attester = makeAddr("attester"); - vm.prank(attester); - address registeredAttester = defaultPortal._getAttester(); - assertEq(registeredAttester, attester); - } } From c5c0817734794a7e905a10dd0427102d15e63ecd Mon Sep 17 00:00:00 2001 From: Alain Nicolas Date: Fri, 22 Sep 2023 14:33:57 +0200 Subject: [PATCH 07/36] chore: Cleanup and improvements (#222) --- src/AttestationRegistry.sol | 1 + src/ModuleRegistry.sol | 10 +++++--- src/PortalRegistry.sol | 1 + src/Router.sol | 22 ++++++++++++++++- src/SchemaRegistry.sol | 7 ++++-- src/example/CorrectModule.sol | 9 ++++++- src/example/EASPortal.sol | 23 +++++++++++++++-- src/example/IncorrectModule.sol | 9 ++++++- src/example/MsgSenderModule.sol | 3 ++- src/example/PayableModule.sol | 3 ++- src/interface/AbstractModule.sol | 16 +++++++++++- src/interface/AbstractPortal.sol | 2 +- src/interface/IRouter.sol | 21 ++++++++++++++++ src/portal/DefaultPortal.sol | 7 ++++++ test/ModuleRegistry.t.sol | 32 ++++++++++++------------ test/PortalRegistry.t.sol | 6 ++--- test/Router.t.sol | 24 ++++++++---------- test/SchemaRegistry.t.sol | 34 +++++++++++++------------- test/example/EASPortal.t.sol | 2 +- test/example/MsgSenderModule.t.sol | 6 ++--- test/mocks/AttestationRegistryMock.sol | 24 +++++++----------- test/mocks/ModuleRegistryMock.sol | 17 ++++++------- test/mocks/PortalRegistryMock.sol | 4 --- test/portal/DefaultPortal.t.sol | 4 +-- 24 files changed, 188 insertions(+), 99 deletions(-) diff --git a/src/AttestationRegistry.sol b/src/AttestationRegistry.sol index 085dae48..f0a922f2 100644 --- a/src/AttestationRegistry.sol +++ b/src/AttestationRegistry.sol @@ -74,6 +74,7 @@ contract AttestationRegistry is OwnableUpgradeable { /** * @notice Changes the address for the Router + * @dev Only the registry owner can call this method */ function updateRouter(address _router) public onlyOwner { if (_router == address(0)) revert RouterInvalid(); diff --git a/src/ModuleRegistry.sol b/src/ModuleRegistry.sol index 8c2c3af9..11f1e2e3 100644 --- a/src/ModuleRegistry.sol +++ b/src/ModuleRegistry.sol @@ -67,6 +67,7 @@ contract ModuleRegistry is OwnableUpgradeable { /** * @notice Changes the address for the Router + * @dev Only the registry owner can call this method */ function updateRouter(address _router) public onlyOwner { if (_router == address(0)) revert RouterInvalid(); @@ -82,7 +83,8 @@ contract ModuleRegistry is OwnableUpgradeable { return contractAddress.code.length > 0; } - /** Register a Module, with its metadata and run some checks: + /** + * @notice Registers a Module, with its metadata and run some checks: * - mandatory name * - mandatory module's deployed smart contract address * - the module must be unique @@ -110,7 +112,8 @@ contract ModuleRegistry is OwnableUpgradeable { emit ModuleRegistered(name, description, moduleAddress); } - /** Execute the run method for all given Modules that are registered + /** + * @notice Executes the run method for all given Modules that are registered * @param modulesAddresses the addresses of the registered modules * @param attestationPayload the payload to attest * @param validationPayloads the payloads to check for each module (one payload per module) @@ -134,7 +137,8 @@ contract ModuleRegistry is OwnableUpgradeable { } } - /** Execute the modules validation for all attestations payloads for all given Modules that are registered + /** + * @notice Executes the modules validation for all attestations payloads for all given Modules that are registered * @param modulesAddresses the addresses of the registered modules * @param attestationsPayloads the payloads to attest * @param validationPayloads the payloads to check for each module diff --git a/src/PortalRegistry.sol b/src/PortalRegistry.sol index e77172b3..47cfa53c 100644 --- a/src/PortalRegistry.sol +++ b/src/PortalRegistry.sol @@ -59,6 +59,7 @@ contract PortalRegistry is OwnableUpgradeable { /** * @notice Changes the address for the Router + * @dev Only the registry owner can call this method */ function updateRouter(address _router) public onlyOwner { if (_router == address(0)) revert RouterInvalid(); diff --git a/src/Router.sol b/src/Router.sol index 31d2ecd4..bb15b9bd 100644 --- a/src/Router.sol +++ b/src/Router.sol @@ -7,7 +7,7 @@ import { IRouter } from "./interface/IRouter.sol"; /** * @title Router * @author Consensys - * @notice This contract aims to provides a single entrypoint for the Verax registries + * @notice This contract aims to register the addresses of the Verax registries */ contract Router is IRouter, OwnableUpgradeable { address private ATTESTATION_REGISTRY; @@ -24,37 +24,57 @@ contract Router is IRouter, OwnableUpgradeable { __Ownable_init(); } + /// @inheritdoc IRouter function getAttestationRegistry() external view override returns (address) { return ATTESTATION_REGISTRY; } + /** + * @notice Changes the address for the AttestationRegistry contract + * @param _attestationRegistry The new address of the AttestationRegistry contract + */ function updateAttestationRegistry(address _attestationRegistry) public onlyOwner { ATTESTATION_REGISTRY = _attestationRegistry; emit AttestationRegistryUpdated(_attestationRegistry); } + /// @inheritdoc IRouter function getModuleRegistry() external view override returns (address) { return MODULE_REGISTRY; } + /** + * @notice Changes the address for the ModuleRegistry contract + * @param _moduleRegistry The new address of the ModuleRegistry contract + */ function updateModuleRegistry(address _moduleRegistry) public onlyOwner { MODULE_REGISTRY = _moduleRegistry; emit ModuleRegistryUpdated(_moduleRegistry); } + /// @inheritdoc IRouter function getPortalRegistry() external view override returns (address) { return PORTAL_REGISTRY; } + /** + * @notice Changes the address for the PortalRegistry contract + * @param _portalRegistry The new address of the PortalRegistry contract + */ function updatePortalRegistry(address _portalRegistry) public onlyOwner { PORTAL_REGISTRY = _portalRegistry; emit PortalRegistryUpdated(_portalRegistry); } + /// @inheritdoc IRouter function getSchemaRegistry() external view override returns (address) { return SCHEMA_REGISTRY; } + /** + * @notice Changes the address for the SchemaRegistry contract + * @param _schemaRegistry The new address of the SchemaRegistry contract + */ function updateSchemaRegistry(address _schemaRegistry) public onlyOwner { SCHEMA_REGISTRY = _schemaRegistry; emit SchemaRegistryUpdated(_schemaRegistry); diff --git a/src/SchemaRegistry.sol b/src/SchemaRegistry.sol index 1ad8c5c0..22a502c2 100644 --- a/src/SchemaRegistry.sol +++ b/src/SchemaRegistry.sol @@ -58,6 +58,7 @@ contract SchemaRegistry is OwnableUpgradeable { /** * @notice Changes the address for the Router + * @dev Only the registry owner can call this method */ function updateRouter(address _router) public onlyOwner { if (_router == address(0)) revert RouterInvalid(); @@ -74,7 +75,8 @@ contract SchemaRegistry is OwnableUpgradeable { return keccak256(abi.encodePacked(schema)); } - /** Create a Schema, with its metadata and run some checks: + /** + * @notice Creates a Schema, with its metadata and runs some checks: * - mandatory name * - mandatory string defining the schema * - the Schema must be unique @@ -104,7 +106,8 @@ contract SchemaRegistry is OwnableUpgradeable { emit SchemaCreated(schemaId, name, description, context, schemaString); } - /** Update a context field of schema : + /** + * @notice Updates the context of a given schema * @param schemaId the schema ID * @param context the Schema context * @dev Retrieve the Schema with given ID and update its context with new value diff --git a/src/example/CorrectModule.sol b/src/example/CorrectModule.sol index f963c3cb..3ccb9cbc 100644 --- a/src/example/CorrectModule.sol +++ b/src/example/CorrectModule.sol @@ -4,12 +4,19 @@ pragma solidity 0.8.21; import { AbstractModule } from "../interface/AbstractModule.sol"; import { AttestationPayload } from "../types/Structs.sol"; +/** + * @title Correct Module + * @author Consensys + * @notice This contract illustrates a valid Module that follows the AbstractModule interface + */ contract CorrectModule is AbstractModule { + /// @dev This empty method prevents Foundry from counting this contract in code coverage function test() public {} + /// @inheritdoc AbstractModule function run( AttestationPayload memory /*attestationPayload*/, - bytes memory validationPayload, + bytes memory /*validationPayload*/, address /*txSender*/, uint256 /*value*/ ) public pure override {} diff --git a/src/example/EASPortal.sol b/src/example/EASPortal.sol index 058c2cdd..74c6c7b1 100644 --- a/src/example/EASPortal.sol +++ b/src/example/EASPortal.sol @@ -6,6 +6,7 @@ import { AttestationPayload } from "../types/Structs.sol"; /** * @title EAS Portal + * @author Consensys * @notice This is an example of how to maintain interoperability with EAS - https://attest.sh */ contract EASPortal is AbstractPortal { @@ -29,7 +30,7 @@ contract EASPortal is AbstractPortal { AttestationRequestData data; } - bytes32 private relationshipSchemaId = 0x89bd76e17fd84df8e1e448fa1b46dd8d97f7e8e806552b003f8386a5aebcb9f0; + bytes32 private _relationshipSchemaId = 0x89bd76e17fd84df8e1e448fa1b46dd8d97f7e8e806552b003f8386a5aebcb9f0; /// @notice Error thrown when reference attestation with refUID is not registered error ReferenceAttestationNotRegistered(); @@ -40,8 +41,14 @@ contract EASPortal is AbstractPortal { constructor(address[] memory modules, address router) AbstractPortal(modules, router) {} + /// @inheritdoc AbstractPortal function withdraw(address payable to, uint256 amount) external override {} + /** + * @notice Issues a Verax attestation based on an EAS attestation + * @param attestationRequest the EAS payload to attest + * @dev If a related EAS attestation exists, it will also be attested on Verax and linked via the dedicated Schema + */ function attest(AttestationRequest memory attestationRequest) public payable { bytes[] memory validationPayload = new bytes[](0); @@ -60,7 +67,7 @@ contract EASPortal is AbstractPortal { bytes32 attestationId = bytes32(abi.encode(attestationIdCounter)); AttestationPayload memory relationshipAttestationPayload = AttestationPayload( - relationshipSchemaId, + _relationshipSchemaId, attestationRequest.data.expirationTime, abi.encodePacked(attestationRequest.data.refUID), abi.encode(attestationId, "EASrefUID", attestationRequest.data.refUID) @@ -70,16 +77,28 @@ contract EASPortal is AbstractPortal { } } + /** + * @notice Issues Verax attestations in bulk, based on a list of EAS attestations + * @param attestationsRequests the EAS payloads to attest + */ function bulkAttest(AttestationRequest[] memory attestationsRequests) external payable { for (uint256 i = 0; i < attestationsRequests.length; i++) { attest(attestationsRequests[i]); } } + /** + * @inheritdoc AbstractPortal + * @notice This portal doesn't allow for an attestation to be revoked + */ function _onRevoke(bytes32 /*attestationId*/) internal pure override { revert NoRevocation(); } + /** + * @inheritdoc AbstractPortal + * @notice This portal doesn't allow for attestations to be revoked + */ function _onBulkRevoke(bytes32[] memory /*attestationIds*/) internal pure override { revert NoBulkRevocation(); } diff --git a/src/example/IncorrectModule.sol b/src/example/IncorrectModule.sol index 73211a1e..fc849a18 100644 --- a/src/example/IncorrectModule.sol +++ b/src/example/IncorrectModule.sol @@ -1,4 +1,11 @@ // SPDX-License-Identifier: MIT pragma solidity 0.8.21; -contract IncorrectModule {} +/** + * @title Incorrect Module + * @author Consensys + * @notice This contract illustrates an invalid Module that doesn't follow the AbstractModule interface + */ +contract IncorrectModule { + +} diff --git a/src/example/MsgSenderModule.sol b/src/example/MsgSenderModule.sol index d7f05d08..5cdc3a95 100644 --- a/src/example/MsgSenderModule.sol +++ b/src/example/MsgSenderModule.sol @@ -25,7 +25,8 @@ contract MsgSenderModule is AbstractModule { } /** - * @notice The main method for the module, running the check + * @inheritdoc AbstractModule + * @notice If the transaction sender is not the expected address, an error is thrown */ function run( AttestationPayload memory /*_attestationPayload*/, diff --git a/src/example/PayableModule.sol b/src/example/PayableModule.sol index 14a5c82f..ddf1804c 100644 --- a/src/example/PayableModule.sol +++ b/src/example/PayableModule.sol @@ -32,7 +32,8 @@ contract PayableModule is Ownable, AbstractModule { } /** - * @notice The main method for the module, running the check + * @inheritdoc AbstractModule + * @notice If the paid value is below the expected amount, an error is thrown * @param _value The value sent for the attestation */ function run( diff --git a/src/interface/AbstractModule.sol b/src/interface/AbstractModule.sol index 8c7fda6d..4c333daf 100644 --- a/src/interface/AbstractModule.sol +++ b/src/interface/AbstractModule.sol @@ -4,7 +4,19 @@ pragma solidity 0.8.21; import { AttestationPayload } from "../types/Structs.sol"; import { IERC165 } from "openzeppelin-contracts/contracts/utils/introspection/IERC165.sol"; +/** + * @title Abstract Module + * @author Consensys + * @notice Defines the minimal Module interface + */ abstract contract AbstractModule is IERC165 { + /** + * @notice Executes the module's custom logic. + * @param attestationPayload The incoming attestation data. + * @param validationPayload Additional data required for verification. + * @param txSender The transaction sender's address. + * @param value The transaction value. + */ function run( AttestationPayload memory attestationPayload, bytes memory validationPayload, @@ -13,7 +25,9 @@ abstract contract AbstractModule is IERC165 { ) public virtual; /** - * @notice To check this contract implements the Module interface + * @notice Checks if the contract implements the Module interface. + * @param interfaceID The ID of the interface to check. + * @return A boolean indicating interface support. */ function supportsInterface(bytes4 interfaceID) public pure virtual override returns (bool) { return interfaceID == type(AbstractModule).interfaceId || interfaceID == type(IERC165).interfaceId; diff --git a/src/interface/AbstractPortal.sol b/src/interface/AbstractPortal.sol index 85a37e2a..11abaf69 100644 --- a/src/interface/AbstractPortal.sol +++ b/src/interface/AbstractPortal.sol @@ -40,7 +40,7 @@ abstract contract AbstractPortal is IERC165 { function withdraw(address payable to, uint256 amount) external virtual; /** - * @notice attest the schema with given attestationPayload and validationPayload + * @notice Attest the schema with given attestationPayload and validationPayload * @param attestationPayload the payload to attest * @param validationPayloads the payloads to validate via the modules to issue the attestations * @dev Runs all modules for the portal and registers the attestation using AttestationRegistry diff --git a/src/interface/IRouter.sol b/src/interface/IRouter.sol index ef6b4789..72faa5fa 100644 --- a/src/interface/IRouter.sol +++ b/src/interface/IRouter.sol @@ -1,12 +1,33 @@ // SPDX-License-Identifier: MIT pragma solidity 0.8.21; +/** + * @title Router + * @author Consensys + * @notice This contract aims to provides a single entrypoint for the Verax registries + */ interface IRouter { + /** + * @notice Gives the address for the AttestationRegistry contract + * @return The current address of the AttestationRegistry contract + */ function getAttestationRegistry() external view returns (address); + /** + * @notice Gives the address for the ModuleRegistry contract + * @return The current address of the ModuleRegistry contract + */ function getModuleRegistry() external view returns (address); + /** + * @notice Gives the address for the PortalRegistry contract + * @return The current address of the PortalRegistry contract + */ function getPortalRegistry() external view returns (address); + /** + * @notice Gives the address for the SchemaRegistry contract + * @return The current address of the SchemaRegistry contract + */ function getSchemaRegistry() external view returns (address); } diff --git a/src/portal/DefaultPortal.sol b/src/portal/DefaultPortal.sol index 26674153..0e28af63 100644 --- a/src/portal/DefaultPortal.sol +++ b/src/portal/DefaultPortal.sol @@ -10,7 +10,14 @@ import { AbstractPortal } from "../interface/AbstractPortal.sol"; * @dev This Portal does not add any logic to the AbstractPortal */ contract DefaultPortal is AbstractPortal { + /** + * @notice Contract constructor + * @param modules list of modules to use for the portal (can be empty) + * @param router the Router's address + * @dev This sets the addresses for the AttestationRegistry, ModuleRegistry and PortalRegistry + */ constructor(address[] memory modules, address router) AbstractPortal(modules, router) {} + /// @inheritdoc AbstractPortal function withdraw(address payable to, uint256 amount) external override {} } diff --git a/test/ModuleRegistry.t.sol b/test/ModuleRegistry.t.sol index 99e01b9a..5719a97e 100644 --- a/test/ModuleRegistry.t.sol +++ b/test/ModuleRegistry.t.sol @@ -42,7 +42,7 @@ contract ModuleRegistryTest is Test { ); } - function testAlreadyInitialized() public { + function test_initialize_ContractAlreadyInitialized() public { vm.expectRevert("Initializable: contract is already initialized"); moduleRegistry.initialize(); } @@ -64,7 +64,7 @@ contract ModuleRegistryTest is Test { testModuleRegistry.updateRouter(address(0)); } - function testIsContractAddress() public { + function test_isContractAddress() public { // isContractAddress should return false for EOA address address eoaAddress = vm.addr(1); bool eoaAddressResult = moduleRegistry.isContractAddress(eoaAddress); @@ -76,7 +76,7 @@ contract ModuleRegistryTest is Test { assertEq(contractAddressResult, true); } - function testRegisterModule() public { + function test_register() public { vm.expectEmit(); emit ModuleRegistered(expectedName, expectedDescription, expectedAddress); vm.prank(user); @@ -88,33 +88,33 @@ contract ModuleRegistryTest is Test { assertEq(description, expectedDescription); } - function testCannotRegisterModuleWithInvalidIssuer() public { + function test_register_OnlyIssuer() public { vm.expectRevert(ModuleRegistry.OnlyIssuer.selector); vm.startPrank(makeAddr("InvalidIssuer")); moduleRegistry.register(expectedName, expectedDescription, expectedAddress); vm.stopPrank(); } - function testCannotRegisterModuleWithoutName() public { + function test_register_ModuleNameMissing() public { vm.expectRevert(ModuleRegistry.ModuleNameMissing.selector); vm.prank(user); moduleRegistry.register("", expectedDescription, expectedAddress); } - function testCannotRegisterModuleWithInvalidModuleAddress() public { + function test_register_ModuleAddressInvalid() public { vm.expectRevert(ModuleRegistry.ModuleAddressInvalid.selector); vm.prank(user); moduleRegistry.register(expectedName, expectedDescription, vm.addr(1)); //vm.addr(1) gives EOA address } - function testCannotRegisterModuleWhichHasNotImplementedAbstractModule() public { + function test_register_ModuleInvalid() public { IncorrectModule incorrectModule = new IncorrectModule(); vm.expectRevert(ModuleRegistry.ModuleInvalid.selector); vm.prank(user); moduleRegistry.register(expectedName, expectedDescription, address(incorrectModule)); } - function testCannotRegisterModuleTwice() public { + function test_register_ModuleAlreadyExists() public { vm.prank(user); moduleRegistry.register(expectedName, expectedDescription, expectedAddress); vm.expectRevert(ModuleRegistry.ModuleAlreadyExists.selector); @@ -122,7 +122,7 @@ contract ModuleRegistryTest is Test { moduleRegistry.register(expectedName, expectedDescription, expectedAddress); } - function testStoreModuleAddress() public { + function test_getModulesNumber() public { uint256 modulesNumber = moduleRegistry.getModulesNumber(); assertEq(modulesNumber, 0); vm.prank(user); @@ -132,7 +132,7 @@ contract ModuleRegistryTest is Test { assertEq(modulesNumber, 1); } - function testRunModules() public { + function test_runModules() public { // Register 2 modules address[] memory moduleAddresses = new address[](2); moduleAddresses[0] = address(new CorrectModule()); @@ -147,7 +147,7 @@ contract ModuleRegistryTest is Test { moduleRegistry.runModules(moduleAddresses, attestationPayload, validationPayload, 0); } - function testRunModulesWithIncorrectNumberOfValidationPayload() public { + function test_runModules_ModuleValidationPayloadMismatch() public { // Register 2 modules address[] memory moduleAddresses = new address[](2); moduleAddresses[0] = address(new CorrectModule()); @@ -164,7 +164,7 @@ contract ModuleRegistryTest is Test { moduleRegistry.runModules(moduleAddresses, attestationPayload, validationPayload, 0); } - function testRunModulesWithoutSendingModuleAddresses() public { + function test_runModules_withoutModule() public { // Register a module address[] memory moduleAddresses = new address[](0); @@ -174,7 +174,7 @@ contract ModuleRegistryTest is Test { moduleRegistry.runModules(moduleAddresses, attestationPayload, validationPayload, 0); } - function testRunModulesForUnregisteredModules() public { + function test_runModules_ModuleNotRegistered() public { // Create 2 modules without registration address[] memory moduleAddresses = new address[](2); moduleAddresses[0] = address(new CorrectModule()); @@ -188,7 +188,7 @@ contract ModuleRegistryTest is Test { moduleRegistry.runModules(moduleAddresses, attestationPayload, validationPayload, 0); } - function testBulkRunModules() public { + function test_bulkRunModules() public { // Register 2 modules address[] memory moduleAddresses = new address[](2); moduleAddresses[0] = address(new CorrectModule()); @@ -213,7 +213,7 @@ contract ModuleRegistryTest is Test { vm.stopPrank(); } - function testGetModuleAddress() public { + function test_getModuleAddress() public { vm.prank(user); moduleRegistry.register(expectedName, expectedDescription, expectedAddress); @@ -221,7 +221,7 @@ contract ModuleRegistryTest is Test { assertEq(moduleAddress, expectedAddress); } - function testIsModuleRegistered() public { + function test_isRegistered() public { bool isRegistered = moduleRegistry.isRegistered(expectedAddress); assertFalse(isRegistered); vm.prank(user); diff --git a/test/PortalRegistry.t.sol b/test/PortalRegistry.t.sol index 6fc583ba..5465994f 100644 --- a/test/PortalRegistry.t.sol +++ b/test/PortalRegistry.t.sol @@ -46,7 +46,7 @@ contract PortalRegistryTest is Test { validPortalMock = new ValidPortalMock(new address[](0), address(router)); } - function test_alreadyInitialized() public { + function test_initialize_ContractAlreadyInitialized() public { vm.expectRevert("Initializable: contract is already initialized"); portalRegistry.initialize(); } @@ -60,7 +60,7 @@ contract PortalRegistryTest is Test { assertEq(routerAddress, address(1)); } - function test_updateRouter_InvalidParameter() public { + function test_updateRouter_RouterInvalid() public { PortalRegistry testPortalRegistry = new PortalRegistry(); vm.expectRevert(PortalRegistry.RouterInvalid.selector); @@ -68,7 +68,7 @@ contract PortalRegistryTest is Test { testPortalRegistry.updateRouter(address(0)); } - function test_setIssuer_isIssuer_removeIssuer() public { + function test_removeIssuer() public { vm.startPrank(address(0)); address issuerAddress = makeAddr("Issuer"); portalRegistry.setIssuer(issuerAddress); diff --git a/test/Router.t.sol b/test/Router.t.sol index 10cc6b44..24a14c85 100644 --- a/test/Router.t.sol +++ b/test/Router.t.sol @@ -23,62 +23,58 @@ contract RouterTest is Test { router.initialize(); } - function testInitialize() public { - vm.expectEmit(); - emit Initialized(1); - Router testRouter = new Router(); - testRouter.initialize(); + function test_initialize_ContractAlreadyInitialized() public { vm.expectRevert("Initializable: contract is already initialized"); - testRouter.initialize(); + router.initialize(); } - function testUpdateAttestationRegistry() public { + function test_updateAttestationRegistry() public { vm.expectEmit(); emit AttestationRegistryUpdated(attestationRegistry); router.updateAttestationRegistry(attestationRegistry); assertEq(router.getAttestationRegistry(), attestationRegistry); } - function testUpdateAttestationRegistryNotOwner() public { + function test_updateAttestationRegistry_NotOwner() public { vm.prank(user); vm.expectRevert("Ownable: caller is not the owner"); router.updateAttestationRegistry(attestationRegistry); } - function testUpdateModuleRegistry() public { + function test_updateModuleRegistry() public { vm.expectEmit(); emit ModuleRegistryUpdated(moduleRegistry); router.updateModuleRegistry(moduleRegistry); assertEq(router.getModuleRegistry(), moduleRegistry); } - function testUpdateModuleRegistryNotOwner() public { + function test_updateModuleRegistry_NotOwner() public { vm.prank(user); vm.expectRevert("Ownable: caller is not the owner"); router.updateModuleRegistry(moduleRegistry); } - function testUpdatePortalRegistry() public { + function test_updatePortalRegistry() public { vm.expectEmit(); emit PortalRegistryUpdated(portalRegistry); router.updatePortalRegistry(portalRegistry); assertEq(router.getPortalRegistry(), portalRegistry); } - function testUpdatePortalRegistryNotOwner() public { + function test_updatePortalRegistry_NotOwner() public { vm.prank(user); vm.expectRevert("Ownable: caller is not the owner"); router.updatePortalRegistry(portalRegistry); } - function testUpdateSchemaRegistry() public { + function test_updateSchemaRegistry() public { vm.expectEmit(); emit SchemaRegistryUpdated(schemaRegistry); router.updateSchemaRegistry(schemaRegistry); assertEq(router.getSchemaRegistry(), schemaRegistry); } - function testUpdateSchemaRegistryNotOwner() public { + function test_updateSchemaRegistry_NotOwner() public { vm.prank(user); vm.expectRevert("Ownable: caller is not the owner"); router.updateSchemaRegistry(schemaRegistry); diff --git a/test/SchemaRegistry.t.sol b/test/SchemaRegistry.t.sol index d85294e1..7e645357 100644 --- a/test/SchemaRegistry.t.sol +++ b/test/SchemaRegistry.t.sol @@ -34,7 +34,7 @@ contract SchemaRegistryTest is Test { portalRegistryMock.setIssuer(user); } - function testAlreadyInitialized() public { + function test_initialize_ContractAlreadyInitialized() public { vm.expectRevert("Initializable: contract is already initialized"); schemaRegistry.initialize(); } @@ -48,7 +48,7 @@ contract SchemaRegistryTest is Test { assertEq(routerAddress, address(1)); } - function test_updateRouter_InvalidParameter() public { + function test_updateRouter_RouterInvalid() public { SchemaRegistry testSchemaRegistry = new SchemaRegistry(); vm.expectRevert(SchemaRegistry.RouterInvalid.selector); @@ -56,12 +56,12 @@ contract SchemaRegistryTest is Test { testSchemaRegistry.updateRouter(address(0)); } - function testGetIdFromSchemaString() public { + function test_getIdFromSchemaString() public { bytes32 id = schemaRegistry.getIdFromSchemaString(expectedString); assertEq(id, expectedId); } - function testCreateSchema() public { + function test_createSchema() public { vm.expectEmit(); emit SchemaCreated(expectedId, expectedName, expectedDescription, expectedContext, expectedString); vm.startPrank(user); @@ -74,26 +74,26 @@ contract SchemaRegistryTest is Test { vm.stopPrank(); } - function testCannotCreateSchemaWithInvalidIssuer() public { + function test_createSchema_OnlyIssuer() public { vm.expectRevert(SchemaRegistry.OnlyIssuer.selector); vm.startPrank(makeAddr("InvalidIssuer")); schemaRegistry.createSchema(expectedName, expectedDescription, expectedContext, expectedString); vm.stopPrank(); } - function testCannotCreateSchemaWithoutName() public { + function test_createSchema_SchemaNameMissing() public { vm.expectRevert(SchemaRegistry.SchemaNameMissing.selector); vm.prank(user); schemaRegistry.createSchema("", expectedDescription, expectedContext, expectedString); } - function testCannotCreateSchemaWithoutString() public { + function test_createSchema_SchemaStringMissing() public { vm.expectRevert(SchemaRegistry.SchemaStringMissing.selector); vm.prank(user); schemaRegistry.createSchema(expectedName, expectedDescription, expectedContext, ""); } - function testCannotCreateSchemaTwice() public { + function test_createSchema_SchemaAlreadyExists() public { vm.startPrank(user); schemaRegistry.createSchema(expectedName, expectedDescription, expectedContext, expectedString); vm.expectRevert(SchemaRegistry.SchemaAlreadyExists.selector); @@ -101,7 +101,7 @@ contract SchemaRegistryTest is Test { vm.stopPrank(); } - function testUpdateContext() public { + function test_updateContext() public { vm.expectEmit(); emit SchemaCreated(expectedId, expectedName, expectedDescription, expectedContext, expectedString); vm.startPrank(user); @@ -118,21 +118,21 @@ contract SchemaRegistryTest is Test { vm.stopPrank(); } - function testCannotUpdateContextWithInvalidIssuer() public { + function test_updateContext_OnlyIssuer() public { vm.expectRevert(SchemaRegistry.OnlyIssuer.selector); vm.startPrank(makeAddr("InvalidIssuer")); schemaRegistry.updateContext(expectedId, "New context"); vm.stopPrank(); } - function testCannotUpdateContextWithSchemaNotRegistered() public { + function test_updateContext_SchemaNotRegistered() public { vm.startPrank(user); vm.expectRevert(SchemaRegistry.SchemaNotRegistered.selector); schemaRegistry.updateContext("Invalid ID", "New context"); vm.stopPrank(); } - function testCanUpdateContextWithEmptySchemaContext() public { + function test_updateContext_withEmptyContext() public { vm.startPrank(user); schemaRegistry.createSchema(expectedName, expectedDescription, expectedContext, expectedString); schemaRegistry.updateContext(expectedId, ""); @@ -140,7 +140,7 @@ contract SchemaRegistryTest is Test { vm.stopPrank(); } - function testGetSchema() public { + function test_getSchema() public { vm.startPrank(user); schemaRegistry.createSchema(expectedName, expectedDescription, expectedContext, expectedString); @@ -151,12 +151,12 @@ contract SchemaRegistryTest is Test { vm.stopPrank(); } - function testGetSchemaNotRegistered() public { + function test_getSchema_SchemaNotRegistered() public { vm.expectRevert(SchemaRegistry.SchemaNotRegistered.selector); schemaRegistry.getSchema(bytes32("not registered")); } - function testStoreSchemaId() public { + function test_getSchemasNumber() public { uint256 schemasNumber = schemaRegistry.getSchemasNumber(); assertEq(schemasNumber, 0); vm.startPrank(user); @@ -167,7 +167,7 @@ contract SchemaRegistryTest is Test { vm.stopPrank(); } - function testGetSchemaId() public { + function test_getSchemaIds() public { vm.startPrank(user); schemaRegistry.createSchema(expectedName, expectedDescription, expectedContext, expectedString); @@ -176,7 +176,7 @@ contract SchemaRegistryTest is Test { vm.stopPrank(); } - function testIsSchemaRegistered() public { + function test_isRegistered() public { bool isRegistered = schemaRegistry.isRegistered(expectedId); assertFalse(isRegistered); vm.startPrank(user); diff --git a/test/example/EASPortal.t.sol b/test/example/EASPortal.t.sol index f765ca5e..7c12d6c0 100644 --- a/test/example/EASPortal.t.sol +++ b/test/example/EASPortal.t.sol @@ -150,7 +150,7 @@ contract EASPortalTest is Test { easPortal.bulkRevoke(attestationsToRevoke); } - function testSupportsInterface() public { + function test_supportsInterface() public { bool isIERC165Supported = easPortal.supportsInterface(type(ERC165Upgradeable).interfaceId); assertEq(isIERC165Supported, true); bool isEASAbstractPortalSupported = easPortal.supportsInterface(type(AbstractPortal).interfaceId); diff --git a/test/example/MsgSenderModule.t.sol b/test/example/MsgSenderModule.t.sol index ce0be45b..9459f94f 100644 --- a/test/example/MsgSenderModule.t.sol +++ b/test/example/MsgSenderModule.t.sol @@ -24,7 +24,7 @@ contract MsgSenderModuleTest is Test { ); } - function testCorrectMsgSenderAddress() public { + function test_MsgSenderModule_correctAddress() public { assertEq(msgSenderModule.expectedMsgSender(), expectedMsgSender); bytes memory validationPayload = new bytes(0); address msgSender = expectedMsgSender; @@ -32,7 +32,7 @@ contract MsgSenderModuleTest is Test { msgSenderModule.run(attestationPayload, validationPayload, msgSender, 0); } - function testIncorrectMsgSenderAddress() public { + function test_MsgSenderModule_incorrectAddress() public { assertEq(msgSenderModule.expectedMsgSender(), expectedMsgSender); bytes memory validationPayload = new bytes(0); address incorrectMsgSender = address(1); @@ -41,7 +41,7 @@ contract MsgSenderModuleTest is Test { msgSenderModule.run(attestationPayload, validationPayload, incorrectMsgSender, 0); } - function testSupportsInterface() public { + function test_MsgSenderModule_supportsInterface() public { bool isAbstractModuleSupported = msgSenderModule.supportsInterface(type(AbstractModule).interfaceId); assertEq(isAbstractModuleSupported, true); } diff --git a/test/mocks/AttestationRegistryMock.sol b/test/mocks/AttestationRegistryMock.sol index c7d09434..61180e8f 100644 --- a/test/mocks/AttestationRegistryMock.sol +++ b/test/mocks/AttestationRegistryMock.sol @@ -17,9 +17,6 @@ contract AttestationRegistryMock { function test() public {} function attest(AttestationPayload calldata attestationPayload, address attester) public { - require(bytes32(attestationPayload.schemaId) != 0, "Invalid attestationPayload"); - require(attester != address(0), "Invalid attester"); - attestationIdCounter++; // Create attestation Attestation memory attestation = Attestation( @@ -41,33 +38,30 @@ contract AttestationRegistryMock { emit AttestationRegistered(); } - function bulkAttest(AttestationPayload[] calldata attestationsPayloads, address attester) public { - require(attestationsPayloads.length > 0, "Invalid attestationsPayloads"); - require(attester != address(0), "Invalid attester"); + function bulkAttest(AttestationPayload[] calldata /*attestationsPayloads*/, address /*attester*/) public { emit BulkAttestationsRegistered(); } - function replace(bytes32 /*attestationId*/, AttestationPayload calldata attestationPayload, address attester) public { - require(bytes32(attestationPayload.schemaId) != 0, "Invalid attestationPayload"); - require(attester != address(0), "Invalid attester"); - + function replace( + bytes32 /*attestationId*/, + AttestationPayload calldata /*attestationPayload*/, + address /*attester*/ + ) public { emit AttestationRegistered(); emit AttestationReplaced(); } function bulkReplace( - bytes32[] calldata attestationId, - AttestationPayload[] calldata attestationPayload, - address attester + bytes32[] calldata /*attestationId*/, + AttestationPayload[] calldata /*attestationPayload*/, + address /*attester*/ ) public {} function revoke(bytes32 attestationId) public { - require(bytes32(attestationId) != 0, "Invalid attestation"); emit AttestationRevoked(attestationId); } function bulkRevoke(bytes32[] memory attestationIds) public { - require(attestationIds.length > 0, "Invalid attestation"); emit BulkAttestationsRevoked(attestationIds); } diff --git a/test/mocks/ModuleRegistryMock.sol b/test/mocks/ModuleRegistryMock.sol index 33f2c86d..24a2a74d 100644 --- a/test/mocks/ModuleRegistryMock.sol +++ b/test/mocks/ModuleRegistryMock.sol @@ -10,20 +10,17 @@ contract ModuleRegistryMock { function test() public {} function runModules( - address[] memory modulesAddresses, - AttestationPayload memory attestationPayload, - bytes[] memory validationPayload, - uint256 value + address[] memory /*modulesAddresses*/, + AttestationPayload memory /*attestationPayload*/, + bytes[] memory /*validationPayload*/, + uint256 /*value*/ ) public {} function bulkRunModules( - address[] memory modulesAddresses, - AttestationPayload[] memory attestationsPayloads, - bytes[][] memory validationPayloads + address[] memory /*modulesAddresses*/, + AttestationPayload[] memory /*attestationsPayloads*/, + bytes[][] memory /*validationPayloads*/ ) public { - require(modulesAddresses.length >= 0, "Invalid modulesAddresses"); - require(attestationsPayloads.length >= 0, "Invalid attestationsPayloads"); - require(validationPayloads.length >= 0, "Invalid validationPayloads"); emit ModulesBulkRunForAttestation(); } } diff --git a/test/mocks/PortalRegistryMock.sol b/test/mocks/PortalRegistryMock.sol index f342cd38..beac6263 100644 --- a/test/mocks/PortalRegistryMock.sol +++ b/test/mocks/PortalRegistryMock.sol @@ -36,10 +36,6 @@ contract PortalRegistryMock { issuers[issuer] = true; } - /** - * @notice Checks if a given address is an issuer - * @return A flag indicating whether the given address is an issuer - */ function isIssuer(address issuer) public view returns (bool) { return issuers[issuer]; } diff --git a/test/portal/DefaultPortal.t.sol b/test/portal/DefaultPortal.t.sol index 868d9774..7cc9e19f 100644 --- a/test/portal/DefaultPortal.t.sol +++ b/test/portal/DefaultPortal.t.sol @@ -44,7 +44,7 @@ contract DefaultPortalTest is Test { portalRegistryMock.register(address(defaultPortal), "Name", "Description", true, "Owner name"); } - function test_setup() public { + function test_setUp() public { assertEq(address(defaultPortal.modules(0)), address(modules[0])); assertEq(address(defaultPortal.moduleRegistry()), address(moduleRegistryMock)); assertEq(address(defaultPortal.attestationRegistry()), address(attestationRegistryMock)); @@ -195,7 +195,7 @@ contract DefaultPortalTest is Test { defaultPortal.bulkRevoke(attestationsToRevoke); } - function testSupportsInterface() public { + function test_supportsInterface() public { bool isIERC165Supported = defaultPortal.supportsInterface(type(ERC165Upgradeable).interfaceId); assertEq(isIERC165Supported, true); bool isAbstractPortalSupported = defaultPortal.supportsInterface(type(AbstractPortal).interfaceId); From 0362d40e124a751ae600241afc3967fefd586065 Mon Sep 17 00:00:00 2001 From: Satyajeet Kolhapure <77279246+satyajeetkolhapure@users.noreply.github.com> Date: Tue, 26 Sep 2023 14:10:15 +0100 Subject: [PATCH 08/36] feat: as an attestation consumer, I want to be able to check if an address has an attestation using the ERC-1155 owner method (#227) Co-authored-by: Satyajeet Kolhapure Co-authored-by: Alain Nicolas --- src/AttestationRegistry.sol | 36 ++++++++++++++++++- test/AttestationRegistry.t.sol | 63 ++++++++++++++++++++++++++++++---- 2 files changed, 92 insertions(+), 7 deletions(-) diff --git a/src/AttestationRegistry.sol b/src/AttestationRegistry.sol index f0a922f2..57176b7e 100644 --- a/src/AttestationRegistry.sol +++ b/src/AttestationRegistry.sol @@ -2,6 +2,7 @@ pragma solidity 0.8.21; import { OwnableUpgradeable } from "openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol"; +import { ERC1155Upgradeable } from "openzeppelin-contracts-upgradeable/contracts/token/ERC1155/ERC1155Upgradeable.sol"; import { Attestation, AttestationPayload } from "./types/Structs.sol"; import { PortalRegistry } from "./PortalRegistry.sol"; import { SchemaRegistry } from "./SchemaRegistry.sol"; @@ -12,7 +13,7 @@ import { IRouter } from "./interface/IRouter.sol"; * @author Consensys * @notice This contract stores a registry of all attestations */ -contract AttestationRegistry is OwnableUpgradeable { +contract AttestationRegistry is OwnableUpgradeable, ERC1155Upgradeable { IRouter public router; uint16 private version; @@ -262,4 +263,37 @@ contract AttestationRegistry is OwnableUpgradeable { function getAttestationIdCounter() public view returns (uint32) { return attestationIdCounter; } + + /** + * @notice Checks if an address owns a given attestation + * @param account The address of the token holder + * @param id ID of the attestation + * @return The _owner's balance of the attestations on a given attestation ID + */ + function balanceOf(address account, uint256 id) public view override returns (uint256) { + bytes32 attestationId = bytes32(abi.encode(id)); + Attestation memory attestation = attestations[attestationId]; + if (keccak256(attestation.subject) == keccak256(abi.encode(account))) return 1; + return 0; + } + + /** + * @notice Get the balance of multiple account/attestation pairs + * @param accounts The addresses of the attestation holders + * @param ids ID of the attestations + * @return The _owner's balance of the attestation for a given address (i.e. balance for each (owner, id) pair) + */ + function balanceOfBatch( + address[] memory accounts, + uint256[] memory ids + ) public view override returns (uint256[] memory) { + if (accounts.length != ids.length) revert ArrayLengthMismatch(); + uint256[] memory result = new uint256[](accounts.length); + for (uint256 i = 0; i < accounts.length; i++) { + bytes32 attestationId = bytes32(abi.encode(ids[i])); + Attestation memory attestation = attestations[attestationId]; + if (keccak256(attestation.subject) == keccak256(abi.encode(accounts[i]))) result[i] = 1; + } + return result; + } } diff --git a/test/AttestationRegistry.t.sol b/test/AttestationRegistry.t.sol index f6d3f1b2..88ac3085 100644 --- a/test/AttestationRegistry.t.sol +++ b/test/AttestationRegistry.t.sol @@ -484,25 +484,76 @@ contract AttestationRegistryTest is Test { SchemaRegistryMock schemaRegistryMock = SchemaRegistryMock(router.getSchemaRegistry()); attestationPayload.schemaId = schemaRegistryMock.getIdFromSchemaString("schemaString"); schemaRegistryMock.createSchema("name", "description", "context", "schemaString"); - uint32 version = attestationRegistry.getAttestationIdCounter(); + uint32 attestationIdCounter = attestationRegistry.getAttestationIdCounter(); - assertEq(version, 0); + assertEq(attestationIdCounter, 0); vm.startPrank(portal); attestationRegistry.attest(attestationPayload, attester); - version = attestationRegistry.getAttestationIdCounter(); - assertEq(version, 1); + attestationIdCounter = attestationRegistry.getAttestationIdCounter(); + assertEq(attestationIdCounter, 1); attestationRegistry.attest(attestationPayload, attester); - version = attestationRegistry.getAttestationIdCounter(); - assertEq(version, 2); + attestationIdCounter = attestationRegistry.getAttestationIdCounter(); + assertEq(attestationIdCounter, 2); vm.stopPrank(); } + function test_balanceOf(AttestationPayload memory attestationPayload) public { + vm.assume(attestationPayload.subject.length != 0); + vm.assume(attestationPayload.attestationData.length != 0); + SchemaRegistryMock schemaRegistryMock = SchemaRegistryMock(router.getSchemaRegistry()); + attestationPayload.schemaId = schemaRegistryMock.getIdFromSchemaString("schemaString"); + schemaRegistryMock.createSchema("name", "description", "context", "schemaString"); + + vm.startPrank(portal); + attestationPayload.subject = abi.encode(address(1)); + attestationRegistry.attest(attestationPayload, attester); + + uint256 balance = attestationRegistry.balanceOf(address(1), 1); + assertEq(balance, 1); + } + + function test_balanceOfBatch(AttestationPayload memory attestationPayload) public { + vm.assume(attestationPayload.subject.length != 0); + vm.assume(attestationPayload.attestationData.length != 0); + SchemaRegistryMock schemaRegistryMock = SchemaRegistryMock(router.getSchemaRegistry()); + attestationPayload.schemaId = schemaRegistryMock.getIdFromSchemaString("schemaString"); + schemaRegistryMock.createSchema("name", "description", "context", "schemaString"); + + address[] memory owners = new address[](2); + owners[0] = address(1); + owners[1] = address(2); + + vm.startPrank(portal); + attestationPayload.subject = abi.encode(owners[0]); + attestationRegistry.attest(attestationPayload, attester); + + attestationPayload.subject = abi.encode(owners[1]); + attestationRegistry.attest(attestationPayload, attester); + + uint256[] memory ids = new uint256[](2); + ids[0] = 1; + ids[1] = 2; + uint256[] memory balance = attestationRegistry.balanceOfBatch(owners, ids); + assertEq(balance[0], 1); + assertEq(balance[1], 1); + } + + function test_balanceOfBatch_ArrayLengthMismatch() public { + address[] memory owners = new address[](2); + owners[0] = address(1); + owners[1] = address(2); + uint256[] memory ids = new uint256[](1); + ids[0] = 1; + vm.expectRevert(AttestationRegistry.ArrayLengthMismatch.selector); + attestationRegistry.balanceOfBatch(owners, ids); + } + function _createAttestation( AttestationPayload memory attestationPayload, uint256 id From 5a06646840f25533f5ff1094d2a0ad5bc67bba38 Mon Sep 17 00:00:00 2001 From: Alain Nicolas Date: Wed, 27 Sep 2023 11:17:30 +0200 Subject: [PATCH 09/36] feat: As a user, I want the contracts data to be indexed via a subgraph (#224) --- .DS_Store | Bin 8196 -> 0 bytes .eslintignore | 2 + .gitignore | 8 + .prettierignore | 2 + package.json | 2 +- pnpm-lock.yaml | 1743 +++++++++++++++++++++++- pnpm-workspace.yaml | 3 + subgraph/.env.example | 4 + subgraph/README.md | 45 + subgraph/abis/AttestationRegistry.json | 607 +++++++++ subgraph/abis/ModuleRegistry.json | 392 ++++++ subgraph/abis/PortalRegistry.json | 374 +++++ subgraph/abis/SchemaRegistry.json | 329 +++++ subgraph/networks.json | 38 + subgraph/package.json | 35 + subgraph/schema.graphql | 39 + subgraph/src/attestation-registry.ts | 26 + subgraph/src/module-registry.ts | 14 + subgraph/src/portal-registry.ts | 18 + subgraph/src/schema-registry.ts | 15 + subgraph/subgraph.goerli.yaml | 84 ++ subgraph/subgraph.mainnet.yaml | 84 ++ subgraph/tsconfig.json | 4 + 23 files changed, 3814 insertions(+), 54 deletions(-) delete mode 100644 .DS_Store create mode 100644 pnpm-workspace.yaml create mode 100644 subgraph/.env.example create mode 100644 subgraph/README.md create mode 100644 subgraph/abis/AttestationRegistry.json create mode 100644 subgraph/abis/ModuleRegistry.json create mode 100644 subgraph/abis/PortalRegistry.json create mode 100644 subgraph/abis/SchemaRegistry.json create mode 100644 subgraph/networks.json create mode 100644 subgraph/package.json create mode 100644 subgraph/schema.graphql create mode 100644 subgraph/src/attestation-registry.ts create mode 100644 subgraph/src/module-registry.ts create mode 100644 subgraph/src/portal-registry.ts create mode 100644 subgraph/src/schema-registry.ts create mode 100644 subgraph/subgraph.goerli.yaml create mode 100644 subgraph/subgraph.mainnet.yaml create mode 100644 subgraph/tsconfig.json diff --git a/.DS_Store b/.DS_Store deleted file mode 100644 index 1cfa77d4c6d76c3e2088abd851075374b8410813..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8196 zcmeHMPmj_-6n_KkQe;<2)P##k6R#TtH5%gukv(|uvKT$6K}wPBZfQwdBpX7~vwjD^ zf>%F@-^G*u-b}Y?3nZS58)r82-u!vLdGGy(b{Lk3L~mhth?+!Xpt5e%A+{8r=eki! z$;eG;0X)5M{jufx7W$11YdxSD&Gy|Fe&A`9F0M2YK#*TAe&1$I`&0hv5%Ej za1zop)=4~zwDU3p!N&RDMA#&F9k~@Lb=UVvOypmweDEEyyac@(mVQR<5Pi z4p{War+_ATjJQ+4)Kkn1_BOn@G@-D7;uy1@ZU8ms)hWWC106u_@JWbMT+i&@HgrH^ zta(8*atpo@aSnY5yAZLu;KV_e5&CCx#48{Xbq=`)A0yP$A}b~4JDcADeT0VvR=1Ja z1w2IPZ^TCYx%`^Rtc<9ft^1Un+|ByWLi}YJQ{mZ=JDOj8F0(v`oWjQr zb~xu8J2g6?V`S8)m(VRlW^eMD%XS~EkLAwKi%+aT>^a*qY_Z4r6(#T4*el=}pT6R1 z%yTYQel}uMXl}C5=RXsni)P>oGEi1AH~Id5y!-e6E0~!MSu>y+_)`W%r9bHRU@cGe xEhs+aP1FylT-YvFT0$UlUj)!k|6z!>2~);&6CEp!5fuGHfTTeS&A?w};5P{$FDw86 diff --git a/.eslintignore b/.eslintignore index b1431ec3..228d1d4b 100644 --- a/.eslintignore +++ b/.eslintignore @@ -3,3 +3,5 @@ node_modules coverage lib typechain-types +generated +build diff --git a/.gitignore b/.gitignore index 01253200..157884c0 100644 --- a/.gitignore +++ b/.gitignore @@ -20,3 +20,11 @@ coverage cache_hardhat artifacts typechain-types + +# Subgraph +build +generated +subgraph.yaml + +# Misc +.DS_Store diff --git a/.prettierignore b/.prettierignore index d8bc1655..31e0efa9 100644 --- a/.prettierignore +++ b/.prettierignore @@ -8,6 +8,8 @@ out artifacts cache_hardhat typechain-types +generated +build # files *.env diff --git a/package.json b/package.json index 58c0adeb..61483ac9 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ "solidity" ], "repository": "github.com/Consensys/linea-attestation-registry", - "license": "ISC", + "license": "MIT", "author": "Consensys", "files": [ "src" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 53c40fc4..e170db4d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -9,52 +9,67 @@ overrides: tough-cookie@<4.1.3: '>=4.1.3' minimatch@<3.0.5: '>=3.0.5' -devDependencies: - '@nomicfoundation/hardhat-ethers': - specifier: ^3.0.4 - version: 3.0.4(ethers@6.7.1)(hardhat@2.17.2) - '@nomicfoundation/hardhat-foundry': - specifier: ^1.1.1 - version: 1.1.1(hardhat@2.17.2) - '@nomicfoundation/hardhat-toolbox': - specifier: ^3.0.0 - version: 3.0.0(@nomicfoundation/hardhat-chai-matchers@2.0.2)(@nomicfoundation/hardhat-ethers@3.0.4)(@nomicfoundation/hardhat-network-helpers@1.0.9)(@nomicfoundation/hardhat-verify@1.1.1)(@typechain/ethers-v6@0.4.3)(@typechain/hardhat@8.0.3)(@types/chai@4.3.5)(@types/mocha@10.0.1)(@types/node@20.5.7)(chai@4.3.8)(ethers@6.7.1)(hardhat-gas-reporter@1.0.9)(hardhat@2.17.2)(solidity-coverage@0.8.4)(ts-node@10.9.1)(typechain@8.3.1)(typescript@5.2.2) - '@openzeppelin/hardhat-upgrades': - specifier: ^2.2.1 - version: 2.2.1(@nomicfoundation/hardhat-ethers@3.0.4)(@nomicfoundation/hardhat-verify@1.1.1)(ethers@6.7.1)(hardhat@2.17.2) - '@typescript-eslint/eslint-plugin': - specifier: ^6.6.0 - version: 6.6.0(@typescript-eslint/parser@6.6.0)(eslint@8.49.0)(typescript@5.2.2) - '@typescript-eslint/parser': - specifier: ^6.6.0 - version: 6.6.0(eslint@8.49.0)(typescript@5.2.2) - dotenv: - specifier: ^16.3.1 - version: 16.3.1 - eslint: - specifier: ^8.49.0 - version: 8.49.0 - ethers: - specifier: ^6.7.1 - version: 6.7.1 - hardhat: - specifier: ^2.17.2 - version: 2.17.2(ts-node@10.9.1)(typescript@5.2.2) - husky: - specifier: ^8.0.3 - version: 8.0.3 - prettier: - specifier: ^2.8.8 - version: 2.8.8 - prettier-plugin-solidity: - specifier: ^1.1.3 - version: 1.1.3(prettier@2.8.8) - solhint: - specifier: ^3.6.2 - version: 3.6.2 - solhint-plugin-prettier: - specifier: ^0.0.5 - version: 0.0.5(prettier-plugin-solidity@1.1.3)(prettier@2.8.8) +importers: + + .: + devDependencies: + '@nomicfoundation/hardhat-ethers': + specifier: ^3.0.4 + version: 3.0.4(ethers@6.7.1)(hardhat@2.17.2) + '@nomicfoundation/hardhat-foundry': + specifier: ^1.1.1 + version: 1.1.1(hardhat@2.17.2) + '@nomicfoundation/hardhat-toolbox': + specifier: ^3.0.0 + version: 3.0.0(@nomicfoundation/hardhat-chai-matchers@2.0.2)(@nomicfoundation/hardhat-ethers@3.0.4)(@nomicfoundation/hardhat-network-helpers@1.0.9)(@nomicfoundation/hardhat-verify@1.1.1)(@typechain/ethers-v6@0.4.3)(@typechain/hardhat@8.0.3)(@types/chai@4.3.5)(@types/mocha@10.0.1)(@types/node@20.5.7)(chai@4.3.8)(ethers@6.7.1)(hardhat-gas-reporter@1.0.9)(hardhat@2.17.2)(solidity-coverage@0.8.4)(ts-node@10.9.1)(typechain@8.3.1)(typescript@5.2.2) + '@openzeppelin/hardhat-upgrades': + specifier: ^2.2.1 + version: 2.2.1(@nomicfoundation/hardhat-ethers@3.0.4)(@nomicfoundation/hardhat-verify@1.1.1)(ethers@6.7.1)(hardhat@2.17.2) + '@typescript-eslint/eslint-plugin': + specifier: ^6.6.0 + version: 6.6.0(@typescript-eslint/parser@6.6.0)(eslint@8.49.0)(typescript@5.2.2) + '@typescript-eslint/parser': + specifier: ^6.6.0 + version: 6.6.0(eslint@8.49.0)(typescript@5.2.2) + dotenv: + specifier: ^16.3.1 + version: 16.3.1 + eslint: + specifier: ^8.49.0 + version: 8.49.0 + ethers: + specifier: ^6.7.1 + version: 6.7.1 + hardhat: + specifier: ^2.17.2 + version: 2.17.2(ts-node@10.9.1)(typescript@5.2.2) + husky: + specifier: ^8.0.3 + version: 8.0.3 + prettier: + specifier: ^2.8.8 + version: 2.8.8 + prettier-plugin-solidity: + specifier: ^1.1.3 + version: 1.1.3(prettier@2.8.8) + solhint: + specifier: ^3.6.2 + version: 3.6.2 + solhint-plugin-prettier: + specifier: ^0.0.5 + version: 0.0.5(prettier-plugin-solidity@1.1.3)(prettier@2.8.8) + + subgraph: + devDependencies: + '@graphprotocol/graph-cli': + specifier: 0.58.0 + version: 0.58.0(@types/node@20.5.7)(node-fetch@2.7.0)(typescript@5.2.2) + '@graphprotocol/graph-ts': + specifier: 0.31.0 + version: 0.31.0 + matchstick-as: + specifier: 0.5.0 + version: 0.5.0 packages: @@ -209,6 +224,20 @@ packages: micro-ftch: 0.3.1 dev: true + /@ethersproject/abi@5.0.7: + resolution: {integrity: sha512-Cqktk+hSIckwP/W8O47Eef60VwmoSC/L3lY0+dIBhQPCNn9E4V7rwmm2aFrNRRDJfFlGuZ1khkQUOc3oBX+niw==} + dependencies: + '@ethersproject/address': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/hash': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/strings': 5.7.0 + dev: true + /@ethersproject/abi@5.7.0: resolution: {integrity: sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==} dependencies: @@ -524,6 +553,73 @@ packages: '@ethersproject/strings': 5.7.0 dev: true + /@float-capital/float-subgraph-uncrashable@0.0.0-internal-testing.5: + resolution: {integrity: sha512-yZ0H5e3EpAYKokX/AbtplzlvSxEJY7ZfpvQyDzyODkks0hakAAlDG6fQu1SlDJMWorY7bbq1j7fCiFeTWci6TA==} + hasBin: true + dependencies: + '@rescript/std': 9.0.0 + graphql: 16.8.0 + graphql-import-node: 0.0.5(graphql@16.8.0) + js-yaml: 4.1.0 + dev: true + + /@graphprotocol/graph-cli@0.58.0(@types/node@20.5.7)(node-fetch@2.7.0)(typescript@5.2.2): + resolution: {integrity: sha512-EbdL5LZFmIMAuItQXv7LXgd7cqYQ3BdIJR2jxNr+LRL0juBAxmEz6zVvYnIUmgXoa5SB5rxE9ZT6pfe+fhbD6Q==} + engines: {node: '>=14'} + hasBin: true + dependencies: + '@float-capital/float-subgraph-uncrashable': 0.0.0-internal-testing.5 + '@oclif/core': 2.8.6(@types/node@20.5.7)(typescript@5.2.2) + '@oclif/plugin-autocomplete': 2.3.8(@types/node@20.5.7)(typescript@5.2.2) + '@oclif/plugin-not-found': 2.4.1(@types/node@20.5.7)(typescript@5.2.2) + '@whatwg-node/fetch': 0.8.8 + assemblyscript: 0.19.23 + binary-install-raw: 0.0.13(debug@4.3.4) + chalk: 3.0.0 + chokidar: 3.5.3 + debug: 4.3.4(supports-color@8.1.1) + docker-compose: 0.23.19 + dockerode: 2.5.8 + fs-extra: 9.1.0 + glob: 9.3.5 + gluegun: 5.1.2(debug@4.3.4) + graphql: 15.5.0 + immutable: 4.2.1 + ipfs-http-client: 55.0.0(node-fetch@2.7.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 + transitivePeerDependencies: + - '@swc/core' + - '@swc/wasm' + - '@types/node' + - bufferutil + - encoding + - node-fetch + - supports-color + - typescript + - utf-8-validate + dev: true + + /@graphprotocol/graph-ts@0.27.0: + resolution: {integrity: sha512-r1SPDIZVQiGMxcY8rhFSM0y7d/xAbQf5vHMWUf59js1KgoyWpM6P3tczZqmQd7JTmeyNsDGIPzd9FeaxllsU4w==} + dependencies: + assemblyscript: 0.19.10 + dev: true + + /@graphprotocol/graph-ts@0.31.0: + resolution: {integrity: sha512-xreRVM6ho2BtolyOh2flDkNoGZximybnzUnF53zJVp0+Ed0KnAlO1/KOCUYw06euVI9tk0c9nA2Z/D5SIQV2Rg==} + dependencies: + assemblyscript: 0.19.10 + dev: true + /@humanwhocodes/config-array@0.11.11: resolution: {integrity: sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==} engines: {node: '>=10.10.0'} @@ -544,6 +640,26 @@ packages: resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} dev: true + /@ipld/dag-cbor@7.0.3: + resolution: {integrity: sha512-1VVh2huHsuohdXC1bGJNE8WR72slZ9XE2T3wbBBq31dm7ZBatmKLLxrB+XAqafxfRFjv08RZmj/W/ZqaM13AuA==} + dependencies: + cborg: 1.10.2 + multiformats: 9.9.0 + dev: true + + /@ipld/dag-json@8.0.11: + resolution: {integrity: sha512-Pea7JXeYHTWXRTIhBqBlhw7G53PJ7yta3G/sizGEZyzdeEwhZRr0od5IQ0r2ZxOt1Do+2czddjeEPp+YTxDwCA==} + dependencies: + cborg: 1.10.2 + multiformats: 9.9.0 + dev: true + + /@ipld/dag-pb@2.1.18: + resolution: {integrity: sha512-ZBnf2fuX9y3KccADURG5vb9FaOeMjFkCrNysB0PtftME/4iCTjxfaLoNq/IAh5fTqUOMXvryN6Jyka4ZGuMLIg==} + dependencies: + multiformats: 9.9.0 + dev: true + /@jridgewell/resolve-uri@3.1.1: resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} engines: {node: '>=6.0.0'} @@ -988,6 +1104,114 @@ packages: '@nomicfoundation/solidity-analyzer-win32-x64-msvc': 0.1.1 dev: true + /@oclif/core@2.15.0(@types/node@20.5.7)(typescript@5.2.2): + resolution: {integrity: sha512-fNEMG5DzJHhYmI3MgpByTvltBOMyFcnRIUMxbiz2ai8rhaYgaTHMG3Q38HcosfIvtw9nCjxpcQtC8MN8QtVCcA==} + engines: {node: '>=14.0.0'} + dependencies: + '@types/cli-progress': 3.11.2 + 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(supports-color@8.1.1) + ejs: 3.1.9 + 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.3 + slice-ansi: 4.0.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + supports-color: 8.1.1 + supports-hyperlinks: 2.3.0 + ts-node: 10.9.1(@types/node@20.5.7)(typescript@5.2.2) + tslib: 2.6.2 + widest-line: 3.1.0 + wordwrap: 1.0.0 + wrap-ansi: 7.0.0 + transitivePeerDependencies: + - '@swc/core' + - '@swc/wasm' + - '@types/node' + - typescript + dev: true + + /@oclif/core@2.8.6(@types/node@20.5.7)(typescript@5.2.2): + resolution: {integrity: sha512-1QlPaHMhOORySCXkQyzjsIsy2GYTilOw3LkjeHkCgsPJQjAT4IclVytJusWktPbYNys9O+O4V23J44yomQvnBQ==} + engines: {node: '>=14.0.0'} + dependencies: + '@types/cli-progress': 3.11.2 + 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(supports-color@8.1.1) + ejs: 3.1.9 + 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.3 + semver: 7.5.4 + string-width: 4.2.3 + strip-ansi: 6.0.1 + supports-color: 8.1.1 + supports-hyperlinks: 2.3.0 + ts-node: 10.9.1(@types/node@20.5.7)(typescript@5.2.2) + tslib: 2.6.2 + widest-line: 3.1.0 + wordwrap: 1.0.0 + wrap-ansi: 7.0.0 + transitivePeerDependencies: + - '@swc/core' + - '@swc/wasm' + - '@types/node' + - typescript + dev: true + + /@oclif/plugin-autocomplete@2.3.8(@types/node@20.5.7)(typescript@5.2.2): + resolution: {integrity: sha512-cmRPss9OQxz8sRoaw5C/4t/Da7eBEIDJWKRsuzUSQBcPJCN3kTgjp24VTjPHT3j86197s/qkjCRct+3P0IGArg==} + engines: {node: '>=12.0.0'} + dependencies: + '@oclif/core': 2.15.0(@types/node@20.5.7)(typescript@5.2.2) + chalk: 4.1.2 + debug: 4.3.4(supports-color@8.1.1) + transitivePeerDependencies: + - '@swc/core' + - '@swc/wasm' + - '@types/node' + - supports-color + - typescript + dev: true + + /@oclif/plugin-not-found@2.4.1(@types/node@20.5.7)(typescript@5.2.2): + resolution: {integrity: sha512-LqW7qpw5Q8ploRiup2jEIMQJXcxHP1tpwj45GApKQMe7GRdGdRdjBT9Tu+U2tdEgMqgMplAIhOsYCx2nc2nMSw==} + engines: {node: '>=12.0.0'} + dependencies: + '@oclif/core': 2.15.0(@types/node@20.5.7)(typescript@5.2.2) + chalk: 4.1.2 + fast-levenshtein: 3.0.0 + transitivePeerDependencies: + - '@swc/core' + - '@swc/wasm' + - '@types/node' + - typescript + dev: true + /@openzeppelin/defender-admin-client@1.48.0(debug@4.3.4): resolution: {integrity: sha512-MN29JD6jA3PgOxF2tG0aZbMIwOCieYWkK9UbHCq1UzGPrMgGV9NVMUyVdqpv7Ynplwsjp5ZTBDOyttwvTlchHg==} dependencies: @@ -1078,6 +1302,79 @@ packages: - supports-color dev: true + /@peculiar/asn1-schema@2.3.6: + resolution: {integrity: sha512-izNRxPoaeJeg/AyH8hER6s+H7p4itk+03QCa4sbxI3lNdseQYCuxzgsuNK8bTXChtLTjpJz6NmXKA73qLa3rCA==} + dependencies: + asn1js: 3.0.5 + pvtsutils: 1.3.5 + tslib: 2.6.2 + dev: true + + /@peculiar/json-schema@1.1.12: + resolution: {integrity: sha512-coUfuoMeIB7B8/NMekxaDzLhaYmp0HZNPEjYRm9goRou8UZIC3z21s0sL9AWoCw4EG876QyO3kYrc61WNF9B/w==} + engines: {node: '>=8.0.0'} + dependencies: + tslib: 2.6.2 + dev: true + + /@peculiar/webcrypto@1.4.3: + resolution: {integrity: sha512-VtaY4spKTdN5LjJ04im/d/joXuvLbQdgy5Z4DXF4MFZhQ+MTrejbNMkfZBp1Bs3O5+bFqnJgyGdPuZQflvIa5A==} + engines: {node: '>=10.12.0'} + dependencies: + '@peculiar/asn1-schema': 2.3.6 + '@peculiar/json-schema': 1.1.12 + pvtsutils: 1.3.5 + tslib: 2.6.2 + webcrypto-core: 1.7.7 + dev: true + + /@protobufjs/aspromise@1.1.2: + resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==} + dev: true + + /@protobufjs/base64@1.1.2: + resolution: {integrity: sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==} + dev: true + + /@protobufjs/codegen@2.0.4: + resolution: {integrity: sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==} + dev: true + + /@protobufjs/eventemitter@1.1.0: + resolution: {integrity: sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==} + dev: true + + /@protobufjs/fetch@1.1.0: + resolution: {integrity: sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==} + dependencies: + '@protobufjs/aspromise': 1.1.2 + '@protobufjs/inquire': 1.1.0 + dev: true + + /@protobufjs/float@1.0.2: + resolution: {integrity: sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==} + dev: true + + /@protobufjs/inquire@1.1.0: + resolution: {integrity: sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==} + dev: true + + /@protobufjs/path@1.1.2: + resolution: {integrity: sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==} + dev: true + + /@protobufjs/pool@1.1.0: + resolution: {integrity: sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==} + dev: true + + /@protobufjs/utf8@1.1.0: + resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==} + dev: true + + /@rescript/std@9.0.0: + resolution: {integrity: sha512-zGzFsgtZ44mgL4Xef2gOy1hrRVdrs9mcxCOOKZrIPsmbZW14yTkaF591GXxpQvjXiHtgZ/iA9qLyWH6oSReIxQ==} + dev: true + /@scure/base@1.1.3: resolution: {integrity: sha512-/+SgoRjLq7Xlf0CWuLHq2LUZeL/w65kfzAPG5NH9pcmBhs+nunQTn4gvdwgMTIXnt9b2C/1SeL2XiysZEyIC9Q==} dev: true @@ -1268,12 +1565,24 @@ packages: resolution: {integrity: sha512-mEo1sAde+UCE6b2hxn332f1g1E8WfYRu6p5SvTKr2ZKC1f7gFJXk4h5PyGP9Dt6gCaG8y8XhwnXWC6Iy2cmBng==} dev: true + /@types/cli-progress@3.11.2: + resolution: {integrity: sha512-Yt/8rEJalfa9ve2SbfQnwFHrc9QF52JIZYHW3FDaTMpkCvnns26ueKiPHDxyJ0CS//IqjMINTx7R5Xa7k7uFHQ==} + dependencies: + '@types/node': 20.5.7 + dev: true + /@types/concat-stream@1.6.1: resolution: {integrity: sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==} dependencies: '@types/node': 20.5.7 dev: true + /@types/connect@3.4.36: + resolution: {integrity: sha512-P63Zd/JUGq+PdrM1lv0Wv5SBYeA2+CORvbrXbngriYY0jzLUWfQMQQxOhjONEz/wlHOAxOdY7CY65rgQdTjq2w==} + dependencies: + '@types/node': 20.5.7 + dev: true + /@types/form-data@0.0.33: resolution: {integrity: sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==} dependencies: @@ -1291,10 +1600,18 @@ packages: resolution: {integrity: sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==} dev: true + /@types/long@4.0.2: + resolution: {integrity: sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==} + dev: true + /@types/lru-cache@5.1.1: resolution: {integrity: sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==} dev: true + /@types/minimatch@3.0.5: + resolution: {integrity: sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==} + dev: true + /@types/minimatch@5.1.2: resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==} dev: true @@ -1307,6 +1624,10 @@ packages: resolution: {integrity: sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==} dev: true + /@types/node@12.20.55: + resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} + dev: true + /@types/node@18.15.13: resolution: {integrity: sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q==} dev: true @@ -1319,6 +1640,10 @@ packages: resolution: {integrity: sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw==} dev: true + /@types/parse-json@4.0.0: + resolution: {integrity: sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==} + dev: true + /@types/pbkdf2@3.1.0: resolution: {integrity: sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ==} dependencies: @@ -1350,6 +1675,12 @@ packages: resolution: {integrity: sha512-cJRQXpObxfNKkFAZbJl2yjWtJCqELQIdShsogr1d2MilP8dKD9TE/nEKHkJgUNHdGKCQaf9HbIynuV2csLGVLg==} dev: true + /@types/ws@7.4.7: + resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==} + dependencies: + '@types/node': 20.5.7 + dev: true + /@typescript-eslint/eslint-plugin@6.6.0(@typescript-eslint/parser@6.6.0)(eslint@8.49.0)(typescript@5.2.2): resolution: {integrity: sha512-CW9YDGTQnNYMIo5lMeuiIG08p4E0cXrXTbcZ2saT/ETE7dWUrNxlijsQeU04qAAKkILiLzdQz+cGFxCJjaZUmA==} engines: {node: ^16.0.0 || >=18.0.0} @@ -1481,10 +1812,57 @@ packages: eslint-visitor-keys: 3.4.3 dev: true + /@whatwg-node/events@0.0.3: + resolution: {integrity: sha512-IqnKIDWfXBJkvy/k6tzskWTc2NK3LcqHlb+KHGCrjOCH4jfQckRX0NAiIcC/vIqQkzLYw2r2CTSwAxcrtcD6lA==} + dev: true + + /@whatwg-node/fetch@0.8.8: + resolution: {integrity: sha512-CdcjGC2vdKhc13KKxgsc6/616BQ7ooDIgPeTuAiE8qfCnS0mGzcfCOoZXypQSz73nxI+GWc7ZReIAVhxoE1KCg==} + dependencies: + '@peculiar/webcrypto': 1.4.3 + '@whatwg-node/node-fetch': 0.3.6 + busboy: 1.6.0 + urlpattern-polyfill: 8.0.2 + web-streams-polyfill: 3.2.1 + dev: true + + /@whatwg-node/node-fetch@0.3.6: + resolution: {integrity: sha512-w9wKgDO4C95qnXZRwZTfCmLWqyRnooGjcIwG0wADWjw9/HN0p7dtvtgSvItZtUyNteEvgTrd8QojNEqV6DAGTA==} + dependencies: + '@whatwg-node/events': 0.0.3 + busboy: 1.6.0 + fast-querystring: 1.1.2 + fast-url-parser: 1.1.3 + tslib: 2.6.2 + dev: true + + /JSONStream@1.3.2: + resolution: {integrity: sha512-mn0KSip7N4e0UDPZHnqDsHECo5uGQrixQKnAskOM1BIB8hd7QKbd6il8IPRPudPHOeHiECoCFqhyMaRO9+nWyA==} + hasBin: true + dependencies: + jsonparse: 1.3.1 + through: 2.3.8 + dev: true + + /JSONStream@1.3.5: + resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} + hasBin: true + dependencies: + jsonparse: 1.3.1 + through: 2.3.8 + dev: true + /abbrev@1.0.9: resolution: {integrity: sha512-LEyx4aLEC3x6T0UguF6YILf+ntvmOaWsVfENmIW0E9H09vKlLDGelMjjSm0jkDHALj8A8quZ/HapKNigzwge+Q==} dev: true + /abort-controller@3.0.0: + resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} + engines: {node: '>=6.5'} + dependencies: + event-target-shim: 5.0.1 + dev: true + /abstract-level@1.0.3: resolution: {integrity: sha512-t6jv+xHy+VYwc4xqZMn2Pa9DjcdzvzZmQGRjTFc8spIbRGHgBrEKbPq+rYXc7CCo0lxgYvSgKVg9qZAhpVQSjA==} engines: {node: '>=12'} @@ -1640,6 +2018,10 @@ packages: color-convert: 2.0.1 dev: true + /ansicolors@0.3.2: + resolution: {integrity: sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg==} + dev: true + /antlr4@4.13.0: resolution: {integrity: sha512-zooUbt+UscjnWyOrsuY/tVFL4rwrAGwOivpQmvmUDE22hy/lUA467Rc1rcixyRwcRUIXFYBwv7+dClDSHdmmew==} engines: {node: '>=16'} @@ -1649,6 +2031,17 @@ packages: resolution: {integrity: sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ==} dev: true + /any-signal@2.1.2: + resolution: {integrity: sha512-B+rDnWasMi/eWcajPcCWSlYc7muXOrcYrqgyzcdKisl2H/WTlQ0gip1KyQfr0ZlxJdsuWCj/LWwQm7fhyhRfIQ==} + dependencies: + abort-controller: 3.0.0 + native-abort-controller: 1.0.4(abort-controller@3.0.0) + dev: true + + /any-signal@3.0.1: + resolution: {integrity: sha512-xgZgJtKEa9YmDqXodIgl7Fl1C8yNXr8w6gXjqK3LW4GcEiYT+6AQfJSE/8SPsEpLLmcvbv8YU+qet94UewHxqg==} + dev: true + /anymatch@3.1.3: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} @@ -1657,6 +2050,18 @@ packages: picomatch: 2.3.1 dev: true + /apisauce@2.1.6(debug@4.3.4): + resolution: {integrity: sha512-MdxR391op/FucS2YQRfB/NMRyCnHEPDd4h17LRIuVYi0BpGmMhpxc0shbOpfs5ahABuBEffNCGal5EcsydbBWg==} + dependencies: + axios: 0.21.4(debug@4.3.4) + transitivePeerDependencies: + - debug + dev: true + + /app-module-path@2.2.0: + resolution: {integrity: sha512-gkco+qxENJV+8vFcDiiFhuoSvRXb2a/QPqpSoWhVz829VNJfOTnELbBmPmNKFxf3xdNnw4DWCkzkDaavcX/1YQ==} + dev: true + /arg@4.1.3: resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} dev: true @@ -1742,6 +2147,32 @@ packages: safer-buffer: 2.1.2 dev: true + /asn1js@3.0.5: + resolution: {integrity: sha512-FVnvrKJwpt9LP2lAMl8qZswRNm3T4q9CON+bxldk2iwk3FFpuwhx2FfinyitizWHsVYyaY+y5JzDR0rCMV5yTQ==} + engines: {node: '>=12.0.0'} + dependencies: + pvtsutils: 1.3.5 + pvutils: 1.1.3 + tslib: 2.6.2 + dev: true + + /assemblyscript@0.19.10: + resolution: {integrity: sha512-HavcUBXB3mBTRGJcpvaQjmnmaqKHBGREjSPNsIvnAk2f9dj78y4BkMaSSdvBQYWcDDzsHQjyUC8stICFkD1Odg==} + hasBin: true + dependencies: + binaryen: 101.0.0-nightly.20210723 + long: 4.0.0 + dev: true + + /assemblyscript@0.19.23: + resolution: {integrity: sha512-fwOQNZVTMga5KRsfY80g7cpOl4PsFQczMwHzdtgoqLXaYhkhavufKb0sB0l3T1DUxpAufA0KNhlbpuuhZUwxMA==} + hasBin: true + dependencies: + binaryen: 102.0.0-nightly.20211028 + long: 5.2.3 + source-map-support: 0.5.21 + dev: true + /assert-plus@1.0.0: resolution: {integrity: sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==} engines: {node: '>=0.8'} @@ -1770,6 +2201,10 @@ packages: resolution: {integrity: sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==} dev: true + /async@3.2.4: + resolution: {integrity: sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==} + dev: true + /asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} dev: true @@ -1792,6 +2227,14 @@ packages: resolution: {integrity: sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==} dev: true + /axios@0.21.4(debug@4.3.4): + resolution: {integrity: sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==} + dependencies: + follow-redirects: 1.15.2(debug@4.3.4) + transitivePeerDependencies: + - debug + dev: true + /axios@1.5.0(debug@4.3.4): resolution: {integrity: sha512-D4DdjDo5CY50Qms0qGQTTw6Q44jl7zRwY7bthds06pUGfChBCTcQs+N743eFWGEd6pRTMd6A+I87aWyFV5wiZQ==} dependencies: @@ -1836,10 +2279,44 @@ packages: engines: {node: '>=8'} dev: true + /binary-install-raw@0.0.13(debug@4.3.4): + resolution: {integrity: sha512-v7ms6N/H7iciuk6QInon3/n2mu7oRX+6knJ9xFPsJ3rQePgAqcR3CRTwUheFd8SLbiq4LL7Z4G/44L9zscdt9A==} + engines: {node: '>=10'} + dependencies: + axios: 0.21.4(debug@4.3.4) + rimraf: 3.0.2 + tar: 6.2.0 + transitivePeerDependencies: + - debug + dev: true + + /binaryen@101.0.0-nightly.20210723: + resolution: {integrity: sha512-eioJNqhHlkguVSbblHOtLqlhtC882SOEPKmNFZaDuz1hzQjolxZ+eu3/kaS10n3sGPONsIZsO7R9fR00UyhEUA==} + hasBin: true + dev: true + + /binaryen@102.0.0-nightly.20211028: + resolution: {integrity: sha512-GCJBVB5exbxzzvyt8MGDv/MeUjs6gkXDvf4xOIItRBptYl0Tz5sm1o/uG95YK0L0VeG5ajDu3hRtkBP2kzqC5w==} + hasBin: true + dev: true + + /bl@1.2.3: + resolution: {integrity: sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==} + dependencies: + readable-stream: 2.3.8 + safe-buffer: 5.2.1 + dev: true + /blakejs@1.2.1: resolution: {integrity: sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==} dev: true + /blob-to-it@1.0.4: + resolution: {integrity: sha512-iCmk0W4NdbrWgRRuxOriU8aM5ijeVLI61Zulsmg/lUHNr7pYjoj+U77opLefNagevtrrbMt3JQ5Qip7ar178kA==} + dependencies: + browser-readablestream-to-it: 1.0.3 + dev: true + /bn.js@4.11.6: resolution: {integrity: sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==} dev: true @@ -1885,6 +2362,10 @@ packages: run-parallel-limit: 1.1.0 dev: true + /browser-readablestream-to-it@1.0.3: + resolution: {integrity: sha512-+12sHB+Br8HIh6VAMVEG5r3UXCyESIgDW7kzk3BjIXa43DVqVwL7GC5TW3jeh+72dtcH99pPVpw0X8i0jt+/kw==} + dev: true + /browser-stdout@1.3.1: resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==} dev: true @@ -1914,6 +2395,21 @@ packages: safe-buffer: 5.2.1 dev: true + /buffer-alloc-unsafe@1.1.0: + resolution: {integrity: sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==} + dev: true + + /buffer-alloc@1.2.0: + resolution: {integrity: sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==} + dependencies: + buffer-alloc-unsafe: 1.1.0 + buffer-fill: 1.0.0 + dev: true + + /buffer-fill@1.0.0: + resolution: {integrity: sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==} + dev: true + /buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} dev: true @@ -1971,9 +2467,17 @@ packages: engines: {node: '>=10'} dev: true - /case@1.6.3: - resolution: {integrity: sha512-mzDSXIPaFwVDvZAHqZ9VlbyF4yyXRuX6IvB06WvPYkqJVO24kX1PPhv9bfpKNFZyxYFmmgo03HUiD8iklmJYRQ==} - engines: {node: '>= 0.8.0'} + /cardinal@2.1.1: + resolution: {integrity: sha512-JSr5eOgoEymtYHBjNWyjrMqet9Am2miJhlfKNdqLp6zoeAh0KN5dRAcxlecj5mAJrmQomgiOBj35xHLrFjqBpw==} + hasBin: true + dependencies: + ansicolors: 0.3.2 + redeyed: 2.1.1 + dev: true + + /case@1.6.3: + resolution: {integrity: sha512-mzDSXIPaFwVDvZAHqZ9VlbyF4yyXRuX6IvB06WvPYkqJVO24kX1PPhv9bfpKNFZyxYFmmgo03HUiD8iklmJYRQ==} + engines: {node: '>= 0.8.0'} dev: true /caseless@0.12.0: @@ -1999,6 +2503,11 @@ packages: nofilter: 3.1.0 dev: true + /cborg@1.10.2: + resolution: {integrity: sha512-b3tFPA9pUr2zCUiCfRd2+wok2/LBSNUMKOuRRok+WlvvAgEt/PlbgPTsZUcwCOs53IJvLgTp0eotwtosE6njug==} + hasBin: true + dev: true + /chai-as-promised@7.1.1(chai@4.3.8): resolution: {integrity: sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA==} peerDependencies: @@ -2030,6 +2539,14 @@ packages: supports-color: 5.5.0 dev: true + /chalk@3.0.0: + resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==} + engines: {node: '>=8'} + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + dev: true + /chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} @@ -2076,6 +2593,15 @@ packages: fsevents: 2.3.3 dev: true + /chownr@1.1.4: + resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} + dev: true + + /chownr@2.0.0: + resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} + engines: {node: '>=10'} + dev: true + /ci-info@2.0.0: resolution: {integrity: sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==} dev: true @@ -2104,6 +2630,32 @@ packages: engines: {node: '>=6'} dev: true + /clean-stack@3.0.1: + resolution: {integrity: sha512-lR9wNiMRcVQjSB3a7xXGLuz4cr4wJuuXlaAEbRutGowQTmlp7R72/DOgN21e8jdwblMWl9UOJMJXarX94pzKdg==} + engines: {node: '>=10'} + dependencies: + escape-string-regexp: 4.0.0 + dev: true + + /cli-cursor@3.1.0: + resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} + engines: {node: '>=8'} + dependencies: + restore-cursor: 3.1.0 + dev: true + + /cli-progress@3.12.0: + resolution: {integrity: sha512-tRkV3HJ1ASwm19THiiLIXLO7Im7wlTuKnvkYaTkyoAPefqjNg7W7DHKUlGRxy9vxDvbyCYQkQozvptuMkGCg8A==} + engines: {node: '>=4'} + dependencies: + string-width: 4.2.3 + dev: true + + /cli-spinners@2.9.1: + resolution: {integrity: sha512-jHgecW0pxkonBJdrKsqxgRX9AcG+u/5k0Q7WPDfi8AogLAdwxEkyYYNWwZ5GvVFoFx2uiY1eNcSK00fh+1+FyQ==} + engines: {node: '>=6'} + dev: true + /cli-table3@0.5.1: resolution: {integrity: sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw==} engines: {node: '>=6'} @@ -2114,6 +2666,16 @@ packages: colors: 1.4.0 dev: true + /cli-table3@0.6.0: + resolution: {integrity: sha512-gnB85c3MGC7Nm9I/FkiasNBOKjOiO1RNuXXarQms37q4QMpWdlbBgD/VnOStA2faG1dpXMv31RFApjX1/QdgWQ==} + engines: {node: 10.* || >= 12.*} + dependencies: + object-assign: 4.1.1 + string-width: 4.2.3 + optionalDependencies: + colors: 1.4.0 + dev: true + /cliui@5.0.0: resolution: {integrity: sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==} dependencies: @@ -2130,6 +2692,11 @@ packages: wrap-ansi: 7.0.0 dev: true + /clone@1.0.4: + resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} + engines: {node: '>=0.8'} + dev: true + /color-convert@1.9.3: resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} dependencies: @@ -2192,6 +2759,10 @@ packages: engines: {node: '>=14'} dev: true + /commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + dev: true + /commander@3.0.2: resolution: {integrity: sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==} dev: true @@ -2227,6 +2798,17 @@ packages: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} dev: true + /cosmiconfig@7.0.1: + resolution: {integrity: sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==} + engines: {node: '>=10'} + dependencies: + '@types/parse-json': 4.0.0 + import-fresh: 3.3.0 + parse-json: 5.2.0 + path-type: 4.0.0 + yaml: 1.10.2 + dev: true + /cosmiconfig@8.2.0: resolution: {integrity: sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ==} engines: {node: '>=14'} @@ -2344,6 +2926,12 @@ packages: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} dev: true + /defaults@1.0.4: + resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} + dependencies: + clone: 1.0.4 + dev: true + /define-properties@1.2.0: resolution: {integrity: sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==} engines: {node: '>= 0.4'} @@ -2352,6 +2940,11 @@ packages: object-keys: 1.1.1 dev: true + /delay@5.0.0: + resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==} + engines: {node: '>=10'} + dev: true + /delayed-stream@1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} @@ -2400,6 +2993,47 @@ packages: path-type: 4.0.0 dev: true + /dns-over-http-resolver@1.2.3(node-fetch@2.7.0): + resolution: {integrity: sha512-miDiVSI6KSNbi4SVifzO/reD8rMnxgrlnkrlkugOLQpWQTe2qMdHsZp5DmfKjxNE+/T3VAAYLQUZMv9SMr6+AA==} + dependencies: + debug: 4.3.4(supports-color@8.1.1) + native-fetch: 3.0.0(node-fetch@2.7.0) + receptacle: 1.3.2 + transitivePeerDependencies: + - node-fetch + - supports-color + dev: true + + /docker-compose@0.23.19: + resolution: {integrity: sha512-v5vNLIdUqwj4my80wxFDkNH+4S85zsRuH29SO7dCWVWPCMt/ohZBsGN6g6KXWifT0pzQ7uOxqEKCYCDPJ8Vz4g==} + engines: {node: '>= 6.0.0'} + dependencies: + yaml: 1.10.2 + dev: true + + /docker-modem@1.0.9: + resolution: {integrity: sha512-lVjqCSCIAUDZPAZIeyM125HXfNvOmYYInciphNrLrylUtKyW66meAjSPXWchKVzoIYZx69TPnAepVSSkeawoIw==} + engines: {node: '>= 0.8'} + dependencies: + JSONStream: 1.3.2 + debug: 3.2.6(supports-color@6.0.0) + readable-stream: 1.0.34 + split-ca: 1.0.1 + transitivePeerDependencies: + - supports-color + dev: true + + /dockerode@2.5.8: + resolution: {integrity: sha512-+7iOUYBeDTScmOmQqpUYQaE7F4vvIt6+gIZNHWhqAQEI887tiPFB9OvXI/HzQYqfUNvukMK+9myLW63oTJPZpw==} + engines: {node: '>= 0.8'} + dependencies: + concat-stream: 1.6.2 + docker-modem: 1.0.9 + tar-fs: 1.16.3 + transitivePeerDependencies: + - supports-color + dev: true + /doctrine@3.0.0: resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} engines: {node: '>=6.0.0'} @@ -2419,6 +3053,29 @@ packages: safer-buffer: 2.1.2 dev: true + /ejs@3.1.6: + resolution: {integrity: sha512-9lt9Zse4hPucPkoP7FHDF0LQAlGyF9JVpnClFLFH3aSSbxmyoqINRpp/9wePWJTUl4KOQwRL72Iw3InHPDkoGw==} + engines: {node: '>=0.10.0'} + hasBin: true + dependencies: + jake: 10.8.7 + dev: true + + /ejs@3.1.9: + resolution: {integrity: sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==} + engines: {node: '>=0.10.0'} + hasBin: true + dependencies: + jake: 10.8.7 + dev: true + + /electron-fetch@1.9.1: + resolution: {integrity: sha512-M9qw6oUILGVrcENMSRRefE1MbHPIz0h79EKIeJWK9v563aT9Qkh8aEHPO1H5vi970wPirNY+jO9OpFoLiMsMGA==} + engines: {node: '>=6'} + dependencies: + encoding: 0.1.13 + dev: true + /elliptic@6.5.4: resolution: {integrity: sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==} dependencies: @@ -2439,6 +3096,25 @@ packages: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} dev: true + /encoding@0.1.13: + resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==} + dependencies: + iconv-lite: 0.6.3 + dev: true + + /end-of-stream@1.4.4: + resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} + dependencies: + once: 1.4.0 + dev: true + + /enquirer@2.3.6: + resolution: {integrity: sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==} + engines: {node: '>=8.6'} + dependencies: + ansi-colors: 4.1.3 + dev: true + /enquirer@2.4.1: resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} engines: {node: '>=8.6'} @@ -2452,6 +3128,10 @@ packages: engines: {node: '>=6'} dev: true + /err-code@3.0.1: + resolution: {integrity: sha512-GiaH0KJUewYok+eeY05IIgjtAe4Yltygk9Wqp1V5yVWLdhf0hYZchRjNIT9bb0mSwRcIusT3cx7PJUf3zEIfUA==} + dev: true + /error-ex@1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} dependencies: @@ -2531,6 +3211,16 @@ packages: is-symbol: 1.0.4 dev: true + /es6-promise@4.2.8: + resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==} + dev: true + + /es6-promisify@5.0.0: + resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==} + dependencies: + es6-promise: 4.2.8 + dev: true + /escalade@3.1.1: resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} engines: {node: '>=6'} @@ -2851,6 +3541,11 @@ packages: strip-hex-prefix: 1.0.0 dev: true + /event-target-shim@5.0.1: + resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} + engines: {node: '>=6'} + dev: true + /evp_bytestokey@1.0.3: resolution: {integrity: sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==} dependencies: @@ -2858,6 +3553,21 @@ packages: safe-buffer: 5.2.1 dev: true + /execa@5.1.1: + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} + engines: {node: '>=10'} + dependencies: + cross-spawn: 7.0.3 + get-stream: 6.0.1 + human-signals: 2.1.0 + is-stream: 2.0.1 + merge-stream: 2.0.0 + npm-run-path: 4.0.1 + onetime: 5.1.2 + signal-exit: 3.0.7 + strip-final-newline: 2.0.0 + dev: true + /extend@3.0.2: resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} dev: true @@ -2867,10 +3577,19 @@ packages: engines: {'0': node >=0.6.0} dev: true + /eyes@0.1.8: + resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==} + engines: {node: '> 0.1.90'} + dev: true + /fast-base64-decode@1.0.0: resolution: {integrity: sha512-qwaScUgUGBYeDNRnbc/KyllVU88Jk1pRHPStuF/lO7B0/RTRLj7U0lkdTAutlBblY08rwZDff6tNU9cjv6j//Q==} dev: true + /fast-decode-uri-component@1.0.1: + resolution: {integrity: sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==} + dev: true + /fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} dev: true @@ -2879,6 +3598,10 @@ packages: resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} dev: true + /fast-fifo@1.3.2: + resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==} + dev: true + /fast-glob@3.3.1: resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==} engines: {node: '>=8.6.0'} @@ -2898,6 +3621,29 @@ packages: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} dev: true + /fast-levenshtein@3.0.0: + resolution: {integrity: sha512-hKKNajm46uNmTlhHSyZkmToAc56uZJwYq7yrciZjqOxnlfQwERDQJmHPUp7m1m9wx8vgOe8IaCKZ5Kv2k1DdCQ==} + dependencies: + fastest-levenshtein: 1.0.16 + dev: true + + /fast-querystring@1.1.2: + resolution: {integrity: sha512-g6KuKWmFXc0fID8WWH0jit4g0AGBoJhCkJMb1RmbsSEUNvQ+ZC8D6CUZ+GtF8nMzSPXnhiePyyqqipzNNEnHjg==} + dependencies: + fast-decode-uri-component: 1.0.1 + dev: true + + /fast-url-parser@1.1.3: + resolution: {integrity: sha512-5jOCVXADYNuRkKFzNJ0dCCewsZiYo0dz8QNYljkOpFC6r2U4OBmKtvm/Tsuh4w1YYdDqDb31a8TVhBJ2OJKdqQ==} + dependencies: + punycode: 1.4.1 + dev: true + + /fastest-levenshtein@1.0.16: + resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==} + engines: {node: '>= 4.9.1'} + dev: true + /fastq@1.15.0: resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} dependencies: @@ -2911,6 +3657,12 @@ packages: flat-cache: 3.1.0 dev: true + /filelist@1.0.4: + resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} + dependencies: + minimatch: 5.1.6 + dev: true + /fill-range@7.0.1: resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} engines: {node: '>=8'} @@ -3018,6 +3770,10 @@ packages: resolution: {integrity: sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==} dev: true + /fs-constants@1.0.0: + resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} + dev: true + /fs-extra@0.30.0: resolution: {integrity: sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA==} dependencies: @@ -3056,6 +3812,20 @@ packages: universalify: 2.0.0 dev: true + /fs-jetpack@4.3.1: + resolution: {integrity: sha512-dbeOK84F6BiQzk2yqqCVwCPWTxAvVGJ3fMQc6E2wuEohS28mR6yHngbrKuVCK1KHRx/ccByDylqu4H5PCP2urQ==} + dependencies: + minimatch: 3.1.2 + rimraf: 2.7.1 + dev: true + + /fs-minipass@2.1.0: + resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} + engines: {node: '>= 8'} + dependencies: + minipass: 3.3.6 + dev: true + /fs-readdir-recursive@1.1.0: resolution: {integrity: sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==} dev: true @@ -3121,11 +3891,25 @@ packages: has-symbols: 1.0.3 dev: true + /get-iterator@1.0.2: + resolution: {integrity: sha512-v+dm9bNVfOYsY1OrhaCrmyOcYoSeVvbt+hHZ0Au+T+p1y+0Uyj9aMaGIeUTT6xdpRbWzDeYKvfOslPhggQMcsg==} + dev: true + + /get-package-type@0.1.0: + resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} + engines: {node: '>=8.0.0'} + dev: true + /get-port@3.2.0: resolution: {integrity: sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==} engines: {node: '>=4'} dev: true + /get-stream@6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} + dev: true + /get-symbol-description@1.0.0: resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} engines: {node: '>= 0.4'} @@ -3227,6 +4011,16 @@ packages: once: 1.4.0 dev: true + /glob@9.3.5: + resolution: {integrity: sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==} + engines: {node: '>=16 || 14 >=14.17'} + dependencies: + fs.realpath: 1.0.0 + minimatch: 8.0.4 + minipass: 4.2.8 + path-scurry: 1.10.1 + dev: true + /global-modules@2.0.0: resolution: {integrity: sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==} engines: {node: '>=6'} @@ -3283,6 +4077,44 @@ packages: slash: 3.0.0 dev: true + /gluegun@5.1.2(debug@4.3.4): + resolution: {integrity: sha512-Cwx/8S8Z4YQg07a6AFsaGnnnmd8mN17414NcPS3OoDtZRwxgsvwRNJNg69niD6fDa8oNwslCG0xH7rEpRNNE/g==} + hasBin: true + dependencies: + apisauce: 2.1.6(debug@4.3.4) + 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.1.1 + transitivePeerDependencies: + - debug + dev: true + /gopd@1.0.1: resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} dependencies: @@ -3297,6 +4129,24 @@ packages: resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} dev: true + /graphql-import-node@0.0.5(graphql@16.8.0): + resolution: {integrity: sha512-OXbou9fqh9/Lm7vwXT0XoRN9J5+WCYKnbiTalgFDvkQERITRmcfncZs6aVABedd5B85yQU5EULS4a5pnbpuI0Q==} + peerDependencies: + graphql: '*' + dependencies: + graphql: 16.8.0 + dev: true + + /graphql@15.5.0: + resolution: {integrity: sha512-OmaM7y0kaK31NKG31q4YbD2beNYa6jBBKtMFT6gLYJljHLJr42IqJ8KX08u3Li/0ifzTU5HjmoOOrwa5BRLeDA==} + engines: {node: '>= 10.x'} + dev: true + + /graphql@16.8.0: + resolution: {integrity: sha512-0oKGaR+y3qcS5mCu1vb7KG+a89vjn06C7Ihq/dDl3jA+A8B3TKomvi3CiEcVLJQGalbu8F52LxkOym7U5sSfbg==} + engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} + dev: true + /growl@1.10.5: resolution: {integrity: sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==} engines: {node: '>=4.x'} @@ -3545,12 +4395,22 @@ packages: - supports-color dev: true + /human-signals@2.1.0: + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} + dev: true + /husky@8.0.3: resolution: {integrity: sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==} engines: {node: '>=14'} hasBin: true dev: true + /hyperlinker@1.0.0: + resolution: {integrity: sha512-Ty8UblRWFEcfSuIaajM34LdPXIhbs1ajEX/BBPv24J+enSVaEVY63xQ6lTO9VRYS5LAoghIG0IDJ+p+IPzKUQQ==} + engines: {node: '>=4'} + dev: true + /iconv-lite@0.4.24: resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} engines: {node: '>=0.10.0'} @@ -3558,6 +4418,13 @@ packages: safer-buffer: 2.1.2 dev: true + /iconv-lite@0.6.3: + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} + engines: {node: '>=0.10.0'} + dependencies: + safer-buffer: 2.1.2 + dev: true + /ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} dev: true @@ -3567,6 +4434,10 @@ packages: engines: {node: '>= 4'} dev: true + /immutable@4.2.1: + resolution: {integrity: sha512-7WYV7Q5BTs0nlQm7tl92rDYYoyELLKHoDMBKhrxEoiV4mrfVdRz8hzPiYOzH7yWjzoVEamxRuAqhxL2PLRwZYQ==} + dev: true + /immutable@4.3.4: resolution: {integrity: sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA==} dev: true @@ -3604,6 +4475,18 @@ packages: resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} dev: true + /interface-datastore@6.1.1: + resolution: {integrity: sha512-AmCS+9CT34pp2u0QQVXjKztkuq3y5T+BIciuiHDDtDZucZD8VudosnSdUyXJV6IsRkN5jc4RFDhCk1O6Q3Gxjg==} + dependencies: + interface-store: 2.0.2 + nanoid: 3.3.3 + uint8arrays: 3.1.1 + dev: true + + /interface-store@2.0.2: + resolution: {integrity: sha512-rScRlhDcz6k199EkHqT8NpM87ebN89ICOzILoBHgaG36/WX50N32BnU/kpZgCGPLhARRAWUUX5/cyaIjt7Kipg==} + dev: true + /internal-slot@1.0.5: resolution: {integrity: sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==} engines: {node: '>= 0.4'} @@ -3624,6 +4507,115 @@ packages: fp-ts: 1.19.3 dev: true + /ip-regex@4.3.0: + resolution: {integrity: sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==} + engines: {node: '>=8'} + dev: true + + /ipfs-core-types@0.9.0(node-fetch@2.7.0): + resolution: {integrity: sha512-VJ8vJSHvI1Zm7/SxsZo03T+zzpsg8pkgiIi5hfwSJlsrJ1E2v68QPlnLshGHUSYw89Oxq0IbETYl2pGTFHTWfg==} + deprecated: js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details + dependencies: + interface-datastore: 6.1.1 + multiaddr: 10.0.1(node-fetch@2.7.0) + multiformats: 9.9.0 + transitivePeerDependencies: + - node-fetch + - supports-color + dev: true + + /ipfs-core-utils@0.13.0(node-fetch@2.7.0): + resolution: {integrity: sha512-HP5EafxU4/dLW3U13CFsgqVO5Ika8N4sRSIb/dTg16NjLOozMH31TXV0Grtu2ZWo1T10ahTzMvrfT5f4mhioXw==} + deprecated: js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details + dependencies: + any-signal: 2.1.2 + blob-to-it: 1.0.4 + browser-readablestream-to-it: 1.0.3 + debug: 4.3.4(supports-color@8.1.1) + err-code: 3.0.1 + ipfs-core-types: 0.9.0(node-fetch@2.7.0) + ipfs-unixfs: 6.0.9 + ipfs-utils: 9.0.14 + it-all: 1.0.6 + it-map: 1.0.6 + it-peekable: 1.0.3 + it-to-stream: 1.0.0 + merge-options: 3.0.4 + multiaddr: 10.0.1(node-fetch@2.7.0) + multiaddr-to-uri: 8.0.0(node-fetch@2.7.0) + multiformats: 9.9.0 + nanoid: 3.3.3 + parse-duration: 1.1.0 + timeout-abort-controller: 2.0.0 + uint8arrays: 3.1.1 + transitivePeerDependencies: + - encoding + - node-fetch + - supports-color + dev: true + + /ipfs-http-client@55.0.0(node-fetch@2.7.0): + resolution: {integrity: sha512-GpvEs7C7WL9M6fN/kZbjeh4Y8YN7rY8b18tVWZnKxRsVwM25cIFrRI8CwNt3Ugin9yShieI3i9sPyzYGMrLNnQ==} + engines: {node: '>=14.0.0', npm: '>=3.0.0'} + deprecated: js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details + dependencies: + '@ipld/dag-cbor': 7.0.3 + '@ipld/dag-json': 8.0.11 + '@ipld/dag-pb': 2.1.18 + abort-controller: 3.0.0 + any-signal: 2.1.2 + debug: 4.3.4(supports-color@8.1.1) + err-code: 3.0.1 + ipfs-core-types: 0.9.0(node-fetch@2.7.0) + ipfs-core-utils: 0.13.0(node-fetch@2.7.0) + ipfs-utils: 9.0.14 + it-first: 1.0.7 + it-last: 1.0.6 + merge-options: 3.0.4 + multiaddr: 10.0.1(node-fetch@2.7.0) + multiformats: 9.9.0 + native-abort-controller: 1.0.4(abort-controller@3.0.0) + parse-duration: 1.1.0 + stream-to-it: 0.2.4 + uint8arrays: 3.1.1 + transitivePeerDependencies: + - encoding + - node-fetch + - supports-color + dev: true + + /ipfs-unixfs@6.0.9: + resolution: {integrity: sha512-0DQ7p0/9dRB6XCb0mVCTli33GzIzSVx5udpJuVM47tGcD+W+Bl4LsnoLswd3ggNnNEakMv1FdoFITiEnchXDqQ==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + dependencies: + err-code: 3.0.1 + protobufjs: 6.11.4 + dev: true + + /ipfs-utils@9.0.14: + resolution: {integrity: sha512-zIaiEGX18QATxgaS0/EOQNoo33W0islREABAcxXE8n7y2MGAlB+hdsxXn4J0hGZge8IqVQhW8sWIb+oJz2yEvg==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + dependencies: + any-signal: 3.0.1 + browser-readablestream-to-it: 1.0.3 + buffer: 6.0.3 + electron-fetch: 1.9.1 + err-code: 3.0.1 + is-electron: 2.2.2 + iso-url: 1.2.1 + it-all: 1.0.6 + it-glob: 1.0.2 + it-to-stream: 1.0.0 + merge-options: 3.0.4 + nanoid: 3.3.3 + native-fetch: 3.0.0(node-fetch@2.7.0) + node-fetch: 2.7.0 + react-native-fetch-api: 3.0.0 + stream-to-it: 0.2.4 + transitivePeerDependencies: + - encoding + dev: true + /is-array-buffer@3.0.2: resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} dependencies: @@ -3680,6 +4672,16 @@ packages: has-tostringtag: 1.0.0 dev: true + /is-docker@2.2.1: + resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} + engines: {node: '>=8'} + hasBin: true + dev: true + + /is-electron@2.2.2: + resolution: {integrity: sha512-FO/Rhvz5tuw4MCWkpMzHFKWD2LsfHzIb7i6MdPYZ/KW7AlxawyLkqdy+jPZP1WubqEADE3O4FUENlJHDfQASRg==} + dev: true + /is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} @@ -3707,6 +4709,18 @@ packages: engines: {node: '>=6.5.0', npm: '>=3'} dev: true + /is-interactive@1.0.0: + resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} + engines: {node: '>=8'} + dev: true + + /is-ip@3.1.0: + resolution: {integrity: sha512-35vd5necO7IitFPjd/YBeqwWnyDWbuLH9ZXQdMfDA8TEo7pv5X8yfrvVO3xbJbLUlERCMvf6X0hTUamQxCYJ9Q==} + engines: {node: '>=8'} + dependencies: + ip-regex: 4.3.0 + dev: true + /is-negative-zero@2.0.2: resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} engines: {node: '>= 0.4'} @@ -3748,6 +4762,11 @@ packages: call-bind: 1.0.2 dev: true + /is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + dev: true + /is-string@1.0.7: resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} engines: {node: '>= 0.4'} @@ -3784,6 +4803,17 @@ packages: call-bind: 1.0.2 dev: true + /is-wsl@2.2.0: + resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} + engines: {node: '>=8'} + dependencies: + is-docker: 2.2.1 + dev: true + + /isarray@0.0.1: + resolution: {integrity: sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==} + dev: true + /isarray@1.0.0: resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} dev: true @@ -3796,6 +4826,11 @@ packages: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} dev: true + /iso-url@1.2.1: + resolution: {integrity: sha512-9JPDgCN4B7QPkLtYAAOrEuAWvP9rWvR5offAr0/SeF046wIkglqH3VXgYYP6NcsKslH80UIVgmPqNe3j7tG2ng==} + engines: {node: '>=12'} + dev: true + /isomorphic-unfetch@3.1.0: resolution: {integrity: sha512-geDJjpoZ8N0kWexiwkX8F9NkTsXhetLPVbZFQ+JTW239QNOwvB0gniuR1Wc6f0AMTn7/mFGyXvHTifrCp/GH8Q==} dependencies: @@ -3805,10 +4840,89 @@ packages: - encoding dev: true + /isomorphic-ws@4.0.1(ws@7.5.9): + resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==} + peerDependencies: + ws: '*' + dependencies: + ws: 7.5.9 + dev: true + /isstream@0.1.2: resolution: {integrity: sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==} dev: true + /it-all@1.0.6: + resolution: {integrity: sha512-3cmCc6Heqe3uWi3CVM/k51fa/XbMFpQVzFoDsV0IZNHSQDyAXl3c4MjHkFX5kF3922OGj7Myv1nSEUgRtcuM1A==} + dev: true + + /it-first@1.0.7: + resolution: {integrity: sha512-nvJKZoBpZD/6Rtde6FXqwDqDZGF1sCADmr2Zoc0hZsIvnE449gRFnGctxDf09Bzc/FWnHXAdaHVIetY6lrE0/g==} + dev: true + + /it-glob@1.0.2: + resolution: {integrity: sha512-Ch2Dzhw4URfB9L/0ZHyY+uqOnKvBNeS/SMcRiPmJfpHiM0TsUZn+GkpcZxAoF3dJVdPm/PuIk3A4wlV7SUo23Q==} + dependencies: + '@types/minimatch': 3.0.5 + minimatch: 3.1.2 + dev: true + + /it-last@1.0.6: + resolution: {integrity: sha512-aFGeibeiX/lM4bX3JY0OkVCFkAw8+n9lkukkLNivbJRvNz8lI3YXv5xcqhFUV2lDJiraEK3OXRDbGuevnnR67Q==} + dev: true + + /it-map@1.0.6: + resolution: {integrity: sha512-XT4/RM6UHIFG9IobGlQPFQUrlEKkU4eBUFG3qhWhfAdh1JfF2x11ShCrKCdmZ0OiZppPfoLuzcfA4cey6q3UAQ==} + dev: true + + /it-peekable@1.0.3: + resolution: {integrity: sha512-5+8zemFS+wSfIkSZyf0Zh5kNN+iGyccN02914BY4w/Dj+uoFEoPSvj5vaWn8pNZJNSxzjW0zHRxC3LUb2KWJTQ==} + dev: true + + /it-to-stream@1.0.0: + resolution: {integrity: sha512-pLULMZMAB/+vbdvbZtebC0nWBTbG581lk6w8P7DfIIIKUfa8FbY7Oi0FxZcFPbxvISs7A9E+cMpLDBc1XhpAOA==} + dependencies: + buffer: 6.0.3 + fast-fifo: 1.3.2 + get-iterator: 1.0.2 + p-defer: 3.0.0 + p-fifo: 1.0.0 + readable-stream: 3.6.2 + dev: true + + /jake@10.8.7: + resolution: {integrity: sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==} + engines: {node: '>=10'} + hasBin: true + dependencies: + async: 3.2.4 + chalk: 4.1.2 + filelist: 1.0.4 + minimatch: 3.1.2 + dev: true + + /jayson@4.0.0: + resolution: {integrity: sha512-v2RNpDCMu45fnLzSk47vx7I+QUaOsox6f5X0CUlabAFwxoP+8MfAY0NQRFwOEYXIxm8Ih5y6OaEa5KYiQMkyAA==} + engines: {node: '>=8'} + hasBin: true + dependencies: + '@types/connect': 3.4.36 + '@types/node': 12.20.55 + '@types/ws': 7.4.7 + 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(ws@7.5.9) + json-stringify-safe: 5.0.1 + uuid: 8.3.2 + ws: 7.5.9 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: true + /js-cookie@2.2.1: resolution: {integrity: sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ==} dev: true @@ -3904,6 +5018,11 @@ packages: graceful-fs: 4.2.11 dev: true + /jsonparse@1.3.1: + resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} + engines: {'0': node >= 0.2.0} + dev: true + /jsonschema@1.4.1: resolution: {integrity: sha512-S6cATIPVv1z0IlxdN+zUk5EPjkGCdnhN4wVSBlvoUO1tOLJootbo9CquNJmbIh4yikWHiUedhRYrNPn1arpEmQ==} dev: true @@ -4021,12 +5140,68 @@ packages: resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} dev: true + /lodash.kebabcase@4.1.1: + resolution: {integrity: sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==} + dev: true + + /lodash.lowercase@4.3.0: + resolution: {integrity: sha512-UcvP1IZYyDKyEL64mmrwoA1AbFu5ahojhTtkOUr1K9dbuxzS9ev8i4TxMMGCqRC9TE8uDaSoufNAXxRPNTseVA==} + dev: true + + /lodash.lowerfirst@4.3.1: + resolution: {integrity: sha512-UUKX7VhP1/JL54NXg2aq/E1Sfnjjes8fNYTNkPU8ZmsaVeBvPHKdbNaN79Re5XRL01u6wbq3j0cbYZj71Fcu5w==} + dev: true + /lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} dev: true - /lodash.truncate@4.4.2: - resolution: {integrity: sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==} + /lodash.pad@4.5.1: + resolution: {integrity: sha512-mvUHifnLqM+03YNzeTBS1/Gr6JRFjd3rRx88FHWUvamVaT9k2O/kXha3yBSOwB9/DTQrSTLJNHvLBBt2FdX7Mg==} + dev: true + + /lodash.padend@4.6.1: + resolution: {integrity: sha512-sOQs2aqGpbl27tmCS1QNZA09Uqp01ZzWfDUoD+xzTii0E7dSQfRKcRetFwa+uXaxaqL+TKm7CgD2JdKP7aZBSw==} + dev: true + + /lodash.padstart@4.6.1: + resolution: {integrity: sha512-sW73O6S8+Tg66eY56DBk85aQzzUJDtpoXFBgELMd5P/SotAguo+1kYO6RuYgXxA4HJH3LFTFPASX6ET6bjfriw==} + dev: true + + /lodash.repeat@4.1.0: + resolution: {integrity: sha512-eWsgQW89IewS95ZOcr15HHCX6FVDxq3f2PNUIng3fyzsPev9imFQxIYdFZ6crl8L56UR6ZlGDLcEb3RZsCSSqw==} + dev: true + + /lodash.snakecase@4.1.1: + resolution: {integrity: sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==} + dev: true + + /lodash.startcase@4.4.0: + resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} + dev: true + + /lodash.trim@4.5.1: + resolution: {integrity: sha512-nJAlRl/K+eiOehWKDzoBVrSMhK0K3A3YQsUNXHQa5yIrKBAhsZgSu3KoAFoFT+mEgiyBHddZ0pRk1ITpIp90Wg==} + dev: true + + /lodash.trimend@4.5.1: + resolution: {integrity: sha512-lsD+k73XztDsMBKPKvzHXRKFNMohTjoTKIIo4ADLn5dA65LZ1BqlAvSXhR2rPEC3BgAUQnzMnorqDtqn2z4IHA==} + dev: true + + /lodash.trimstart@4.5.1: + resolution: {integrity: sha512-b/+D6La8tU76L/61/aN0jULWHkT0EeJCmVstPBn/K9MtD2qBW83AsBNrr63dKuWYwVMO7ucv13QNO/Ek/2RKaQ==} + dev: true + + /lodash.truncate@4.4.2: + resolution: {integrity: sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==} + dev: true + + /lodash.uppercase@4.3.0: + resolution: {integrity: sha512-+Nbnxkj7s8K5U8z6KnEYPGUOGp3woZbB7Ecs7v3LkkjLQSm2kP9SKIILitN1ktn2mB/tmM9oSlku06I+/lH7QA==} + dev: true + + /lodash.upperfirst@4.3.1: + resolution: {integrity: sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==} dev: true /lodash@4.17.21: @@ -4048,12 +5223,25 @@ packages: is-unicode-supported: 0.1.0 dev: true + /long@4.0.0: + resolution: {integrity: sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==} + dev: true + + /long@5.2.3: + resolution: {integrity: sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==} + dev: true + /loupe@2.3.6: resolution: {integrity: sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==} dependencies: get-func-name: 2.0.0 dev: true + /lru-cache@10.0.1: + resolution: {integrity: sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==} + engines: {node: 14 || >=16.14} + dev: true + /lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} dependencies: @@ -4079,6 +5267,14 @@ packages: resolution: {integrity: sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q==} dev: true + /matchstick-as@0.5.0: + resolution: {integrity: sha512-4K619YDH+so129qt4RB4JCNxaFwJJYLXPc7drpG+/mIj86Cfzg6FKs/bA91cnajmS1CLHdhHl9vt6Kd6Oqvfkg==} + dependencies: + '@graphprotocol/graph-ts': 0.27.0 + assemblyscript: 0.19.23 + wabt: 1.0.24 + dev: true + /mcl-wasm@0.7.9: resolution: {integrity: sha512-iJIUcQWA88IJB/5L15GnJVnSQJmf/YaxxV6zRavv83HILHaJQb6y0iFyDMdDO0gN8X37tdxmAOrH/P8B6RB8sQ==} engines: {node: '>=8.9.0'} @@ -4106,6 +5302,17 @@ packages: engines: {node: '>= 0.10.0'} dev: true + /merge-options@3.0.4: + resolution: {integrity: sha512-2Sug1+knBjkaMsMgf1ctR1Ujx+Ayku4EdJN4Z+C2+JzoeF7A3OZ9KM2GY0CpQS51NR61LTurMJrRKPhSs3ZRTQ==} + engines: {node: '>=10'} + dependencies: + is-plain-obj: 2.1.0 + dev: true + + /merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + dev: true + /merge2@1.4.1: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} @@ -4135,6 +5342,11 @@ packages: mime-db: 1.52.0 dev: true + /mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + dev: true + /minimalistic-assert@1.0.1: resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} dev: true @@ -4163,10 +5375,47 @@ packages: brace-expansion: 2.0.1 dev: true + /minimatch@8.0.4: + resolution: {integrity: sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==} + engines: {node: '>=16 || 14 >=14.17'} + dependencies: + brace-expansion: 2.0.1 + dev: true + /minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} dev: true + /minipass@3.3.6: + resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} + engines: {node: '>=8'} + dependencies: + yallist: 4.0.0 + dev: true + + /minipass@4.2.8: + resolution: {integrity: sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==} + engines: {node: '>=8'} + dev: true + + /minipass@5.0.0: + resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} + engines: {node: '>=8'} + dev: true + + /minipass@7.0.3: + resolution: {integrity: sha512-LhbbwCfz3vsb12j/WkWQPZfKTsgqIe1Nf/ti1pKjYESGLHIVjWU96G9/ljLH4F9mWNVhlQOm0VySdAWzf05dpg==} + engines: {node: '>=16 || 14 >=14.17'} + dev: true + + /minizlib@2.1.2: + resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} + engines: {node: '>= 8'} + dependencies: + minipass: 3.3.6 + yallist: 4.0.0 + dev: true + /mkdirp@0.5.5: resolution: {integrity: sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==} hasBin: true @@ -4238,7 +5487,7 @@ packages: he: 1.2.0 js-yaml: 3.13.1 log-symbols: 3.0.0 - minimatch: 5.1.6 + minimatch: 8.0.4 mkdirp: 0.5.5 ms: 2.1.1 node-environment-flags: 1.0.6 @@ -4269,7 +5518,7 @@ packages: he: 1.2.0 js-yaml: 3.13.1 log-symbols: 3.0.0 - minimatch: 5.1.6 + minimatch: 8.0.4 mkdirp: 0.5.5 ms: 2.1.1 node-environment-flags: 1.0.6 @@ -4300,6 +5549,35 @@ packages: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} dev: true + /multiaddr-to-uri@8.0.0(node-fetch@2.7.0): + resolution: {integrity: sha512-dq4p/vsOOUdVEd1J1gl+R2GFrXJQH8yjLtz4hodqdVbieg39LvBOdMQRdQnfbg5LSM/q1BYNVf5CBbwZFFqBgA==} + deprecated: This module is deprecated, please upgrade to @multiformats/multiaddr-to-uri + dependencies: + multiaddr: 10.0.1(node-fetch@2.7.0) + transitivePeerDependencies: + - node-fetch + - supports-color + dev: true + + /multiaddr@10.0.1(node-fetch@2.7.0): + resolution: {integrity: sha512-G5upNcGzEGuTHkzxezPrrD6CaIHR9uo+7MwqhNVcXTs33IInon4y7nMiGxl2CY5hG7chvYQUQhz5V52/Qe3cbg==} + deprecated: This module is deprecated, please upgrade to @multiformats/multiaddr + dependencies: + dns-over-http-resolver: 1.2.3(node-fetch@2.7.0) + err-code: 3.0.1 + is-ip: 3.1.0 + multiformats: 9.9.0 + uint8arrays: 3.1.1 + varint: 6.0.0 + transitivePeerDependencies: + - node-fetch + - supports-color + dev: true + + /multiformats@9.9.0: + resolution: {integrity: sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==} + dev: true + /nanoid@3.3.3: resolution: {integrity: sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -4310,10 +5588,30 @@ packages: resolution: {integrity: sha512-hmEVtAGYzVQpCKdbQea4skABsdXW4RUh5t5mJ2zzqowJS2OyXZTU1KhDVFhx+NlWZ4ap9mqR9TcDO3LTTttd+g==} dev: true + /native-abort-controller@1.0.4(abort-controller@3.0.0): + resolution: {integrity: sha512-zp8yev7nxczDJMoP6pDxyD20IU0T22eX8VwN2ztDccKvSZhRaV33yP1BGwKSZfXuqWUzsXopVFjBdau9OOAwMQ==} + peerDependencies: + abort-controller: '*' + dependencies: + abort-controller: 3.0.0 + dev: true + + /native-fetch@3.0.0(node-fetch@2.7.0): + resolution: {integrity: sha512-G3Z7vx0IFb/FQ4JxvtqGABsOTIqRWvgQz6e+erkB+JJD6LrszQtMozEHI4EkmgZQvnGHrpLVzUWk7t4sJCIkVw==} + peerDependencies: + node-fetch: '*' + dependencies: + node-fetch: 2.7.0 + dev: true + /natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} dev: true + /natural-orderby@2.0.3: + resolution: {integrity: sha512-p7KTHxU0CUrcOXe62Zfrb5Z13nLvPhSWR/so3kFulUQU0sgUll2Z0LwpsLN351eOOD+hRGu/F1g+6xDfPeD++Q==} + dev: true + /neo-async@2.6.2: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} dev: true @@ -4369,6 +5667,13 @@ packages: engines: {node: '>=0.10.0'} dev: true + /npm-run-path@4.0.1: + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} + dependencies: + path-key: 3.1.1 + dev: true + /number-to-bn@1.7.0: resolution: {integrity: sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig==} engines: {node: '>=6.5.0', npm: '>=3'} @@ -4395,6 +5700,11 @@ packages: engines: {node: '>= 0.4'} dev: true + /object-treeify@1.1.33: + resolution: {integrity: sha512-EFVjAYfzWqWsBMRHPMAXLCDIJnpMhdWAqR7xG6M6a2cs6PMFpl/+Z20w9zDW4vkxOFfddegBKq9Rehd0bxWE7A==} + engines: {node: '>= 10'} + dev: true + /object.assign@4.1.0: resolution: {integrity: sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==} engines: {node: '>= 0.4'} @@ -4436,6 +5746,13 @@ packages: wrappy: 1.0.2 dev: true + /onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + dependencies: + mimic-fn: 2.1.0 + dev: true + /optionator@0.8.3: resolution: {integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==} engines: {node: '>= 0.8.0'} @@ -4460,6 +5777,19 @@ packages: type-check: 0.4.0 dev: true + /ora@4.0.2: + resolution: {integrity: sha512-YUOZbamht5mfLxPmk4M35CD/5DuOkAacxlEUbStVXpBAt4fyhBf+vZHI/HRkI++QUp3sNoeA2Gw4C+hi4eGSig==} + engines: {node: '>=8'} + dependencies: + chalk: 2.4.2 + cli-cursor: 3.1.0 + cli-spinners: 2.9.1 + is-interactive: 1.0.0 + log-symbols: 3.0.0 + strip-ansi: 5.2.0 + wcwidth: 1.0.1 + dev: true + /ordinal@1.0.3: resolution: {integrity: sha512-cMddMgb2QElm8G7vdaa02jhUNbTSrhsgAGUz1OokD83uJTwSUn+nKoNoKVVaRa08yF6sgfO7Maou1+bgLd9rdQ==} dev: true @@ -4469,6 +5799,18 @@ packages: engines: {node: '>=0.10.0'} dev: true + /p-defer@3.0.0: + resolution: {integrity: sha512-ugZxsxmtTln604yeYd29EGrNhazN2lywetzpKhfmQjW/VJmhpDmWbiX+h0zL8V91R0UXkhb3KtPmyq9PZw3aYw==} + engines: {node: '>=8'} + dev: true + + /p-fifo@1.0.0: + resolution: {integrity: sha512-IjoCxXW48tqdtDFz6fqo5q1UfFVjjVZe8TC1QRflvNUJtNfCUhxOUw6MOVZhDPjqhSzc26xKdugsO17gmzd5+A==} + dependencies: + fast-fifo: 1.3.2 + p-defer: 3.0.0 + dev: true + /p-limit@1.3.0: resolution: {integrity: sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==} engines: {node: '>=4'} @@ -4539,6 +5881,10 @@ packages: resolution: {integrity: sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg==} dev: true + /parse-duration@1.1.0: + resolution: {integrity: sha512-z6t9dvSJYaPoQq7quMzdEagSFtpGu+utzHqqxmpVWNNZRIXnvqyCvn9XsTdh7c/w0Bqmdz3RB3YnRaKtpRtEXQ==} + dev: true + /parse-json@5.2.0: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} @@ -4549,6 +5895,13 @@ packages: lines-and-columns: 1.2.4 dev: true + /password-prompt@1.1.3: + resolution: {integrity: sha512-HkrjG2aJlvF0t2BMH0e2LB/EHf3Lcq3fNMzy4GYHcQblAvOl+QQji1Lx7WRBMqpVK8p+KR7bCg7oqAMXtdgqyw==} + dependencies: + ansi-escapes: 4.3.2 + cross-spawn: 7.0.3 + dev: true + /path-exists@3.0.0: resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==} engines: {node: '>=4'} @@ -4573,6 +5926,14 @@ packages: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} dev: true + /path-scurry@1.10.1: + resolution: {integrity: sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==} + engines: {node: '>=16 || 14 >=14.17'} + dependencies: + lru-cache: 10.0.1 + minipass: 7.0.3 + dev: true + /path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} @@ -4641,6 +6002,12 @@ packages: solidity-comments-extractor: 0.0.7 dev: true + /prettier@1.19.1: + resolution: {integrity: sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==} + engines: {node: '>=4'} + hasBin: true + dev: true + /prettier@2.8.8: resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} engines: {node: '>=10.13.0'} @@ -4666,6 +6033,26 @@ packages: signal-exit: 3.0.7 dev: true + /protobufjs@6.11.4: + resolution: {integrity: sha512-5kQWPaJHi1WoCpjTGszzQ32PG2F4+wRY6BmAT4Vfw56Q2FZ4YZzK20xUYQH4YkfehY1e6QSICrJquM6xXZNcrw==} + hasBin: true + requiresBuild: true + dependencies: + '@protobufjs/aspromise': 1.1.2 + '@protobufjs/base64': 1.1.2 + '@protobufjs/codegen': 2.0.4 + '@protobufjs/eventemitter': 1.1.0 + '@protobufjs/fetch': 1.1.0 + '@protobufjs/float': 1.0.2 + '@protobufjs/inquire': 1.1.0 + '@protobufjs/path': 1.1.2 + '@protobufjs/pool': 1.1.0 + '@protobufjs/utf8': 1.1.0 + '@types/long': 4.0.2 + '@types/node': 20.5.7 + long: 4.0.0 + dev: true + /proxy-from-env@1.1.0: resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} dev: true @@ -4674,11 +6061,33 @@ packages: resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} dev: true + /pump@1.0.3: + resolution: {integrity: sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw==} + dependencies: + end-of-stream: 1.4.4 + once: 1.4.0 + dev: true + + /punycode@1.4.1: + resolution: {integrity: sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==} + dev: true + /punycode@2.3.0: resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} engines: {node: '>=6'} dev: true + /pvtsutils@1.3.5: + resolution: {integrity: sha512-ARvb14YB9Nm2Xi6nBq1ZX6dAM0FsJnuk+31aUp4TrcZEdKUlSqOqsxJHUPJDNE3qiIp+iUPEIeR6Je/tgV7zsA==} + dependencies: + tslib: 2.6.2 + dev: true + + /pvutils@1.1.3: + resolution: {integrity: sha512-pMpnA0qRdFp32b1sJl1wOJNxZLQ2cbQx+k6tjNtZ8CpvVhNqEPRgivZ2WOUev2YMajecdH7ctUPDvEe87nariQ==} + engines: {node: '>=6.0.0'} + dev: true + /qs@6.11.2: resolution: {integrity: sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==} engines: {node: '>=0.6'} @@ -4715,6 +6124,21 @@ packages: unpipe: 1.0.0 dev: true + /react-native-fetch-api@3.0.0: + resolution: {integrity: sha512-g2rtqPjdroaboDKTsJCTlcmtw54E25OjyaunUP0anOZn4Fuo2IKs8BVfe02zVggA/UysbmfSnRJIqtNkAgggNA==} + dependencies: + p-defer: 3.0.0 + dev: true + + /readable-stream@1.0.34: + resolution: {integrity: sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==} + dependencies: + core-util-is: 1.0.3 + inherits: 2.0.4 + isarray: 0.0.1 + string_decoder: 0.10.31 + dev: true + /readable-stream@2.3.8: resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} dependencies: @@ -4750,6 +6174,12 @@ packages: picomatch: 2.3.1 dev: true + /receptacle@1.3.2: + resolution: {integrity: sha512-HrsFvqZZheusncQRiEE7GatOAETrARKV/lnfYicIm8lbvp/JQOdADOfhjBd2DajvoszEyxSM6RlAAIZgEoeu/A==} + dependencies: + ms: 2.1.3 + dev: true + /rechoir@0.6.2: resolution: {integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==} engines: {node: '>= 0.10'} @@ -4764,6 +6194,12 @@ packages: minimatch: 3.1.2 dev: true + /redeyed@2.1.1: + resolution: {integrity: sha512-FNpGGo1DycYAdnrKFxCMmKYgo/mILAqtRYbkdQD8Ep/Hk2PQ5+aEAEx+IU713RTDmuBaH0c8P5ZozurNu5ObRQ==} + dependencies: + esprima: 4.0.1 + dev: true + /reduce-flatten@2.0.0: resolution: {integrity: sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==} engines: {node: '>=6'} @@ -4889,6 +6325,18 @@ packages: supports-preserve-symlinks-flag: 1.0.0 dev: true + /restore-cursor@3.1.0: + resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} + engines: {node: '>=8'} + dependencies: + onetime: 5.1.2 + signal-exit: 3.0.7 + dev: true + + /retimer@3.0.0: + resolution: {integrity: sha512-WKE0j11Pa0ZJI5YIk0nflGI7SQsfl2ljihVy7ogh7DeQSeYAUi0ubZ/yEueGtDfUPk6GH5LRw1hBdLq4IwUBWA==} + dev: true + /retry@0.12.0: resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} engines: {node: '>= 4'} @@ -5026,6 +6474,22 @@ packages: hasBin: true dev: true + /semver@7.3.5: + resolution: {integrity: sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==} + engines: {node: '>=10'} + hasBin: true + dependencies: + lru-cache: 6.0.0 + dev: true + + /semver@7.4.0: + resolution: {integrity: sha512-RgOxM8Mw+7Zus0+zcLEUn8+JfoLpj/huFTItQy2hsM4khuC1HYRDp0cU482Ewn/Fcy6bCjufD8vAj7voC66KQw==} + engines: {node: '>=10'} + hasBin: true + dependencies: + lru-cache: 6.0.0 + dev: true + /semver@7.5.4: resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} engines: {node: '>=10'} @@ -5235,6 +6699,10 @@ packages: engines: {node: '>=0.10.0'} dev: true + /split-ca@1.0.1: + resolution: {integrity: sha512-Q5thBSxp5t8WPTTJQS59LrGqOZqOsrhDGDVm8azCqIBjSBd7nd9o2PM+mDulQQkh8h//4U6hFZnc/mul8t5pWQ==} + dev: true + /sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} dev: true @@ -5272,6 +6740,12 @@ packages: engines: {node: '>=0.10.0'} dev: true + /stream-to-it@0.2.4: + resolution: {integrity: sha512-4vEbkSs83OahpmBybNJXlJd7d6/RxzkkSdT3I0mnGt79Xd2Kk+e1JqbvAvsQfCeKj3aKb0QIWkyK3/n0j506vQ==} + dependencies: + get-iterator: 1.0.2 + dev: true + /streamsearch@1.1.0: resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} engines: {node: '>=10.0.0'} @@ -5332,6 +6806,10 @@ packages: es-abstract: 1.22.1 dev: true + /string_decoder@0.10.31: + resolution: {integrity: sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==} + dev: true + /string_decoder@1.1.1: resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} dependencies: @@ -5365,6 +6843,11 @@ packages: ansi-regex: 5.0.1 dev: true + /strip-final-newline@2.0.0: + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} + engines: {node: '>=6'} + dev: true + /strip-hex-prefix@1.0.0: resolution: {integrity: sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==} engines: {node: '>=6.5.0', npm: '>=3'} @@ -5417,6 +6900,14 @@ packages: has-flag: 4.0.0 dev: true + /supports-hyperlinks@2.3.0: + resolution: {integrity: sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==} + engines: {node: '>=8'} + dependencies: + has-flag: 4.0.0 + supports-color: 7.2.0 + dev: true + /supports-preserve-symlinks-flag@1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} @@ -5458,6 +6949,40 @@ packages: strip-ansi: 6.0.1 dev: true + /tar-fs@1.16.3: + resolution: {integrity: sha512-NvCeXpYx7OsmOh8zIOP/ebG55zZmxLE0etfWRbWok+q2Qo8x/vOR/IJT1taADXPe+jsiu9axDb3X4B+iIgNlKw==} + dependencies: + chownr: 1.1.4 + mkdirp: 0.5.6 + pump: 1.0.3 + tar-stream: 1.6.2 + dev: true + + /tar-stream@1.6.2: + resolution: {integrity: sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==} + engines: {node: '>= 0.8.0'} + dependencies: + bl: 1.2.3 + buffer-alloc: 1.2.0 + end-of-stream: 1.4.4 + fs-constants: 1.0.0 + readable-stream: 2.3.8 + to-buffer: 1.1.1 + xtend: 4.0.2 + dev: true + + /tar@6.2.0: + resolution: {integrity: sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==} + engines: {node: '>=10'} + dependencies: + chownr: 2.0.0 + fs-minipass: 2.1.0 + minipass: 5.0.0 + minizlib: 2.1.2 + mkdirp: 1.0.4 + yallist: 4.0.0 + dev: true + /text-table@0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} dev: true @@ -5479,6 +7004,24 @@ packages: qs: 6.11.2 dev: true + /through@2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + dev: true + + /timeout-abort-controller@2.0.0: + resolution: {integrity: sha512-2FAPXfzTPYEgw27bQGTHc0SzrbmnU2eso4qo172zMLZzaGqeu09PFa5B2FCUHM1tflgRqPgn5KQgp6+Vex4uNA==} + dependencies: + abort-controller: 3.0.0 + native-abort-controller: 1.0.4(abort-controller@3.0.0) + retimer: 3.0.0 + dev: true + + /tmp-promise@3.0.3: + resolution: {integrity: sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==} + dependencies: + tmp: 0.2.1 + dev: true + /tmp@0.0.33: resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} engines: {node: '>=0.6.0'} @@ -5486,6 +7029,17 @@ packages: os-tmpdir: 1.0.2 dev: true + /tmp@0.2.1: + resolution: {integrity: sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==} + engines: {node: '>=8.17.0'} + dependencies: + rimraf: 3.0.2 + dev: true + + /to-buffer@1.1.1: + resolution: {integrity: sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==} + dev: true + /to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} @@ -5725,6 +7279,12 @@ packages: dev: true optional: true + /uint8arrays@3.1.1: + resolution: {integrity: sha512-+QJa8QRnbdXVpHYjLoTpJIdCTiw9Ir62nocClWuXIq2JIh4Uta0cQsTSpFL678p2CN8B+XSApwcU+pQEqVpKWg==} + dependencies: + multiformats: 9.9.0 + dev: true + /unbox-primitive@1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: @@ -5778,6 +7338,10 @@ packages: requires-port: 1.0.0 dev: true + /urlpattern-polyfill@8.0.2: + resolution: {integrity: sha512-Qp95D4TPJl1kC9SKigDcqgyM2VDVO4RiJc2d4qe5GrYm+zbIQCWWKAFaJNQ4BhdFeDGwBmAxqJBwWSJDb9T3BQ==} + dev: true + /utf8@3.0.0: resolution: {integrity: sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==} dev: true @@ -5806,6 +7370,10 @@ packages: resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} dev: true + /varint@6.0.0: + resolution: {integrity: sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==} + dev: true + /verror@1.10.0: resolution: {integrity: sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==} engines: {'0': node >=0.6.0} @@ -5815,6 +7383,30 @@ packages: extsprintf: 1.3.0 dev: true + /wabt@1.0.24: + resolution: {integrity: sha512-8l7sIOd3i5GWfTWciPL0+ff/FK/deVK2Q6FN+MPz4vfUcD78i2M/49XJTwF6aml91uIiuXJEsLKWMB2cw/mtKg==} + hasBin: true + dev: true + + /wcwidth@1.0.1: + resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} + dependencies: + defaults: 1.0.4 + dev: true + + /web-streams-polyfill@3.2.1: + resolution: {integrity: sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==} + engines: {node: '>= 8'} + dev: true + + /web3-eth-abi@1.7.0: + resolution: {integrity: sha512-heqR0bWxgCJwjWIhq2sGyNj9bwun5+Xox/LdZKe+WMyTSy0cXDXEAgv3XKNkXC4JqdDt/ZlbTEx4TWak4TRMSg==} + engines: {node: '>=8.0.0'} + dependencies: + '@ethersproject/abi': 5.0.7 + web3-utils: 1.7.0 + dev: true + /web3-utils@1.10.2: resolution: {integrity: sha512-TdApdzdse5YR+5GCX/b/vQnhhbj1KSAtfrDtRW7YS0kcWp1gkJsN62gw6GzCaNTeXookB7UrLtmDUuMv65qgow==} engines: {node: '>=8.0.0'} @@ -5829,6 +7421,29 @@ packages: utf8: 3.0.0 dev: true + /web3-utils@1.7.0: + resolution: {integrity: sha512-O8Tl4Ky40Sp6pe89Olk2FsaUkgHyb5QAXuaKo38ms3CxZZ4d3rPGfjP9DNKGm5+IUgAZBNpF1VmlSmNCqfDI1w==} + engines: {node: '>=8.0.0'} + dependencies: + bn.js: 4.12.0 + ethereum-bloom-filters: 1.0.10 + ethereumjs-util: 7.1.5 + ethjs-unit: 0.1.6 + number-to-bn: 1.7.0 + randombytes: 2.1.0 + utf8: 3.0.0 + dev: true + + /webcrypto-core@1.7.7: + resolution: {integrity: sha512-7FjigXNsBfopEj+5DV2nhNpfic2vumtjjgPmeDKk45z+MJwXKKfhPB7118Pfzrmh4jqOMST6Ch37iPAHoImg5g==} + dependencies: + '@peculiar/asn1-schema': 2.3.6 + '@peculiar/json-schema': 1.1.12 + asn1js: 3.0.5 + pvtsutils: 1.3.5 + tslib: 2.6.2 + dev: true + /webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} dev: true @@ -5886,6 +7501,13 @@ packages: string-width: 2.1.1 dev: true + /widest-line@3.1.0: + resolution: {integrity: sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==} + engines: {node: '>=8'} + dependencies: + string-width: 4.2.3 + dev: true + /word-wrap@1.2.5: resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} engines: {node: '>=0.10.0'} @@ -5973,6 +7595,11 @@ packages: engines: {node: '>=0.4.0'} dev: true + /xtend@4.0.2: + resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} + engines: {node: '>=0.4'} + dev: true + /y18n@4.0.3: resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} dev: true @@ -5990,6 +7617,11 @@ packages: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} dev: true + /yaml@1.10.2: + resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} + engines: {node: '>= 6'} + dev: true + /yargs-parser@13.1.2: resolution: {integrity: sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==} dependencies: @@ -6002,6 +7634,11 @@ packages: engines: {node: '>=10'} dev: true + /yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + dev: true + /yargs-unparser@1.6.0: resolution: {integrity: sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==} engines: {node: '>=6'} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml new file mode 100644 index 00000000..17e042cf --- /dev/null +++ b/pnpm-workspace.yaml @@ -0,0 +1,3 @@ +packages: + - '.' + - 'subgraph' diff --git a/subgraph/.env.example b/subgraph/.env.example new file mode 100644 index 00000000..7934aea5 --- /dev/null +++ b/subgraph/.env.example @@ -0,0 +1,4 @@ +DEPLOY_ENDPOINT_GOERLI= +DEPLOY_ENDPOINT_MAINNET= +IPFS_ENDPOINT= +IPFS_IDENTIFIERS= diff --git a/subgraph/README.md b/subgraph/README.md new file mode 100644 index 00000000..224835d5 --- /dev/null +++ b/subgraph/README.md @@ -0,0 +1,45 @@ +# Verax - Subgraph + +This subgraph aims to index the data generated by the smart contracts of Verax. + +## How to use it? + +### 1. Add secrets + +1. Copy the .env.example file to a .env file +2. Fill `DEPLOY_ENDPOINT_GOERLI` with the endpoint dedicated to Linea Goerli subgraphs deployment +3. Fill `DEPLOY_ENDPOINT_MAINNET` with the endpoint dedicated to Linea Mainnet subgraphs deployment +4. Fill `IPFS_ENDPOINT` with your IPFS endpoint (you can get one for free via Infura) +5. Fill `IPFS_IDENTIFIERS` with your IPFS identifiers (you can get one for free via Infura). + +Note: You need to encode your identifier and secret key to Base64, following this format: `IDENTIFIER:SECRET`. + +### 2. Create the subgraph + +```bash +pnpm run create:goerli # Linea Goerli +``` + +```bash +pnpm run create # Linea Mainnet +``` + +### 3. Build the subgraph + +```bash +pnpm run build:goerli # Linea Goerli +``` + +```bash +pnpm run build # Linea Mainnet +``` + +### 4. Deploy the subgraph + +```bash +pnpm run deploy:goerli # Linea Goerli +``` + +```bash +pnpm run deploy # Linea Mainnet +``` diff --git a/subgraph/abis/AttestationRegistry.json b/subgraph/abis/AttestationRegistry.json new file mode 100644 index 00000000..4a728dc4 --- /dev/null +++ b/subgraph/abis/AttestationRegistry.json @@ -0,0 +1,607 @@ +[ + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "AlreadyRevoked", + "type": "error" + }, + { + "inputs": [], + "name": "ArrayLengthMismatch", + "type": "error" + }, + { + "inputs": [], + "name": "AttestationDataFieldEmpty", + "type": "error" + }, + { + "inputs": [], + "name": "AttestationNotAttested", + "type": "error" + }, + { + "inputs": [], + "name": "AttestationNotRevocable", + "type": "error" + }, + { + "inputs": [], + "name": "AttestationSubjectFieldEmpty", + "type": "error" + }, + { + "inputs": [], + "name": "OnlyAttestingPortal", + "type": "error" + }, + { + "inputs": [], + "name": "OnlyPortal", + "type": "error" + }, + { + "inputs": [], + "name": "RouterInvalid", + "type": "error" + }, + { + "inputs": [], + "name": "SchemaNotRegistered", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "attestationId", + "type": "bytes32" + } + ], + "name": "AttestationRegistered", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "attestationId", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "replacedBy", + "type": "bytes32" + } + ], + "name": "AttestationReplaced", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "attestationId", + "type": "bytes32" + } + ], + "name": "AttestationRevoked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint16", + "name": "version", + "type": "uint16" + } + ], + "name": "VersionUpdated", + "type": "event" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes32", + "name": "schemaId", + "type": "bytes32" + }, + { + "internalType": "uint64", + "name": "expirationDate", + "type": "uint64" + }, + { + "internalType": "bytes", + "name": "subject", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "attestationData", + "type": "bytes" + } + ], + "internalType": "struct AttestationPayload", + "name": "attestationPayload", + "type": "tuple" + }, + { + "internalType": "address", + "name": "attester", + "type": "address" + } + ], + "name": "attest", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes32", + "name": "schemaId", + "type": "bytes32" + }, + { + "internalType": "uint64", + "name": "expirationDate", + "type": "uint64" + }, + { + "internalType": "bytes", + "name": "subject", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "attestationData", + "type": "bytes" + } + ], + "internalType": "struct AttestationPayload[]", + "name": "attestationsPayloads", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "attester", + "type": "address" + } + ], + "name": "bulkAttest", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32[]", + "name": "attestationIds", + "type": "bytes32[]" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "schemaId", + "type": "bytes32" + }, + { + "internalType": "uint64", + "name": "expirationDate", + "type": "uint64" + }, + { + "internalType": "bytes", + "name": "subject", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "attestationData", + "type": "bytes" + } + ], + "internalType": "struct AttestationPayload[]", + "name": "attestationPayloads", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "attester", + "type": "address" + } + ], + "name": "bulkReplace", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32[]", + "name": "attestationIds", + "type": "bytes32[]" + } + ], + "name": "bulkRevoke", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "attestationId", + "type": "bytes32" + } + ], + "name": "getAttestation", + "outputs": [ + { + "components": [ + { + "internalType": "bytes32", + "name": "attestationId", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "schemaId", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "replacedBy", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "attester", + "type": "address" + }, + { + "internalType": "address", + "name": "portal", + "type": "address" + }, + { + "internalType": "uint64", + "name": "attestedDate", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "expirationDate", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "revocationDate", + "type": "uint64" + }, + { + "internalType": "uint16", + "name": "version", + "type": "uint16" + }, + { + "internalType": "bool", + "name": "revoked", + "type": "bool" + }, + { + "internalType": "bytes", + "name": "subject", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "attestationData", + "type": "bytes" + } + ], + "internalType": "struct Attestation", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getAttestationIdCounter", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getVersionNumber", + "outputs": [ + { + "internalType": "uint16", + "name": "", + "type": "uint16" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "incrementVersionNumber", + "outputs": [ + { + "internalType": "uint16", + "name": "", + "type": "uint16" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "attestationId", + "type": "bytes32" + } + ], + "name": "isRegistered", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "portalId", + "type": "address" + } + ], + "name": "isRevocable", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes32", + "name": "schemaId", + "type": "bytes32" + }, + { + "internalType": "uint64", + "name": "expirationDate", + "type": "uint64" + }, + { + "internalType": "bytes", + "name": "subject", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "attestationData", + "type": "bytes" + } + ], + "internalType": "struct AttestationPayload[]", + "name": "attestationsPayloads", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "portal", + "type": "address" + } + ], + "name": "massImport", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "attestationId", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "schemaId", + "type": "bytes32" + }, + { + "internalType": "uint64", + "name": "expirationDate", + "type": "uint64" + }, + { + "internalType": "bytes", + "name": "subject", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "attestationData", + "type": "bytes" + } + ], + "internalType": "struct AttestationPayload", + "name": "attestationPayload", + "type": "tuple" + }, + { + "internalType": "address", + "name": "attester", + "type": "address" + } + ], + "name": "replace", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "attestationId", + "type": "bytes32" + } + ], + "name": "revoke", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "router", + "outputs": [ + { + "internalType": "contract IRouter", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_router", + "type": "address" + } + ], + "name": "updateRouter", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } +] diff --git a/subgraph/abis/ModuleRegistry.json b/subgraph/abis/ModuleRegistry.json new file mode 100644 index 00000000..eec4a015 --- /dev/null +++ b/subgraph/abis/ModuleRegistry.json @@ -0,0 +1,392 @@ +[ + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "AttestationPayloadMissing", + "type": "error" + }, + { + "inputs": [], + "name": "ModuleAddressInvalid", + "type": "error" + }, + { + "inputs": [], + "name": "ModuleAlreadyExists", + "type": "error" + }, + { + "inputs": [], + "name": "ModuleInvalid", + "type": "error" + }, + { + "inputs": [], + "name": "ModuleNameMissing", + "type": "error" + }, + { + "inputs": [], + "name": "ModuleNotRegistered", + "type": "error" + }, + { + "inputs": [], + "name": "ModuleValidationPayloadMismatch", + "type": "error" + }, + { + "inputs": [], + "name": "OnlyIssuer", + "type": "error" + }, + { + "inputs": [], + "name": "RouterInvalid", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "description", + "type": "string" + }, + { + "indexed": false, + "internalType": "address", + "name": "moduleAddress", + "type": "address" + } + ], + "name": "ModuleRegistered", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "modulesAddresses", + "type": "address[]" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "schemaId", + "type": "bytes32" + }, + { + "internalType": "uint64", + "name": "expirationDate", + "type": "uint64" + }, + { + "internalType": "bytes", + "name": "subject", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "attestationData", + "type": "bytes" + } + ], + "internalType": "struct AttestationPayload[]", + "name": "attestationsPayloads", + "type": "tuple[]" + }, + { + "internalType": "bytes[][]", + "name": "validationPayloads", + "type": "bytes[][]" + } + ], + "name": "bulkRunModules", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "getModulesNumber", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "contractAddress", + "type": "address" + } + ], + "name": "isContractAddress", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "moduleAddress", + "type": "address" + } + ], + "name": "isRegistered", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "moduleAddresses", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "id", + "type": "address" + } + ], + "name": "modules", + "outputs": [ + { + "internalType": "address", + "name": "moduleAddress", + "type": "address" + }, + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "string", + "name": "description", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "string", + "name": "description", + "type": "string" + }, + { + "internalType": "address", + "name": "moduleAddress", + "type": "address" + } + ], + "name": "register", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "router", + "outputs": [ + { + "internalType": "contract IRouter", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "modulesAddresses", + "type": "address[]" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "schemaId", + "type": "bytes32" + }, + { + "internalType": "uint64", + "name": "expirationDate", + "type": "uint64" + }, + { + "internalType": "bytes", + "name": "subject", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "attestationData", + "type": "bytes" + } + ], + "internalType": "struct AttestationPayload", + "name": "attestationPayload", + "type": "tuple" + }, + { + "internalType": "bytes[]", + "name": "validationPayloads", + "type": "bytes[]" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "runModules", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_router", + "type": "address" + } + ], + "name": "updateRouter", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } +] diff --git a/subgraph/abis/PortalRegistry.json b/subgraph/abis/PortalRegistry.json new file mode 100644 index 00000000..04ffa99e --- /dev/null +++ b/subgraph/abis/PortalRegistry.json @@ -0,0 +1,374 @@ +[ + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "OnlyIssuer", + "type": "error" + }, + { + "inputs": [], + "name": "PortalAddressInvalid", + "type": "error" + }, + { + "inputs": [], + "name": "PortalAlreadyExists", + "type": "error" + }, + { + "inputs": [], + "name": "PortalDescriptionMissing", + "type": "error" + }, + { + "inputs": [], + "name": "PortalInvalid", + "type": "error" + }, + { + "inputs": [], + "name": "PortalNameMissing", + "type": "error" + }, + { + "inputs": [], + "name": "PortalNotRegistered", + "type": "error" + }, + { + "inputs": [], + "name": "PortalOwnerNameMissing", + "type": "error" + }, + { + "inputs": [], + "name": "RouterInvalid", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "description", + "type": "string" + }, + { + "indexed": false, + "internalType": "address", + "name": "portalAddress", + "type": "address" + } + ], + "name": "PortalRegistered", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "modules", + "type": "address[]" + }, + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "string", + "name": "description", + "type": "string" + }, + { + "internalType": "bool", + "name": "isRevocable", + "type": "bool" + }, + { + "internalType": "string", + "name": "ownerName", + "type": "string" + } + ], + "name": "deployDefaultPortal", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "id", + "type": "address" + } + ], + "name": "getPortalByAddress", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "id", + "type": "address" + }, + { + "internalType": "address", + "name": "ownerAddress", + "type": "address" + }, + { + "internalType": "address[]", + "name": "modules", + "type": "address[]" + }, + { + "internalType": "bool", + "name": "isRevocable", + "type": "bool" + }, + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "string", + "name": "description", + "type": "string" + }, + { + "internalType": "string", + "name": "ownerName", + "type": "string" + } + ], + "internalType": "struct Portal", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPortalsCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "issuer", + "type": "address" + } + ], + "name": "isIssuer", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "id", + "type": "address" + } + ], + "name": "isRegistered", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "id", + "type": "address" + }, + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "string", + "name": "description", + "type": "string" + }, + { + "internalType": "bool", + "name": "isRevocable", + "type": "bool" + }, + { + "internalType": "string", + "name": "ownerName", + "type": "string" + } + ], + "name": "register", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "issuer", + "type": "address" + } + ], + "name": "removeIssuer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "router", + "outputs": [ + { + "internalType": "contract IRouter", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "issuer", + "type": "address" + } + ], + "name": "setIssuer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_router", + "type": "address" + } + ], + "name": "updateRouter", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } +] diff --git a/subgraph/abis/SchemaRegistry.json b/subgraph/abis/SchemaRegistry.json new file mode 100644 index 00000000..203e1b13 --- /dev/null +++ b/subgraph/abis/SchemaRegistry.json @@ -0,0 +1,329 @@ +[ + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "OnlyIssuer", + "type": "error" + }, + { + "inputs": [], + "name": "RouterInvalid", + "type": "error" + }, + { + "inputs": [], + "name": "SchemaAlreadyExists", + "type": "error" + }, + { + "inputs": [], + "name": "SchemaNameMissing", + "type": "error" + }, + { + "inputs": [], + "name": "SchemaNotRegistered", + "type": "error" + }, + { + "inputs": [], + "name": "SchemaStringMissing", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "id", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "description", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "context", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "schemaString", + "type": "string" + } + ], + "name": "SchemaCreated", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "string", + "name": "description", + "type": "string" + }, + { + "internalType": "string", + "name": "context", + "type": "string" + }, + { + "internalType": "string", + "name": "schemaString", + "type": "string" + } + ], + "name": "createSchema", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "schema", + "type": "string" + } + ], + "name": "getIdFromSchemaString", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "schemaId", + "type": "bytes32" + } + ], + "name": "getSchema", + "outputs": [ + { + "components": [ + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "string", + "name": "description", + "type": "string" + }, + { + "internalType": "string", + "name": "context", + "type": "string" + }, + { + "internalType": "string", + "name": "schema", + "type": "string" + } + ], + "internalType": "struct Schema", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getSchemasNumber", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "schemaId", + "type": "bytes32" + } + ], + "name": "isRegistered", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "router", + "outputs": [ + { + "internalType": "contract IRouter", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "schemaIds", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "schemaId", + "type": "bytes32" + }, + { + "internalType": "string", + "name": "context", + "type": "string" + } + ], + "name": "updateContext", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_router", + "type": "address" + } + ], + "name": "updateRouter", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } +] diff --git a/subgraph/networks.json b/subgraph/networks.json new file mode 100644 index 00000000..43ad9db4 --- /dev/null +++ b/subgraph/networks.json @@ -0,0 +1,38 @@ +{ + "linea-goerli": { + "AttestationRegistry": { + "address": "0xC765F28096F6121C2F2b82D35A4346280164428b", + "startBlock": 1454659 + }, + "ModuleRegistry": { + "address": "0x1a20b2CFA134686306436D2c9f778D7eC6c43A43", + "startBlock": 1454663 + }, + "PortalRegistry": { + "address": "0x506f88a5Ca8D5F001f2909b029738A40042e42a6", + "startBlock": 1454667 + }, + "SchemaRegistry": { + "address": "0xB2c4Da1f8F08A0CA25862509E5431289BE2b598B", + "startBlock": 1454671 + } + }, + "linea-mainnet": { + "AttestationRegistry": { + "address": "0x3de3893aa4Cdea029e84e75223a152FD08315138", + "startBlock": 346695 + }, + "ModuleRegistry": { + "address": "0xf851513A732996F22542226341748f3C9978438f", + "startBlock": 346699 + }, + "PortalRegistry": { + "address": "0xd5d61e4ECDf6d46A63BfdC262af92544DFc19083", + "startBlock": 346703 + }, + "SchemaRegistry": { + "address": "0x0f95dCec4c7a93F2637eb13b655F2223ea036B59", + "startBlock": 346707 + } + } +} diff --git a/subgraph/package.json b/subgraph/package.json new file mode 100644 index 00000000..11b3bc6f --- /dev/null +++ b/subgraph/package.json @@ -0,0 +1,35 @@ +{ + "name": "linea-attestation-registry-subgraph", + "version": "0.0.1", + "description": "Subgraph to index the 4 main objects of Verax", + "keywords": [ + "linea-attestation-registry", + "blockchain", + "attestation", + "ethereum", + "foundry", + "smart-contracts", + "solidity" + ], + "repository": "github.com/Consensys/linea-attestation-registry", + "license": "MIT", + "author": "Consensys", + "scripts": { + "build": "cp subgraph.mainnet.yaml subgraph.yaml && pnpm run codegen && graph build --network linea-mainnet", + "build:goerli": "cp subgraph.goerli.yaml subgraph.yaml && pnpm run codegen:goerli && graph build --network linea-goerli", + "codegen": "cp subgraph.mainnet.yaml subgraph.yaml && graph codegen", + "codegen:goerli": "cp subgraph.goerli.yaml subgraph.yaml && graph codegen", + "create": "source .env && graph create --node $DEPLOY_ENDPOINT_MAINNET Consensys/linea-attestation-registry", + "create:goerli": "source .env && graph create --node $DEPLOY_ENDPOINT_GOERLI Consensys/linea-attestation-registry", + "deploy": "source .env && cp subgraph.mainnet.yaml subgraph.yaml && pnpm run build && graph deploy --network linea-mainnet --node $DEPLOY_ENDPOINT_MAINNET --headers \"{\\\"Authorization\\\": \\\"Basic $IPFS_IDENTIFIERS\\\"}\" --ipfs $IPFS_ENDPOINT --version-label v0.0.1 Consensys/linea-attestation-registry", + "deploy:goerli": "source .env && cp subgraph.goerli.yaml subgraph.yaml && pnpm run build:goerli && graph deploy --network linea-goerli --node $DEPLOY_ENDPOINT_GOERLI --headers \"{\\\"Authorization\\\": \\\"Basic $IPFS_IDENTIFIERS\\\"}\" --ipfs $IPFS_ENDPOINT --version-label v0.0.5 Consensys/linea-attestation-registry", + "remove": "source .env && graph remove --node $DEPLOY_ENDPOINT_MAINNET Consensys/linea-attestation-registry", + "remove:goerli": "source .env && graph remove --node $DEPLOY_ENDPOINT_GOERLI Consensys/linea-attestation-registry", + "test": "graph test" + }, + "devDependencies": { + "@graphprotocol/graph-cli": "0.58.0", + "@graphprotocol/graph-ts": "0.31.0", + "matchstick-as": "0.5.0" + } +} diff --git a/subgraph/schema.graphql b/subgraph/schema.graphql new file mode 100644 index 00000000..ba4e6e18 --- /dev/null +++ b/subgraph/schema.graphql @@ -0,0 +1,39 @@ +type Attestation @entity { + id: ID! + schemaId: Bytes! + replacedBy: Bytes! + attester: Bytes! + portal: Bytes! + attestedDate: BigInt! + expirationDate: BigInt! + revocationDate: BigInt! + version: BigInt! + revoked: Boolean! + subject: Bytes! + attestationData: Bytes! +} + +type Module @entity { + id: ID! + moduleAddress: Bytes! + name: String! + description: String! +} + +type Portal @entity { + id: ID! + ownerAddress: Bytes! + modules: [Bytes!] + isRevocable: Boolean! + name: String! + description: String! + ownerName: String! +} + +type Schema @entity { + id: ID! + name: String! + description: String! + context: String! + schema: String! +} diff --git a/subgraph/src/attestation-registry.ts b/subgraph/src/attestation-registry.ts new file mode 100644 index 00000000..028ba275 --- /dev/null +++ b/subgraph/src/attestation-registry.ts @@ -0,0 +1,26 @@ +import { + AttestationRegistered as AttestationRegisteredEvent, + AttestationRegistry, +} from "../generated/AttestationRegistry/AttestationRegistry"; +import { Attestation } from "../generated/schema"; +import { BigInt } from "@graphprotocol/graph-ts"; + +export function handleAttestationRegistered(event: AttestationRegisteredEvent): void { + const contract = AttestationRegistry.bind(event.address); + const attestationData = contract.getAttestation(event.params.attestationId); + const attestation = new Attestation(event.params.attestationId.toHex()); + + attestation.schemaId = attestationData.schemaId; + attestation.replacedBy = attestationData.replacedBy; + attestation.attester = attestationData.attester; + attestation.portal = attestationData.portal; + attestation.attestedDate = attestationData.attestedDate; + attestation.expirationDate = attestationData.expirationDate; + attestation.revocationDate = attestationData.revocationDate; + attestation.version = BigInt.fromI32(attestationData.version); + attestation.revoked = attestationData.revoked; + attestation.subject = attestationData.subject; + attestation.attestationData = attestationData.attestationData; + + attestation.save(); +} diff --git a/subgraph/src/module-registry.ts b/subgraph/src/module-registry.ts new file mode 100644 index 00000000..448b7cb9 --- /dev/null +++ b/subgraph/src/module-registry.ts @@ -0,0 +1,14 @@ +import { ModuleRegistered as ModuleRegisteredEvent, ModuleRegistry } from "../generated/ModuleRegistry/ModuleRegistry"; +import { Module } from "../generated/schema"; + +export function handleModuleRegistered(event: ModuleRegisteredEvent): void { + const contract = ModuleRegistry.bind(event.address); + const moduleData = contract.modules(event.params.moduleAddress); + const module = new Module(event.params.moduleAddress.toHex()); + + module.moduleAddress = moduleData.getModuleAddress(); + module.name = moduleData.getName(); + module.description = moduleData.getDescription(); + + module.save(); +} diff --git a/subgraph/src/portal-registry.ts b/subgraph/src/portal-registry.ts new file mode 100644 index 00000000..fc2beb0c --- /dev/null +++ b/subgraph/src/portal-registry.ts @@ -0,0 +1,18 @@ +import { Bytes } from "@graphprotocol/graph-ts"; +import { PortalRegistered as PortalRegisteredEvent, PortalRegistry } from "../generated/PortalRegistry/PortalRegistry"; +import { Portal } from "../generated/schema"; + +export function handlePortalRegistered(event: PortalRegisteredEvent): void { + const contract = PortalRegistry.bind(event.address); + const portalData = contract.getPortalByAddress(event.params.portalAddress); + const portal = new Portal(event.params.portalAddress.toHex()); + + portal.ownerAddress = portalData.ownerAddress; + portal.modules = changetype(portalData.modules); + portal.isRevocable = portalData.isRevocable; + portal.name = portalData.name; + portal.description = portalData.description; + portal.ownerName = portalData.ownerName; + + portal.save(); +} diff --git a/subgraph/src/schema-registry.ts b/subgraph/src/schema-registry.ts new file mode 100644 index 00000000..780f7c1b --- /dev/null +++ b/subgraph/src/schema-registry.ts @@ -0,0 +1,15 @@ +import { SchemaCreated as SchemaCreatedEvent, SchemaRegistry } from "../generated/SchemaRegistry/SchemaRegistry"; +import { Schema } from "../generated/schema"; + +export function handleSchemaCreated(event: SchemaCreatedEvent): void { + const contract = SchemaRegistry.bind(event.address); + const schemaData = contract.getSchema(event.params.id); + const schema = new Schema(event.params.id.toHex()); + + schema.name = schemaData.name; + schema.description = schemaData.description; + schema.context = schemaData.context; + schema.schema = schemaData.schema; + + schema.save(); +} diff --git a/subgraph/subgraph.goerli.yaml b/subgraph/subgraph.goerli.yaml new file mode 100644 index 00000000..5969c18c --- /dev/null +++ b/subgraph/subgraph.goerli.yaml @@ -0,0 +1,84 @@ +specVersion: 0.0.5 +schema: + file: ./schema.graphql +dataSources: + - kind: ethereum + name: AttestationRegistry + network: linea-goerli + source: + abi: AttestationRegistry + address: "0xC765F28096F6121C2F2b82D35A4346280164428b" + startBlock: 1454659 + mapping: + kind: ethereum/events + apiVersion: 0.0.7 + language: wasm/assemblyscript + entities: + - Attestation + abis: + - name: AttestationRegistry + file: ./abis/AttestationRegistry.json + eventHandlers: + - event: AttestationRegistered(indexed bytes32) + handler: handleAttestationRegistered + file: ./src/attestation-registry.ts + - kind: ethereum + name: ModuleRegistry + network: linea-goerli + source: + abi: ModuleRegistry + address: "0x1a20b2CFA134686306436D2c9f778D7eC6c43A43" + startBlock: 1454663 + mapping: + kind: ethereum/events + apiVersion: 0.0.7 + language: wasm/assemblyscript + entities: + - Module + abis: + - name: ModuleRegistry + file: ./abis/ModuleRegistry.json + eventHandlers: + - event: ModuleRegistered(string,string,address) + handler: handleModuleRegistered + file: ./src/module-registry.ts + - kind: ethereum + name: PortalRegistry + network: linea-goerli + source: + abi: PortalRegistry + address: "0x506f88a5Ca8D5F001f2909b029738A40042e42a6" + startBlock: 1454667 + mapping: + kind: ethereum/events + apiVersion: 0.0.7 + language: wasm/assemblyscript + entities: + - Portal + abis: + - name: PortalRegistry + file: ./abis/PortalRegistry.json + eventHandlers: + - event: PortalRegistered(string,string,address) + handler: handlePortalRegistered + file: ./src/portal-registry.ts + - kind: ethereum + name: SchemaRegistry + network: linea-goerli + source: + abi: SchemaRegistry + address: "0xB2c4Da1f8F08A0CA25862509E5431289BE2b598B" + startBlock: 1454671 + mapping: + kind: ethereum/events + apiVersion: 0.0.7 + language: wasm/assemblyscript + entities: + - Portal + abis: + - name: SchemaRegistry + file: ./abis/SchemaRegistry.json + eventHandlers: + - event: SchemaCreated(indexed bytes32,string,string,string,string) + handler: handleSchemaCreated + file: ./src/schema-registry.ts diff --git a/subgraph/subgraph.mainnet.yaml b/subgraph/subgraph.mainnet.yaml new file mode 100644 index 00000000..be4d3b63 --- /dev/null +++ b/subgraph/subgraph.mainnet.yaml @@ -0,0 +1,84 @@ +specVersion: 0.0.5 +schema: + file: ./schema.graphql +dataSources: + - kind: ethereum + name: AttestationRegistry + network: linea-mainnet + source: + abi: AttestationRegistry + address: "0x3de3893aa4Cdea029e84e75223a152FD08315138" + startBlock: 346695 + mapping: + kind: ethereum/events + apiVersion: 0.0.7 + language: wasm/assemblyscript + entities: + - Attestation + abis: + - name: AttestationRegistry + file: ./abis/AttestationRegistry.json + eventHandlers: + - event: AttestationRegistered(indexed bytes32) + handler: handleAttestationRegistered + file: ./src/attestation-registry.ts + - kind: ethereum + name: ModuleRegistry + network: linea-mainnet + source: + abi: ModuleRegistry + address: "0xf851513A732996F22542226341748f3C9978438f" + startBlock: 346699 + mapping: + kind: ethereum/events + apiVersion: 0.0.7 + language: wasm/assemblyscript + entities: + - Module + abis: + - name: ModuleRegistry + file: ./abis/ModuleRegistry.json + eventHandlers: + - event: ModuleRegistered(string,string,address) + handler: handleModuleRegistered + file: ./src/module-registry.ts + - kind: ethereum + name: PortalRegistry + network: linea-mainnet + source: + abi: PortalRegistry + address: "0xd5d61e4ECDf6d46A63BfdC262af92544DFc19083" + startBlock: 346703 + mapping: + kind: ethereum/events + apiVersion: 0.0.7 + language: wasm/assemblyscript + entities: + - Portal + abis: + - name: PortalRegistry + file: ./abis/PortalRegistry.json + eventHandlers: + - event: PortalRegistered(string,string,address) + handler: handlePortalRegistered + file: ./src/portal-registry.ts + - kind: ethereum + name: SchemaRegistry + network: linea-mainnet + source: + abi: SchemaRegistry + address: "0x0f95dCec4c7a93F2637eb13b655F2223ea036B59" + startBlock: 346707 + mapping: + kind: ethereum/events + apiVersion: 0.0.7 + language: wasm/assemblyscript + entities: + - Portal + abis: + - name: SchemaRegistry + file: ./abis/SchemaRegistry.json + eventHandlers: + - event: SchemaCreated(indexed bytes32,string,string,string,string) + handler: handleSchemaCreated + file: ./src/schema-registry.ts diff --git a/subgraph/tsconfig.json b/subgraph/tsconfig.json new file mode 100644 index 00000000..5c5d17c9 --- /dev/null +++ b/subgraph/tsconfig.json @@ -0,0 +1,4 @@ +{ + "extends": "@graphprotocol/graph-ts/types/tsconfig.base.json", + "include": ["src"] +} From 5bac36de481c008c118a81797322f31fc2e489e5 Mon Sep 17 00:00:00 2001 From: Satyajeet Kolhapure <77279246+satyajeetkolhapure@users.noreply.github.com> Date: Thu, 28 Sep 2023 11:23:47 +0100 Subject: [PATCH 10/36] Revert "feat: as an attestation consumer, I want to be able to check if an address has an attestation using the ERC-1155 owner method" (#233) --- src/AttestationRegistry.sol | 36 +------------------ test/AttestationRegistry.t.sol | 63 ++++------------------------------ 2 files changed, 7 insertions(+), 92 deletions(-) diff --git a/src/AttestationRegistry.sol b/src/AttestationRegistry.sol index 57176b7e..f0a922f2 100644 --- a/src/AttestationRegistry.sol +++ b/src/AttestationRegistry.sol @@ -2,7 +2,6 @@ pragma solidity 0.8.21; import { OwnableUpgradeable } from "openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol"; -import { ERC1155Upgradeable } from "openzeppelin-contracts-upgradeable/contracts/token/ERC1155/ERC1155Upgradeable.sol"; import { Attestation, AttestationPayload } from "./types/Structs.sol"; import { PortalRegistry } from "./PortalRegistry.sol"; import { SchemaRegistry } from "./SchemaRegistry.sol"; @@ -13,7 +12,7 @@ import { IRouter } from "./interface/IRouter.sol"; * @author Consensys * @notice This contract stores a registry of all attestations */ -contract AttestationRegistry is OwnableUpgradeable, ERC1155Upgradeable { +contract AttestationRegistry is OwnableUpgradeable { IRouter public router; uint16 private version; @@ -263,37 +262,4 @@ contract AttestationRegistry is OwnableUpgradeable, ERC1155Upgradeable { function getAttestationIdCounter() public view returns (uint32) { return attestationIdCounter; } - - /** - * @notice Checks if an address owns a given attestation - * @param account The address of the token holder - * @param id ID of the attestation - * @return The _owner's balance of the attestations on a given attestation ID - */ - function balanceOf(address account, uint256 id) public view override returns (uint256) { - bytes32 attestationId = bytes32(abi.encode(id)); - Attestation memory attestation = attestations[attestationId]; - if (keccak256(attestation.subject) == keccak256(abi.encode(account))) return 1; - return 0; - } - - /** - * @notice Get the balance of multiple account/attestation pairs - * @param accounts The addresses of the attestation holders - * @param ids ID of the attestations - * @return The _owner's balance of the attestation for a given address (i.e. balance for each (owner, id) pair) - */ - function balanceOfBatch( - address[] memory accounts, - uint256[] memory ids - ) public view override returns (uint256[] memory) { - if (accounts.length != ids.length) revert ArrayLengthMismatch(); - uint256[] memory result = new uint256[](accounts.length); - for (uint256 i = 0; i < accounts.length; i++) { - bytes32 attestationId = bytes32(abi.encode(ids[i])); - Attestation memory attestation = attestations[attestationId]; - if (keccak256(attestation.subject) == keccak256(abi.encode(accounts[i]))) result[i] = 1; - } - return result; - } } diff --git a/test/AttestationRegistry.t.sol b/test/AttestationRegistry.t.sol index 88ac3085..f6d3f1b2 100644 --- a/test/AttestationRegistry.t.sol +++ b/test/AttestationRegistry.t.sol @@ -484,76 +484,25 @@ contract AttestationRegistryTest is Test { SchemaRegistryMock schemaRegistryMock = SchemaRegistryMock(router.getSchemaRegistry()); attestationPayload.schemaId = schemaRegistryMock.getIdFromSchemaString("schemaString"); schemaRegistryMock.createSchema("name", "description", "context", "schemaString"); - uint32 attestationIdCounter = attestationRegistry.getAttestationIdCounter(); + uint32 version = attestationRegistry.getAttestationIdCounter(); - assertEq(attestationIdCounter, 0); + assertEq(version, 0); vm.startPrank(portal); attestationRegistry.attest(attestationPayload, attester); - attestationIdCounter = attestationRegistry.getAttestationIdCounter(); - assertEq(attestationIdCounter, 1); + version = attestationRegistry.getAttestationIdCounter(); + assertEq(version, 1); attestationRegistry.attest(attestationPayload, attester); - attestationIdCounter = attestationRegistry.getAttestationIdCounter(); - assertEq(attestationIdCounter, 2); + version = attestationRegistry.getAttestationIdCounter(); + assertEq(version, 2); vm.stopPrank(); } - function test_balanceOf(AttestationPayload memory attestationPayload) public { - vm.assume(attestationPayload.subject.length != 0); - vm.assume(attestationPayload.attestationData.length != 0); - SchemaRegistryMock schemaRegistryMock = SchemaRegistryMock(router.getSchemaRegistry()); - attestationPayload.schemaId = schemaRegistryMock.getIdFromSchemaString("schemaString"); - schemaRegistryMock.createSchema("name", "description", "context", "schemaString"); - - vm.startPrank(portal); - attestationPayload.subject = abi.encode(address(1)); - attestationRegistry.attest(attestationPayload, attester); - - uint256 balance = attestationRegistry.balanceOf(address(1), 1); - assertEq(balance, 1); - } - - function test_balanceOfBatch(AttestationPayload memory attestationPayload) public { - vm.assume(attestationPayload.subject.length != 0); - vm.assume(attestationPayload.attestationData.length != 0); - SchemaRegistryMock schemaRegistryMock = SchemaRegistryMock(router.getSchemaRegistry()); - attestationPayload.schemaId = schemaRegistryMock.getIdFromSchemaString("schemaString"); - schemaRegistryMock.createSchema("name", "description", "context", "schemaString"); - - address[] memory owners = new address[](2); - owners[0] = address(1); - owners[1] = address(2); - - vm.startPrank(portal); - attestationPayload.subject = abi.encode(owners[0]); - attestationRegistry.attest(attestationPayload, attester); - - attestationPayload.subject = abi.encode(owners[1]); - attestationRegistry.attest(attestationPayload, attester); - - uint256[] memory ids = new uint256[](2); - ids[0] = 1; - ids[1] = 2; - uint256[] memory balance = attestationRegistry.balanceOfBatch(owners, ids); - assertEq(balance[0], 1); - assertEq(balance[1], 1); - } - - function test_balanceOfBatch_ArrayLengthMismatch() public { - address[] memory owners = new address[](2); - owners[0] = address(1); - owners[1] = address(2); - uint256[] memory ids = new uint256[](1); - ids[0] = 1; - vm.expectRevert(AttestationRegistry.ArrayLengthMismatch.selector); - attestationRegistry.balanceOfBatch(owners, ids); - } - function _createAttestation( AttestationPayload memory attestationPayload, uint256 id From e475d26e2cde4fd969390d666de45fa288b44bb9 Mon Sep 17 00:00:00 2001 From: Alain Nicolas Date: Thu, 28 Sep 2023 16:22:21 +0200 Subject: [PATCH 11/36] feat: As a user i want to get decoded attestation data via the subgraph (#229) --- subgraph/schema.graphql | 2 + subgraph/src/attestation-registry.ts | 94 ++++++++++++++++++++++++++-- 2 files changed, 92 insertions(+), 4 deletions(-) diff --git a/subgraph/schema.graphql b/subgraph/schema.graphql index ba4e6e18..9ceb0218 100644 --- a/subgraph/schema.graphql +++ b/subgraph/schema.graphql @@ -11,6 +11,8 @@ type Attestation @entity { revoked: Boolean! subject: Bytes! attestationData: Bytes! + schemaString: String + decodedData:[String!] } type Module @entity { diff --git a/subgraph/src/attestation-registry.ts b/subgraph/src/attestation-registry.ts index 028ba275..2670be2d 100644 --- a/subgraph/src/attestation-registry.ts +++ b/subgraph/src/attestation-registry.ts @@ -2,12 +2,12 @@ import { AttestationRegistered as AttestationRegisteredEvent, AttestationRegistry, } from "../generated/AttestationRegistry/AttestationRegistry"; -import { Attestation } from "../generated/schema"; -import { BigInt } from "@graphprotocol/graph-ts"; +import { Attestation, Schema } from "../generated/schema"; +import { BigInt, ByteArray, Bytes, ethereum } from "@graphprotocol/graph-ts"; export function handleAttestationRegistered(event: AttestationRegisteredEvent): void { - const contract = AttestationRegistry.bind(event.address); - const attestationData = contract.getAttestation(event.params.attestationId); + const attestationRegistryContract = AttestationRegistry.bind(event.address); + const attestationData = attestationRegistryContract.getAttestation(event.params.attestationId); const attestation = new Attestation(event.params.attestationId.toHex()); attestation.schemaId = attestationData.schemaId; @@ -22,5 +22,91 @@ export function handleAttestationRegistered(event: AttestationRegisteredEvent): attestation.subject = attestationData.subject; attestation.attestationData = attestationData.attestationData; + // Get matching Schema + const schema = Schema.load(attestationData.schemaId.toHex()); + + if (schema) { + // Split Schema into a "type fieldName" array + const splitSchema = schema.schema.split(","); + + // Keep only the Schema's types + const schemaTypes = splitSchema.map((item) => item.trim().split(" ")[0]); + + // Join the types in a single coma-separated string + const schemaString = schemaTypes.toString(); + + // Add this Schema string to the Attestation Entity + attestation.schemaString = schemaString; + + const encodedData = attestationData.attestationData; + + // Initiate the decoded data in case it's not decoded at all + attestation.decodedData = ["NOT DECODED"]; + + // Decode the encoded attestation data + let decoded = ethereum.decode("(" + schemaString + ")", Bytes.fromUint8Array(encodedData)); + + // If the decoding function didn't give anything, re-try with the encoded data as a tuple + if (!decoded) { + // Change attestation encoded data into an encoded Tuple + const tuplePrefix = ByteArray.fromHexString("0x0000000000000000000000000000000000000000000000000000000000000020"); + const encodedDataAsTuple = new Uint8Array(tuplePrefix.length + encodedData.length); + encodedDataAsTuple.set(tuplePrefix, 0); + encodedDataAsTuple.set(encodedData, tuplePrefix.length); + + // Decode the tuple + decoded = ethereum.decode("(" + schemaString + ")", Bytes.fromUint8Array(encodedDataAsTuple)); + } + + // If the decode function went through, save it as an Array of Strings + if (decoded) { + const tempStringArray: string[] = []; + + // Make the decoded data into a Tuple + const tupleValue = decoded.toTuple(); + + // Convert every field of the Tuple into a String + for (let i = 0; i < tupleValue.length; i++) { + tempStringArray.push(valueToString(tupleValue[i])); + } + + // Add this decoded Array to the Attestation Entity + attestation.decodedData = tempStringArray; + } + } + attestation.save(); } + +function valueToString(value: ethereum.Value): string { + switch (value.kind) { + case ethereum.ValueKind.ADDRESS: + return value.toAddress().toHexString(); + case ethereum.ValueKind.FIXED_BYTES: + return value.toBytes().toHex(); + case ethereum.ValueKind.BYTES: + return value.toString(); + case ethereum.ValueKind.INT: + return value.toBigInt().toHexString(); + case ethereum.ValueKind.UINT: + return value.toBigInt().toHexString(); + case ethereum.ValueKind.BOOL: + return value.toBoolean().toString(); + case ethereum.ValueKind.STRING: + return value.toString(); + case ethereum.ValueKind.FIXED_ARRAY: + return value + .toArray() + .map((item) => valueToString(item)) + .toString(); + case ethereum.ValueKind.ARRAY: + return value + .toArray() + .map((item) => valueToString(item)) + .toString(); + case ethereum.ValueKind.TUPLE: + return "TUPLE NOT SUPPORTED"; + default: + return "UNKNOWN TYPE"; + } +} From a5e9078ec641fe4d9e9f76ba41b63adf3616ac41 Mon Sep 17 00:00:00 2001 From: Alain Nicolas Date: Fri, 29 Sep 2023 19:05:21 +0200 Subject: [PATCH 12/36] feat: As a User, I want to check the number of Attestation, Modules, Portals and Schemas from the subgraph (#237) --- subgraph/schema.graphql | 8 ++++++++ subgraph/src/attestation-registry.ts | 20 +++++++++++++++++++- subgraph/src/module-registry.ts | 20 +++++++++++++++++++- subgraph/src/portal-registry.ts | 20 +++++++++++++++++++- subgraph/src/schema-registry.ts | 20 +++++++++++++++++++- 5 files changed, 84 insertions(+), 4 deletions(-) diff --git a/subgraph/schema.graphql b/subgraph/schema.graphql index 9ceb0218..ebd79b9b 100644 --- a/subgraph/schema.graphql +++ b/subgraph/schema.graphql @@ -39,3 +39,11 @@ type Schema @entity { context: String! schema: String! } + +type Counter @entity{ + id: ID! + attestations: Int + modules: Int + portals: Int + schemas: Int +} diff --git a/subgraph/src/attestation-registry.ts b/subgraph/src/attestation-registry.ts index 2670be2d..c9cdef20 100644 --- a/subgraph/src/attestation-registry.ts +++ b/subgraph/src/attestation-registry.ts @@ -2,7 +2,7 @@ import { AttestationRegistered as AttestationRegisteredEvent, AttestationRegistry, } from "../generated/AttestationRegistry/AttestationRegistry"; -import { Attestation, Schema } from "../generated/schema"; +import { Attestation, Counter, Schema } from "../generated/schema"; import { BigInt, ByteArray, Bytes, ethereum } from "@graphprotocol/graph-ts"; export function handleAttestationRegistered(event: AttestationRegisteredEvent): void { @@ -10,6 +10,8 @@ export function handleAttestationRegistered(event: AttestationRegisteredEvent): const attestationData = attestationRegistryContract.getAttestation(event.params.attestationId); const attestation = new Attestation(event.params.attestationId.toHex()); + incrementAttestationCount(); + attestation.schemaId = attestationData.schemaId; attestation.replacedBy = attestationData.replacedBy; attestation.attester = attestationData.attester; @@ -110,3 +112,19 @@ function valueToString(value: ethereum.Value): string { return "UNKNOWN TYPE"; } } + +function incrementAttestationCount(): void { + let counter = Counter.load("counter"); + + if (!counter) { + counter = new Counter("counter"); + } + + if (!counter.attestations) { + counter.attestations = 1; + } else { + counter.attestations += 1; + } + + counter.save(); +} diff --git a/subgraph/src/module-registry.ts b/subgraph/src/module-registry.ts index 448b7cb9..2b87823b 100644 --- a/subgraph/src/module-registry.ts +++ b/subgraph/src/module-registry.ts @@ -1,14 +1,32 @@ import { ModuleRegistered as ModuleRegisteredEvent, ModuleRegistry } from "../generated/ModuleRegistry/ModuleRegistry"; -import { Module } from "../generated/schema"; +import { Counter, Module } from "../generated/schema"; export function handleModuleRegistered(event: ModuleRegisteredEvent): void { const contract = ModuleRegistry.bind(event.address); const moduleData = contract.modules(event.params.moduleAddress); const module = new Module(event.params.moduleAddress.toHex()); + incrementModulesCount(); + module.moduleAddress = moduleData.getModuleAddress(); module.name = moduleData.getName(); module.description = moduleData.getDescription(); module.save(); } + +function incrementModulesCount(): void { + let counter = Counter.load("counter"); + + if (!counter) { + counter = new Counter("counter"); + } + + if (!counter.modules) { + counter.modules = 1; + } else { + counter.modules += 1; + } + + counter.save(); +} diff --git a/subgraph/src/portal-registry.ts b/subgraph/src/portal-registry.ts index fc2beb0c..f8b3ae22 100644 --- a/subgraph/src/portal-registry.ts +++ b/subgraph/src/portal-registry.ts @@ -1,12 +1,14 @@ import { Bytes } from "@graphprotocol/graph-ts"; import { PortalRegistered as PortalRegisteredEvent, PortalRegistry } from "../generated/PortalRegistry/PortalRegistry"; -import { Portal } from "../generated/schema"; +import { Counter, Portal } from "../generated/schema"; export function handlePortalRegistered(event: PortalRegisteredEvent): void { const contract = PortalRegistry.bind(event.address); const portalData = contract.getPortalByAddress(event.params.portalAddress); const portal = new Portal(event.params.portalAddress.toHex()); + incrementPortalsCount(); + portal.ownerAddress = portalData.ownerAddress; portal.modules = changetype(portalData.modules); portal.isRevocable = portalData.isRevocable; @@ -16,3 +18,19 @@ export function handlePortalRegistered(event: PortalRegisteredEvent): void { portal.save(); } + +function incrementPortalsCount(): void { + let counter = Counter.load("counter"); + + if (!counter) { + counter = new Counter("counter"); + } + + if (!counter.portals) { + counter.portals = 1; + } else { + counter.portals += 1; + } + + counter.save(); +} diff --git a/subgraph/src/schema-registry.ts b/subgraph/src/schema-registry.ts index 780f7c1b..816e5e6a 100644 --- a/subgraph/src/schema-registry.ts +++ b/subgraph/src/schema-registry.ts @@ -1,11 +1,13 @@ import { SchemaCreated as SchemaCreatedEvent, SchemaRegistry } from "../generated/SchemaRegistry/SchemaRegistry"; -import { Schema } from "../generated/schema"; +import { Counter, Schema } from "../generated/schema"; export function handleSchemaCreated(event: SchemaCreatedEvent): void { const contract = SchemaRegistry.bind(event.address); const schemaData = contract.getSchema(event.params.id); const schema = new Schema(event.params.id.toHex()); + incrementSchemasCount(); + schema.name = schemaData.name; schema.description = schemaData.description; schema.context = schemaData.context; @@ -13,3 +15,19 @@ export function handleSchemaCreated(event: SchemaCreatedEvent): void { schema.save(); } + +function incrementSchemasCount(): void { + let counter = Counter.load("counter"); + + if (!counter) { + counter = new Counter("counter"); + } + + if (!counter.schemas) { + counter.schemas = 1; + } else { + counter.schemas += 1; + } + + counter.save(); +} From e52c1616c334e5724b8ffefcb95fd2b188942a73 Mon Sep 17 00:00:00 2001 From: Alain Nicolas Date: Mon, 2 Oct 2023 12:17:29 +0200 Subject: [PATCH 13/36] chore: Minor fixes (#241) --- package.json | 4 ++-- script/recreateNetworkFile.ts | 6 ++++++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 61483ac9..6eceba9d 100644 --- a/package.json +++ b/package.json @@ -43,9 +43,9 @@ "reimport:goerli": "npx hardhat run --network linea-goerli script/recreateNetworkFile.ts", "test": "forge test", "upgrade:all": "npx hardhat run --network linea script/upgrade/upgradeEverything.ts", - "upgrade:all:force": "npx hardhat run --network linea script/upgrade/forceUgradeEverything.ts", + "upgrade:all:force": "npx hardhat run --network linea script/upgrade/forceUpgradeEverything.ts", "upgrade:all:goerli": "npx hardhat run --network linea-goerli script/upgrade/upgradeEverything.ts", - "upgrade:all:goerli:force": "npx hardhat run --network linea-goerli script/upgrade/forceUgradeEverything.ts" + "upgrade:all:goerli:force": "npx hardhat run --network linea-goerli script/upgrade/forceUpgradeEverything.ts" }, "devDependencies": { "@nomicfoundation/hardhat-ethers": "^3.0.4", diff --git a/script/recreateNetworkFile.ts b/script/recreateNetworkFile.ts index cbcdf765..1e57a384 100644 --- a/script/recreateNetworkFile.ts +++ b/script/recreateNetworkFile.ts @@ -9,6 +9,12 @@ import { ethers, upgrades } from "hardhat"; async function main() { console.log("Re-importing deployed contracts..."); + console.log("Re-importing Router..."); + const routerProxyAddress = process.env.ROUTER_ADDRESS ?? ""; + const Router = await ethers.getContractFactory("Router"); + + await upgrades.forceImport(routerProxyAddress, Router, { kind: "transparent" }); + console.log("Re-importing AttestationRegistry..."); const attestationRegistryProxyAddress = process.env.ATTESTATION_REGISTRY_ADDRESS ?? ""; const AttestationRegistry = await ethers.getContractFactory("AttestationRegistry"); From c426674e1d6ba1c7e6cce9e9ac319623bfb4b366 Mon Sep 17 00:00:00 2001 From: Alain Nicolas Date: Mon, 2 Oct 2023 12:22:31 +0200 Subject: [PATCH 14/36] feat: Deploy on Sepolia (#242) --- .openzeppelin/sepolia.json | 888 +++++++++++++++++++++++++++++++++++++ hardhat.config.ts | 5 + 2 files changed, 893 insertions(+) create mode 100644 .openzeppelin/sepolia.json diff --git a/.openzeppelin/sepolia.json b/.openzeppelin/sepolia.json new file mode 100644 index 00000000..2bf9a1ed --- /dev/null +++ b/.openzeppelin/sepolia.json @@ -0,0 +1,888 @@ +{ + "manifestVersion": "3.2", + "admin": { + "address": "0x347541F33505853171D628F9e8f46A05ACc7056F", + "txHash": "0xa8494c5fb1ee109416d8384167a2041261e0fcce240dffe5116b5c0e8a73f875" + }, + "proxies": [ + { + "address": "0xF242b04E5dFdB6D6A7461ab55E99d86844cCbBC2", + "txHash": "0xaea282713643649ec20aec98c9683a746e2d429e225f251a93647dd30542123c", + "kind": "transparent" + }, + { + "address": "0xAa42EA7d6F880318e2e493E408b89A4F6628b056", + "txHash": "0xa193c5444354862d886b9cd7e004bad350ea56f0b6c23767a1414ee4b84a2a77", + "kind": "transparent" + }, + { + "address": "0x53fe4Fc4bb400F0604d4C69694D2D0F6348869EF", + "txHash": "0x0650134da10557d3bc0c80edaef83d016e1ea1bc722d40051300a0a52cb4ca2e", + "kind": "transparent" + }, + { + "address": "0x944998Fd56ac74C95f7e9FA894102E205869a635", + "txHash": "0x38bd36d4a092a8a052e9ad0ce28c8868b77e3ed16962b2f14fc42914c4ff1ad6", + "kind": "transparent" + }, + { + "address": "0x6A7d23fb4768aEAA6A45bCe21C0d245E10DE53e2", + "txHash": "0x315763736fc1641626c5d0745398b5259944879ef55def6582c1bce47e025558", + "kind": "transparent" + } + ], + "impls": { + "4353fbe787c13443291bba3d18e906853909285ba948d10f4d95994940b68c97": { + "address": "0x3608768A28d742075cDA584c5e69982F5c651d77", + "txHash": "0x02a0b8306f8ea6e036487b6ebb9b57c23805bc8e837a05a60ea6a1ac13dd7fc9", + "layout": { + "solcVersion": "0.8.21", + "storage": [ + { + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8", + "contract": "Initializable", + "src": "openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol:63", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool", + "contract": "Initializable", + "src": "openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol:68" + }, + { + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol:36" + }, + { + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address", + "contract": "OwnableUpgradeable", + "src": "openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage", + "contract": "OwnableUpgradeable", + "src": "openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol:94" + }, + { + "label": "ATTESTATION_REGISTRY", + "offset": 0, + "slot": "101", + "type": "t_address", + "contract": "Router", + "src": "src/Router.sol:13" + }, + { + "label": "MODULE_REGISTRY", + "offset": 0, + "slot": "102", + "type": "t_address", + "contract": "Router", + "src": "src/Router.sol:14" + }, + { + "label": "PORTAL_REGISTRY", + "offset": 0, + "slot": "103", + "type": "t_address", + "contract": "Router", + "src": "src/Router.sol:15" + }, + { + "label": "SCHEMA_REGISTRY", + "offset": 0, + "slot": "104", + "type": "t_address", + "contract": "Router", + "src": "src/Router.sol:16" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + } + } + }, + "3a10f786d2f88ef43609cda786d7d3e3710bb254abbebaddec15881d1598a999": { + "address": "0xAc7b2C375c0Aa9b07FA91eB9BEE556Ed3e2Bb99E", + "txHash": "0x78feba7ce82f67cb8087eb19cfcc6c3fc1b44904182cc5dc1abe748ace712c88", + "layout": { + "solcVersion": "0.8.21", + "storage": [ + { + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8", + "contract": "Initializable", + "src": "openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol:63", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool", + "contract": "Initializable", + "src": "openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol:68" + }, + { + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol:36" + }, + { + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address", + "contract": "OwnableUpgradeable", + "src": "openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage", + "contract": "OwnableUpgradeable", + "src": "openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol:94" + }, + { + "label": "__gap", + "offset": 0, + "slot": "101", + "type": "t_array(t_uint256)50_storage", + "contract": "ERC165Upgradeable", + "src": "openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol:41" + }, + { + "label": "_balances", + "offset": 0, + "slot": "151", + "type": "t_mapping(t_uint256,t_mapping(t_address,t_uint256))", + "contract": "ERC1155Upgradeable", + "src": "openzeppelin-contracts-upgradeable/contracts/token/ERC1155/ERC1155Upgradeable.sol:25" + }, + { + "label": "_operatorApprovals", + "offset": 0, + "slot": "152", + "type": "t_mapping(t_address,t_mapping(t_address,t_bool))", + "contract": "ERC1155Upgradeable", + "src": "openzeppelin-contracts-upgradeable/contracts/token/ERC1155/ERC1155Upgradeable.sol:28" + }, + { + "label": "_uri", + "offset": 0, + "slot": "153", + "type": "t_string_storage", + "contract": "ERC1155Upgradeable", + "src": "openzeppelin-contracts-upgradeable/contracts/token/ERC1155/ERC1155Upgradeable.sol:31" + }, + { + "label": "__gap", + "offset": 0, + "slot": "154", + "type": "t_array(t_uint256)47_storage", + "contract": "ERC1155Upgradeable", + "src": "openzeppelin-contracts-upgradeable/contracts/token/ERC1155/ERC1155Upgradeable.sol:508" + }, + { + "label": "router", + "offset": 0, + "slot": "201", + "type": "t_contract(IRouter)8166", + "contract": "AttestationRegistry", + "src": "src/AttestationRegistry.sol:17" + }, + { + "label": "version", + "offset": 20, + "slot": "201", + "type": "t_uint16", + "contract": "AttestationRegistry", + "src": "src/AttestationRegistry.sol:19" + }, + { + "label": "attestationIdCounter", + "offset": 22, + "slot": "201", + "type": "t_uint32", + "contract": "AttestationRegistry", + "src": "src/AttestationRegistry.sol:20" + }, + { + "label": "attestations", + "offset": 0, + "slot": "202", + "type": "t_mapping(t_bytes32,t_struct(Attestation)8234_storage)", + "contract": "AttestationRegistry", + "src": "src/AttestationRegistry.sol:22" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)47_storage": { + "label": "uint256[47]", + "numberOfBytes": "1504" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_bytes_storage": { + "label": "bytes", + "numberOfBytes": "32" + }, + "t_contract(IRouter)8166": { + "label": "contract IRouter", + "numberOfBytes": "20" + }, + "t_mapping(t_address,t_bool)": { + "label": "mapping(address => bool)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_address,t_bool))": { + "label": "mapping(address => mapping(address => bool))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_bytes32,t_struct(Attestation)8234_storage)": { + "label": "mapping(bytes32 => struct Attestation)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_mapping(t_address,t_uint256))": { + "label": "mapping(uint256 => mapping(address => uint256))", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(Attestation)8234_storage": { + "label": "struct Attestation", + "members": [ + { + "label": "attestationId", + "type": "t_bytes32", + "offset": 0, + "slot": "0" + }, + { + "label": "schemaId", + "type": "t_bytes32", + "offset": 0, + "slot": "1" + }, + { + "label": "replacedBy", + "type": "t_bytes32", + "offset": 0, + "slot": "2" + }, + { + "label": "attester", + "type": "t_address", + "offset": 0, + "slot": "3" + }, + { + "label": "portal", + "type": "t_address", + "offset": 0, + "slot": "4" + }, + { + "label": "attestedDate", + "type": "t_uint64", + "offset": 20, + "slot": "4" + }, + { + "label": "expirationDate", + "type": "t_uint64", + "offset": 0, + "slot": "5" + }, + { + "label": "revocationDate", + "type": "t_uint64", + "offset": 8, + "slot": "5" + }, + { + "label": "version", + "type": "t_uint16", + "offset": 16, + "slot": "5" + }, + { + "label": "revoked", + "type": "t_bool", + "offset": 18, + "slot": "5" + }, + { + "label": "subject", + "type": "t_bytes_storage", + "offset": 0, + "slot": "6" + }, + { + "label": "attestationData", + "type": "t_bytes_storage", + "offset": 0, + "slot": "7" + } + ], + "numberOfBytes": "256" + }, + "t_uint16": { + "label": "uint16", + "numberOfBytes": "2" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint32": { + "label": "uint32", + "numberOfBytes": "4" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + } + } + }, + "84786e98eee515d63a28b28d3e67d5f91e07fe863a9045e2dbfec7f203693cad": { + "address": "0x201C4dFD63032c11bcA30c22EDDaffda43866ddB", + "txHash": "0x6701b9e4cb4f45fc801c4e774c56e9892b4aebb915239d5a11b71cf2c93f39b2", + "layout": { + "solcVersion": "0.8.21", + "storage": [ + { + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8", + "contract": "Initializable", + "src": "openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol:63", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool", + "contract": "Initializable", + "src": "openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol:68" + }, + { + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol:36" + }, + { + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address", + "contract": "OwnableUpgradeable", + "src": "openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage", + "contract": "OwnableUpgradeable", + "src": "openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol:94" + }, + { + "label": "router", + "offset": 0, + "slot": "101", + "type": "t_contract(IRouter)8166", + "contract": "ModuleRegistry", + "src": "src/ModuleRegistry.sol:18" + }, + { + "label": "modules", + "offset": 0, + "slot": "102", + "type": "t_mapping(t_address,t_struct(Module)8266_storage)", + "contract": "ModuleRegistry", + "src": "src/ModuleRegistry.sol:20" + }, + { + "label": "moduleAddresses", + "offset": 0, + "slot": "103", + "type": "t_array(t_address)dyn_storage", + "contract": "ModuleRegistry", + "src": "src/ModuleRegistry.sol:22" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_address)dyn_storage": { + "label": "address[]", + "numberOfBytes": "32" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_contract(IRouter)8166": { + "label": "contract IRouter", + "numberOfBytes": "20" + }, + "t_mapping(t_address,t_struct(Module)8266_storage)": { + "label": "mapping(address => struct Module)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(Module)8266_storage": { + "label": "struct Module", + "members": [ + { + "label": "moduleAddress", + "type": "t_address", + "offset": 0, + "slot": "0" + }, + { + "label": "name", + "type": "t_string_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "description", + "type": "t_string_storage", + "offset": 0, + "slot": "2" + } + ], + "numberOfBytes": "96" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + } + } + }, + "e66ce7c5948444f1fbf62e100f89ab14957c39bfa631d0e28f816823865b3177": { + "address": "0x1Aab7606dbaa16b854e2E55C4AD9Fdb1c81601A8", + "txHash": "0x767e4e05edec31467f9ea81ffce05fd37239cec08adc3a8b77c4f6a35dd5ef39", + "layout": { + "solcVersion": "0.8.21", + "storage": [ + { + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8", + "contract": "Initializable", + "src": "openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol:63", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool", + "contract": "Initializable", + "src": "openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol:68" + }, + { + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol:36" + }, + { + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address", + "contract": "OwnableUpgradeable", + "src": "openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage", + "contract": "OwnableUpgradeable", + "src": "openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol:94" + }, + { + "label": "router", + "offset": 0, + "slot": "101", + "type": "t_contract(IRouter)8166", + "contract": "PortalRegistry", + "src": "src/PortalRegistry.sol:18" + }, + { + "label": "portals", + "offset": 0, + "slot": "102", + "type": "t_mapping(t_address,t_struct(Portal)8259_storage)", + "contract": "PortalRegistry", + "src": "src/PortalRegistry.sol:20" + }, + { + "label": "issuers", + "offset": 0, + "slot": "103", + "type": "t_mapping(t_address,t_bool)", + "contract": "PortalRegistry", + "src": "src/PortalRegistry.sol:22" + }, + { + "label": "portalAddresses", + "offset": 0, + "slot": "104", + "type": "t_array(t_address)dyn_storage", + "contract": "PortalRegistry", + "src": "src/PortalRegistry.sol:24" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_address)dyn_storage": { + "label": "address[]", + "numberOfBytes": "32" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_contract(IRouter)8166": { + "label": "contract IRouter", + "numberOfBytes": "20" + }, + "t_mapping(t_address,t_bool)": { + "label": "mapping(address => bool)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Portal)8259_storage)": { + "label": "mapping(address => struct Portal)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(Portal)8259_storage": { + "label": "struct Portal", + "members": [ + { + "label": "id", + "type": "t_address", + "offset": 0, + "slot": "0" + }, + { + "label": "ownerAddress", + "type": "t_address", + "offset": 0, + "slot": "1" + }, + { + "label": "modules", + "type": "t_array(t_address)dyn_storage", + "offset": 0, + "slot": "2" + }, + { + "label": "isRevocable", + "type": "t_bool", + "offset": 0, + "slot": "3" + }, + { + "label": "name", + "type": "t_string_storage", + "offset": 0, + "slot": "4" + }, + { + "label": "description", + "type": "t_string_storage", + "offset": 0, + "slot": "5" + }, + { + "label": "ownerName", + "type": "t_string_storage", + "offset": 0, + "slot": "6" + } + ], + "numberOfBytes": "224" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + } + } + }, + "9b0b84cc1046d395294ecdfe067a693eda5c23f9473ae2d4f22f82674d2eb7d6": { + "address": "0xFD3F38D4E8F5300903C86a073552BDC2FB57F66d", + "txHash": "0x89916baf9f99a9634266378d18b5bf826baf595db86cb0f9f3ad95d2388182ed", + "layout": { + "solcVersion": "0.8.21", + "storage": [ + { + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8", + "contract": "Initializable", + "src": "openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol:63", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool", + "contract": "Initializable", + "src": "openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol:68" + }, + { + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol:36" + }, + { + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address", + "contract": "OwnableUpgradeable", + "src": "openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage", + "contract": "OwnableUpgradeable", + "src": "openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol:94" + }, + { + "label": "router", + "offset": 0, + "slot": "101", + "type": "t_contract(IRouter)8166", + "contract": "SchemaRegistry", + "src": "src/SchemaRegistry.sol:15" + }, + { + "label": "schemas", + "offset": 0, + "slot": "102", + "type": "t_mapping(t_bytes32,t_struct(Schema)8243_storage)", + "contract": "SchemaRegistry", + "src": "src/SchemaRegistry.sol:17" + }, + { + "label": "schemaIds", + "offset": 0, + "slot": "103", + "type": "t_array(t_bytes32)dyn_storage", + "contract": "SchemaRegistry", + "src": "src/SchemaRegistry.sol:19" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_bytes32)dyn_storage": { + "label": "bytes32[]", + "numberOfBytes": "32" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_contract(IRouter)8166": { + "label": "contract IRouter", + "numberOfBytes": "20" + }, + "t_mapping(t_bytes32,t_struct(Schema)8243_storage)": { + "label": "mapping(bytes32 => struct Schema)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(Schema)8243_storage": { + "label": "struct Schema", + "members": [ + { + "label": "name", + "type": "t_string_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "description", + "type": "t_string_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "context", + "type": "t_string_storage", + "offset": 0, + "slot": "2" + }, + { + "label": "schema", + "type": "t_string_storage", + "offset": 0, + "slot": "3" + } + ], + "numberOfBytes": "128" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + } + } + } + } +} diff --git a/hardhat.config.ts b/hardhat.config.ts index 19667d99..8cccc30c 100644 --- a/hardhat.config.ts +++ b/hardhat.config.ts @@ -28,6 +28,10 @@ const config: HardhatUserConfig = { url: `https://linea-mainnet.infura.io/v3/${process.env.INFURA_KEY ?? ""}`, accounts: [process.env.PRIVATE_KEY ?? "0000000000000000000000000000000000000000000000000000000000000000"], }, + sepolia: { + url: `https://sepolia.infura.io/v3/${process.env.INFURA_KEY ?? ""}`, + accounts: [process.env.PRIVATE_KEY ?? "0000000000000000000000000000000000000000000000000000000000000000"], + }, }, paths: { sources: "./src", @@ -36,6 +40,7 @@ const config: HardhatUserConfig = { apiKey: { "linea-goerli": process.env.ETHERSCAN_API_KEY ?? "", linea: process.env.ETHERSCAN_API_KEY ?? "", + sepolia: process.env.ETHERSCAN_API_KEY ?? "", }, customChains: [ { From f271dde580291326ae1611d2c08e97af883fa385 Mon Sep 17 00:00:00 2001 From: Alain Nicolas Date: Mon, 2 Oct 2023 12:25:31 +0200 Subject: [PATCH 15/36] chore: Add utils (#243) --- README.md | 26 ++++++++++++++++++++++++++ package.json | 2 ++ script/arguments.ts | 1 + script/decode.ts | 23 +++++++++++++++++++++++ script/encode.ts | 23 +++++++++++++++++++++++ 5 files changed, 75 insertions(+) create mode 100644 script/arguments.ts create mode 100644 script/decode.ts create mode 100644 script/encode.ts diff --git a/README.md b/README.md index 972f475a..da46b7e4 100644 --- a/README.md +++ b/README.md @@ -239,6 +239,32 @@ deployed contracts. This can be useful if the file was lost/modified since the l :warning: Note: Forcing the redeployment of all the implementations is more expensive! +## Utils + +### Encode + +Change the data you want to encode in `contracts/script/encode.ts`, then run: + +``` +pnpm run encode +``` + +### Decode + +Change the data you want to decode in `contracts/script/decode.ts`, then run: + +``` +pnpm run decode +``` + +### Verify with arguments + +Change the arguments you want to use fpr the verify action in `contracts/script/arguments.ts`, then run: + +``` +npx hardhat verify --network NETWORK_NAME CONTRACT_ADDRESS --constructor-args contracts/script/arguments.ts +``` + ## Contracts addresses ### Testnet diff --git a/package.json b/package.json index 6eceba9d..6a19a174 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "check:upgradeable": "npx hardhat run --network linea script/upgrade/checkUpgradeable.ts", "check:upgradeable:goerli": "npx hardhat run --network linea-goerli script/upgrade/checkUpgradeable.ts", "clean": "rm -rf lcov.info coverage artifacts cache_hardhat cache out typechain-types", + "decode": "npx hardhat run script/decode.ts", "deploy:CorrectModule": "npx hardhat run --network linea script/deploy/deployCorrectModule.ts", "deploy:CorrectModule:goerli": "npx hardhat run --network linea-goerli script/deploy/deployCorrectModule.ts", "deploy:IncorrectModule": "npx hardhat run --network linea script/deploy/deployIncorrectModule.ts", @@ -34,6 +35,7 @@ "deploy:all:goerli": "npx hardhat run --network linea-goerli script/deploy/deployEverything.ts", "deploy:post": "npx hardhat run --network linea script/deploy/postDeployment.ts", "deploy:post:goerli": "npx hardhat run --network linea-goerli script/deploy/postDeployment.ts", + "encode": "npx hardhat run script/encode.ts", "lint": "pnpm lint:sol && eslint . && pnpm prettier:check", "lint:sol": "pnpm solhint \"{script,src,test}/**/*.sol\"", "prepare": "husky install", diff --git a/script/arguments.ts b/script/arguments.ts new file mode 100644 index 00000000..bd7bcd4f --- /dev/null +++ b/script/arguments.ts @@ -0,0 +1 @@ +module.exports = [[], "0x736c78b2f2cBf4F921E8551b2acB6A5Edc9177D5"]; diff --git a/script/decode.ts b/script/decode.ts new file mode 100644 index 00000000..84ae4ebd --- /dev/null +++ b/script/decode.ts @@ -0,0 +1,23 @@ +import { AbiCoder } from "ethers"; + +/* + * This script aims to rec recreate a lost "network file". + * Forces the import of an existing proxy contract deployment to be used with this plugin. + * OpenZeppelin doc: https://docs.openzeppelin.com/upgrades-plugins/1.x/api-hardhat-upgrades#force-import + * OpenZeppelin doc on network files: https://docs.openzeppelin.com/upgrades-plugins/1.x/network-files + */ +async function main() { + console.log("Decoding..."); + + const abiCoder = new AbiCoder(); + const decoded = abiCoder.decode(["address"], "0x000000000000000000000000809e815596abeb3764abf81be2dc39fbbacc9949"); + + console.log(`Decoded to ${decoded}`); +} + +// We recommend this pattern to be able to use async/await everywhere +// and properly handle errors. +main().catch((error) => { + console.error(error); + process.exitCode = 1; +}); diff --git a/script/encode.ts b/script/encode.ts new file mode 100644 index 00000000..85cdb63b --- /dev/null +++ b/script/encode.ts @@ -0,0 +1,23 @@ +import { AbiCoder } from "ethers"; + +/* + * This script aims to rec recreate a lost "network file". + * Forces the import of an existing proxy contract deployment to be used with this plugin. + * OpenZeppelin doc: https://docs.openzeppelin.com/upgrades-plugins/1.x/api-hardhat-upgrades#force-import + * OpenZeppelin doc on network files: https://docs.openzeppelin.com/upgrades-plugins/1.x/network-files + */ +async function main() { + console.log("Encoding..."); + + const abiCoder = new AbiCoder(); + const encoded = abiCoder.encode(["address"], ["0x809e815596AbEB3764aBf81BE2DC39fBBAcc9949"]); + + console.log(`Encoded to ${encoded}`); +} + +// We recommend this pattern to be able to use async/await everywhere +// and properly handle errors. +main().catch((error) => { + console.error(error); + process.exitCode = 1; +}); From 497dc8452d8a509b020735b7c182ead9f31aa539 Mon Sep 17 00:00:00 2001 From: Alain Nicolas Date: Mon, 2 Oct 2023 18:35:04 +0200 Subject: [PATCH 16/36] chore: Change the repository architecture to a monorepo (#239) --- .github/workflows/lint.yml | 59 ++ .github/workflows/smart-contracts-test.yml | 163 --- .github/workflows/smart-contracts.yml | 166 +++ .gitmodules | 21 +- .husky/pre-commit | 4 +- .env.example => contracts/.env.example | 0 .../.openzeppelin}/sepolia.json | 0 .../.openzeppelin}/unknown-59140.json | 0 .../.openzeppelin}/unknown-59144.json | 0 contracts/README.md | 266 +++++ foundry.toml => contracts/foundry.toml | 3 - .../hardhat.config.ts | 0 contracts/lib/forge-std | 1 + contracts/lib/openzeppelin-contracts | 1 + .../lib/openzeppelin-contracts-upgradeable | 1 + contracts/package.json | 59 ++ {script => contracts/script}/arguments.ts | 0 {script => contracts/script}/decode.ts | 0 .../script}/deploy/deployCorrectModule.ts | 0 .../script}/deploy/deployEverything.ts | 0 .../script}/deploy/deployIncorrectModule.ts | 0 .../script}/deploy/deployMsgSenderModule.ts | 0 .../script}/deploy/postDeployment.ts | 0 {script => contracts/script}/encode.ts | 0 .../script}/recreateNetworkFile.ts | 0 .../script}/upgrade/checkUpgradeability.ts | 0 .../script}/upgrade/checkUpgradeable.ts | 0 .../script}/upgrade/forceUpgradeEverything.ts | 0 .../script}/upgrade/upgradeEverything.ts | 0 .../src}/AttestationRegistry.sol | 0 {src => contracts/src}/ModuleRegistry.sol | 0 {src => contracts/src}/PortalRegistry.sol | 0 {src => contracts/src}/Router.sol | 0 {src => contracts/src}/SchemaRegistry.sol | 0 .../src}/example/CorrectModule.sol | 0 {src => contracts/src}/example/EASPortal.sol | 0 .../src}/example/IncorrectModule.sol | 0 .../src}/example/MsgSenderModule.sol | 0 {src => contracts/src}/example/NFTPortal.sol | 0 .../src}/example/PayableModule.sol | 0 .../src}/interface/AbstractModule.sol | 0 .../src}/interface/AbstractPortal.sol | 0 {src => contracts/src}/interface/IRouter.sol | 0 .../src}/portal/DefaultPortal.sol | 0 {src => contracts/src}/types/Structs.sol | 0 .../test}/AttestationRegistry.t.sol | 0 {test => contracts/test}/ModuleRegistry.t.sol | 0 {test => contracts/test}/PortalRegistry.t.sol | 0 {test => contracts/test}/Router.t.sol | 0 {test => contracts/test}/SchemaRegistry.t.sol | 0 .../test}/example/EASPortal.t.sol | 0 .../test}/example/MsgSenderModule.t.sol | 0 .../test}/example/NFTPortal.t.sol | 0 .../test}/example/PayableModule.t.sol | 0 .../integration/AttestationRegistryMass.t.sol | 0 .../test}/mocks/AttestationRegistryMock.sol | 0 .../test}/mocks/InvalidPortalMock.sol | 0 .../test}/mocks/ModuleRegistryMock.sol | 0 .../test}/mocks/PortalRegistryMock.sol | 0 .../test}/mocks/SchemaRegistryMock.sol | 0 .../test}/mocks/ValidPortalMock.sol | 0 .../test}/portal/DefaultPortal.t.sol | 0 lib/forge-std | 1 - lib/openzeppelin-contracts | 1 - lib/openzeppelin-contracts-upgradeable | 1 - package.json | 50 +- pnpm-lock.yaml | 957 ++++++------------ pnpm-workspace.yaml | 2 +- remappings.txt | 5 - sdk/.gitkeep | 0 sdk/README.md | 3 + subgraph/package.json | 8 +- subgraph/tsconfig.json | 3 +- tsconfig.json | 12 + 74 files changed, 897 insertions(+), 890 deletions(-) create mode 100644 .github/workflows/lint.yml delete mode 100644 .github/workflows/smart-contracts-test.yml create mode 100644 .github/workflows/smart-contracts.yml rename .env.example => contracts/.env.example (100%) rename {.openzeppelin => contracts/.openzeppelin}/sepolia.json (100%) rename {.openzeppelin => contracts/.openzeppelin}/unknown-59140.json (100%) rename {.openzeppelin => contracts/.openzeppelin}/unknown-59144.json (100%) create mode 100644 contracts/README.md rename foundry.toml => contracts/foundry.toml (67%) rename hardhat.config.ts => contracts/hardhat.config.ts (100%) create mode 160000 contracts/lib/forge-std create mode 160000 contracts/lib/openzeppelin-contracts create mode 160000 contracts/lib/openzeppelin-contracts-upgradeable create mode 100644 contracts/package.json rename {script => contracts/script}/arguments.ts (100%) rename {script => contracts/script}/decode.ts (100%) rename {script => contracts/script}/deploy/deployCorrectModule.ts (100%) rename {script => contracts/script}/deploy/deployEverything.ts (100%) rename {script => contracts/script}/deploy/deployIncorrectModule.ts (100%) rename {script => contracts/script}/deploy/deployMsgSenderModule.ts (100%) rename {script => contracts/script}/deploy/postDeployment.ts (100%) rename {script => contracts/script}/encode.ts (100%) rename {script => contracts/script}/recreateNetworkFile.ts (100%) rename {script => contracts/script}/upgrade/checkUpgradeability.ts (100%) rename {script => contracts/script}/upgrade/checkUpgradeable.ts (100%) rename {script => contracts/script}/upgrade/forceUpgradeEverything.ts (100%) rename {script => contracts/script}/upgrade/upgradeEverything.ts (100%) rename {src => contracts/src}/AttestationRegistry.sol (100%) rename {src => contracts/src}/ModuleRegistry.sol (100%) rename {src => contracts/src}/PortalRegistry.sol (100%) rename {src => contracts/src}/Router.sol (100%) rename {src => contracts/src}/SchemaRegistry.sol (100%) rename {src => contracts/src}/example/CorrectModule.sol (100%) rename {src => contracts/src}/example/EASPortal.sol (100%) rename {src => contracts/src}/example/IncorrectModule.sol (100%) rename {src => contracts/src}/example/MsgSenderModule.sol (100%) rename {src => contracts/src}/example/NFTPortal.sol (100%) rename {src => contracts/src}/example/PayableModule.sol (100%) rename {src => contracts/src}/interface/AbstractModule.sol (100%) rename {src => contracts/src}/interface/AbstractPortal.sol (100%) rename {src => contracts/src}/interface/IRouter.sol (100%) rename {src => contracts/src}/portal/DefaultPortal.sol (100%) rename {src => contracts/src}/types/Structs.sol (100%) rename {test => contracts/test}/AttestationRegistry.t.sol (100%) rename {test => contracts/test}/ModuleRegistry.t.sol (100%) rename {test => contracts/test}/PortalRegistry.t.sol (100%) rename {test => contracts/test}/Router.t.sol (100%) rename {test => contracts/test}/SchemaRegistry.t.sol (100%) rename {test => contracts/test}/example/EASPortal.t.sol (100%) rename {test => contracts/test}/example/MsgSenderModule.t.sol (100%) rename {test => contracts/test}/example/NFTPortal.t.sol (100%) rename {test => contracts/test}/example/PayableModule.t.sol (100%) rename {test => contracts/test}/integration/AttestationRegistryMass.t.sol (100%) rename {test => contracts/test}/mocks/AttestationRegistryMock.sol (100%) rename {test => contracts/test}/mocks/InvalidPortalMock.sol (100%) rename {test => contracts/test}/mocks/ModuleRegistryMock.sol (100%) rename {test => contracts/test}/mocks/PortalRegistryMock.sol (100%) rename {test => contracts/test}/mocks/SchemaRegistryMock.sol (100%) rename {test => contracts/test}/mocks/ValidPortalMock.sol (100%) rename {test => contracts/test}/portal/DefaultPortal.t.sol (100%) delete mode 160000 lib/forge-std delete mode 160000 lib/openzeppelin-contracts delete mode 160000 lib/openzeppelin-contracts-upgradeable delete mode 100644 remappings.txt create mode 100644 sdk/.gitkeep create mode 100644 sdk/README.md diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml new file mode 100644 index 00000000..629cbacf --- /dev/null +++ b/.github/workflows/lint.yml @@ -0,0 +1,59 @@ +name: Lint + +on: + pull_request: + branches: + - main + - dev + - release/* + push: + branches: + - main + - dev + - release/* + +jobs: + lint: + runs-on: ubuntu-latest + steps: + - name: Check out the repo + uses: actions/checkout@v3 + + - name: Install Pnpm + uses: pnpm/action-setup@v2 + with: + version: 8 + run_install: false + + - name: Install Node.js + uses: actions/setup-node@v3 + with: + node-version: 18 + cache: pnpm + + - name: Get pnpm store directory + shell: bash + run: | + echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV + + - uses: actions/cache@v3 + name: Setup pnpm cache + with: + path: ${{ env.STORE_PATH }} + key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} + restore-keys: | + ${{ runner.os }}-pnpm-store- + + - name: Install dependencies + run: pnpm install --frozen-lockfile + + - name: Check code linting + run: pnpm -r run lint + + - name: Run Prettier + run: pnpm run prettier:check + + - name: Add lint summary + run: | + echo "## Lint result" >> $GITHUB_STEP_SUMMARY + echo "✅ Passed" >> $GITHUB_STEP_SUMMARY diff --git a/.github/workflows/smart-contracts-test.yml b/.github/workflows/smart-contracts-test.yml deleted file mode 100644 index 964d50d8..00000000 --- a/.github/workflows/smart-contracts-test.yml +++ /dev/null @@ -1,163 +0,0 @@ -name: Smart Contracts Test - -on: - pull_request: - branches: - - main - - dev - - release/* - push: - branches: - - main - - dev - - release/* - -env: - FOUNDRY_PROFILE: ci - -jobs: - lint: - runs-on: "ubuntu-latest" - steps: - - name: "Check out the repo" - uses: "actions/checkout@v3" - - - name: "Install Foundry" - uses: "foundry-rs/foundry-toolchain@v1" - - - name: "Install Pnpm" - uses: "pnpm/action-setup@v2" - with: - version: "8" - - - name: "Install Node.js" - uses: "actions/setup-node@v3" - with: - cache: "pnpm" - node-version: "lts/*" - - - name: "Install the Node.js dependencies" - run: "pnpm install" - - - name: "Lint the contracts" - run: "pnpm lint" - - - name: "Add lint summary" - run: | - echo "## Lint result" >> $GITHUB_STEP_SUMMARY - echo "✅ Passed" >> $GITHUB_STEP_SUMMARY - - build: - runs-on: "ubuntu-latest" - steps: - - name: "Check out the repo" - uses: "actions/checkout@v3" - with: - submodules: "recursive" - - - name: "Install Foundry" - uses: "foundry-rs/foundry-toolchain@v1" - - - name: "Show the Foundry config" - run: "forge config" - - - name: "Produce a build" - run: "forge build" - - - name: "Add build summary" - run: | - echo "## Build result" >> $GITHUB_STEP_SUMMARY - echo "✅ Passed" >> $GITHUB_STEP_SUMMARY - - test-unit: - env: - FOUNDRY_FUZZ_RUNS: "5000" - needs: ["lint", "build"] - runs-on: "ubuntu-latest" - steps: - - name: "Check out the repo" - uses: "actions/checkout@v3" - with: - submodules: "recursive" - - - name: "Install Foundry" - uses: "foundry-rs/foundry-toolchain@v1" - - - name: "Run the unit tests" - run: 'forge test --match-path "test/*"' - - - name: "Add test summary" - run: | - echo "## Unit tests result" >> $GITHUB_STEP_SUMMARY - echo "✅ Passed" >> $GITHUB_STEP_SUMMARY - - coverage: - needs: ["lint", "build"] - runs-on: "ubuntu-latest" - steps: - - name: "Check out the repo" - uses: "actions/checkout@v3" - with: - submodules: "recursive" - - - name: "Install Foundry" - uses: "foundry-rs/foundry-toolchain@v1" - - - name: "Generate the coverage report using the unit tests" - run: 'forge coverage --match-path "test/**/*.sol" --report lcov' - - - name: "Upload coverage report to Codecov" - uses: "codecov/codecov-action@v3" - with: - files: "./lcov.info" - token: ${{ secrets.CODECOV_TOKEN }} - fail_ci_if_error: true - verbose: true - - - name: "Check test coverage" - uses: "terencetcf/github-actions-lcov-minimum-coverage-checker@v1" - with: - coverage-file: lcov.info - minimum-coverage: 96 - - - name: "Add coverage summary" - run: | - echo "## Coverage result" >> $GITHUB_STEP_SUMMARY - echo "✅ Uploaded to Codecov" >> $GITHUB_STEP_SUMMARY - - upgradeability: - needs: ["lint", "build"] - runs-on: "ubuntu-latest" - steps: - - name: "Check out the repo" - uses: "actions/checkout@v3" - with: - submodules: "recursive" - - - name: "Install Foundry" - uses: "foundry-rs/foundry-toolchain@v1" - - - name: "Install Pnpm" - uses: "pnpm/action-setup@v2" - with: - version: "8" - - - name: "Install Node.js" - uses: "actions/setup-node@v3" - with: - cache: "pnpm" - node-version: "lts/*" - - - name: "Install the Node.js dependencies" - run: "pnpm install" - - - name: "Produce a build" - run: "forge build" - - - name: "Check contracts upgradeability" - run: "pnpm run check:upgradeability:ci" - - - name: "Add upgradeability summary" - run: | - echo "## Upgradeability check result" >> $GITHUB_STEP_SUMMARY - echo "✅ Contracts are upgradeable" >> $GITHUB_STEP_SUMMARY diff --git a/.github/workflows/smart-contracts.yml b/.github/workflows/smart-contracts.yml new file mode 100644 index 00000000..c3ab00f1 --- /dev/null +++ b/.github/workflows/smart-contracts.yml @@ -0,0 +1,166 @@ +name: Smart Contracts + +on: + pull_request: + branches: + - main + - dev + - release/* + push: + branches: + - main + - dev + - release/* + +env: + FOUNDRY_PROFILE: ci + +jobs: + build: + runs-on: ubuntu-latest + + defaults: + run: + working-directory: contracts + + steps: + - name: Check out the repo + uses: actions/checkout@v3 + with: + submodules: recursive + + - name: Install Foundry + uses: foundry-rs/foundry-toolchain@v1 + + - name: Show the Foundry config + run: forge config + + - name: Produce a build + run: forge build + + - name: Add build summary + run: | + echo "## Build result" >> $GITHUB_STEP_SUMMARY + echo "✅ Passed" >> $GITHUB_STEP_SUMMARY + + test-unit: + runs-on: ubuntu-latest + + defaults: + run: + working-directory: contracts + + env: + FOUNDRY_FUZZ_RUNS: 1000 + + needs: build + + steps: + - name: Check out the repo + uses: actions/checkout@v3 + with: + submodules: recursive + + - name: Install Foundry + uses: foundry-rs/foundry-toolchain@v1 + + - name: Run the unit tests + run: forge test + + - name: Add test summary + run: | + echo "## Unit tests result" >> $GITHUB_STEP_SUMMARY + echo "✅ Passed" >> $GITHUB_STEP_SUMMARY + + coverage: + runs-on: ubuntu-latest + + needs: build + + steps: + - name: Check out the repo + uses: actions/checkout@v3 + with: + submodules: recursive + + - name: Install Foundry + uses: foundry-rs/foundry-toolchain@v1 + + - name: Generate the coverage report using the unit tests + run: cd contracts && forge coverage --report lcov + + - name: Move the report at the root of the project + run: mv contracts/lcov.info . + + - name: Upload coverage report to Codecov + uses: codecov/codecov-action@v3 + with: + files: ./lcov.info + token: ${{ secrets.CODECOV_TOKEN }} + fail_ci_if_error: true + verbose: true + + - name: Check test coverage + uses: terencetcf/github-actions-lcov-minimum-coverage-checker@v1 + with: + coverage-file: lcov.info + minimum-coverage: 96 + + - name: Add coverage summary + run: | + echo "## Coverage result" >> $GITHUB_STEP_SUMMARY + echo "✅ Uploaded to Codecov" >> $GITHUB_STEP_SUMMARY + + upgradeability: + runs-on: ubuntu-latest + + defaults: + run: + working-directory: contracts + + needs: build + + steps: + - name: Check out the repo + uses: actions/checkout@v3 + with: + submodules: recursive + + - name: Install Pnpm + uses: pnpm/action-setup@v2 + with: + version: 8 + run_install: false + + - name: Install Node.js + uses: actions/setup-node@v3 + with: + node-version: 18 + cache: pnpm + + - name: Get pnpm store directory + shell: bash + run: | + echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV + + - uses: actions/cache@v3 + name: Setup pnpm cache + with: + path: ${{ env.STORE_PATH }} + key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} + restore-keys: | + ${{ runner.os }}-pnpm-store- + + - name: Install dependencies + run: pnpm install --frozen-lockfile + + - name: Install Foundry + uses: foundry-rs/foundry-toolchain@v1 + + - name: Check contracts upgradeability + run: pnpm run check:upgradeability:ci + + - name: Add upgradeability summary + run: | + echo "## Upgradeability check result" >> $GITHUB_STEP_SUMMARY + echo "✅ Contracts are upgradeable" >> $GITHUB_STEP_SUMMARY diff --git a/.gitmodules b/.gitmodules index 5ee5fc62..5fd4b0ed 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,11 +1,12 @@ -[submodule "lib/forge-std"] - branch = "v1" - path = "lib/forge-std" - url = "https://github.com/foundry-rs/forge-std" -[submodule "lib/openzeppelin-contracts-upgradeable"] - branch = "release-v4.9" - path = "lib/openzeppelin-contracts-upgradeable" - url = "https://github.com/OpenZeppelin/openzeppelin-contracts-upgradeable" -[submodule "lib/openzeppelin-contracts"] - path = lib/openzeppelin-contracts +[submodule "contracts/lib/forge-std"] + branch = "v1" + path = contracts/lib/forge-std + url = https://github.com/foundry-rs/forge-std +[submodule "contracts/lib/openzeppelin-contracts-upgradeable"] + branch = "release-v4.9" + path = contracts/lib/openzeppelin-contracts-upgradeable + url = https://github.com/OpenZeppelin/openzeppelin-contracts-upgradeable +[submodule "contracts/lib/openzeppelin-contracts"] + branch = "release-v4.9" + path = contracts/lib/openzeppelin-contracts url = https://github.com/OpenZeppelin/openzeppelin-contracts diff --git a/.husky/pre-commit b/.husky/pre-commit index 247c370d..36f3cf6f 100755 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -2,5 +2,5 @@ . "$(dirname -- "$0")/_/husky.sh" pnpm run prettier:write -pnpm run lint -pnpm run test +pnpm -r run lint +pnpm -r run test diff --git a/.env.example b/contracts/.env.example similarity index 100% rename from .env.example rename to contracts/.env.example diff --git a/.openzeppelin/sepolia.json b/contracts/.openzeppelin/sepolia.json similarity index 100% rename from .openzeppelin/sepolia.json rename to contracts/.openzeppelin/sepolia.json diff --git a/.openzeppelin/unknown-59140.json b/contracts/.openzeppelin/unknown-59140.json similarity index 100% rename from .openzeppelin/unknown-59140.json rename to contracts/.openzeppelin/unknown-59140.json diff --git a/.openzeppelin/unknown-59144.json b/contracts/.openzeppelin/unknown-59144.json similarity index 100% rename from .openzeppelin/unknown-59144.json rename to contracts/.openzeppelin/unknown-59144.json diff --git a/contracts/README.md b/contracts/README.md new file mode 100644 index 00000000..060c1a84 --- /dev/null +++ b/contracts/README.md @@ -0,0 +1,266 @@ +## Verax Attestation Registry - Contracts + +Verax is mainly composed of a set of smart contracts that allows anyone to read and write attestations of any type and +any subject. + +## Foundry Installation + +**Using Foundryup** + +Foundryup is the Foundry toolchain installer. Open your terminal and run the following command: + +`curl -L https://foundry.paradigm.xyz | bash` This will install Foundryup, then simply follow the instructions +on-screen, which will make the foundryup command available in your CLI. + +Running foundryup by itself will install the latest (nightly) precompiled binaries: forge, cast, anvil and chisel. See +foundryup --help for more options, like installing from a specific version or commit. + +ℹ️ Note + +If you're on Windows, you will need to install and use Git BASH or WSL, as your terminal, since Foundryup currently does +not support Powershell or Cmd. + +For more details on installation, see the [installation guide](https://book.getfoundry.sh/getting-started/installation) +in the book. + +If you're experiencing any issues while installing, check out the [FAQ](https://book.getfoundry.sh/faq). + +## Forge - build and test + +We can build the project with forge build: + +``` +$ forge build +[⠊] Compiling... +[⠘] Compiling 22 files with 0.8.20 +[⠒] Solc 0.8.20 finished in 2.97s +Compiler run successful! +``` + +And run the tests with forge test: + +``` +$ forge test +No files changed, compilation skipped + +Running 2 tests for test/Counter.t.sol:CounterTest +[PASS] testIncrement() (gas: 28334) +[PASS] testSetNumber(uint256) (runs: 256, μ: 27398, ~: 28409) +Test result: ok. 2 passed; 0 failed; 0 skipped; finished in 10.42ms +Ran 1 test suites: 2 tests passed, 0 failed, 0 skipped (2 total tests) +``` + +## Deployment - using Anvil + +Anvil is a local testnet node shipped with Foundry. You can use it for testing your contracts from frontends or for +interacting over RPC. Anvil is part of the Foundry suite and is installed alongside forge, cast and chisel. + +**Step 1 : Run a local node using Anvil** + +To run a local node, simply type anvil. You should see a list of accounts and private keys available for use, as well as +the address and port the node is listening on. + +``` +$ anvil + + + _ _ + (_) | | + __ _ _ __ __ __ _ | | + / _` | | '_ \ \ \ / / | | | | + | (_| | | | | | \ V / | | | | + \__,_| |_| |_| \_/ |_| |_| + + 0.1.0 (02e430c 2023-07-21T00:20:33.193960100Z) + https://github.com/foundry-rs/foundry + +Available Accounts +================== + +(0) "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266" (10000.000000000000000000 ETH) +(1) "0x70997970C51812dc3A010C7d01b50e0d17dc79C8" (10000.000000000000000000 ETH) +(2) "0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC" (10000.000000000000000000 ETH) +(3) "0x90F79bf6EB2c4f870365E785982E1f101E93b906" (10000.000000000000000000 ETH) +(4) "0x15d34AAf54267DB7D7c367839AAf71A00a2C6A65" (10000.000000000000000000 ETH) +(5) "0x9965507D1a55bcC2695C58ba16FB37d819B0A4dc" (10000.000000000000000000 ETH) +(6) "0x976EA74026E726554dB657fA54763abd0C3a0aa9" (10000.000000000000000000 ETH) +(7) "0x14dC79964da2C08b23698B3D3cc7Ca32193d9955" (10000.000000000000000000 ETH) +(8) "0x23618e81E3f5cdF7f54C3d65f7FBc0aBf5B21E8f" (10000.000000000000000000 ETH) +(9) "0xa0Ee7A142d267C1f36714E4a8F75612F20a79720" (10000.000000000000000000 ETH) + +Private Keys +================== + +(0) 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 +(1) 0x59c6995e998f97a5a0044966f0945389dc9e86dae88c7a8412f4603b6b78690d +(2) 0x5de4111afa1a4b94908f83103eb1f1706367c2e68ca870fc3fb9a804cdab365a +(3) 0x7c852118294e51e653712a81e05800f419141751be58f605c371e15141b007a6 +(4) 0x47e179ec197488593b187f80a00eb0da91f1b9d0b13f8733639f19c30a34926a +(5) 0x8b3a350cf5c34c9194ca85829a2df0ec3153be0318b5e2d3348e872092edffba +(6) 0x92db14e403b83dfe3df233f83dfa3a0d7096f21ca9b0d6d6b8d88b2b4ec1564e +(7) 0x4bbbf85ce3377467afe5d46f804f221813b2bb87f24d81f60f1fcdbf7cbf4356 +(8) 0xdbda1821b80551c9d65939329250298aa3472ba22feea921c0cf5d620ea67b97 +(9) 0x2a871d0798f97d79848a013d4936a73bf4cc922c825d33c1cf7073dff6d409c6 + +Wallet +================== +Mnemonic: test test test test test test test test test test test junk +Derivation path: m/44'/60'/0'/0/ + + +Chain ID +================== + +31337 +1000000000 + +Gas Limit +================== + +30000000 + +Genesis Timestamp +================== + +1689949885 + +Listening on 127.0.0.1:8545 +``` + +Anvil is highly configurable. You can run anvil -h to see all the configuration options. + +Some basic options are: + +``` +# Number of dev accounts to generate and configure. [default: 10] +anvil -a, --accounts + +# The EVM hardfork to use. [default: latest] +anvil --hardfork + +# Port number to listen on. [default: 8545] +anvil -p, --port +``` + +**Step 2 : Deployment** + +Forge can deploy smart contracts to a given network with the forge create command. + +Forge can deploy only one contract at a time. + +To deploy on Anvil local node use `forge create` command with RPC url and any private key provided by anvil local node +mentioned above. + +e.g. + +``` +forge create --rpc-url http://127.0.0.1:8545 --private-key 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 src/Counter.sol:Counter +[⠆] Compiling... +No files changed, compilation skipped +Deployer: 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266 +Deployed to: 0x5FbDB2315678afecb367f032d93F642f64180aa3 +Transaction hash: 0x15b25752da1dfd458b92069248825ce959f5be104f974d62b4ae95050710325d +``` + +## Verax contracts deployment + +### On the Linea Goerli testnet: + +1. Copy the `.env.example` file to a `.env` file +2. Fill it with your Infura key +3. Add your private key +4. To verify the contracts on Etherscan, also add your Etherscan API key +5. Deploy every contract via the `pnpm run deploy:all:goerli` command +6. Note down the summarized addresses (proxies), and the total logs can be of interest too +7. Gather the first list of issuers addresses +8. Set the issuers via the PortalRegistry’s `setIssuers` method +9. Deploy an instance of DefaultPortal via the PortalRegistry’s `deployDefaultPortal` method and note down its address +10. Verify this contract via `npx hardhat verify --network linea-goerli ADDRESS` +11. _Optional_: Deploy some valid modules via the `pnpm run deploy:CorrectModule:goerli` command and note down their + addresses +12. _Optional_: Deploy an invalid module via the `pnpm run deploy:IncorrectModule:goerli` command and note down its + address + +### On the Linea mainnet: + +1. Copy the `.env.example` file to a `.env` file +2. Fill it with your Infura key +3. Add your private key +4. To verify the contracts on Etherscan, also add your Etherscan API key +5. Deploy every contract via the `pnpm run deploy:all` command +6. Note down the summarized addresses (proxies), and the total logs can be of interest too +7. Gather the first list of issuers addresses +8. Set the issuers via the PortalRegistry’s `setIssuers` method +9. Deploy an instance of DefaultPortal via the PortalRegistry’s `deployDefaultPortal` method and note down its address +10. Verify this contract via `npx hardhat verify --network linea ADDRESS` +11. _Optional_: Deploy some valid modules via the `pnpm run deploy:CorrectModule` command and note down their addresses +12. _Optional_: Deploy an invalid module via the `pnpm run deploy:IncorrectModule` command and note down its address + +## Verax contracts upgrade + +### Check all registries implementations follow the upgradability rules + +Run `pnpm run check:upgradeability` to check if the local versions of the registries follow the upgradability rules. + +:warning: Note: this is a static check, not run against the already deployed contracts. + +### Check all registries implementations are upgradeable + +Run `pnpm run check:upgradeable:goerli` or `pnpm run check:upgradeable` to check if the already deployed registries are +upgradable to the new local versions. + +:warning: Note: this is a dynamic check, run against the already deployed contracts. + +### Recreate the network files + +:warning: Note: this script must only be run on a branch/commit corresponding to the version of the contracts deployed +on the targeted network!. + +Run `pnpm run check:upgradeable:goerli` or `pnpm run check:upgradeable` to re-generate the network files describing the +deployed contracts. This can be useful if the file was lost/modified since the last upgrade or the first deployment. + +:warning: Note: the script will fail if a network file already contains one of the targeted proxy addresses. + +### On the Linea Goerli testnet: + +1. Check that your `.env` file contains the address of all the proxies +2. Upgrade only the implementations that changed since the last upgrade via the `pnpm run upgrade:all:goerli` command +3. _Optional_: Upgrade all the implementations by forcing their re-deployment via the + `pnpm run upgrade:all:goerli:force` command + +:warning: Note: Forcing the redeployment of all the implementations is more expensive! + +### On the Linea mainnet: + +1. Check that your `.env` file contains the address of all the proxies +2. Upgrade only the implementations that changed since the last upgrade via the `pnpm run upgrade:all` command +3. _Optional_: Upgrade all the implementations by forcing their re-deployment via the `pnpm run upgrade:all:force` + command + +:warning: Note: Forcing the redeployment of all the implementations is more expensive! + +## Utils + +### Encode + +Change the data you want to encode in `contracts/script/encode.ts`, then run: + +``` +pnpm run encode +``` + +### Decode + +Change the data you want to decode in `contracts/script/decode.ts`, then run: + +``` +pnpm run decode +``` + +### Verify with arguments + +Change the arguments you want to use fpr the verify action in `contracts/script/arguments.ts`, then run: + +``` +npx hardhat verify --network NETWORK_NAME CONTRACT_ADDRESS --constructor-args contracts/script/arguments.ts +``` diff --git a/foundry.toml b/contracts/foundry.toml similarity index 67% rename from foundry.toml rename to contracts/foundry.toml index 9ed221ce..e42ad57f 100644 --- a/foundry.toml +++ b/contracts/foundry.toml @@ -8,6 +8,3 @@ linea_goerli = "${LINEA_GOERLI_RPC_URL}" [etherscan] linea_goerli = { key = "${ETHERSCAN_API_KEY}" } - - -# See more config options https://github.com/foundry-rs/foundry/tree/master/config diff --git a/hardhat.config.ts b/contracts/hardhat.config.ts similarity index 100% rename from hardhat.config.ts rename to contracts/hardhat.config.ts diff --git a/contracts/lib/forge-std b/contracts/lib/forge-std new file mode 160000 index 00000000..1d9650e9 --- /dev/null +++ b/contracts/lib/forge-std @@ -0,0 +1 @@ +Subproject commit 1d9650e951204a0ddce9ff89c32f1997984cef4d diff --git a/contracts/lib/openzeppelin-contracts b/contracts/lib/openzeppelin-contracts new file mode 160000 index 00000000..98c7a4cf --- /dev/null +++ b/contracts/lib/openzeppelin-contracts @@ -0,0 +1 @@ +Subproject commit 98c7a4cf958f7014e3c5347aeb0678b585eb870d diff --git a/contracts/lib/openzeppelin-contracts-upgradeable b/contracts/lib/openzeppelin-contracts-upgradeable new file mode 160000 index 00000000..5bc59992 --- /dev/null +++ b/contracts/lib/openzeppelin-contracts-upgradeable @@ -0,0 +1 @@ +Subproject commit 5bc59992591b84bba18dc1ac46942f1886b30ccd diff --git a/contracts/package.json b/contracts/package.json new file mode 100644 index 00000000..92104b4b --- /dev/null +++ b/contracts/package.json @@ -0,0 +1,59 @@ +{ + "name": "linea-attestation-registry-contracts", + "version": "0.0.1", + "description": "Verax Attestation Registry core smart contracts", + "keywords": [ + "linea-attestation-registry", + "blockchain", + "attestation", + "ethereum", + "foundry", + "smart-contracts", + "solidity" + ], + "repository": "github.com/Consensys/linea-attestation-registry", + "license": "MIT", + "author": "Consensys", + "files": [ + "src" + ], + "scripts": { + "build": "forge build", + "check:upgradeability": "npx hardhat run script/upgrade/checkUpgradeability.ts", + "check:upgradeability:ci": "cp .env.example .env && pnpm run check:upgradeability", + "check:upgradeable": "npx hardhat run --network linea script/upgrade/checkUpgradeable.ts", + "check:upgradeable:goerli": "npx hardhat run --network linea-goerli script/upgrade/checkUpgradeable.ts", + "clean": "rm -rf lcov.info coverage artifacts cache_hardhat cache out typechain-types", + "decode": "npx hardhat run script/decode.ts", + "deploy:CorrectModule": "npx hardhat run --network linea script/deploy/deployCorrectModule.ts", + "deploy:CorrectModule:goerli": "npx hardhat run --network linea-goerli script/deploy/deployCorrectModule.ts", + "deploy:IncorrectModule": "npx hardhat run --network linea script/deploy/deployIncorrectModule.ts", + "deploy:IncorrectModule:goerli": "npx hardhat run --network linea-goerli script/deploy/deployIncorrectModule.ts", + "deploy:MsgSenderModule": "npx hardhat run --network linea script/deploy/deployMsgSenderModule.ts", + "deploy:MsgSenderModule:goerli": "npx hardhat run --network linea-goerli script/deploy/deployMsgSenderModule.ts", + "deploy:all": "npx hardhat run --network linea script/deploy/deployEverything.ts", + "deploy:all:goerli": "npx hardhat run --network linea-goerli script/deploy/deployEverything.ts", + "deploy:post": "npx hardhat run --network linea script/deploy/postDeployment.ts", + "deploy:post:goerli": "npx hardhat run --network linea-goerli script/deploy/postDeployment.ts", + "encode": "npx hardhat run script/encode.ts", + "lint": "pnpm solhint \"{script,src,test}/**/*.sol\"", + "reimport": "npx hardhat run --network linea script/recreateNetworkFile.ts", + "reimport:goerli": "npx hardhat run --network linea-goerli script/recreateNetworkFile.ts", + "test": "forge test", + "upgrade:all": "npx hardhat run --network linea script/upgrade/upgradeEverything.ts", + "upgrade:all:force": "npx hardhat run --network linea script/upgrade/forceUpgradeEverything.ts", + "upgrade:all:goerli": "npx hardhat run --network linea-goerli script/upgrade/upgradeEverything.ts", + "upgrade:all:goerli:force": "npx hardhat run --network linea-goerli script/upgrade/forceUpgradeEverything.ts" + }, + "devDependencies": { + "@nomicfoundation/hardhat-ethers": "^3.0.4", + "@nomicfoundation/hardhat-foundry": "^1.1.1", + "@nomicfoundation/hardhat-toolbox": "^3.0.0", + "@openzeppelin/hardhat-upgrades": "^2.3.1", + "dotenv": "^16.3.1", + "ethers": "^6.7.1", + "hardhat": "^2.17.4", + "solhint": "^3.6.2", + "solhint-plugin-prettier": "^0.0.5" + } +} diff --git a/script/arguments.ts b/contracts/script/arguments.ts similarity index 100% rename from script/arguments.ts rename to contracts/script/arguments.ts diff --git a/script/decode.ts b/contracts/script/decode.ts similarity index 100% rename from script/decode.ts rename to contracts/script/decode.ts diff --git a/script/deploy/deployCorrectModule.ts b/contracts/script/deploy/deployCorrectModule.ts similarity index 100% rename from script/deploy/deployCorrectModule.ts rename to contracts/script/deploy/deployCorrectModule.ts diff --git a/script/deploy/deployEverything.ts b/contracts/script/deploy/deployEverything.ts similarity index 100% rename from script/deploy/deployEverything.ts rename to contracts/script/deploy/deployEverything.ts diff --git a/script/deploy/deployIncorrectModule.ts b/contracts/script/deploy/deployIncorrectModule.ts similarity index 100% rename from script/deploy/deployIncorrectModule.ts rename to contracts/script/deploy/deployIncorrectModule.ts diff --git a/script/deploy/deployMsgSenderModule.ts b/contracts/script/deploy/deployMsgSenderModule.ts similarity index 100% rename from script/deploy/deployMsgSenderModule.ts rename to contracts/script/deploy/deployMsgSenderModule.ts diff --git a/script/deploy/postDeployment.ts b/contracts/script/deploy/postDeployment.ts similarity index 100% rename from script/deploy/postDeployment.ts rename to contracts/script/deploy/postDeployment.ts diff --git a/script/encode.ts b/contracts/script/encode.ts similarity index 100% rename from script/encode.ts rename to contracts/script/encode.ts diff --git a/script/recreateNetworkFile.ts b/contracts/script/recreateNetworkFile.ts similarity index 100% rename from script/recreateNetworkFile.ts rename to contracts/script/recreateNetworkFile.ts diff --git a/script/upgrade/checkUpgradeability.ts b/contracts/script/upgrade/checkUpgradeability.ts similarity index 100% rename from script/upgrade/checkUpgradeability.ts rename to contracts/script/upgrade/checkUpgradeability.ts diff --git a/script/upgrade/checkUpgradeable.ts b/contracts/script/upgrade/checkUpgradeable.ts similarity index 100% rename from script/upgrade/checkUpgradeable.ts rename to contracts/script/upgrade/checkUpgradeable.ts diff --git a/script/upgrade/forceUpgradeEverything.ts b/contracts/script/upgrade/forceUpgradeEverything.ts similarity index 100% rename from script/upgrade/forceUpgradeEverything.ts rename to contracts/script/upgrade/forceUpgradeEverything.ts diff --git a/script/upgrade/upgradeEverything.ts b/contracts/script/upgrade/upgradeEverything.ts similarity index 100% rename from script/upgrade/upgradeEverything.ts rename to contracts/script/upgrade/upgradeEverything.ts diff --git a/src/AttestationRegistry.sol b/contracts/src/AttestationRegistry.sol similarity index 100% rename from src/AttestationRegistry.sol rename to contracts/src/AttestationRegistry.sol diff --git a/src/ModuleRegistry.sol b/contracts/src/ModuleRegistry.sol similarity index 100% rename from src/ModuleRegistry.sol rename to contracts/src/ModuleRegistry.sol diff --git a/src/PortalRegistry.sol b/contracts/src/PortalRegistry.sol similarity index 100% rename from src/PortalRegistry.sol rename to contracts/src/PortalRegistry.sol diff --git a/src/Router.sol b/contracts/src/Router.sol similarity index 100% rename from src/Router.sol rename to contracts/src/Router.sol diff --git a/src/SchemaRegistry.sol b/contracts/src/SchemaRegistry.sol similarity index 100% rename from src/SchemaRegistry.sol rename to contracts/src/SchemaRegistry.sol diff --git a/src/example/CorrectModule.sol b/contracts/src/example/CorrectModule.sol similarity index 100% rename from src/example/CorrectModule.sol rename to contracts/src/example/CorrectModule.sol diff --git a/src/example/EASPortal.sol b/contracts/src/example/EASPortal.sol similarity index 100% rename from src/example/EASPortal.sol rename to contracts/src/example/EASPortal.sol diff --git a/src/example/IncorrectModule.sol b/contracts/src/example/IncorrectModule.sol similarity index 100% rename from src/example/IncorrectModule.sol rename to contracts/src/example/IncorrectModule.sol diff --git a/src/example/MsgSenderModule.sol b/contracts/src/example/MsgSenderModule.sol similarity index 100% rename from src/example/MsgSenderModule.sol rename to contracts/src/example/MsgSenderModule.sol diff --git a/src/example/NFTPortal.sol b/contracts/src/example/NFTPortal.sol similarity index 100% rename from src/example/NFTPortal.sol rename to contracts/src/example/NFTPortal.sol diff --git a/src/example/PayableModule.sol b/contracts/src/example/PayableModule.sol similarity index 100% rename from src/example/PayableModule.sol rename to contracts/src/example/PayableModule.sol diff --git a/src/interface/AbstractModule.sol b/contracts/src/interface/AbstractModule.sol similarity index 100% rename from src/interface/AbstractModule.sol rename to contracts/src/interface/AbstractModule.sol diff --git a/src/interface/AbstractPortal.sol b/contracts/src/interface/AbstractPortal.sol similarity index 100% rename from src/interface/AbstractPortal.sol rename to contracts/src/interface/AbstractPortal.sol diff --git a/src/interface/IRouter.sol b/contracts/src/interface/IRouter.sol similarity index 100% rename from src/interface/IRouter.sol rename to contracts/src/interface/IRouter.sol diff --git a/src/portal/DefaultPortal.sol b/contracts/src/portal/DefaultPortal.sol similarity index 100% rename from src/portal/DefaultPortal.sol rename to contracts/src/portal/DefaultPortal.sol diff --git a/src/types/Structs.sol b/contracts/src/types/Structs.sol similarity index 100% rename from src/types/Structs.sol rename to contracts/src/types/Structs.sol diff --git a/test/AttestationRegistry.t.sol b/contracts/test/AttestationRegistry.t.sol similarity index 100% rename from test/AttestationRegistry.t.sol rename to contracts/test/AttestationRegistry.t.sol diff --git a/test/ModuleRegistry.t.sol b/contracts/test/ModuleRegistry.t.sol similarity index 100% rename from test/ModuleRegistry.t.sol rename to contracts/test/ModuleRegistry.t.sol diff --git a/test/PortalRegistry.t.sol b/contracts/test/PortalRegistry.t.sol similarity index 100% rename from test/PortalRegistry.t.sol rename to contracts/test/PortalRegistry.t.sol diff --git a/test/Router.t.sol b/contracts/test/Router.t.sol similarity index 100% rename from test/Router.t.sol rename to contracts/test/Router.t.sol diff --git a/test/SchemaRegistry.t.sol b/contracts/test/SchemaRegistry.t.sol similarity index 100% rename from test/SchemaRegistry.t.sol rename to contracts/test/SchemaRegistry.t.sol diff --git a/test/example/EASPortal.t.sol b/contracts/test/example/EASPortal.t.sol similarity index 100% rename from test/example/EASPortal.t.sol rename to contracts/test/example/EASPortal.t.sol diff --git a/test/example/MsgSenderModule.t.sol b/contracts/test/example/MsgSenderModule.t.sol similarity index 100% rename from test/example/MsgSenderModule.t.sol rename to contracts/test/example/MsgSenderModule.t.sol diff --git a/test/example/NFTPortal.t.sol b/contracts/test/example/NFTPortal.t.sol similarity index 100% rename from test/example/NFTPortal.t.sol rename to contracts/test/example/NFTPortal.t.sol diff --git a/test/example/PayableModule.t.sol b/contracts/test/example/PayableModule.t.sol similarity index 100% rename from test/example/PayableModule.t.sol rename to contracts/test/example/PayableModule.t.sol diff --git a/test/integration/AttestationRegistryMass.t.sol b/contracts/test/integration/AttestationRegistryMass.t.sol similarity index 100% rename from test/integration/AttestationRegistryMass.t.sol rename to contracts/test/integration/AttestationRegistryMass.t.sol diff --git a/test/mocks/AttestationRegistryMock.sol b/contracts/test/mocks/AttestationRegistryMock.sol similarity index 100% rename from test/mocks/AttestationRegistryMock.sol rename to contracts/test/mocks/AttestationRegistryMock.sol diff --git a/test/mocks/InvalidPortalMock.sol b/contracts/test/mocks/InvalidPortalMock.sol similarity index 100% rename from test/mocks/InvalidPortalMock.sol rename to contracts/test/mocks/InvalidPortalMock.sol diff --git a/test/mocks/ModuleRegistryMock.sol b/contracts/test/mocks/ModuleRegistryMock.sol similarity index 100% rename from test/mocks/ModuleRegistryMock.sol rename to contracts/test/mocks/ModuleRegistryMock.sol diff --git a/test/mocks/PortalRegistryMock.sol b/contracts/test/mocks/PortalRegistryMock.sol similarity index 100% rename from test/mocks/PortalRegistryMock.sol rename to contracts/test/mocks/PortalRegistryMock.sol diff --git a/test/mocks/SchemaRegistryMock.sol b/contracts/test/mocks/SchemaRegistryMock.sol similarity index 100% rename from test/mocks/SchemaRegistryMock.sol rename to contracts/test/mocks/SchemaRegistryMock.sol diff --git a/test/mocks/ValidPortalMock.sol b/contracts/test/mocks/ValidPortalMock.sol similarity index 100% rename from test/mocks/ValidPortalMock.sol rename to contracts/test/mocks/ValidPortalMock.sol diff --git a/test/portal/DefaultPortal.t.sol b/contracts/test/portal/DefaultPortal.t.sol similarity index 100% rename from test/portal/DefaultPortal.t.sol rename to contracts/test/portal/DefaultPortal.t.sol diff --git a/lib/forge-std b/lib/forge-std deleted file mode 160000 index 74cfb77e..00000000 --- a/lib/forge-std +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 74cfb77e308dd188d2f58864aaf44963ae6b88b1 diff --git a/lib/openzeppelin-contracts b/lib/openzeppelin-contracts deleted file mode 160000 index fd81a96f..00000000 --- a/lib/openzeppelin-contracts +++ /dev/null @@ -1 +0,0 @@ -Subproject commit fd81a96f01cc42ef1c9a5399364968d0e07e9e90 diff --git a/lib/openzeppelin-contracts-upgradeable b/lib/openzeppelin-contracts-upgradeable deleted file mode 160000 index f34a3a7e..00000000 --- a/lib/openzeppelin-contracts-upgradeable +++ /dev/null @@ -1 +0,0 @@ -Subproject commit f34a3a7e5a1d698d87d517fda698d48286310bee diff --git a/package.json b/package.json index 6a19a174..b48624ab 100644 --- a/package.json +++ b/package.json @@ -18,58 +18,24 @@ "src" ], "scripts": { - "build": "forge build", - "check:upgradeability": "npx hardhat run script/upgrade/checkUpgradeability.ts", - "check:upgradeability:ci": "cp .env.example .env && pnpm run check:upgradeability", - "check:upgradeable": "npx hardhat run --network linea script/upgrade/checkUpgradeable.ts", - "check:upgradeable:goerli": "npx hardhat run --network linea-goerli script/upgrade/checkUpgradeable.ts", - "clean": "rm -rf lcov.info coverage artifacts cache_hardhat cache out typechain-types", - "decode": "npx hardhat run script/decode.ts", - "deploy:CorrectModule": "npx hardhat run --network linea script/deploy/deployCorrectModule.ts", - "deploy:CorrectModule:goerli": "npx hardhat run --network linea-goerli script/deploy/deployCorrectModule.ts", - "deploy:IncorrectModule": "npx hardhat run --network linea script/deploy/deployIncorrectModule.ts", - "deploy:IncorrectModule:goerli": "npx hardhat run --network linea-goerli script/deploy/deployIncorrectModule.ts", - "deploy:MsgSenderModule": "npx hardhat run --network linea script/deploy/deployMsgSenderModule.ts", - "deploy:MsgSenderModule:goerli": "npx hardhat run --network linea-goerli script/deploy/deployMsgSenderModule.ts", - "deploy:all": "npx hardhat run --network linea script/deploy/deployEverything.ts", - "deploy:all:goerli": "npx hardhat run --network linea-goerli script/deploy/deployEverything.ts", - "deploy:post": "npx hardhat run --network linea script/deploy/postDeployment.ts", - "deploy:post:goerli": "npx hardhat run --network linea-goerli script/deploy/postDeployment.ts", - "encode": "npx hardhat run script/encode.ts", - "lint": "pnpm lint:sol && eslint . && pnpm prettier:check", - "lint:sol": "pnpm solhint \"{script,src,test}/**/*.sol\"", + "lint": "eslint .", "prepare": "husky install", "prettier:check": "prettier --check \"**/*.{json,md,svg,yml,sol,ts}\"", - "prettier:write": "prettier --write \"**/*.{json,md,svg,yml,sol,ts}\"", - "reimport": "npx hardhat run --network linea script/recreateNetworkFile.ts", - "reimport:goerli": "npx hardhat run --network linea-goerli script/recreateNetworkFile.ts", - "test": "forge test", - "upgrade:all": "npx hardhat run --network linea script/upgrade/upgradeEverything.ts", - "upgrade:all:force": "npx hardhat run --network linea script/upgrade/forceUpgradeEverything.ts", - "upgrade:all:goerli": "npx hardhat run --network linea-goerli script/upgrade/upgradeEverything.ts", - "upgrade:all:goerli:force": "npx hardhat run --network linea-goerli script/upgrade/forceUpgradeEverything.ts" + "prettier:write": "prettier --write \"**/*.{json,md,svg,yml,sol,ts}\"" }, "devDependencies": { - "@nomicfoundation/hardhat-ethers": "^3.0.4", - "@nomicfoundation/hardhat-foundry": "^1.1.1", - "@nomicfoundation/hardhat-toolbox": "^3.0.0", - "@openzeppelin/hardhat-upgrades": "^2.2.1", - "@typescript-eslint/eslint-plugin": "^6.6.0", - "@typescript-eslint/parser": "^6.6.0", - "dotenv": "^16.3.1", - "eslint": "^8.49.0", - "ethers": "^6.7.1", - "hardhat": "^2.17.2", + "@typescript-eslint/eslint-plugin": "^6.7.3", + "@typescript-eslint/parser": "^6.7.3", + "eslint": "^8.50.0", "husky": "^8.0.3", - "prettier": "^2.8.8", - "prettier-plugin-solidity": "^1.1.3", - "solhint": "^3.6.2", - "solhint-plugin-prettier": "^0.0.5" + "prettier": "^2.8.8" }, "pnpm": { "overrides": { "flat@<5.0.1": ">=5.0.1", + "ejs@<3.1.7": ">=3.1.7", "tough-cookie@<4.1.3": ">=4.1.3", + "semver@>=7.0.0 <7.5.2": ">=7.5.2", "minimatch@<3.0.5": ">=3.0.5" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e170db4d..0f780f7f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,57 +1,55 @@ lockfileVersion: '6.0' -settings: - autoInstallPeers: true - excludeLinksFromLockfile: false - overrides: flat@<5.0.1: '>=5.0.1' + ejs@<3.1.7: '>=3.1.7' tough-cookie@<4.1.3: '>=4.1.3' + semver@>=7.0.0 <7.5.2: '>=7.5.2' minimatch@<3.0.5: '>=3.0.5' importers: .: + devDependencies: + '@typescript-eslint/eslint-plugin': + specifier: ^6.7.3 + version: 6.7.3(@typescript-eslint/parser@6.7.3)(eslint@8.50.0)(typescript@5.2.2) + '@typescript-eslint/parser': + specifier: ^6.7.3 + version: 6.7.3(eslint@8.50.0)(typescript@5.2.2) + eslint: + specifier: ^8.50.0 + version: 8.50.0 + husky: + specifier: ^8.0.3 + version: 8.0.3 + prettier: + specifier: ^2.8.8 + version: 2.8.8 + + contracts: devDependencies: '@nomicfoundation/hardhat-ethers': specifier: ^3.0.4 - version: 3.0.4(ethers@6.7.1)(hardhat@2.17.2) + version: 3.0.4(ethers@6.7.1)(hardhat@2.17.4) '@nomicfoundation/hardhat-foundry': specifier: ^1.1.1 - version: 1.1.1(hardhat@2.17.2) + version: 1.1.1(hardhat@2.17.4) '@nomicfoundation/hardhat-toolbox': specifier: ^3.0.0 - version: 3.0.0(@nomicfoundation/hardhat-chai-matchers@2.0.2)(@nomicfoundation/hardhat-ethers@3.0.4)(@nomicfoundation/hardhat-network-helpers@1.0.9)(@nomicfoundation/hardhat-verify@1.1.1)(@typechain/ethers-v6@0.4.3)(@typechain/hardhat@8.0.3)(@types/chai@4.3.5)(@types/mocha@10.0.1)(@types/node@20.5.7)(chai@4.3.8)(ethers@6.7.1)(hardhat-gas-reporter@1.0.9)(hardhat@2.17.2)(solidity-coverage@0.8.4)(ts-node@10.9.1)(typechain@8.3.1)(typescript@5.2.2) + version: 3.0.0(@nomicfoundation/hardhat-chai-matchers@2.0.2)(@nomicfoundation/hardhat-ethers@3.0.4)(@nomicfoundation/hardhat-network-helpers@1.0.9)(@nomicfoundation/hardhat-verify@1.1.1)(@typechain/ethers-v6@0.4.3)(@typechain/hardhat@8.0.3)(@types/chai@4.3.6)(@types/mocha@10.0.2)(@types/node@20.8.0)(chai@4.3.10)(ethers@6.7.1)(hardhat-gas-reporter@1.0.9)(hardhat@2.17.4)(solidity-coverage@0.8.5)(ts-node@10.9.1)(typechain@8.3.1)(typescript@5.2.2) '@openzeppelin/hardhat-upgrades': - specifier: ^2.2.1 - version: 2.2.1(@nomicfoundation/hardhat-ethers@3.0.4)(@nomicfoundation/hardhat-verify@1.1.1)(ethers@6.7.1)(hardhat@2.17.2) - '@typescript-eslint/eslint-plugin': - specifier: ^6.6.0 - version: 6.6.0(@typescript-eslint/parser@6.6.0)(eslint@8.49.0)(typescript@5.2.2) - '@typescript-eslint/parser': - specifier: ^6.6.0 - version: 6.6.0(eslint@8.49.0)(typescript@5.2.2) + specifier: ^2.3.1 + version: 2.3.1(@nomicfoundation/hardhat-ethers@3.0.4)(@nomicfoundation/hardhat-verify@1.1.1)(ethers@6.7.1)(hardhat@2.17.4) dotenv: specifier: ^16.3.1 version: 16.3.1 - eslint: - specifier: ^8.49.0 - version: 8.49.0 ethers: specifier: ^6.7.1 version: 6.7.1 hardhat: - specifier: ^2.17.2 - version: 2.17.2(ts-node@10.9.1)(typescript@5.2.2) - husky: - specifier: ^8.0.3 - version: 8.0.3 - prettier: - specifier: ^2.8.8 - version: 2.8.8 - prettier-plugin-solidity: - specifier: ^1.1.3 - version: 1.1.3(prettier@2.8.8) + specifier: ^2.17.4 + version: 2.17.4(ts-node@10.9.1)(typescript@5.2.2) solhint: specifier: ^3.6.2 version: 3.6.2 @@ -63,13 +61,10 @@ importers: devDependencies: '@graphprotocol/graph-cli': specifier: 0.58.0 - version: 0.58.0(@types/node@20.5.7)(node-fetch@2.7.0)(typescript@5.2.2) + version: 0.58.0(@types/node@20.8.0)(node-fetch@3.3.2)(typescript@5.2.2) '@graphprotocol/graph-ts': specifier: 0.31.0 version: 0.31.0 - matchstick-as: - specifier: 0.5.0 - version: 0.5.0 packages: @@ -172,18 +167,18 @@ packages: '@jridgewell/trace-mapping': 0.3.9 dev: true - /@eslint-community/eslint-utils@4.4.0(eslint@8.49.0): + /@eslint-community/eslint-utils@4.4.0(eslint@8.50.0): resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 dependencies: - eslint: 8.49.0 + eslint: 8.50.0 eslint-visitor-keys: 3.4.3 dev: true - /@eslint-community/regexpp@4.8.0: - resolution: {integrity: sha512-JylOEEzDiOryeUnFbQz+oViCXS0KsvR1mvHkoMiu5+UiBvy+RYX7tzlIIIEstF/gVa2tj9AQXk3dgnxv6KxhFg==} + /@eslint-community/regexpp@4.9.1: + resolution: {integrity: sha512-Y27x+MBLjXa+0JWDhykM3+JE+il3kHKAEqabfEWq3SDhZjLYb6/BHL/JKFnH3fe207JaXkyDo685Oc2Glt6ifA==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} dev: true @@ -194,7 +189,7 @@ packages: ajv: 6.12.6 debug: 4.3.4(supports-color@8.1.1) espree: 9.6.1 - globals: 13.21.0 + globals: 13.22.0 ignore: 5.2.4 import-fresh: 3.3.0 js-yaml: 4.1.0 @@ -204,8 +199,8 @@ packages: - supports-color dev: true - /@eslint/js@8.49.0: - resolution: {integrity: sha512-1S8uAY/MTJqVx0SC4epBq+N2yhuwtNwLbJYNZyhL2pO1ZVKn5HFXav5T41Ryzy9K9V7ZId2JB2oy/W4aCd9/2w==} + /@eslint/js@8.50.0: + resolution: {integrity: sha512-NCC3zz2+nvYd+Ckfh87rA47zfu2QsQpvc6k1yzTk+b9KzRj0wkGa8LSoGOXN6Zv4lRf/EIoZ80biDh9HOI+RNQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true @@ -553,25 +548,30 @@ packages: '@ethersproject/strings': 5.7.0 dev: true + /@fastify/busboy@2.0.0: + resolution: {integrity: sha512-JUFJad5lv7jxj926GPgymrWQxxjPYuJNiNjNMzqT+HiuP6Vl3dk5xzG+8sTX96np0ZAluvaMzPsjhHZ5rNuNQQ==} + engines: {node: '>=14'} + dev: true + /@float-capital/float-subgraph-uncrashable@0.0.0-internal-testing.5: resolution: {integrity: sha512-yZ0H5e3EpAYKokX/AbtplzlvSxEJY7ZfpvQyDzyODkks0hakAAlDG6fQu1SlDJMWorY7bbq1j7fCiFeTWci6TA==} hasBin: true dependencies: '@rescript/std': 9.0.0 - graphql: 16.8.0 - graphql-import-node: 0.0.5(graphql@16.8.0) + graphql: 16.8.1 + graphql-import-node: 0.0.5(graphql@16.8.1) js-yaml: 4.1.0 dev: true - /@graphprotocol/graph-cli@0.58.0(@types/node@20.5.7)(node-fetch@2.7.0)(typescript@5.2.2): + /@graphprotocol/graph-cli@0.58.0(@types/node@20.8.0)(node-fetch@3.3.2)(typescript@5.2.2): resolution: {integrity: sha512-EbdL5LZFmIMAuItQXv7LXgd7cqYQ3BdIJR2jxNr+LRL0juBAxmEz6zVvYnIUmgXoa5SB5rxE9ZT6pfe+fhbD6Q==} engines: {node: '>=14'} hasBin: true dependencies: '@float-capital/float-subgraph-uncrashable': 0.0.0-internal-testing.5 - '@oclif/core': 2.8.6(@types/node@20.5.7)(typescript@5.2.2) - '@oclif/plugin-autocomplete': 2.3.8(@types/node@20.5.7)(typescript@5.2.2) - '@oclif/plugin-not-found': 2.4.1(@types/node@20.5.7)(typescript@5.2.2) + '@oclif/core': 2.8.6(@types/node@20.8.0)(typescript@5.2.2) + '@oclif/plugin-autocomplete': 2.3.8(@types/node@20.8.0)(typescript@5.2.2) + '@oclif/plugin-not-found': 2.4.1(@types/node@20.8.0)(typescript@5.2.2) '@whatwg-node/fetch': 0.8.8 assemblyscript: 0.19.23 binary-install-raw: 0.0.13(debug@4.3.4) @@ -585,12 +585,12 @@ packages: gluegun: 5.1.2(debug@4.3.4) graphql: 15.5.0 immutable: 4.2.1 - ipfs-http-client: 55.0.0(node-fetch@2.7.0) + ipfs-http-client: 55.0.0(node-fetch@3.3.2) jayson: 4.0.0 js-yaml: 3.14.1 prettier: 1.19.1 request: 2.88.2 - semver: 7.4.0 + semver: 7.5.4 sync-request: 6.1.0 tmp-promise: 3.0.3 web3-eth-abi: 1.7.0 @@ -608,12 +608,6 @@ packages: - utf-8-validate dev: true - /@graphprotocol/graph-ts@0.27.0: - resolution: {integrity: sha512-r1SPDIZVQiGMxcY8rhFSM0y7d/xAbQf5vHMWUf59js1KgoyWpM6P3tczZqmQd7JTmeyNsDGIPzd9FeaxllsU4w==} - dependencies: - assemblyscript: 0.19.10 - dev: true - /@graphprotocol/graph-ts@0.31.0: resolution: {integrity: sha512-xreRVM6ho2BtolyOh2flDkNoGZximybnzUnF53zJVp0+Ed0KnAlO1/KOCUYw06euVI9tk0c9nA2Z/D5SIQV2Rg==} dependencies: @@ -889,7 +883,7 @@ packages: - utf-8-validate dev: true - /@nomicfoundation/hardhat-chai-matchers@2.0.2(@nomicfoundation/hardhat-ethers@3.0.4)(chai@4.3.8)(ethers@6.7.1)(hardhat@2.17.2): + /@nomicfoundation/hardhat-chai-matchers@2.0.2(@nomicfoundation/hardhat-ethers@3.0.4)(chai@4.3.10)(ethers@6.7.1)(hardhat@2.17.4): resolution: {integrity: sha512-9Wu9mRtkj0U9ohgXYFbB/RQDa+PcEdyBm2suyEtsJf3PqzZEEjLUZgWnMjlFhATMk/fp3BjmnYVPrwl+gr8oEw==} peerDependencies: '@nomicfoundation/hardhat-ethers': ^3.0.0 @@ -897,17 +891,17 @@ packages: ethers: ^6.1.0 hardhat: ^2.9.4 dependencies: - '@nomicfoundation/hardhat-ethers': 3.0.4(ethers@6.7.1)(hardhat@2.17.2) - '@types/chai-as-promised': 7.1.5 - chai: 4.3.8 - chai-as-promised: 7.1.1(chai@4.3.8) + '@nomicfoundation/hardhat-ethers': 3.0.4(ethers@6.7.1)(hardhat@2.17.4) + '@types/chai-as-promised': 7.1.6 + chai: 4.3.10 + chai-as-promised: 7.1.1(chai@4.3.10) deep-eql: 4.1.3 ethers: 6.7.1 - hardhat: 2.17.2(ts-node@10.9.1)(typescript@5.2.2) + hardhat: 2.17.4(ts-node@10.9.1)(typescript@5.2.2) ordinal: 1.0.3 dev: true - /@nomicfoundation/hardhat-ethers@3.0.4(ethers@6.7.1)(hardhat@2.17.2): + /@nomicfoundation/hardhat-ethers@3.0.4(ethers@6.7.1)(hardhat@2.17.4): resolution: {integrity: sha512-k9qbLoY7qn6C6Y1LI0gk2kyHXil2Tauj4kGzQ8pgxYXIGw8lWn8tuuL72E11CrlKaXRUvOgF0EXrv/msPI2SbA==} peerDependencies: ethers: ^6.1.0 @@ -915,31 +909,31 @@ packages: dependencies: debug: 4.3.4(supports-color@8.1.1) ethers: 6.7.1 - hardhat: 2.17.2(ts-node@10.9.1)(typescript@5.2.2) + hardhat: 2.17.4(ts-node@10.9.1)(typescript@5.2.2) lodash.isequal: 4.5.0 transitivePeerDependencies: - supports-color dev: true - /@nomicfoundation/hardhat-foundry@1.1.1(hardhat@2.17.2): + /@nomicfoundation/hardhat-foundry@1.1.1(hardhat@2.17.4): resolution: {integrity: sha512-cXGCBHAiXas9Pg9MhMOpBVQCkWRYoRFG7GJJAph+sdQsfd22iRs5U5Vs9XmpGEQd1yEvYISQZMeE68Nxj65iUQ==} peerDependencies: hardhat: ^2.17.2 dependencies: chalk: 2.4.2 - hardhat: 2.17.2(ts-node@10.9.1)(typescript@5.2.2) + hardhat: 2.17.4(ts-node@10.9.1)(typescript@5.2.2) dev: true - /@nomicfoundation/hardhat-network-helpers@1.0.9(hardhat@2.17.2): + /@nomicfoundation/hardhat-network-helpers@1.0.9(hardhat@2.17.4): resolution: {integrity: sha512-OXWCv0cHpwLUO2u7bFxBna6dQtCC2Gg/aN/KtJLO7gmuuA28vgmVKYFRCDUqrbjujzgfwQ2aKyZ9Y3vSmDqS7Q==} peerDependencies: hardhat: ^2.9.5 dependencies: ethereumjs-util: 7.1.5 - hardhat: 2.17.2(ts-node@10.9.1)(typescript@5.2.2) + hardhat: 2.17.4(ts-node@10.9.1)(typescript@5.2.2) dev: true - /@nomicfoundation/hardhat-toolbox@3.0.0(@nomicfoundation/hardhat-chai-matchers@2.0.2)(@nomicfoundation/hardhat-ethers@3.0.4)(@nomicfoundation/hardhat-network-helpers@1.0.9)(@nomicfoundation/hardhat-verify@1.1.1)(@typechain/ethers-v6@0.4.3)(@typechain/hardhat@8.0.3)(@types/chai@4.3.5)(@types/mocha@10.0.1)(@types/node@20.5.7)(chai@4.3.8)(ethers@6.7.1)(hardhat-gas-reporter@1.0.9)(hardhat@2.17.2)(solidity-coverage@0.8.4)(ts-node@10.9.1)(typechain@8.3.1)(typescript@5.2.2): + /@nomicfoundation/hardhat-toolbox@3.0.0(@nomicfoundation/hardhat-chai-matchers@2.0.2)(@nomicfoundation/hardhat-ethers@3.0.4)(@nomicfoundation/hardhat-network-helpers@1.0.9)(@nomicfoundation/hardhat-verify@1.1.1)(@typechain/ethers-v6@0.4.3)(@typechain/hardhat@8.0.3)(@types/chai@4.3.6)(@types/mocha@10.0.2)(@types/node@20.8.0)(chai@4.3.10)(ethers@6.7.1)(hardhat-gas-reporter@1.0.9)(hardhat@2.17.4)(solidity-coverage@0.8.5)(ts-node@10.9.1)(typechain@8.3.1)(typescript@5.2.2): resolution: {integrity: sha512-MsteDXd0UagMksqm9KvcFG6gNKYNa3GGNCy73iQ6bEasEgg2v8Qjl6XA5hjs8o5UD5A3153B6W2BIVJ8SxYUtA==} peerDependencies: '@nomicfoundation/hardhat-chai-matchers': ^2.0.0 @@ -960,26 +954,26 @@ packages: typechain: ^8.2.0 typescript: '>=4.5.0' dependencies: - '@nomicfoundation/hardhat-chai-matchers': 2.0.2(@nomicfoundation/hardhat-ethers@3.0.4)(chai@4.3.8)(ethers@6.7.1)(hardhat@2.17.2) - '@nomicfoundation/hardhat-ethers': 3.0.4(ethers@6.7.1)(hardhat@2.17.2) - '@nomicfoundation/hardhat-network-helpers': 1.0.9(hardhat@2.17.2) - '@nomicfoundation/hardhat-verify': 1.1.1(hardhat@2.17.2) + '@nomicfoundation/hardhat-chai-matchers': 2.0.2(@nomicfoundation/hardhat-ethers@3.0.4)(chai@4.3.10)(ethers@6.7.1)(hardhat@2.17.4) + '@nomicfoundation/hardhat-ethers': 3.0.4(ethers@6.7.1)(hardhat@2.17.4) + '@nomicfoundation/hardhat-network-helpers': 1.0.9(hardhat@2.17.4) + '@nomicfoundation/hardhat-verify': 1.1.1(hardhat@2.17.4) '@typechain/ethers-v6': 0.4.3(ethers@6.7.1)(typechain@8.3.1)(typescript@5.2.2) - '@typechain/hardhat': 8.0.3(@typechain/ethers-v6@0.4.3)(ethers@6.7.1)(hardhat@2.17.2)(typechain@8.3.1) - '@types/chai': 4.3.5 - '@types/mocha': 10.0.1 - '@types/node': 20.5.7 - chai: 4.3.8 + '@typechain/hardhat': 8.0.3(@typechain/ethers-v6@0.4.3)(ethers@6.7.1)(hardhat@2.17.4)(typechain@8.3.1) + '@types/chai': 4.3.6 + '@types/mocha': 10.0.2 + '@types/node': 20.8.0 + chai: 4.3.10 ethers: 6.7.1 - hardhat: 2.17.2(ts-node@10.9.1)(typescript@5.2.2) - hardhat-gas-reporter: 1.0.9(hardhat@2.17.2) - solidity-coverage: 0.8.4(hardhat@2.17.2) - ts-node: 10.9.1(@types/node@20.5.7)(typescript@5.2.2) + hardhat: 2.17.4(ts-node@10.9.1)(typescript@5.2.2) + hardhat-gas-reporter: 1.0.9(hardhat@2.17.4) + solidity-coverage: 0.8.5(hardhat@2.17.4) + ts-node: 10.9.1(@types/node@20.8.0)(typescript@5.2.2) typechain: 8.3.1(typescript@5.2.2) typescript: 5.2.2 dev: true - /@nomicfoundation/hardhat-verify@1.1.1(hardhat@2.17.2): + /@nomicfoundation/hardhat-verify@1.1.1(hardhat@2.17.4): resolution: {integrity: sha512-9QsTYD7pcZaQFEA3tBb/D/oCStYDiEVDN7Dxeo/4SCyHRSm86APypxxdOMEPlGmXsAvd+p1j/dTODcpxb8aztA==} peerDependencies: hardhat: ^2.0.4 @@ -989,11 +983,11 @@ packages: cbor: 8.1.0 chalk: 2.4.2 debug: 4.3.4(supports-color@8.1.1) - hardhat: 2.17.2(ts-node@10.9.1)(typescript@5.2.2) + hardhat: 2.17.4(ts-node@10.9.1)(typescript@5.2.2) lodash.clonedeep: 4.5.0 semver: 6.3.1 table: 6.8.1 - undici: 5.23.0 + undici: 5.25.3 transitivePeerDependencies: - supports-color dev: true @@ -1104,7 +1098,7 @@ packages: '@nomicfoundation/solidity-analyzer-win32-x64-msvc': 0.1.1 dev: true - /@oclif/core@2.15.0(@types/node@20.5.7)(typescript@5.2.2): + /@oclif/core@2.15.0(@types/node@20.8.0)(typescript@5.2.2): resolution: {integrity: sha512-fNEMG5DzJHhYmI3MgpByTvltBOMyFcnRIUMxbiz2ai8rhaYgaTHMG3Q38HcosfIvtw9nCjxpcQtC8MN8QtVCcA==} engines: {node: '>=14.0.0'} dependencies: @@ -1131,7 +1125,7 @@ packages: strip-ansi: 6.0.1 supports-color: 8.1.1 supports-hyperlinks: 2.3.0 - ts-node: 10.9.1(@types/node@20.5.7)(typescript@5.2.2) + ts-node: 10.9.1(@types/node@20.8.0)(typescript@5.2.2) tslib: 2.6.2 widest-line: 3.1.0 wordwrap: 1.0.0 @@ -1143,7 +1137,7 @@ packages: - typescript dev: true - /@oclif/core@2.8.6(@types/node@20.5.7)(typescript@5.2.2): + /@oclif/core@2.8.6(@types/node@20.8.0)(typescript@5.2.2): resolution: {integrity: sha512-1QlPaHMhOORySCXkQyzjsIsy2GYTilOw3LkjeHkCgsPJQjAT4IclVytJusWktPbYNys9O+O4V23J44yomQvnBQ==} engines: {node: '>=14.0.0'} dependencies: @@ -1171,7 +1165,7 @@ packages: strip-ansi: 6.0.1 supports-color: 8.1.1 supports-hyperlinks: 2.3.0 - ts-node: 10.9.1(@types/node@20.5.7)(typescript@5.2.2) + ts-node: 10.9.1(@types/node@20.8.0)(typescript@5.2.2) tslib: 2.6.2 widest-line: 3.1.0 wordwrap: 1.0.0 @@ -1183,11 +1177,11 @@ packages: - typescript dev: true - /@oclif/plugin-autocomplete@2.3.8(@types/node@20.5.7)(typescript@5.2.2): + /@oclif/plugin-autocomplete@2.3.8(@types/node@20.8.0)(typescript@5.2.2): resolution: {integrity: sha512-cmRPss9OQxz8sRoaw5C/4t/Da7eBEIDJWKRsuzUSQBcPJCN3kTgjp24VTjPHT3j86197s/qkjCRct+3P0IGArg==} engines: {node: '>=12.0.0'} dependencies: - '@oclif/core': 2.15.0(@types/node@20.5.7)(typescript@5.2.2) + '@oclif/core': 2.15.0(@types/node@20.8.0)(typescript@5.2.2) chalk: 4.1.2 debug: 4.3.4(supports-color@8.1.1) transitivePeerDependencies: @@ -1198,11 +1192,11 @@ packages: - typescript dev: true - /@oclif/plugin-not-found@2.4.1(@types/node@20.5.7)(typescript@5.2.2): + /@oclif/plugin-not-found@2.4.1(@types/node@20.8.0)(typescript@5.2.2): resolution: {integrity: sha512-LqW7qpw5Q8ploRiup2jEIMQJXcxHP1tpwj45GApKQMe7GRdGdRdjBT9Tu+U2tdEgMqgMplAIhOsYCx2nc2nMSw==} engines: {node: '>=12.0.0'} dependencies: - '@oclif/core': 2.15.0(@types/node@20.5.7)(typescript@5.2.2) + '@oclif/core': 2.15.0(@types/node@20.8.0)(typescript@5.2.2) chalk: 4.1.2 fast-levenshtein: 3.0.0 transitivePeerDependencies: @@ -1240,8 +1234,8 @@ packages: - encoding dev: true - /@openzeppelin/hardhat-upgrades@2.2.1(@nomicfoundation/hardhat-ethers@3.0.4)(@nomicfoundation/hardhat-verify@1.1.1)(ethers@6.7.1)(hardhat@2.17.2): - resolution: {integrity: sha512-Amlk2nhNpCfTCEovbqyarwBv4ZWmuiHHIcYfGy+FCSkkuSvQNVEJHoSl83Vgag+QhMtubdoggkYPqayxU46w1Q==} + /@openzeppelin/hardhat-upgrades@2.3.1(@nomicfoundation/hardhat-ethers@3.0.4)(@nomicfoundation/hardhat-verify@1.1.1)(ethers@6.7.1)(hardhat@2.17.4): + resolution: {integrity: sha512-4QkhWIzvW/JaDp3ZupWnoJsUhkh0aXNSndsbqPPgsgEWDu7TME1XrXSb/3cNDCoyt/7KpcEl1XOwhyOYgp0bxg==} hasBin: true peerDependencies: '@nomicfoundation/hardhat-ethers': ^3.0.0 @@ -1252,17 +1246,17 @@ packages: '@nomicfoundation/hardhat-verify': optional: true dependencies: - '@nomicfoundation/hardhat-ethers': 3.0.4(ethers@6.7.1)(hardhat@2.17.2) - '@nomicfoundation/hardhat-verify': 1.1.1(hardhat@2.17.2) + '@nomicfoundation/hardhat-ethers': 3.0.4(ethers@6.7.1)(hardhat@2.17.4) + '@nomicfoundation/hardhat-verify': 1.1.1(hardhat@2.17.4) '@openzeppelin/defender-admin-client': 1.48.0(debug@4.3.4) '@openzeppelin/defender-base-client': 1.48.0(debug@4.3.4) '@openzeppelin/platform-deploy-client': 0.10.0(debug@4.3.4) - '@openzeppelin/upgrades-core': 1.28.0 + '@openzeppelin/upgrades-core': 1.30.0 chalk: 4.1.2 debug: 4.3.4(supports-color@8.1.1) ethereumjs-util: 7.1.5 ethers: 6.7.1 - hardhat: 2.17.2(ts-node@10.9.1)(typescript@5.2.2) + hardhat: 2.17.4(ts-node@10.9.1)(typescript@5.2.2) proper-lockfile: 4.1.2 undici: 5.23.0 transitivePeerDependencies: @@ -1286,8 +1280,8 @@ packages: - encoding dev: true - /@openzeppelin/upgrades-core@1.28.0: - resolution: {integrity: sha512-8RKlyg98Adv+46GxDaR0awL3R8bVCcQ27DcSEwrgWOp6siHh8sZg4a2l+2dhPl1510S6uBfhHSydMH5VX2BV5g==} + /@openzeppelin/upgrades-core@1.30.0: + resolution: {integrity: sha512-guW3EaTp/cet/O1uAmEcupHhtEGMzzYGsru2LMllFL5INWmRfeCHSVQu4TjkCLpoYHJoOIGSvosjoCyJL4oEaQ==} hasBin: true dependencies: cbor: 9.0.1 @@ -1528,7 +1522,7 @@ packages: typescript: 5.2.2 dev: true - /@typechain/hardhat@8.0.3(@typechain/ethers-v6@0.4.3)(ethers@6.7.1)(hardhat@2.17.2)(typechain@8.3.1): + /@typechain/hardhat@8.0.3(@typechain/ethers-v6@0.4.3)(ethers@6.7.1)(hardhat@2.17.4)(typechain@8.3.1): resolution: {integrity: sha512-MytSmJJn+gs7Mqrpt/gWkTCOpOQ6ZDfRrRT2gtZL0rfGe4QrU4x9ZdW15fFbVM/XTa+5EsKiOMYXhRABibNeng==} peerDependencies: '@typechain/ethers-v6': ^0.4.3 @@ -1539,7 +1533,7 @@ packages: '@typechain/ethers-v6': 0.4.3(ethers@6.7.1)(typechain@8.3.1)(typescript@5.2.2) ethers: 6.7.1 fs-extra: 9.1.0 - hardhat: 2.17.2(ts-node@10.9.1)(typescript@5.2.2) + hardhat: 2.17.4(ts-node@10.9.1)(typescript@5.2.2) typechain: 8.3.1(typescript@5.2.2) dev: true @@ -1555,14 +1549,14 @@ packages: '@types/node': 20.5.7 dev: true - /@types/chai-as-promised@7.1.5: - resolution: {integrity: sha512-jStwss93SITGBwt/niYrkf2C+/1KTeZCZl1LaeezTlqppAKeoQC7jxyqYuP72sxBGKCIbw7oHgbYssIRzT5FCQ==} + /@types/chai-as-promised@7.1.6: + resolution: {integrity: sha512-cQLhk8fFarRVZAXUQV1xEnZgMoPxqKojBvRkqPCKPQCzEhpbbSKl1Uu75kDng7k5Ln6LQLUmNBjLlFthCgm1NA==} dependencies: - '@types/chai': 4.3.5 + '@types/chai': 4.3.6 dev: true - /@types/chai@4.3.5: - resolution: {integrity: sha512-mEo1sAde+UCE6b2hxn332f1g1E8WfYRu6p5SvTKr2ZKC1f7gFJXk4h5PyGP9Dt6gCaG8y8XhwnXWC6Iy2cmBng==} + /@types/chai@4.3.6: + resolution: {integrity: sha512-VOVRLM1mBxIRxydiViqPcKn6MIxZytrbMpd6RJLIWKxUNr3zux8no0Oc7kJx0WAPIitgZ0gkrDS+btlqQpubpw==} dev: true /@types/cli-progress@3.11.2: @@ -1593,11 +1587,11 @@ packages: resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} dependencies: '@types/minimatch': 5.1.2 - '@types/node': 20.5.7 + '@types/node': 20.8.0 dev: true - /@types/json-schema@7.0.12: - resolution: {integrity: sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==} + /@types/json-schema@7.0.13: + resolution: {integrity: sha512-RbSSoHliUbnXj3ny0CNFOoxrIDV6SUGyStHsvDqosw6CkdPV8TtWGlfecuK4ToyMEAql6pzNxgCFKanovUzlgQ==} dev: true /@types/long@4.0.2: @@ -1616,8 +1610,8 @@ packages: resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==} dev: true - /@types/mocha@10.0.1: - resolution: {integrity: sha512-/fvYntiO1GeICvqbQ3doGDIP97vWmvFt83GKguJ6prmQM2iXZfFcq6YE8KteFyRtX2/h5Hf91BYvPodJKFYv5Q==} + /@types/mocha@10.0.2: + resolution: {integrity: sha512-NaHL0+0lLNhX6d9rs+NSt97WH/gIlRHmszXbQ/8/MV/eVcFNdeJ/GYhrFuUc8K7WuPhRhTSdMkCp8VMzhUq85w==} dev: true /@types/node@10.17.60: @@ -1636,6 +1630,10 @@ packages: resolution: {integrity: sha512-dP7f3LdZIysZnmvP3ANJYTSwg+wLLl8p7RqniVlV7j+oXSXAbt9h0WIBFmJy5inWZoX9wZN6eXx+YXd9Rh3RBA==} dev: true + /@types/node@20.8.0: + resolution: {integrity: sha512-LzcWltT83s1bthcvjBmiBvGJiiUe84NWRHkw+ZV6Fr41z2FbIzvc815dk2nQ3RAKMuN2fkenM/z3Xv2QzEpYxQ==} + dev: true + /@types/node@8.10.66: resolution: {integrity: sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw==} dev: true @@ -1671,8 +1669,8 @@ packages: '@types/node': 20.5.7 dev: true - /@types/semver@7.5.1: - resolution: {integrity: sha512-cJRQXpObxfNKkFAZbJl2yjWtJCqELQIdShsogr1d2MilP8dKD9TE/nEKHkJgUNHdGKCQaf9HbIynuV2csLGVLg==} + /@types/semver@7.5.3: + resolution: {integrity: sha512-OxepLK9EuNEIPxWNME+C6WwbRAOOI2o2BaQEGzz5Lu2e4Z5eDnEo+/aVEDMIXywoJitJ7xWd641wrGLZdtwRyw==} dev: true /@types/ws@7.4.7: @@ -1681,8 +1679,8 @@ packages: '@types/node': 20.5.7 dev: true - /@typescript-eslint/eslint-plugin@6.6.0(@typescript-eslint/parser@6.6.0)(eslint@8.49.0)(typescript@5.2.2): - resolution: {integrity: sha512-CW9YDGTQnNYMIo5lMeuiIG08p4E0cXrXTbcZ2saT/ETE7dWUrNxlijsQeU04qAAKkILiLzdQz+cGFxCJjaZUmA==} + /@typescript-eslint/eslint-plugin@6.7.3(@typescript-eslint/parser@6.7.3)(eslint@8.50.0)(typescript@5.2.2): + resolution: {integrity: sha512-vntq452UHNltxsaaN+L9WyuMch8bMd9CqJ3zhzTPXXidwbf5mqqKCVXEuvRZUqLJSTLeWE65lQwyXsRGnXkCTA==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha @@ -1692,14 +1690,14 @@ packages: typescript: optional: true dependencies: - '@eslint-community/regexpp': 4.8.0 - '@typescript-eslint/parser': 6.6.0(eslint@8.49.0)(typescript@5.2.2) - '@typescript-eslint/scope-manager': 6.6.0 - '@typescript-eslint/type-utils': 6.6.0(eslint@8.49.0)(typescript@5.2.2) - '@typescript-eslint/utils': 6.6.0(eslint@8.49.0)(typescript@5.2.2) - '@typescript-eslint/visitor-keys': 6.6.0 + '@eslint-community/regexpp': 4.9.1 + '@typescript-eslint/parser': 6.7.3(eslint@8.50.0)(typescript@5.2.2) + '@typescript-eslint/scope-manager': 6.7.3 + '@typescript-eslint/type-utils': 6.7.3(eslint@8.50.0)(typescript@5.2.2) + '@typescript-eslint/utils': 6.7.3(eslint@8.50.0)(typescript@5.2.2) + '@typescript-eslint/visitor-keys': 6.7.3 debug: 4.3.4(supports-color@8.1.1) - eslint: 8.49.0 + eslint: 8.50.0 graphemer: 1.4.0 ignore: 5.2.4 natural-compare: 1.4.0 @@ -1710,8 +1708,8 @@ packages: - supports-color dev: true - /@typescript-eslint/parser@6.6.0(eslint@8.49.0)(typescript@5.2.2): - resolution: {integrity: sha512-setq5aJgUwtzGrhW177/i+DMLqBaJbdwGj2CPIVFFLE0NCliy5ujIdLHd2D1ysmlmsjdL2GWW+hR85neEfc12w==} + /@typescript-eslint/parser@6.7.3(eslint@8.50.0)(typescript@5.2.2): + resolution: {integrity: sha512-TlutE+iep2o7R8Lf+yoer3zU6/0EAUc8QIBB3GYBc1KGz4c4TRm83xwXUZVPlZ6YCLss4r77jbu6j3sendJoiQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -1720,27 +1718,27 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 6.6.0 - '@typescript-eslint/types': 6.6.0 - '@typescript-eslint/typescript-estree': 6.6.0(typescript@5.2.2) - '@typescript-eslint/visitor-keys': 6.6.0 + '@typescript-eslint/scope-manager': 6.7.3 + '@typescript-eslint/types': 6.7.3 + '@typescript-eslint/typescript-estree': 6.7.3(typescript@5.2.2) + '@typescript-eslint/visitor-keys': 6.7.3 debug: 4.3.4(supports-color@8.1.1) - eslint: 8.49.0 + eslint: 8.50.0 typescript: 5.2.2 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/scope-manager@6.6.0: - resolution: {integrity: sha512-pT08u5W/GT4KjPUmEtc2kSYvrH8x89cVzkA0Sy2aaOUIw6YxOIjA8ilwLr/1fLjOedX1QAuBpG9XggWqIIfERw==} + /@typescript-eslint/scope-manager@6.7.3: + resolution: {integrity: sha512-wOlo0QnEou9cHO2TdkJmzF7DFGvAKEnB82PuPNHpT8ZKKaZu6Bm63ugOTn9fXNJtvuDPanBc78lGUGGytJoVzQ==} engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 6.6.0 - '@typescript-eslint/visitor-keys': 6.6.0 + '@typescript-eslint/types': 6.7.3 + '@typescript-eslint/visitor-keys': 6.7.3 dev: true - /@typescript-eslint/type-utils@6.6.0(eslint@8.49.0)(typescript@5.2.2): - resolution: {integrity: sha512-8m16fwAcEnQc69IpeDyokNO+D5spo0w1jepWWY2Q6y5ZKNuj5EhVQXjtVAeDDqvW6Yg7dhclbsz6rTtOvcwpHg==} + /@typescript-eslint/type-utils@6.7.3(eslint@8.50.0)(typescript@5.2.2): + resolution: {integrity: sha512-Fc68K0aTDrKIBvLnKTZ5Pf3MXK495YErrbHb1R6aTpfK5OdSFj0rVN7ib6Tx6ePrZ2gsjLqr0s98NG7l96KSQw==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -1749,23 +1747,23 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 6.6.0(typescript@5.2.2) - '@typescript-eslint/utils': 6.6.0(eslint@8.49.0)(typescript@5.2.2) + '@typescript-eslint/typescript-estree': 6.7.3(typescript@5.2.2) + '@typescript-eslint/utils': 6.7.3(eslint@8.50.0)(typescript@5.2.2) debug: 4.3.4(supports-color@8.1.1) - eslint: 8.49.0 + eslint: 8.50.0 ts-api-utils: 1.0.3(typescript@5.2.2) typescript: 5.2.2 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/types@6.6.0: - resolution: {integrity: sha512-CB6QpJQ6BAHlJXdwUmiaXDBmTqIE2bzGTDLADgvqtHWuhfNP3rAOK7kAgRMAET5rDRr9Utt+qAzRBdu3AhR3sg==} + /@typescript-eslint/types@6.7.3: + resolution: {integrity: sha512-4g+de6roB2NFcfkZb439tigpAMnvEIg3rIjWQ+EM7IBaYt/CdJt6em9BJ4h4UpdgaBWdmx2iWsafHTrqmgIPNw==} engines: {node: ^16.0.0 || >=18.0.0} dev: true - /@typescript-eslint/typescript-estree@6.6.0(typescript@5.2.2): - resolution: {integrity: sha512-hMcTQ6Al8MP2E6JKBAaSxSVw5bDhdmbCEhGW/V8QXkb9oNsFkA4SBuOMYVPxD3jbtQ4R/vSODBsr76R6fP3tbA==} + /@typescript-eslint/typescript-estree@6.7.3(typescript@5.2.2): + resolution: {integrity: sha512-YLQ3tJoS4VxLFYHTw21oe1/vIZPRqAO91z6Uv0Ss2BKm/Ag7/RVQBcXTGcXhgJMdA4U+HrKuY5gWlJlvoaKZ5g==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: typescript: '*' @@ -1773,8 +1771,8 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': 6.6.0 - '@typescript-eslint/visitor-keys': 6.6.0 + '@typescript-eslint/types': 6.7.3 + '@typescript-eslint/visitor-keys': 6.7.3 debug: 4.3.4(supports-color@8.1.1) globby: 11.1.0 is-glob: 4.0.3 @@ -1785,30 +1783,30 @@ packages: - supports-color dev: true - /@typescript-eslint/utils@6.6.0(eslint@8.49.0)(typescript@5.2.2): - resolution: {integrity: sha512-mPHFoNa2bPIWWglWYdR0QfY9GN0CfvvXX1Sv6DlSTive3jlMTUy+an67//Gysc+0Me9pjitrq0LJp0nGtLgftw==} + /@typescript-eslint/utils@6.7.3(eslint@8.50.0)(typescript@5.2.2): + resolution: {integrity: sha512-vzLkVder21GpWRrmSR9JxGZ5+ibIUSudXlW52qeKpzUEQhRSmyZiVDDj3crAth7+5tmN1ulvgKaCU2f/bPRCzg==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.49.0) - '@types/json-schema': 7.0.12 - '@types/semver': 7.5.1 - '@typescript-eslint/scope-manager': 6.6.0 - '@typescript-eslint/types': 6.6.0 - '@typescript-eslint/typescript-estree': 6.6.0(typescript@5.2.2) - eslint: 8.49.0 + '@eslint-community/eslint-utils': 4.4.0(eslint@8.50.0) + '@types/json-schema': 7.0.13 + '@types/semver': 7.5.3 + '@typescript-eslint/scope-manager': 6.7.3 + '@typescript-eslint/types': 6.7.3 + '@typescript-eslint/typescript-estree': 6.7.3(typescript@5.2.2) + eslint: 8.50.0 semver: 7.5.4 transitivePeerDependencies: - supports-color - typescript dev: true - /@typescript-eslint/visitor-keys@6.6.0: - resolution: {integrity: sha512-L61uJT26cMOfFQ+lMZKoJNbAEckLe539VhTxiGHrWl5XSKQgA0RTBZJW2HFPy5T0ZvPVSD93QsrTKDkfNwJGyQ==} + /@typescript-eslint/visitor-keys@6.7.3: + resolution: {integrity: sha512-HEVXkU9IB+nk9o63CeICMHxFWbHWr3E1mpilIQBe9+7L/lH97rleFLVtYsfnWB+JVMaiFnEaxvknvmIzX+CqVg==} engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 6.6.0 + '@typescript-eslint/types': 6.7.3 eslint-visitor-keys: 3.4.3 dev: true @@ -1967,11 +1965,6 @@ packages: dev: true optional: true - /ansi-colors@3.2.3: - resolution: {integrity: sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==} - engines: {node: '>=6'} - dev: true - /ansi-colors@4.1.1: resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==} engines: {node: '>=6'} @@ -2114,17 +2107,6 @@ packages: get-intrinsic: 1.2.1 dev: true - /array.prototype.reduce@1.0.6: - resolution: {integrity: sha512-UW+Mz8LG/sPSU8jRDCjVr6J/ZKAGpHfwrZ6kWTG5qCxIEiXdVshqGnu5vEZA8S1y6X4aCSbQZ0/EEsfvEvBiSg==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.22.1 - es-array-method-boxes-properly: 1.0.0 - is-string: 1.0.7 - dev: true - /arraybuffer.prototype.slice@1.0.1: resolution: {integrity: sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw==} engines: {node: '>= 0.4'} @@ -2245,6 +2227,16 @@ packages: - debug dev: true + /axios@1.5.1: + resolution: {integrity: sha512-Q28iYCWzNHjAm+yEAot5QaAMxhMghWLFVf7rRdwhUI+c2jix2DUXjAHXVi+s1ibs3mjPO/cCgbA++3BjD0vP/A==} + dependencies: + follow-redirects: 1.15.3 + form-data: 4.0.0 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + dev: true + /balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} dev: true @@ -2457,11 +2449,6 @@ packages: engines: {node: '>=6'} dev: true - /camelcase@5.3.1: - resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} - engines: {node: '>=6'} - dev: true - /camelcase@6.3.0: resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} engines: {node: '>=10'} @@ -2508,23 +2495,23 @@ packages: hasBin: true dev: true - /chai-as-promised@7.1.1(chai@4.3.8): + /chai-as-promised@7.1.1(chai@4.3.10): resolution: {integrity: sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA==} peerDependencies: chai: '>= 2.1.2 < 5' dependencies: - chai: 4.3.8 - check-error: 1.0.2 + chai: 4.3.10 + check-error: 1.0.3 dev: true - /chai@4.3.8: - resolution: {integrity: sha512-vX4YvVVtxlfSZ2VecZgFUTU5qPCYsobVI2O9FmwEXBhDigYGQA6jRXCycIs1yJnnWbZ6/+a2zNIF5DfVCcJBFQ==} + /chai@4.3.10: + resolution: {integrity: sha512-0UXG04VuVbruMUYbJ6JctvH0YnC/4q3/AkT18q4NaITo91CUm0liMS9VqzT9vZhVQ/1eqPanMWjBM+Juhfb/9g==} engines: {node: '>=4'} dependencies: assertion-error: 1.1.0 - check-error: 1.0.2 + check-error: 1.0.3 deep-eql: 4.1.3 - get-func-name: 2.0.0 + get-func-name: 2.0.2 loupe: 2.3.6 pathval: 1.1.1 type-detect: 4.0.8 @@ -2559,23 +2546,10 @@ packages: resolution: {integrity: sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==} dev: true - /check-error@1.0.2: - resolution: {integrity: sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==} - dev: true - - /chokidar@3.3.0: - resolution: {integrity: sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A==} - engines: {node: '>= 8.10.0'} + /check-error@1.0.3: + resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} dependencies: - anymatch: 3.1.3 - braces: 3.0.2 - glob-parent: 5.1.2 - is-binary-path: 2.1.0 - is-glob: 4.0.3 - normalize-path: 3.0.0 - readdirp: 3.2.0 - optionalDependencies: - fsevents: 2.1.3 + get-func-name: 2.0.2 dev: true /chokidar@3.5.3: @@ -2676,14 +2650,6 @@ packages: colors: 1.4.0 dev: true - /cliui@5.0.0: - resolution: {integrity: sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==} - dependencies: - string-width: 3.1.0 - strip-ansi: 5.2.0 - wrap-ansi: 5.1.0 - dev: true - /cliui@7.0.4: resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} dependencies: @@ -2870,11 +2836,16 @@ packages: assert-plus: 1.0.0 dev: true + /data-uri-to-buffer@4.0.1: + resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} + engines: {node: '>= 12'} + dev: true + /death@1.1.0: resolution: {integrity: sha512-vsV6S4KVHvTGxbEcij7hkWRv0It+sGGWVOM67dQde/o5Xjnr+KmLjxWJii2uEObIrt1CcM9w0Yaovx+iOlIL+w==} dev: true - /debug@3.2.6(supports-color@6.0.0): + /debug@3.2.6: resolution: {integrity: sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==} deprecated: Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797) peerDependencies: @@ -2884,7 +2855,6 @@ packages: optional: true dependencies: ms: 2.1.3 - supports-color: 6.0.0 dev: true /debug@4.3.4(supports-color@8.1.1): @@ -2900,11 +2870,6 @@ packages: supports-color: 8.1.1 dev: true - /decamelize@1.2.0: - resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} - engines: {node: '>=0.10.0'} - dev: true - /decamelize@4.0.0: resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==} engines: {node: '>=10'} @@ -2965,11 +2930,6 @@ packages: - supports-color dev: true - /diff@3.5.0: - resolution: {integrity: sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==} - engines: {node: '>=0.3.1'} - dev: true - /diff@4.0.2: resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} engines: {node: '>=0.3.1'} @@ -2993,11 +2953,11 @@ packages: path-type: 4.0.0 dev: true - /dns-over-http-resolver@1.2.3(node-fetch@2.7.0): + /dns-over-http-resolver@1.2.3(node-fetch@3.3.2): resolution: {integrity: sha512-miDiVSI6KSNbi4SVifzO/reD8rMnxgrlnkrlkugOLQpWQTe2qMdHsZp5DmfKjxNE+/T3VAAYLQUZMv9SMr6+AA==} dependencies: debug: 4.3.4(supports-color@8.1.1) - native-fetch: 3.0.0(node-fetch@2.7.0) + native-fetch: 3.0.0(node-fetch@3.3.2) receptacle: 1.3.2 transitivePeerDependencies: - node-fetch @@ -3016,7 +2976,7 @@ packages: engines: {node: '>= 0.8'} dependencies: JSONStream: 1.3.2 - debug: 3.2.6(supports-color@6.0.0) + debug: 3.2.6 readable-stream: 1.0.34 split-ca: 1.0.1 transitivePeerDependencies: @@ -3053,14 +3013,6 @@ packages: safer-buffer: 2.1.2 dev: true - /ejs@3.1.6: - resolution: {integrity: sha512-9lt9Zse4hPucPkoP7FHDF0LQAlGyF9JVpnClFLFH3aSSbxmyoqINRpp/9wePWJTUl4KOQwRL72Iw3InHPDkoGw==} - engines: {node: '>=0.10.0'} - hasBin: true - dependencies: - jake: 10.8.7 - dev: true - /ejs@3.1.9: resolution: {integrity: sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==} engines: {node: '>=0.10.0'} @@ -3088,10 +3040,6 @@ packages: minimalistic-crypto-utils: 1.0.1 dev: true - /emoji-regex@7.0.3: - resolution: {integrity: sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==} - dev: true - /emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} dev: true @@ -3183,10 +3131,6 @@ packages: which-typed-array: 1.1.11 dev: true - /es-array-method-boxes-properly@1.0.0: - resolution: {integrity: sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==} - dev: true - /es-set-tostringtag@2.0.1: resolution: {integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==} engines: {node: '>= 0.4'} @@ -3262,15 +3206,15 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /eslint@8.49.0: - resolution: {integrity: sha512-jw03ENfm6VJI0jA9U+8H5zfl5b+FvuU3YYvZRdZHOlU2ggJkxrlkJH4HcDrZpj6YwD8kuYqvQM8LyesoazrSOQ==} + /eslint@8.50.0: + resolution: {integrity: sha512-FOnOGSuFuFLv/Sa+FDVRZl4GGVAAFFi8LecRsI5a1tMO5HIE8nCm4ivAlzt4dT3ol/PaaGC0rJEEXQmHJBGoOg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} hasBin: true dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.49.0) - '@eslint-community/regexpp': 4.8.0 + '@eslint-community/eslint-utils': 4.4.0(eslint@8.50.0) + '@eslint-community/regexpp': 4.9.1 '@eslint/eslintrc': 2.1.2 - '@eslint/js': 8.49.0 + '@eslint/js': 8.50.0 '@humanwhocodes/config-array': 0.11.11 '@humanwhocodes/module-importer': 1.0.1 '@nodelib/fs.walk': 1.2.8 @@ -3289,7 +3233,7 @@ packages: file-entry-cache: 6.0.1 find-up: 5.0.0 glob-parent: 6.0.2 - globals: 13.21.0 + globals: 13.22.0 graphemer: 1.4.0 ignore: 5.2.4 imurmurhash: 0.1.4 @@ -3358,29 +3302,31 @@ packages: engines: {node: '>=0.10.0'} dev: true - /eth-gas-reporter@0.2.25: - resolution: {integrity: sha512-1fRgyE4xUB8SoqLgN3eDfpDfwEfRxh2Sz1b7wzFbyQA+9TekMmvSjjoRu9SKcSVyK+vLkLIsVbJDsTWjw195OQ==} + /eth-gas-reporter@0.2.27: + resolution: {integrity: sha512-femhvoAM7wL0GcI8ozTdxfuBtBFJ9qsyIAsmKVjlWAHUbdnnXHt+lKzz/kmldM5lA9jLuNHGwuIxorNpLbR1Zw==} peerDependencies: '@codechecks/client': ^0.1.0 peerDependenciesMeta: '@codechecks/client': optional: true dependencies: - '@ethersproject/abi': 5.7.0 '@solidity-parser/parser': 0.14.5 + axios: 1.5.1 cli-table3: 0.5.1 colors: 1.4.0 ethereum-cryptography: 1.2.0 - ethers: 4.0.49 + ethers: 5.7.2 fs-readdir-recursive: 1.1.0 lodash: 4.17.21 markdown-table: 1.1.3 - mocha: 7.2.0 + mocha: 10.2.0 req-cwd: 2.0.0 - request: 2.88.2 - request-promise-native: 1.0.9(request@2.88.2) sha1: 1.1.1 sync-request: 6.1.0 + transitivePeerDependencies: + - bufferutil + - debug + - utf-8-validate dev: true /ethereum-bloom-filters@1.0.10: @@ -3457,20 +3403,6 @@ packages: rlp: 2.2.7 dev: true - /ethers@4.0.49: - resolution: {integrity: sha512-kPltTvWiyu+OktYy1IStSO16i2e7cS9D9OxZ81q2UUaiNPVrm/RTcbxamCXF9VUSKzJIdJV68EAIhTEVBalRWg==} - dependencies: - aes-js: 3.0.0 - bn.js: 4.12.0 - elliptic: 6.5.4 - hash.js: 1.1.3 - js-sha3: 0.5.7 - scrypt-js: 2.0.4 - setimmediate: 1.0.4 - uuid: 2.0.1 - xmlhttprequest: 1.8.0 - dev: true - /ethers@5.7.2: resolution: {integrity: sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==} dependencies: @@ -3650,6 +3582,14 @@ packages: reusify: 1.0.4 dev: true + /fetch-blob@3.2.0: + resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} + engines: {node: ^12.20 || >= 14.13} + dependencies: + node-domexception: 1.0.0 + web-streams-polyfill: 3.2.1 + dev: true + /file-entry-cache@6.0.1: resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} engines: {node: ^10.12.0 || >=12.0.0} @@ -3684,13 +3624,6 @@ packages: locate-path: 2.0.0 dev: true - /find-up@3.0.0: - resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==} - engines: {node: '>=6'} - dependencies: - locate-path: 3.0.0 - dev: true - /find-up@5.0.0: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} engines: {node: '>=10'} @@ -3703,7 +3636,7 @@ packages: resolution: {integrity: sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew==} engines: {node: '>=12.0.0'} dependencies: - flatted: 3.2.7 + flatted: 3.2.9 keyv: 4.5.3 rimraf: 3.0.2 dev: true @@ -3713,8 +3646,8 @@ packages: hasBin: true dev: true - /flatted@3.2.7: - resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} + /flatted@3.2.9: + resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} dev: true /follow-redirects@1.15.2(debug@4.3.4): @@ -3729,6 +3662,16 @@ packages: debug: 4.3.4(supports-color@8.1.1) dev: true + /follow-redirects@1.15.3: + resolution: {integrity: sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + dev: true + /for-each@0.3.3: resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} dependencies: @@ -3766,6 +3709,13 @@ packages: mime-types: 2.1.35 dev: true + /formdata-polyfill@4.0.10: + resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} + engines: {node: '>=12.20.0'} + dependencies: + fetch-blob: 3.2.0 + dev: true + /fp-ts@1.19.3: resolution: {integrity: sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==} dev: true @@ -3834,15 +3784,6 @@ packages: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} dev: true - /fsevents@2.1.3: - resolution: {integrity: sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - deprecated: '"Please update to latest v2.3 or v2.2"' - requiresBuild: true - dev: true - optional: true - /fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} @@ -3878,8 +3819,8 @@ packages: engines: {node: 6.* || 8.* || >= 10.*} dev: true - /get-func-name@2.0.0: - resolution: {integrity: sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==} + /get-func-name@2.0.2: + resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} dev: true /get-intrinsic@1.2.1: @@ -3956,17 +3897,6 @@ packages: path-is-absolute: 1.0.1 dev: true - /glob@7.1.3: - resolution: {integrity: sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==} - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 - dev: true - /glob@7.1.7: resolution: {integrity: sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==} dependencies: @@ -4037,8 +3967,8 @@ packages: which: 1.3.1 dev: true - /globals@13.21.0: - resolution: {integrity: sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==} + /globals@13.22.0: + resolution: {integrity: sha512-H1Ddc/PbZHTDVJSnj8kWptIRSD6AM3pK+mKytuIVF4uoBV7rshFlhhvA58ceJ5wp3Er58w6zj7bykMpYXt3ETw==} engines: {node: '>=8'} dependencies: type-fest: 0.20.2 @@ -4087,7 +4017,7 @@ packages: colors: 1.4.0 cosmiconfig: 7.0.1 cross-spawn: 7.0.3 - ejs: 3.1.6 + ejs: 3.1.9 enquirer: 2.3.6 execa: 5.1.1 fs-jetpack: 4.3.1 @@ -4108,7 +4038,7 @@ packages: lodash.upperfirst: 4.3.1 ora: 4.0.2 pluralize: 8.0.0 - semver: 7.3.5 + semver: 7.5.4 which: 2.0.2 yargs-parser: 21.1.1 transitivePeerDependencies: @@ -4129,12 +4059,12 @@ packages: resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} dev: true - /graphql-import-node@0.0.5(graphql@16.8.0): + /graphql-import-node@0.0.5(graphql@16.8.1): resolution: {integrity: sha512-OXbou9fqh9/Lm7vwXT0XoRN9J5+WCYKnbiTalgFDvkQERITRmcfncZs6aVABedd5B85yQU5EULS4a5pnbpuI0Q==} peerDependencies: graphql: '*' dependencies: - graphql: 16.8.0 + graphql: 16.8.1 dev: true /graphql@15.5.0: @@ -4142,16 +4072,11 @@ packages: engines: {node: '>= 10.x'} dev: true - /graphql@16.8.0: - resolution: {integrity: sha512-0oKGaR+y3qcS5mCu1vb7KG+a89vjn06C7Ihq/dDl3jA+A8B3TKomvi3CiEcVLJQGalbu8F52LxkOym7U5sSfbg==} + /graphql@16.8.1: + resolution: {integrity: sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw==} engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} dev: true - /growl@1.10.5: - resolution: {integrity: sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==} - engines: {node: '>=4.x'} - dev: true - /handlebars@4.7.8: resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==} engines: {node: '>=0.4.7'} @@ -4179,21 +4104,24 @@ packages: har-schema: 2.0.0 dev: true - /hardhat-gas-reporter@1.0.9(hardhat@2.17.2): + /hardhat-gas-reporter@1.0.9(hardhat@2.17.4): resolution: {integrity: sha512-INN26G3EW43adGKBNzYWOlI3+rlLnasXTwW79YNnUhXPDa+yHESgt639dJEs37gCjhkbNKcRRJnomXEuMFBXJg==} peerDependencies: hardhat: ^2.0.2 dependencies: array-uniq: 1.0.3 - eth-gas-reporter: 0.2.25 - hardhat: 2.17.2(ts-node@10.9.1)(typescript@5.2.2) + eth-gas-reporter: 0.2.27 + hardhat: 2.17.4(ts-node@10.9.1)(typescript@5.2.2) sha1: 1.1.1 transitivePeerDependencies: - '@codechecks/client' + - bufferutil + - debug + - utf-8-validate dev: true - /hardhat@2.17.2(ts-node@10.9.1)(typescript@5.2.2): - resolution: {integrity: sha512-oUv40jBeHw0dKpbyQ+iH9cmNMziweLoTW3MnkNxJ2Gc0KGLrQR/1n4vV4xY60zn2LdmRgnwPqy3CgtY0mfwIIA==} + /hardhat@2.17.4(ts-node@10.9.1)(typescript@5.2.2): + resolution: {integrity: sha512-YTyHjVc9s14CY/O7Dbtzcr/92fcz6AzhrMaj6lYsZpYPIPLzOrFCZHHPxfGQB6FiE6IPNE0uJaAbr7zGF79goA==} hasBin: true peerDependencies: ts-node: '*' @@ -4248,7 +4176,7 @@ packages: solc: 0.7.3(debug@4.3.4) source-map-support: 0.5.21 stacktrace-parser: 0.1.10 - ts-node: 10.9.1(@types/node@20.5.7)(typescript@5.2.2) + ts-node: 10.9.1(@types/node@20.8.0)(typescript@5.2.2) tsort: 0.0.1 typescript: 5.2.2 undici: 5.23.0 @@ -4318,13 +4246,6 @@ packages: safe-buffer: 5.2.1 dev: true - /hash.js@1.1.3: - resolution: {integrity: sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==} - dependencies: - inherits: 2.0.4 - minimalistic-assert: 1.0.1 - dev: true - /hash.js@1.1.7: resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==} dependencies: @@ -4512,19 +4433,19 @@ packages: engines: {node: '>=8'} dev: true - /ipfs-core-types@0.9.0(node-fetch@2.7.0): + /ipfs-core-types@0.9.0(node-fetch@3.3.2): resolution: {integrity: sha512-VJ8vJSHvI1Zm7/SxsZo03T+zzpsg8pkgiIi5hfwSJlsrJ1E2v68QPlnLshGHUSYw89Oxq0IbETYl2pGTFHTWfg==} deprecated: js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details dependencies: interface-datastore: 6.1.1 - multiaddr: 10.0.1(node-fetch@2.7.0) + multiaddr: 10.0.1(node-fetch@3.3.2) multiformats: 9.9.0 transitivePeerDependencies: - node-fetch - supports-color dev: true - /ipfs-core-utils@0.13.0(node-fetch@2.7.0): + /ipfs-core-utils@0.13.0(node-fetch@3.3.2): resolution: {integrity: sha512-HP5EafxU4/dLW3U13CFsgqVO5Ika8N4sRSIb/dTg16NjLOozMH31TXV0Grtu2ZWo1T10ahTzMvrfT5f4mhioXw==} deprecated: js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details dependencies: @@ -4533,7 +4454,7 @@ packages: browser-readablestream-to-it: 1.0.3 debug: 4.3.4(supports-color@8.1.1) err-code: 3.0.1 - ipfs-core-types: 0.9.0(node-fetch@2.7.0) + ipfs-core-types: 0.9.0(node-fetch@3.3.2) ipfs-unixfs: 6.0.9 ipfs-utils: 9.0.14 it-all: 1.0.6 @@ -4541,8 +4462,8 @@ packages: it-peekable: 1.0.3 it-to-stream: 1.0.0 merge-options: 3.0.4 - multiaddr: 10.0.1(node-fetch@2.7.0) - multiaddr-to-uri: 8.0.0(node-fetch@2.7.0) + multiaddr: 10.0.1(node-fetch@3.3.2) + multiaddr-to-uri: 8.0.0(node-fetch@3.3.2) multiformats: 9.9.0 nanoid: 3.3.3 parse-duration: 1.1.0 @@ -4554,7 +4475,7 @@ packages: - supports-color dev: true - /ipfs-http-client@55.0.0(node-fetch@2.7.0): + /ipfs-http-client@55.0.0(node-fetch@3.3.2): resolution: {integrity: sha512-GpvEs7C7WL9M6fN/kZbjeh4Y8YN7rY8b18tVWZnKxRsVwM25cIFrRI8CwNt3Ugin9yShieI3i9sPyzYGMrLNnQ==} engines: {node: '>=14.0.0', npm: '>=3.0.0'} deprecated: js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details @@ -4566,13 +4487,13 @@ packages: any-signal: 2.1.2 debug: 4.3.4(supports-color@8.1.1) err-code: 3.0.1 - ipfs-core-types: 0.9.0(node-fetch@2.7.0) - ipfs-core-utils: 0.13.0(node-fetch@2.7.0) + ipfs-core-types: 0.9.0(node-fetch@3.3.2) + ipfs-core-utils: 0.13.0(node-fetch@3.3.2) ipfs-utils: 9.0.14 it-first: 1.0.7 it-last: 1.0.6 merge-options: 3.0.4 - multiaddr: 10.0.1(node-fetch@2.7.0) + multiaddr: 10.0.1(node-fetch@3.3.2) multiformats: 9.9.0 native-abort-controller: 1.0.4(abort-controller@3.0.0) parse-duration: 1.1.0 @@ -4931,10 +4852,6 @@ packages: resolution: {integrity: sha512-dwXFwByc/ajSV6m5bcKAPwe4yDDF6D614pxmIi5odytzxRlwqF6nwoiCek80Ixc7Cvma5awClxrzFtxCQvcM8w==} dev: true - /js-sha3@0.5.7: - resolution: {integrity: sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g==} - dev: true - /js-sha3@0.8.0: resolution: {integrity: sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==} dev: true @@ -4943,14 +4860,6 @@ packages: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} dev: true - /js-yaml@3.13.1: - resolution: {integrity: sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==} - hasBin: true - dependencies: - argparse: 1.0.10 - esprima: 4.0.1 - dev: true - /js-yaml@3.14.1: resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} hasBin: true @@ -5113,14 +5022,6 @@ packages: path-exists: 3.0.0 dev: true - /locate-path@3.0.0: - resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==} - engines: {node: '>=6'} - dependencies: - p-locate: 3.0.0 - path-exists: 3.0.0 - dev: true - /locate-path@6.0.0: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} @@ -5234,7 +5135,7 @@ packages: /loupe@2.3.6: resolution: {integrity: sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==} dependencies: - get-func-name: 2.0.0 + get-func-name: 2.0.2 dev: true /lru-cache@10.0.1: @@ -5267,14 +5168,6 @@ packages: resolution: {integrity: sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q==} dev: true - /matchstick-as@0.5.0: - resolution: {integrity: sha512-4K619YDH+so129qt4RB4JCNxaFwJJYLXPc7drpG+/mIj86Cfzg6FKs/bA91cnajmS1CLHdhHl9vt6Kd6Oqvfkg==} - dependencies: - '@graphprotocol/graph-ts': 0.27.0 - assemblyscript: 0.19.23 - wabt: 1.0.24 - dev: true - /mcl-wasm@0.7.9: resolution: {integrity: sha512-iJIUcQWA88IJB/5L15GnJVnSQJmf/YaxxV6zRavv83HILHaJQb6y0iFyDMdDO0gN8X37tdxmAOrH/P8B6RB8sQ==} engines: {node: '>=8.9.0'} @@ -5416,13 +5309,6 @@ packages: yallist: 4.0.0 dev: true - /mkdirp@0.5.5: - resolution: {integrity: sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==} - hasBin: true - dependencies: - minimist: 1.2.8 - dev: true - /mkdirp@0.5.6: resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} hasBin: true @@ -5470,77 +5356,11 @@ packages: yargs-unparser: 2.0.0 dev: true - /mocha@7.1.2: - resolution: {integrity: sha512-o96kdRKMKI3E8U0bjnfqW4QMk12MwZ4mhdBTf+B5a1q9+aq2HRnj+3ZdJu0B/ZhJeK78MgYuv6L8d/rA5AeBJA==} - engines: {node: '>= 8.10.0'} - hasBin: true - dependencies: - ansi-colors: 3.2.3 - browser-stdout: 1.3.1 - chokidar: 3.3.0 - debug: 3.2.6(supports-color@6.0.0) - diff: 3.5.0 - escape-string-regexp: 1.0.5 - find-up: 3.0.0 - glob: 7.1.3 - growl: 1.10.5 - he: 1.2.0 - js-yaml: 3.13.1 - log-symbols: 3.0.0 - minimatch: 8.0.4 - mkdirp: 0.5.5 - ms: 2.1.1 - node-environment-flags: 1.0.6 - object.assign: 4.1.0 - strip-json-comments: 2.0.1 - supports-color: 6.0.0 - which: 1.3.1 - wide-align: 1.1.3 - yargs: 13.3.2 - yargs-parser: 13.1.2 - yargs-unparser: 1.6.0 - dev: true - - /mocha@7.2.0: - resolution: {integrity: sha512-O9CIypScywTVpNaRrCAgoUnJgozpIofjKUYmJhiCIJMiuYnLI6otcb1/kpW9/n/tJODHGZ7i8aLQoDVsMtOKQQ==} - engines: {node: '>= 8.10.0'} - hasBin: true - dependencies: - ansi-colors: 3.2.3 - browser-stdout: 1.3.1 - chokidar: 3.3.0 - debug: 3.2.6(supports-color@6.0.0) - diff: 3.5.0 - escape-string-regexp: 1.0.5 - find-up: 3.0.0 - glob: 7.1.3 - growl: 1.10.5 - he: 1.2.0 - js-yaml: 3.13.1 - log-symbols: 3.0.0 - minimatch: 8.0.4 - mkdirp: 0.5.5 - ms: 2.1.1 - node-environment-flags: 1.0.6 - object.assign: 4.1.0 - strip-json-comments: 2.0.1 - supports-color: 6.0.0 - which: 1.3.1 - wide-align: 1.1.3 - yargs: 13.3.2 - yargs-parser: 13.1.2 - yargs-unparser: 1.6.0 - dev: true - /module-error@1.0.2: resolution: {integrity: sha512-0yuvsqSCv8LbaOKhnsQ/T5JhyFlCYLPXK3U2sgV10zoKQwzs/MyfuQUOZQ1V/6OCOJsK/TRgNVrPuPDqtdMFtA==} engines: {node: '>=10'} dev: true - /ms@2.1.1: - resolution: {integrity: sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==} - dev: true - /ms@2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} dev: true @@ -5549,21 +5369,21 @@ packages: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} dev: true - /multiaddr-to-uri@8.0.0(node-fetch@2.7.0): + /multiaddr-to-uri@8.0.0(node-fetch@3.3.2): resolution: {integrity: sha512-dq4p/vsOOUdVEd1J1gl+R2GFrXJQH8yjLtz4hodqdVbieg39LvBOdMQRdQnfbg5LSM/q1BYNVf5CBbwZFFqBgA==} deprecated: This module is deprecated, please upgrade to @multiformats/multiaddr-to-uri dependencies: - multiaddr: 10.0.1(node-fetch@2.7.0) + multiaddr: 10.0.1(node-fetch@3.3.2) transitivePeerDependencies: - node-fetch - supports-color dev: true - /multiaddr@10.0.1(node-fetch@2.7.0): + /multiaddr@10.0.1(node-fetch@3.3.2): resolution: {integrity: sha512-G5upNcGzEGuTHkzxezPrrD6CaIHR9uo+7MwqhNVcXTs33IInon4y7nMiGxl2CY5hG7chvYQUQhz5V52/Qe3cbg==} deprecated: This module is deprecated, please upgrade to @multiformats/multiaddr dependencies: - dns-over-http-resolver: 1.2.3(node-fetch@2.7.0) + dns-over-http-resolver: 1.2.3(node-fetch@3.3.2) err-code: 3.0.1 is-ip: 3.1.0 multiformats: 9.9.0 @@ -5604,6 +5424,14 @@ packages: node-fetch: 2.7.0 dev: true + /native-fetch@3.0.0(node-fetch@3.3.2): + resolution: {integrity: sha512-G3Z7vx0IFb/FQ4JxvtqGABsOTIqRWvgQz6e+erkB+JJD6LrszQtMozEHI4EkmgZQvnGHrpLVzUWk7t4sJCIkVw==} + peerDependencies: + node-fetch: '*' + dependencies: + node-fetch: 3.3.2 + dev: true + /natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} dev: true @@ -5620,19 +5448,17 @@ packages: resolution: {integrity: sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==} dev: true + /node-domexception@1.0.0: + resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} + engines: {node: '>=10.5.0'} + dev: true + /node-emoji@1.11.0: resolution: {integrity: sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==} dependencies: lodash: 4.17.21 dev: true - /node-environment-flags@1.0.6: - resolution: {integrity: sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw==} - dependencies: - object.getownpropertydescriptors: 2.1.6 - semver: 5.7.2 - dev: true - /node-fetch@2.7.0: resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} engines: {node: 4.x || >=6.0.0} @@ -5645,6 +5471,15 @@ packages: whatwg-url: 5.0.0 dev: true + /node-fetch@3.3.2: + resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + data-uri-to-buffer: 4.0.1 + fetch-blob: 3.2.0 + formdata-polyfill: 4.0.10 + dev: true + /node-gyp-build@4.6.1: resolution: {integrity: sha512-24vnklJmyRS8ViBNI8KbtK/r/DmXQMRiOMXTNz2nrTnAYUwjmEEbnnpB/+kt+yWRv73bPsSPRFddrcIbAxSiMQ==} hasBin: true @@ -5705,16 +5540,6 @@ packages: engines: {node: '>= 10'} dev: true - /object.assign@4.1.0: - resolution: {integrity: sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==} - engines: {node: '>= 0.4'} - dependencies: - define-properties: 1.2.0 - function-bind: 1.1.1 - has-symbols: 1.0.3 - object-keys: 1.1.1 - dev: true - /object.assign@4.1.4: resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} engines: {node: '>= 0.4'} @@ -5725,17 +5550,6 @@ packages: object-keys: 1.1.1 dev: true - /object.getownpropertydescriptors@2.1.6: - resolution: {integrity: sha512-lq+61g26E/BgHv0ZTFgRvi7NMEPuAxLkFU7rukXjc/AlwH4Am5xXVnIXy3un1bg/JPbXHrixRkK1itUzzPiIjQ==} - engines: {node: '>= 0.8'} - dependencies: - array.prototype.reduce: 1.0.6 - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.22.1 - safe-array-concat: 1.0.0 - dev: true - /obliterator@2.0.4: resolution: {integrity: sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==} dev: true @@ -5818,13 +5632,6 @@ packages: p-try: 1.0.0 dev: true - /p-limit@2.3.0: - resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} - engines: {node: '>=6'} - dependencies: - p-try: 2.2.0 - dev: true - /p-limit@3.1.0: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} @@ -5839,13 +5646,6 @@ packages: p-limit: 1.3.0 dev: true - /p-locate@3.0.0: - resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==} - engines: {node: '>=6'} - dependencies: - p-limit: 2.3.0 - dev: true - /p-locate@5.0.0: resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} engines: {node: '>=10'} @@ -5865,11 +5665,6 @@ packages: engines: {node: '>=4'} dev: true - /p-try@2.2.0: - resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} - engines: {node: '>=6'} - dev: true - /parent-module@1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} @@ -6160,13 +5955,6 @@ packages: util-deprecate: 1.0.2 dev: true - /readdirp@3.2.0: - resolution: {integrity: sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ==} - engines: {node: '>= 8'} - dependencies: - picomatch: 2.3.1 - dev: true - /readdirp@3.6.0: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} @@ -6184,7 +5972,7 @@ packages: resolution: {integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==} engines: {node: '>= 0.10'} dependencies: - resolve: 1.22.4 + resolve: 1.22.6 dev: true /recursive-readdir@2.2.3: @@ -6228,29 +6016,6 @@ packages: resolve-from: 3.0.0 dev: true - /request-promise-core@1.1.4(request@2.88.2): - resolution: {integrity: sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==} - engines: {node: '>=0.10.0'} - peerDependencies: - request: ^2.34 - dependencies: - lodash: 4.17.21 - request: 2.88.2 - dev: true - - /request-promise-native@1.0.9(request@2.88.2): - resolution: {integrity: sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==} - engines: {node: '>=0.12.0'} - deprecated: request-promise-native has been deprecated because it extends the now deprecated request package, see https://github.com/request/request/issues/3142 - peerDependencies: - request: ^2.34 - dependencies: - request: 2.88.2 - request-promise-core: 1.1.4(request@2.88.2) - stealthy-require: 1.1.1 - tough-cookie: 4.1.3 - dev: true - /request@2.88.2: resolution: {integrity: sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==} engines: {node: '>= 6'} @@ -6288,10 +6053,6 @@ packages: engines: {node: '>=0.10.0'} dev: true - /require-main-filename@2.0.0: - resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} - dev: true - /requires-port@1.0.0: resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} dev: true @@ -6316,8 +6077,8 @@ packages: path-parse: 1.0.7 dev: true - /resolve@1.22.4: - resolution: {integrity: sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==} + /resolve@1.22.6: + resolution: {integrity: sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw==} hasBin: true dependencies: is-core-module: 2.13.0 @@ -6356,7 +6117,7 @@ packages: resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} hasBin: true dependencies: - glob: 7.2.0 + glob: 7.2.3 dev: true /rimraf@3.0.2: @@ -6446,10 +6207,6 @@ packages: wordwrap: 1.0.0 dev: true - /scrypt-js@2.0.4: - resolution: {integrity: sha512-4KsaGcPnuhtCZQCxFxN3GVYIhKFPTdLd8PLC552XwbMndtD0cjRFAhDuuydXQ0h08ZfPgzqe6EKHozpuH74iDw==} - dev: true - /scrypt-js@3.0.1: resolution: {integrity: sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==} dev: true @@ -6474,22 +6231,6 @@ packages: hasBin: true dev: true - /semver@7.3.5: - resolution: {integrity: sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==} - engines: {node: '>=10'} - hasBin: true - dependencies: - lru-cache: 6.0.0 - dev: true - - /semver@7.4.0: - resolution: {integrity: sha512-RgOxM8Mw+7Zus0+zcLEUn8+JfoLpj/huFTItQy2hsM4khuC1HYRDp0cU482Ewn/Fcy6bCjufD8vAj7voC66KQw==} - engines: {node: '>=10'} - hasBin: true - dependencies: - lru-cache: 6.0.0 - dev: true - /semver@7.5.4: resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} engines: {node: '>=10'} @@ -6504,14 +6245,6 @@ packages: randombytes: 2.1.0 dev: true - /set-blocking@2.0.0: - resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} - dev: true - - /setimmediate@1.0.4: - resolution: {integrity: sha512-/TjEmXQVEzdod/FFskf3o7oOAsGhHf2j1dZqRFbDzq4F3mvvxflIIi4Hd3bLQE9y/CpwqfSQam5JakI/mi3Pog==} - dev: true - /setimmediate@1.0.5: resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} dev: true @@ -6647,8 +6380,8 @@ packages: resolution: {integrity: sha512-wciNMLg/Irp8OKGrh3S2tfvZiZ0NEyILfcRCXCD4mp7SgK/i9gzLfhY2hY7VMCQJ3kH9UB9BzNdibIVMchzyYw==} dev: true - /solidity-coverage@0.8.4(hardhat@2.17.2): - resolution: {integrity: sha512-xeHOfBOjdMF6hWTbt42iH4x+7j1Atmrf5OldDPMxI+i/COdExUxszOswD9qqvcBTaLGiOrrpnh9UZjSpt4rBsg==} + /solidity-coverage@0.8.5(hardhat@2.17.4): + resolution: {integrity: sha512-6C6N6OV2O8FQA0FWA95FdzVH+L16HU94iFgg5wAFZ29UpLFkgNI/DRR2HotG1bC0F4gAc/OMs2BJI44Q/DYlKQ==} hasBin: true peerDependencies: hardhat: ^2.11.0 @@ -6663,10 +6396,10 @@ packages: ghost-testrpc: 0.0.2 global-modules: 2.0.0 globby: 10.0.2 - hardhat: 2.17.2(ts-node@10.9.1)(typescript@5.2.2) + hardhat: 2.17.4(ts-node@10.9.1)(typescript@5.2.2) jsonschema: 1.4.1 lodash: 4.17.21 - mocha: 7.1.2 + mocha: 10.2.0 node-emoji: 1.11.0 pify: 4.0.1 recursive-readdir: 2.2.3 @@ -6735,11 +6468,6 @@ packages: engines: {node: '>= 0.8'} dev: true - /stealthy-require@1.1.1: - resolution: {integrity: sha512-ZnWpYnYugiOVEY5GkcuJK1io5V8QmNYChG62gSit9pQVGErXtrKuPC55ITaVSukmMta5qpMU7vqLt2Lnni4f/g==} - engines: {node: '>=0.10.0'} - dev: true - /stream-to-it@0.2.4: resolution: {integrity: sha512-4vEbkSs83OahpmBybNJXlJd7d6/RxzkkSdT3I0mnGt79Xd2Kk+e1JqbvAvsQfCeKj3aKb0QIWkyK3/n0j506vQ==} dependencies: @@ -6763,15 +6491,6 @@ packages: strip-ansi: 4.0.0 dev: true - /string-width@3.1.0: - resolution: {integrity: sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==} - engines: {node: '>=6'} - dependencies: - emoji-regex: 7.0.3 - is-fullwidth-code-point: 2.0.0 - strip-ansi: 5.2.0 - dev: true - /string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} @@ -6855,11 +6574,6 @@ packages: is-hex-prefixed: 1.0.0 dev: true - /strip-json-comments@2.0.1: - resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} - engines: {node: '>=0.10.0'} - dev: true - /strip-json-comments@3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} @@ -6879,13 +6593,6 @@ packages: has-flag: 3.0.0 dev: true - /supports-color@6.0.0: - resolution: {integrity: sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==} - engines: {node: '>=6'} - dependencies: - has-flag: 3.0.0 - dev: true - /supports-color@7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} @@ -7093,7 +6800,7 @@ packages: typescript: 5.2.2 dev: true - /ts-node@10.9.1(@types/node@20.5.7)(typescript@5.2.2): + /ts-node@10.9.1(@types/node@20.8.0)(typescript@5.2.2): resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} hasBin: true peerDependencies: @@ -7112,7 +6819,7 @@ packages: '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 20.5.7 + '@types/node': 20.8.0 acorn: 8.10.0 acorn-walk: 8.2.0 arg: 4.1.3 @@ -7301,6 +7008,13 @@ packages: busboy: 1.6.0 dev: true + /undici@5.25.3: + resolution: {integrity: sha512-7lmhlz3K1+IKB6IUjkdzV2l0jKY8/0KguEMdEpzzXCug5pEGIp3DxUg0DEN65DrVoxHiRKpPORC/qzX+UglSkQ==} + engines: {node: '>=14.0'} + dependencies: + '@fastify/busboy': 2.0.0 + dev: true + /unfetch@4.2.0: resolution: {integrity: sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA==} dev: true @@ -7350,11 +7064,6 @@ packages: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} dev: true - /uuid@2.0.1: - resolution: {integrity: sha512-nWg9+Oa3qD2CQzHIP4qKUqwNfzKn8P0LtFhotaCTFchsV7ZfDhAybeip/HZVeMIpZi9JgY1E3nUlwaCmZT1sEg==} - deprecated: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details. - dev: true - /uuid@3.4.0: resolution: {integrity: sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==} deprecated: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details. @@ -7383,11 +7092,6 @@ packages: extsprintf: 1.3.0 dev: true - /wabt@1.0.24: - resolution: {integrity: sha512-8l7sIOd3i5GWfTWciPL0+ff/FK/deVK2Q6FN+MPz4vfUcD78i2M/49XJTwF6aml91uIiuXJEsLKWMB2cw/mtKg==} - hasBin: true - dev: true - /wcwidth@1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} dependencies: @@ -7465,10 +7169,6 @@ packages: is-symbol: 1.0.4 dev: true - /which-module@2.0.1: - resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} - dev: true - /which-typed-array@1.1.11: resolution: {integrity: sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==} engines: {node: '>= 0.4'} @@ -7495,12 +7195,6 @@ packages: isexe: 2.0.0 dev: true - /wide-align@1.1.3: - resolution: {integrity: sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==} - dependencies: - string-width: 2.1.1 - dev: true - /widest-line@3.1.0: resolution: {integrity: sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==} engines: {node: '>=8'} @@ -7529,15 +7223,6 @@ packages: resolution: {integrity: sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==} dev: true - /wrap-ansi@5.1.0: - resolution: {integrity: sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==} - engines: {node: '>=6'} - dependencies: - ansi-styles: 3.2.1 - string-width: 3.1.0 - strip-ansi: 5.2.0 - dev: true - /wrap-ansi@7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} @@ -7590,20 +7275,11 @@ packages: optional: true dev: true - /xmlhttprequest@1.8.0: - resolution: {integrity: sha512-58Im/U0mlVBLM38NdZjHyhuMtCqa61469k2YP/AaPbvCoV9aQGUpbJBj1QRm2ytRiVQBD/fsw7L2bJGDVQswBA==} - engines: {node: '>=0.4.0'} - dev: true - /xtend@4.0.2: resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} engines: {node: '>=0.4'} dev: true - /y18n@4.0.3: - resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} - dev: true - /y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} @@ -7622,13 +7298,6 @@ packages: engines: {node: '>= 6'} dev: true - /yargs-parser@13.1.2: - resolution: {integrity: sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==} - dependencies: - camelcase: 5.3.1 - decamelize: 1.2.0 - dev: true - /yargs-parser@20.2.4: resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==} engines: {node: '>=10'} @@ -7639,15 +7308,6 @@ packages: engines: {node: '>=12'} dev: true - /yargs-unparser@1.6.0: - resolution: {integrity: sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==} - engines: {node: '>=6'} - dependencies: - flat: 5.0.2 - lodash: 4.17.21 - yargs: 13.3.2 - dev: true - /yargs-unparser@2.0.0: resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==} engines: {node: '>=10'} @@ -7658,21 +7318,6 @@ packages: is-plain-obj: 2.1.0 dev: true - /yargs@13.3.2: - resolution: {integrity: sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==} - dependencies: - cliui: 5.0.0 - find-up: 3.0.0 - get-caller-file: 2.0.5 - require-directory: 2.1.1 - require-main-filename: 2.0.0 - set-blocking: 2.0.0 - string-width: 3.1.0 - which-module: 2.0.1 - y18n: 4.0.3 - yargs-parser: 13.1.2 - dev: true - /yargs@16.2.0: resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} engines: {node: '>=10'} @@ -7695,3 +7340,7 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} dev: true + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 17e042cf..1a8a4af8 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,3 +1,3 @@ packages: - - '.' + - 'contracts' - 'subgraph' diff --git a/remappings.txt b/remappings.txt deleted file mode 100644 index 76f932e9..00000000 --- a/remappings.txt +++ /dev/null @@ -1,5 +0,0 @@ -ds-test/=lib/forge-std/lib/ds-test/src/ -erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/ -forge-std/=lib/forge-std/src/ -openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/ -openzeppelin/=lib/openzeppelin-contracts-upgradeable/contracts/ diff --git a/sdk/.gitkeep b/sdk/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/sdk/README.md b/sdk/README.md new file mode 100644 index 00000000..23103e6e --- /dev/null +++ b/sdk/README.md @@ -0,0 +1,3 @@ +## Verax Attestation Registry - SDK + +The `verax-sdk` facilitates the interactions with the contracts and the subgraph, both from a frontend and a backend. diff --git a/subgraph/package.json b/subgraph/package.json index 11b3bc6f..0b35af66 100644 --- a/subgraph/package.json +++ b/subgraph/package.json @@ -1,7 +1,7 @@ { "name": "linea-attestation-registry-subgraph", "version": "0.0.1", - "description": "Subgraph to index the 4 main objects of Verax", + "description": "Subgraph to index the main objects of Verax", "keywords": [ "linea-attestation-registry", "blockchain", @@ -24,12 +24,10 @@ "deploy": "source .env && cp subgraph.mainnet.yaml subgraph.yaml && pnpm run build && graph deploy --network linea-mainnet --node $DEPLOY_ENDPOINT_MAINNET --headers \"{\\\"Authorization\\\": \\\"Basic $IPFS_IDENTIFIERS\\\"}\" --ipfs $IPFS_ENDPOINT --version-label v0.0.1 Consensys/linea-attestation-registry", "deploy:goerli": "source .env && cp subgraph.goerli.yaml subgraph.yaml && pnpm run build:goerli && graph deploy --network linea-goerli --node $DEPLOY_ENDPOINT_GOERLI --headers \"{\\\"Authorization\\\": \\\"Basic $IPFS_IDENTIFIERS\\\"}\" --ipfs $IPFS_ENDPOINT --version-label v0.0.5 Consensys/linea-attestation-registry", "remove": "source .env && graph remove --node $DEPLOY_ENDPOINT_MAINNET Consensys/linea-attestation-registry", - "remove:goerli": "source .env && graph remove --node $DEPLOY_ENDPOINT_GOERLI Consensys/linea-attestation-registry", - "test": "graph test" + "remove:goerli": "source .env && graph remove --node $DEPLOY_ENDPOINT_GOERLI Consensys/linea-attestation-registry" }, "devDependencies": { "@graphprotocol/graph-cli": "0.58.0", - "@graphprotocol/graph-ts": "0.31.0", - "matchstick-as": "0.5.0" + "@graphprotocol/graph-ts": "0.31.0" } } diff --git a/subgraph/tsconfig.json b/subgraph/tsconfig.json index 5c5d17c9..a6d2ae82 100644 --- a/subgraph/tsconfig.json +++ b/subgraph/tsconfig.json @@ -1,4 +1,3 @@ { - "extends": "@graphprotocol/graph-ts/types/tsconfig.base.json", - "include": ["src"] + "extends": "@graphprotocol/graph-ts/types/tsconfig.base.json" } diff --git a/tsconfig.json b/tsconfig.json index 76d87175..a15e2c79 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,5 +1,9 @@ { "compilerOptions": { + "composite": true, + "declaration": true, + "declarationMap": true, + "incremental": true, "target": "ESNext", "allowJs": false, "skipLibCheck": true, @@ -14,6 +18,14 @@ "noEmit": true, "noFallthroughCasesInSwitch": true }, + "references": [ + { + "path": "contracts" + }, + { + "path": "subgraph" + } + ], "include": ["**/*.ts"], "exclude": ["node_modules", "typechain-types"] } From bd1fccbd9eb6dd72be4c85f1f8265c5643f5772e Mon Sep 17 00:00:00 2001 From: Satyajeet Kolhapure <77279246+satyajeetkolhapure@users.noreply.github.com> Date: Wed, 4 Oct 2023 13:51:29 +0100 Subject: [PATCH 17/36] feat: attestation read interoperability (#248) Co-authored-by: Satyajeet Kolhapure Co-authored-by: Alain Nicolas --- README.md | 4 + contracts/.env.example | 4 + contracts/.openzeppelin/unknown-59140.json | 640 +----------------- contracts/.openzeppelin/unknown-59144.json | 106 +++ contracts/script/deploy/deployEverything.ts | 35 + .../script/upgrade/checkUpgradeability.ts | 5 + contracts/script/upgrade/checkUpgradeable.ts | 6 + .../script/upgrade/forceUpgradeEverything.ts | 30 + contracts/script/upgrade/upgradeEverything.ts | 28 + contracts/src/AttestationReader.sol | 96 +++ contracts/src/interface/IEAS.sol | 29 + contracts/test/AttestationReader.t.sol | 134 ++++ contracts/test/mocks/EASRegistryMock.sol | 16 + 13 files changed, 528 insertions(+), 605 deletions(-) create mode 100644 contracts/src/AttestationReader.sol create mode 100644 contracts/src/interface/IEAS.sol create mode 100644 contracts/test/AttestationReader.t.sol create mode 100644 contracts/test/mocks/EASRegistryMock.sol diff --git a/README.md b/README.md index da46b7e4..8bb3b47f 100644 --- a/README.md +++ b/README.md @@ -279,6 +279,8 @@ npx hardhat verify --network NETWORK_NAME CONTRACT_ADDRESS --constructor-args co [0x506f88a5Ca8D5F001f2909b029738A40042e42a6](https://goerli.lineascan.build/address/0x506f88a5Ca8D5F001f2909b029738A40042e42a6) - SchemaRegistry = [0xB2c4Da1f8F08A0CA25862509E5431289BE2b598B](https://goerli.lineascan.build/address/0xB2c4Da1f8F08A0CA25862509E5431289BE2b598B) +- AttestationReader = + [0x65c8294C7aF0f0bDDe51eF92AF850613bb629fc6](https://goerli.lineascan.build/address/0x65c8294C7aF0f0bDDe51eF92AF850613bb629fc6) ### Mainnet @@ -292,6 +294,8 @@ npx hardhat verify --network NETWORK_NAME CONTRACT_ADDRESS --constructor-args co [0xd5d61e4ECDf6d46A63BfdC262af92544DFc19083](https://lineascan.build/address/0xd5d61e4ECDf6d46A63BfdC262af92544DFc19083) - SchemaRegistry = [0x0f95dCec4c7a93F2637eb13b655F2223ea036B59](https://lineascan.build/address/0x0f95dCec4c7a93F2637eb13b655F2223ea036B59) +- AttestationReader = + [0x40871e247CF6b8fd8794c9c56bB5c2b8a4FA3B6c](https://lineascan.build/address/0x40871e247CF6b8fd8794c9c56bB5c2b8a4FA3B6c) ## Relationship schemas id's diff --git a/contracts/.env.example b/contracts/.env.example index 388ac4fa..00a955e2 100644 --- a/contracts/.env.example +++ b/contracts/.env.example @@ -9,6 +9,8 @@ PORTAL_REGISTRY_ADDRESS=0x506f88a5Ca8D5F001f2909b029738A40042e42a6 SCHEMA_REGISTRY_ADDRESS=0xB2c4Da1f8F08A0CA25862509E5431289BE2b598B MODULE_REGISTRY_ADDRESS=0x1a20b2CFA134686306436D2c9f778D7eC6c43A43 ATTESTATION_REGISTRY_ADDRESS=0xC765F28096F6121C2F2b82D35A4346280164428b +ATTESTATION_READER_ADDRESS=0x65c8294C7aF0f0bDDe51eF92AF850613bb629fc6 +EAS_REGISTRY_ADDRESS=0xaEF4103A04090071165F78D45D83A0C0782c2B2a # Verax Mainnet Config #ROUTER_ADDRESS=0x4d3a380A03f3a18A5dC44b01119839D8674a552E @@ -16,3 +18,5 @@ ATTESTATION_REGISTRY_ADDRESS=0xC765F28096F6121C2F2b82D35A4346280164428b #SCHEMA_REGISTRY_ADDRESS=0x0f95dCec4c7a93F2637eb13b655F2223ea036B59 #MODULE_REGISTRY_ADDRESS=0xf851513A732996F22542226341748f3C9978438f #ATTESTATION_REGISTRY_ADDRESS=0x3de3893aa4Cdea029e84e75223a152FD08315138 +#ATTESTATION_READER_ADDRESS=0x40871e247CF6b8fd8794c9c56bB5c2b8a4FA3B6c +#EAS_REGISTRY_ADDRESS=0xaEF4103A04090071165F78D45D83A0C0782c2B2a diff --git a/contracts/.openzeppelin/unknown-59140.json b/contracts/.openzeppelin/unknown-59140.json index 78d21b58..c61eee0b 100644 --- a/contracts/.openzeppelin/unknown-59140.json +++ b/contracts/.openzeppelin/unknown-59140.json @@ -23,6 +23,11 @@ { "address": "0xB2c4Da1f8F08A0CA25862509E5431289BE2b598B", "kind": "transparent" + }, + { + "address": "0x65c8294C7aF0f0bDDe51eF92AF850613bb629fc6", + "txHash": "0xb3faa8c708ccf7c9da492b6519e519b8b1c48750de54b0f48f3d4665b3d66895", + "kind": "transparent" } ], "impls": { @@ -1764,7 +1769,8 @@ "numberOfBytes": "1" } } - } + }, + "allAddresses": ["0x2ff05A30f2CC53754E44b2CdCD7deAe2A5585d4f", "0x69Ae216B5CE47Fe5Ff48F36367F0A4d5c9C6C581"] }, "d3839952abe24ccc6cd8803a91942cfbedf96e5be08d5c3ab72758d5edd7a91d": { "address": "0xC4A1f3553f4bE4C07be7d70Ecbb9Cd67ee22A299", @@ -1903,7 +1909,8 @@ "numberOfBytes": "1" } } - } + }, + "allAddresses": ["0xC4A1f3553f4bE4C07be7d70Ecbb9Cd67ee22A299", "0xc70a8a53bB389b1FDD2d4a0CF0f865c7866175b4"] }, "d99b3b345be3281a62d350dd3f4b0dbee11a149a42369670b897db21539dad09": { "address": "0x2fcCfC76566621A3c1F424970c89a7Cd2D603989", @@ -2078,7 +2085,8 @@ "numberOfBytes": "1" } } - } + }, + "allAddresses": ["0x2fcCfC76566621A3c1F424970c89a7Cd2D603989", "0xbcbD81b00033FFCEd2AbFaf6DfA8c3f68CE0e67e"] }, "7cb0f5d61af565dfb5f94a78e471d8d9ed42c8ee97eddcd926d395437ca8b435": { "address": "0x4423F69F699B63456DdeB97e46F909c08D61029a", @@ -2130,7 +2138,7 @@ "label": "router", "offset": 0, "slot": "101", - "type": "t_contract(IRouter)3800", + "type": "t_contract(IRouter)3333", "contract": "SchemaRegistry", "src": "src/SchemaRegistry.sol:15" }, @@ -2138,7 +2146,7 @@ "label": "schemas", "offset": 0, "slot": "102", - "type": "t_mapping(t_bytes32,t_struct(Schema)3862_storage)", + "type": "t_mapping(t_bytes32,t_struct(Schema)3395_storage)", "contract": "SchemaRegistry", "src": "src/SchemaRegistry.sol:17" }, @@ -2176,11 +2184,11 @@ "label": "bytes32", "numberOfBytes": "32" }, - "t_contract(IRouter)3800": { + "t_contract(IRouter)3333": { "label": "contract IRouter", "numberOfBytes": "20" }, - "t_mapping(t_bytes32,t_struct(Schema)3862_storage)": { + "t_mapping(t_bytes32,t_struct(Schema)3395_storage)": { "label": "mapping(bytes32 => struct Schema)", "numberOfBytes": "32" }, @@ -2188,7 +2196,7 @@ "label": "string", "numberOfBytes": "32" }, - "t_struct(Schema)3862_storage": { + "t_struct(Schema)3395_storage": { "label": "struct Schema", "members": [ { @@ -2227,10 +2235,12 @@ "numberOfBytes": "1" } } - } + }, + "allAddresses": ["0x4423F69F699B63456DdeB97e46F909c08D61029a", "0x2aF74120BD6078F6641d63aD69Eb5e63eC692874"] }, - "3354397cdd6b936261be9fe704079273a944f9c472090d34c4caf5377f5779b1": { - "address": "0x2ff05A30f2CC53754E44b2CdCD7deAe2A5585d4f", + "cc3bd5ce0f70ee7ad8fd47bda375d640dc7035da4746a94f0ccf30df96358f53": { + "address": "0x90f1810bfcE4b98dbc95B5b6AbF19A6324a57DB2", + "txHash": "0xdc41b907be3a3c7e70e9a8dbaeec2a24fc906f32efe144ca92d29f9583b37c6d", "layout": { "solcVersion": "0.8.21", "storage": [ @@ -2279,33 +2289,17 @@ "label": "router", "offset": 0, "slot": "101", - "type": "t_contract(IRouter)3800", - "contract": "AttestationRegistry", - "src": "src/AttestationRegistry.sol:16" - }, - { - "label": "version", - "offset": 20, - "slot": "101", - "type": "t_uint16", - "contract": "AttestationRegistry", - "src": "src/AttestationRegistry.sol:18" - }, - { - "label": "attestationIdCounter", - "offset": 22, - "slot": "101", - "type": "t_uint32", - "contract": "AttestationRegistry", - "src": "src/AttestationRegistry.sol:19" + "type": "t_contract(IRouter)3398", + "contract": "AttestationReader", + "src": "src/AttestationReader.sol:17" }, { - "label": "attestations", + "label": "easRegistry", "offset": 0, "slot": "102", - "type": "t_mapping(t_bytes32,t_struct(Attestation)3853_storage)", - "contract": "AttestationRegistry", - "src": "src/AttestationRegistry.sol:21" + "type": "t_contract(IEAS)3370", + "contract": "AttestationReader", + "src": "src/AttestationReader.sol:18" } ], "types": { @@ -2325,589 +2319,25 @@ "label": "bool", "numberOfBytes": "1" }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" + "t_contract(IEAS)3370": { + "label": "contract IEAS", + "numberOfBytes": "20" }, - "t_contract(IRouter)3800": { + "t_contract(IRouter)3398": { "label": "contract IRouter", "numberOfBytes": "20" }, - "t_mapping(t_bytes32,t_struct(Attestation)3853_storage)": { - "label": "mapping(bytes32 => struct Attestation)", - "numberOfBytes": "32" - }, - "t_struct(Attestation)3853_storage": { - "label": "struct Attestation", - "members": [ - { - "label": "attestationId", - "type": "t_bytes32", - "offset": 0, - "slot": "0" - }, - { - "label": "schemaId", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - }, - { - "label": "replacedBy", - "type": "t_bytes32", - "offset": 0, - "slot": "2" - }, - { - "label": "attester", - "type": "t_address", - "offset": 0, - "slot": "3" - }, - { - "label": "portal", - "type": "t_address", - "offset": 0, - "slot": "4" - }, - { - "label": "attestedDate", - "type": "t_uint64", - "offset": 20, - "slot": "4" - }, - { - "label": "expirationDate", - "type": "t_uint64", - "offset": 0, - "slot": "5" - }, - { - "label": "revocationDate", - "type": "t_uint64", - "offset": 8, - "slot": "5" - }, - { - "label": "version", - "type": "t_uint16", - "offset": 16, - "slot": "5" - }, - { - "label": "revoked", - "type": "t_bool", - "offset": 18, - "slot": "5" - }, - { - "label": "subject", - "type": "t_bytes_storage", - "offset": 0, - "slot": "6" - }, - { - "label": "attestationData", - "type": "t_bytes_storage", - "offset": 0, - "slot": "7" - } - ], - "numberOfBytes": "256" - }, - "t_uint16": { - "label": "uint16", - "numberOfBytes": "2" - }, "t_uint256": { "label": "uint256", "numberOfBytes": "32" }, - "t_uint32": { - "label": "uint32", - "numberOfBytes": "4" - }, - "t_uint64": { - "label": "uint64", - "numberOfBytes": "8" - }, "t_uint8": { "label": "uint8", "numberOfBytes": "1" } - } - }, - "allAddresses": ["0x2ff05A30f2CC53754E44b2CdCD7deAe2A5585d4f", "0x69Ae216B5CE47Fe5Ff48F36367F0A4d5c9C6C581"] - }, - "d3839952abe24ccc6cd8803a91942cfbedf96e5be08d5c3ab72758d5edd7a91d": { - "address": "0xC4A1f3553f4bE4C07be7d70Ecbb9Cd67ee22A299", - "layout": { - "solcVersion": "0.8.21", - "storage": [ - { - "label": "_initialized", - "offset": 0, - "slot": "0", - "type": "t_uint8", - "contract": "Initializable", - "src": "openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol:63", - "retypedFrom": "bool" - }, - { - "label": "_initializing", - "offset": 1, - "slot": "0", - "type": "t_bool", - "contract": "Initializable", - "src": "openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol:68" - }, - { - "label": "__gap", - "offset": 0, - "slot": "1", - "type": "t_array(t_uint256)50_storage", - "contract": "ContextUpgradeable", - "src": "openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol:36" - }, - { - "label": "_owner", - "offset": 0, - "slot": "51", - "type": "t_address", - "contract": "OwnableUpgradeable", - "src": "openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol:22" - }, - { - "label": "__gap", - "offset": 0, - "slot": "52", - "type": "t_array(t_uint256)49_storage", - "contract": "OwnableUpgradeable", - "src": "openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol:94" - }, - { - "label": "router", - "offset": 0, - "slot": "101", - "type": "t_contract(IRouter)3800", - "contract": "ModuleRegistry", - "src": "src/ModuleRegistry.sol:18" - }, - { - "label": "modules", - "offset": 0, - "slot": "102", - "type": "t_mapping(t_address,t_struct(Module)3885_storage)", - "contract": "ModuleRegistry", - "src": "src/ModuleRegistry.sol:20" - }, - { - "label": "moduleAddresses", - "offset": 0, - "slot": "103", - "type": "t_array(t_address)dyn_storage", - "contract": "ModuleRegistry", - "src": "src/ModuleRegistry.sol:22" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_address)dyn_storage": { - "label": "address[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]", - "numberOfBytes": "1568" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_contract(IRouter)3800": { - "label": "contract IRouter", - "numberOfBytes": "20" - }, - "t_mapping(t_address,t_struct(Module)3885_storage)": { - "label": "mapping(address => struct Module)", - "numberOfBytes": "32" - }, - "t_string_storage": { - "label": "string", - "numberOfBytes": "32" - }, - "t_struct(Module)3885_storage": { - "label": "struct Module", - "members": [ - { - "label": "moduleAddress", - "type": "t_address", - "offset": 0, - "slot": "0" - }, - { - "label": "name", - "type": "t_string_storage", - "offset": 0, - "slot": "1" - }, - { - "label": "description", - "type": "t_string_storage", - "offset": 0, - "slot": "2" - } - ], - "numberOfBytes": "96" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint8": { - "label": "uint8", - "numberOfBytes": "1" - } - } - }, - "allAddresses": ["0xC4A1f3553f4bE4C07be7d70Ecbb9Cd67ee22A299", "0xc70a8a53bB389b1FDD2d4a0CF0f865c7866175b4"] - }, - "d99b3b345be3281a62d350dd3f4b0dbee11a149a42369670b897db21539dad09": { - "address": "0x2fcCfC76566621A3c1F424970c89a7Cd2D603989", - "layout": { - "solcVersion": "0.8.21", - "storage": [ - { - "label": "_initialized", - "offset": 0, - "slot": "0", - "type": "t_uint8", - "contract": "Initializable", - "src": "openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol:63", - "retypedFrom": "bool" - }, - { - "label": "_initializing", - "offset": 1, - "slot": "0", - "type": "t_bool", - "contract": "Initializable", - "src": "openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol:68" - }, - { - "label": "__gap", - "offset": 0, - "slot": "1", - "type": "t_array(t_uint256)50_storage", - "contract": "ContextUpgradeable", - "src": "openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol:36" - }, - { - "label": "_owner", - "offset": 0, - "slot": "51", - "type": "t_address", - "contract": "OwnableUpgradeable", - "src": "openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol:22" - }, - { - "label": "__gap", - "offset": 0, - "slot": "52", - "type": "t_array(t_uint256)49_storage", - "contract": "OwnableUpgradeable", - "src": "openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol:94" - }, - { - "label": "router", - "offset": 0, - "slot": "101", - "type": "t_contract(IRouter)3800", - "contract": "PortalRegistry", - "src": "src/PortalRegistry.sol:18" - }, - { - "label": "portals", - "offset": 0, - "slot": "102", - "type": "t_mapping(t_address,t_struct(Portal)3878_storage)", - "contract": "PortalRegistry", - "src": "src/PortalRegistry.sol:20" - }, - { - "label": "issuers", - "offset": 0, - "slot": "103", - "type": "t_mapping(t_address,t_bool)", - "contract": "PortalRegistry", - "src": "src/PortalRegistry.sol:22" - }, - { - "label": "portalAddresses", - "offset": 0, - "slot": "104", - "type": "t_array(t_address)dyn_storage", - "contract": "PortalRegistry", - "src": "src/PortalRegistry.sol:24" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_address)dyn_storage": { - "label": "address[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]", - "numberOfBytes": "1568" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_contract(IRouter)3800": { - "label": "contract IRouter", - "numberOfBytes": "20" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_struct(Portal)3878_storage)": { - "label": "mapping(address => struct Portal)", - "numberOfBytes": "32" - }, - "t_string_storage": { - "label": "string", - "numberOfBytes": "32" - }, - "t_struct(Portal)3878_storage": { - "label": "struct Portal", - "members": [ - { - "label": "id", - "type": "t_address", - "offset": 0, - "slot": "0" - }, - { - "label": "ownerAddress", - "type": "t_address", - "offset": 0, - "slot": "1" - }, - { - "label": "modules", - "type": "t_array(t_address)dyn_storage", - "offset": 0, - "slot": "2" - }, - { - "label": "isRevocable", - "type": "t_bool", - "offset": 0, - "slot": "3" - }, - { - "label": "name", - "type": "t_string_storage", - "offset": 0, - "slot": "4" - }, - { - "label": "description", - "type": "t_string_storage", - "offset": 0, - "slot": "5" - }, - { - "label": "ownerName", - "type": "t_string_storage", - "offset": 0, - "slot": "6" - } - ], - "numberOfBytes": "224" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint8": { - "label": "uint8", - "numberOfBytes": "1" - } - } - }, - "allAddresses": ["0x2fcCfC76566621A3c1F424970c89a7Cd2D603989", "0xbcbD81b00033FFCEd2AbFaf6DfA8c3f68CE0e67e"] - }, - "7cb0f5d61af565dfb5f94a78e471d8d9ed42c8ee97eddcd926d395437ca8b435": { - "address": "0x4423F69F699B63456DdeB97e46F909c08D61029a", - "layout": { - "solcVersion": "0.8.21", - "storage": [ - { - "label": "_initialized", - "offset": 0, - "slot": "0", - "type": "t_uint8", - "contract": "Initializable", - "src": "openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol:63", - "retypedFrom": "bool" - }, - { - "label": "_initializing", - "offset": 1, - "slot": "0", - "type": "t_bool", - "contract": "Initializable", - "src": "openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol:68" - }, - { - "label": "__gap", - "offset": 0, - "slot": "1", - "type": "t_array(t_uint256)50_storage", - "contract": "ContextUpgradeable", - "src": "openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol:36" - }, - { - "label": "_owner", - "offset": 0, - "slot": "51", - "type": "t_address", - "contract": "OwnableUpgradeable", - "src": "openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol:22" - }, - { - "label": "__gap", - "offset": 0, - "slot": "52", - "type": "t_array(t_uint256)49_storage", - "contract": "OwnableUpgradeable", - "src": "openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol:94" - }, - { - "label": "router", - "offset": 0, - "slot": "101", - "type": "t_contract(IRouter)3333", - "contract": "SchemaRegistry", - "src": "src/SchemaRegistry.sol:15" - }, - { - "label": "schemas", - "offset": 0, - "slot": "102", - "type": "t_mapping(t_bytes32,t_struct(Schema)3395_storage)", - "contract": "SchemaRegistry", - "src": "src/SchemaRegistry.sol:17" - }, - { - "label": "schemaIds", - "offset": 0, - "slot": "103", - "type": "t_array(t_bytes32)dyn_storage", - "contract": "SchemaRegistry", - "src": "src/SchemaRegistry.sol:19" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_bytes32)dyn_storage": { - "label": "bytes32[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]", - "numberOfBytes": "1568" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_contract(IRouter)3333": { - "label": "contract IRouter", - "numberOfBytes": "20" - }, - "t_mapping(t_bytes32,t_struct(Schema)3395_storage)": { - "label": "mapping(bytes32 => struct Schema)", - "numberOfBytes": "32" - }, - "t_string_storage": { - "label": "string", - "numberOfBytes": "32" - }, - "t_struct(Schema)3395_storage": { - "label": "struct Schema", - "members": [ - { - "label": "name", - "type": "t_string_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "description", - "type": "t_string_storage", - "offset": 0, - "slot": "1" - }, - { - "label": "context", - "type": "t_string_storage", - "offset": 0, - "slot": "2" - }, - { - "label": "schema", - "type": "t_string_storage", - "offset": 0, - "slot": "3" - } - ], - "numberOfBytes": "128" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint8": { - "label": "uint8", - "numberOfBytes": "1" - } - } - }, - "allAddresses": ["0x4423F69F699B63456DdeB97e46F909c08D61029a", "0x2aF74120BD6078F6641d63aD69Eb5e63eC692874"] + }, + "namespaces": {} + } } } } diff --git a/contracts/.openzeppelin/unknown-59144.json b/contracts/.openzeppelin/unknown-59144.json index 1c593aa1..1bb60f5c 100644 --- a/contracts/.openzeppelin/unknown-59144.json +++ b/contracts/.openzeppelin/unknown-59144.json @@ -29,6 +29,11 @@ "address": "0x0f95dCec4c7a93F2637eb13b655F2223ea036B59", "txHash": "0x27aed824935b2b2663a1d5c86d09d87445867b8e408310d159c5cd5cafdfcf9a", "kind": "transparent" + }, + { + "address": "0x40871e247CF6b8fd8794c9c56bB5c2b8a4FA3B6c", + "txHash": "0x757b84c93a6c591dcc56d90756362c0b3fba11fc6373da714389ff078ddd2b91", + "kind": "transparent" } ], "impls": { @@ -1895,6 +1900,107 @@ } } } + }, + "cc3bd5ce0f70ee7ad8fd47bda375d640dc7035da4746a94f0ccf30df96358f53": { + "address": "0xf6B63284007A59BAE3e5e1c934fa1d6a5513e0a3", + "txHash": "0x61b46259e9dcfc2cd30f420e597dff2080f2dfde583eebef2189a40addae60e2", + "layout": { + "solcVersion": "0.8.21", + "storage": [ + { + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8", + "contract": "Initializable", + "src": "openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol:63", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool", + "contract": "Initializable", + "src": "openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol:68" + }, + { + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol:36" + }, + { + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address", + "contract": "OwnableUpgradeable", + "src": "openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage", + "contract": "OwnableUpgradeable", + "src": "openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol:94" + }, + { + "label": "router", + "offset": 0, + "slot": "101", + "type": "t_contract(IRouter)3398", + "contract": "AttestationReader", + "src": "src/AttestationReader.sol:17" + }, + { + "label": "easRegistry", + "offset": 0, + "slot": "102", + "type": "t_contract(IEAS)3370", + "contract": "AttestationReader", + "src": "src/AttestationReader.sol:18" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_contract(IEAS)3370": { + "label": "contract IEAS", + "numberOfBytes": "20" + }, + "t_contract(IRouter)3398": { + "label": "contract IRouter", + "numberOfBytes": "20" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + }, + "namespaces": {} + } } } } diff --git a/contracts/script/deploy/deployEverything.ts b/contracts/script/deploy/deployEverything.ts index e7bdb2ce..236ceeee 100644 --- a/contracts/script/deploy/deployEverything.ts +++ b/contracts/script/deploy/deployEverything.ts @@ -1,8 +1,13 @@ import { ethers, run, upgrades } from "hardhat"; +import dotenv from "dotenv"; + +dotenv.config({ path: "../.env" }); async function main() { console.log(`START SCRIPT`); + const easRegistryAddress = process.env.EAS_REGISTRY_ADDRESS; + console.log("Deploying Router..."); const Router = await ethers.getContractFactory("Router"); const router = await upgrades.deployProxy(Router); @@ -96,6 +101,25 @@ async function main() { console.log(`\n----\n`); + console.log("Deploying AttestationReader..."); + const AttestationReader = await ethers.getContractFactory("AttestationReader"); + const attestationReader = await upgrades.deployProxy(AttestationReader); + await attestationReader.waitForDeployment(); + const attestationReaderProxyAddress = await attestationReader.getAddress(); + const attestationReaderImplementationAddress = await upgrades.erc1967.getImplementationAddress( + attestationReaderProxyAddress, + ); + + await run("verify:verify", { + address: attestationReaderProxyAddress, + }); + + console.log(`AttestationReader successfully deployed and verified!`); + console.log(`Proxy is at ${attestationReaderProxyAddress}`); + console.log(`Implementation is at ${attestationReaderImplementationAddress}`); + + console.log(`\n----\n`); + console.log("Updating Router with the registries addresses..."); await router.updateAttestationRegistry(attestationRegistryProxyAddress); await router.updateModuleRegistry(moduleRegistryProxyAddress); @@ -127,12 +151,23 @@ async function main() { console.log(`\n----\n`); + console.log("Updating AttestationReader with the Router address..."); + await attestationReader.updateRouter(routerProxyAddress); + console.log("AttestationReader updated with router address!"); + + console.log("Updating AttestationReader with the EAS Registry address..."); + await attestationReader.updateEASRegistryAddress(easRegistryAddress); + console.log("AttestationReader updated with EAS registry address!"); + + console.log(`\n----\n`); + console.log(`** SUMMARY **`); console.log(`Router = ${routerProxyAddress}`); console.log(`AttestationRegistry = ${attestationRegistryProxyAddress}`); console.log(`ModuleRegistry = ${moduleRegistryProxyAddress}`); console.log(`PortalRegistry = ${portalRegistryProxyAddress}`); console.log(`SchemaRegistry = ${schemaRegistryProxyAddress}`); + console.log(`AttestationReader = ${attestationReaderProxyAddress}`); console.log(`END SCRIPT`); } diff --git a/contracts/script/upgrade/checkUpgradeability.ts b/contracts/script/upgrade/checkUpgradeability.ts index aa9f2f94..127885c2 100644 --- a/contracts/script/upgrade/checkUpgradeability.ts +++ b/contracts/script/upgrade/checkUpgradeability.ts @@ -29,6 +29,11 @@ async function main() { await upgrades.validateImplementation(SchemaRegistry); console.log("SchemaRegistry OK"); + console.log("Checking AttestationReader..."); + const AttestationReader = await ethers.getContractFactory("AttestationReader"); + await upgrades.validateImplementation(AttestationReader); + console.log("AttestationReader OK"); + console.log("All contracts are upgradeable!"); } diff --git a/contracts/script/upgrade/checkUpgradeable.ts b/contracts/script/upgrade/checkUpgradeable.ts index 0d393910..ac157ab7 100644 --- a/contracts/script/upgrade/checkUpgradeable.ts +++ b/contracts/script/upgrade/checkUpgradeable.ts @@ -33,6 +33,12 @@ async function main() { await upgrades.validateUpgrade(schemaRegistryProxyAddress, SchemaRegistry, { kind: "transparent" }); + console.log("Checking AttestationReader..."); + const attestationReaderProxyAddress = process.env.ATTESTATION_READER_ADDRESS ?? ""; + const AttestationReader = await ethers.getContractFactory("AttestationReader"); + + await upgrades.validateUpgrade(attestationReaderProxyAddress, AttestationReader, { kind: "transparent" }); + console.log("All contracts are upgradeable!"); } diff --git a/contracts/script/upgrade/forceUpgradeEverything.ts b/contracts/script/upgrade/forceUpgradeEverything.ts index 4f51d027..8ad1aa5e 100644 --- a/contracts/script/upgrade/forceUpgradeEverything.ts +++ b/contracts/script/upgrade/forceUpgradeEverything.ts @@ -31,6 +31,11 @@ async function main() { throw new Error("Schema proxy address not found"); } + const attestationReaderProxyAddress = process.env.ATTESTATION_READER_ADDRESS ?? ""; + if (!attestationReaderProxyAddress) { + throw new Error("Attestation reader proxy address not found"); + } + console.log("Upgrading Router, with proxy at", routerProxyAddress); const Router = await ethers.getContractFactory("Router"); await upgrades.upgradeProxy(routerProxyAddress, Router, { @@ -83,6 +88,16 @@ async function main() { console.log(`\n----\n`); + console.log("Upgrading AttestationReader, with proxy at", attestationReaderProxyAddress); + const AttestationReader = await ethers.getContractFactory("AttestationReader"); + await upgrades.upgradeProxy(attestationReaderProxyAddress, AttestationReader, { + redeployImplementation: "always", + }); + + console.log(`AttestationReader successfully upgraded!`); + + console.log(`\n----\n`); + const routerImplementationAddress = await upgrades.erc1967.getImplementationAddress(routerProxyAddress); await run("verify:verify", { @@ -145,12 +160,27 @@ async function main() { console.log(`\n----\n`); + const attestationReaderImplementationAddress = await upgrades.erc1967.getImplementationAddress( + attestationReaderProxyAddress, + ); + + await run("verify:verify", { + address: attestationReaderProxyAddress, + }); + + console.log(`AttestationReader successfully upgraded and verified!`); + console.log(`Proxy is at ${attestationReaderProxyAddress}`); + console.log(`Implementation is at ${attestationReaderImplementationAddress}`); + + console.log(`\n----\n`); + console.log(`** SUMMARY **`); console.log(`Router = ${routerProxyAddress}`); console.log(`AttestationRegistry = ${attestationProxyAddress}`); console.log(`ModuleRegistry = ${moduleProxyAddress}`); console.log(`PortalRegistry = ${portalProxyAddress}`); console.log(`SchemaRegistry = ${schemaProxyAddress}`); + console.log(`AttestationReader = ${attestationReaderProxyAddress}`); console.log(`END SCRIPT`); } diff --git a/contracts/script/upgrade/upgradeEverything.ts b/contracts/script/upgrade/upgradeEverything.ts index 1b3f79db..572248e2 100644 --- a/contracts/script/upgrade/upgradeEverything.ts +++ b/contracts/script/upgrade/upgradeEverything.ts @@ -31,6 +31,11 @@ async function main() { throw new Error("Schema proxy address not found"); } + const attestationReaderProxyAddress = process.env.ATTESTATION_READER_ADDRESS ?? ""; + if (!attestationReaderProxyAddress) { + throw new Error("Attestation reader proxy address not found"); + } + console.log("Upgrading Router, with proxy at", routerProxyAddress); const Router = await ethers.getContractFactory("Router"); await upgrades.upgradeProxy(routerProxyAddress, Router); @@ -73,6 +78,14 @@ async function main() { console.log(`\n----\n`); + console.log("Upgrading AttestationReader, with proxy at", attestationReaderProxyAddress); + const AttestationReader = await ethers.getContractFactory("AttestationReader"); + await upgrades.upgradeProxy(attestationReaderProxyAddress, AttestationReader); + + console.log(`AttestationReader successfully upgraded!`); + + console.log(`\n----\n`); + const routerImplementationAddress = await upgrades.erc1967.getImplementationAddress(routerProxyAddress); await run("verify:verify", { @@ -135,12 +148,27 @@ async function main() { console.log(`\n----\n`); + const attestationReaderImplementationAddress = await upgrades.erc1967.getImplementationAddress( + attestationReaderProxyAddress, + ); + + await run("verify:verify", { + address: attestationReaderProxyAddress, + }); + + console.log(`AttestationReader successfully upgraded and verified!`); + console.log(`Proxy is at ${attestationReaderProxyAddress}`); + console.log(`Implementation is at ${attestationReaderImplementationAddress}`); + + console.log(`\n----\n`); + console.log(`** SUMMARY **`); console.log(`Router = ${routerProxyAddress}`); console.log(`AttestationRegistry = ${attestationProxyAddress}`); console.log(`ModuleRegistry = ${moduleProxyAddress}`); console.log(`PortalRegistry = ${portalProxyAddress}`); console.log(`SchemaRegistry = ${schemaProxyAddress}`); + console.log(`AttestationReader = ${attestationReaderProxyAddress}`); console.log(`END SCRIPT`); } diff --git a/contracts/src/AttestationReader.sol b/contracts/src/AttestationReader.sol new file mode 100644 index 00000000..ebb6fbc2 --- /dev/null +++ b/contracts/src/AttestationReader.sol @@ -0,0 +1,96 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.21; + +import { OwnableUpgradeable } from "openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol"; +import { Attestation as EASAttestation, IEAS } from "./interface/IEAS.sol"; +import { Attestation } from "./types/Structs.sol"; +import { AttestationRegistry } from "./AttestationRegistry.sol"; +import { PortalRegistry } from "./PortalRegistry.sol"; +import { IRouter } from "./interface/IRouter.sol"; + +/** + * @title Attestation Reader + * @author Consensys + * @notice This contract allows to read attestations stored by EAS or Verax + */ +contract AttestationReader is OwnableUpgradeable { + IRouter public router; + IEAS public easRegistry; + + /// @notice Error thrown when an invalid Router address is given + error RouterInvalid(); + /// @notice Error thrown when an invalid EAS registry address is given + error EASAddressInvalid(); + + /** + * @notice Contract initialization + */ + function initialize() public initializer { + __Ownable_init(); + } + + /// @custom:oz-upgrades-unsafe-allow constructor + constructor() { + _disableInitializers(); + } + + /** + * @notice Changes the address for the Router + * @dev Only the registry owner can call this method + */ + function updateRouter(address _router) public onlyOwner { + if (_router == address(0)) revert RouterInvalid(); + router = IRouter(_router); + } + + /** + * @notice Changes the address for the EAS attestation registry + * @param _easRegistryAddress the new EAS Registry address + * @dev Only the owner can call this method + */ + function updateEASRegistryAddress(address _easRegistryAddress) public onlyOwner { + if (_easRegistryAddress == address(0)) revert EASAddressInvalid(); + easRegistry = IEAS(_easRegistryAddress); + } + + /** + * @notice Gets an attestation by its identifier + * @param uid the attestation identifier + * @return attestation the attestation, following EAS's format + */ + function getAttestation(bytes32 uid) public view returns (EASAttestation memory attestation) { + attestation = easRegistry.getAttestation(uid); + if (attestation.schema == bytes32(0)) { + AttestationRegistry veraxAttestationRegistry = AttestationRegistry(router.getAttestationRegistry()); + Attestation memory veraxAttestation = veraxAttestationRegistry.getAttestation(uid); + attestation = _convertToEASAttestation(veraxAttestation); + } + } + + /** + * @notice Converts a Verax attestation to an EAS attestation + * @param veraxAttestation the Verax attestation to convert + * @return The EAS attestation converted from the Verax attestation + * @dev The EAS attestation will have a "zero address" subject if the original subject is not an address + */ + function _convertToEASAttestation(Attestation memory veraxAttestation) private view returns (EASAttestation memory) { + address subject = address(0); + + if (veraxAttestation.subject.length == 32) subject = abi.decode(veraxAttestation.subject, (address)); + if (veraxAttestation.subject.length == 20) subject = address(uint160(bytes20(veraxAttestation.subject))); + + return + EASAttestation( + veraxAttestation.attestationId, + veraxAttestation.schemaId, + veraxAttestation.attestedDate, + veraxAttestation.expirationDate, + veraxAttestation.revocationDate, + bytes32(0), + subject, + veraxAttestation.attester, + PortalRegistry(router.getPortalRegistry()).getPortalByAddress(veraxAttestation.portal).isRevocable, + veraxAttestation.attestationData + ); + } +} diff --git a/contracts/src/interface/IEAS.sol b/contracts/src/interface/IEAS.sol new file mode 100644 index 00000000..7c2e3ac0 --- /dev/null +++ b/contracts/src/interface/IEAS.sol @@ -0,0 +1,29 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.21; + +/// @notice A struct representing a single attestation. +// solhint-disable-next-line max-line-length +// this definition was taken from: https://github.com/ethereum-attestation-service/eas-contracts/blob/master/contracts/Common.sol#L25 +struct Attestation { + bytes32 uid; // A unique identifier of the attestation. + bytes32 schema; // The unique identifier of the schema. + uint64 time; // The time when the attestation was created (Unix timestamp). + uint64 expirationTime; // The time when the attestation expires (Unix timestamp). + uint64 revocationTime; // The time when the attestation was revoked (Unix timestamp). + bytes32 refUID; // The UID of the related attestation. + address recipient; // The recipient of the attestation. + address attester; // The attester/sender of the attestation. + bool revocable; // Whether the attestation is revocable. + bytes data; // Custom attestation data. +} + +/// @title IEAS +/// @notice EAS - Ethereum Attestation Service interface. +// solhint-disable-next-line max-line-length +// this definition was taken from: https://github.com/ethereum-attestation-service/eas-contracts/blob/master/contracts/IEAS.sol#L86 +interface IEAS { + /// @notice Returns an existing attestation by UID. + /// @param uid The UID of the attestation to retrieve. + /// @return The attestation data members. + function getAttestation(bytes32 uid) external view returns (Attestation memory); +} diff --git a/contracts/test/AttestationReader.t.sol b/contracts/test/AttestationReader.t.sol new file mode 100644 index 00000000..b90461c2 --- /dev/null +++ b/contracts/test/AttestationReader.t.sol @@ -0,0 +1,134 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.21; + +import { Test } from "forge-std/Test.sol"; +import { AttestationReader } from "../src/AttestationReader.sol"; +import { AttestationRegistryMock } from "./mocks/AttestationRegistryMock.sol"; +import { AttestationRegistry } from "../src/AttestationRegistry.sol"; +import { PortalRegistryMock } from "./mocks/PortalRegistryMock.sol"; +import { PortalRegistry } from "../src/PortalRegistry.sol"; +import { EASRegistryMock } from "./mocks/EASRegistryMock.sol"; +import { AttestationPayload } from "../src/types/Structs.sol"; +import { Attestation as EASAttestation } from "../src/interface/IEAS.sol"; +import { Router } from "../src/Router.sol"; + +contract AttestationReaderTest is Test { + address public portal = makeAddr("portal"); + address public attester = makeAddr("attester"); + Router public router; + AttestationReader public attestationReader; + address public attestationRegistryAddress; + address public portalRegistryAddress; + address public easRegistryAddress; + + function setUp() public { + router = new Router(); + router.initialize(); + + portalRegistryAddress = address(new PortalRegistryMock()); + attestationRegistryAddress = address(new AttestationRegistryMock()); + easRegistryAddress = address(new EASRegistryMock()); + vm.startPrank(address(0)); + attestationReader = new AttestationReader(); + attestationReader.updateRouter(address(router)); + attestationReader.updateEASRegistryAddress(easRegistryAddress); + vm.stopPrank(); + router.updatePortalRegistry(portalRegistryAddress); + router.updateAttestationRegistry(attestationRegistryAddress); + + PortalRegistry(portalRegistryAddress).register(portal, "Name", "Description", true, "Owner name"); + } + + function test_initialize_ContractAlreadyInitialized() public { + vm.expectRevert("Initializable: contract is already initialized"); + attestationReader.initialize(); + } + + function test_updateRouter() public { + AttestationReader testAttestationReader = new AttestationReader(); + + vm.prank(address(0)); + testAttestationReader.updateRouter(address(1)); + address routerAddress = address(testAttestationReader.router()); + assertEq(routerAddress, address(1)); + } + + function test_updateRouter_RouterInvalid() public { + AttestationReader testAttestationReader = new AttestationReader(); + + vm.expectRevert(AttestationReader.RouterInvalid.selector); + vm.prank(address(0)); + testAttestationReader.updateRouter(address(0)); + } + + function test_updateEASRegistryAddress() public { + AttestationReader testAttestationReader = new AttestationReader(); + + vm.prank(address(0)); + testAttestationReader.updateEASRegistryAddress(address(1)); + address easRegistryAddressActual = address(testAttestationReader.easRegistry()); + assertEq(easRegistryAddressActual, address(1)); + } + + function test_updateEASRegistryAddress_EASAddressInvalid() public { + AttestationReader testAttestationReader = new AttestationReader(); + + vm.expectRevert(AttestationReader.EASAddressInvalid.selector); + vm.prank(address(0)); + testAttestationReader.updateEASRegistryAddress(address(0)); + } + + function test_getAttestation_fromEAS(EASAttestation memory easAttestation) public { + vm.assume(easAttestation.schema.length != 0); + EASRegistryMock easRegistry = EASRegistryMock(easRegistryAddress); + easRegistry.addAttestation(easAttestation); + + EASAttestation memory registeredAttestation = attestationReader.getAttestation(easAttestation.uid); + _assertAttestation(easAttestation, registeredAttestation); + } + + function test_getAttestation_fromVerax(AttestationPayload memory attestationPayload) public { + attestationPayload.subject = abi.encode(address(1)); + vm.assume(attestationPayload.attestationData.length != 0); + EASAttestation memory attestation = _createAttestation(attestationPayload, 1); + + vm.startPrank(portal); + AttestationRegistry attestationRegistry = AttestationRegistry(attestationRegistryAddress); + attestationRegistry.attest(attestationPayload, attester); + + EASAttestation memory registeredAttestation = attestationReader.getAttestation(attestation.uid); + _assertAttestation(attestation, registeredAttestation); + } + + function _createAttestation( + AttestationPayload memory attestationPayload, + uint256 id + ) internal view returns (EASAttestation memory) { + EASAttestation memory attestation = EASAttestation( + bytes32(abi.encode(id)), + attestationPayload.schemaId, + uint64(block.timestamp), + attestationPayload.expirationDate, + 0, + bytes32(0), + abi.decode(attestationPayload.subject, (address)), + attester, + PortalRegistry(router.getPortalRegistry()).getPortalByAddress(portal).isRevocable, + attestationPayload.attestationData + ); + return attestation; + } + + function _assertAttestation(EASAttestation memory attestation1, EASAttestation memory attestation2) internal { + assertEq(attestation1.uid, attestation2.uid); + assertEq(attestation1.schema, attestation2.schema); + assertEq(attestation1.time, attestation2.time); + assertEq(attestation1.expirationTime, attestation2.expirationTime); + assertEq(attestation1.revocationTime, attestation2.revocationTime); + assertEq(attestation1.refUID, attestation2.refUID); + assertEq(attestation1.recipient, attestation2.recipient); + assertEq(attestation1.attester, attestation2.attester); + assertEq(attestation1.revocable, attestation2.revocable); + assertEq(attestation1.data.length, attestation2.data.length); + } +} diff --git a/contracts/test/mocks/EASRegistryMock.sol b/contracts/test/mocks/EASRegistryMock.sol new file mode 100644 index 00000000..b5770efe --- /dev/null +++ b/contracts/test/mocks/EASRegistryMock.sol @@ -0,0 +1,16 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.21; + +import { IEAS, Attestation } from "../../src/interface/IEAS.sol"; + +contract EASRegistryMock is IEAS { + mapping(bytes32 attestationId => Attestation attestation) private attestations; + + function getAttestation(bytes32 uid) external view override returns (Attestation memory) { + return attestations[uid]; + } + + function addAttestation(Attestation memory attestation) external { + attestations[attestation.uid] = attestation; + } +} From ea04d6f21e493cbde677c55d5c5da3c786923ad4 Mon Sep 17 00:00:00 2001 From: Alain Nicolas Date: Wed, 4 Oct 2023 14:54:13 +0200 Subject: [PATCH 18/36] feat: As an attestation consumer, I want to be able to check if an address has an attestation using the ERC-1155 owner method (#251) --- contracts/src/AttestationRegistry.sol | 30 +++++++++ contracts/test/AttestationRegistry.t.sol | 78 ++++++++++++++++++++++-- 2 files changed, 102 insertions(+), 6 deletions(-) diff --git a/contracts/src/AttestationRegistry.sol b/contracts/src/AttestationRegistry.sol index f0a922f2..472aa558 100644 --- a/contracts/src/AttestationRegistry.sol +++ b/contracts/src/AttestationRegistry.sol @@ -262,4 +262,34 @@ contract AttestationRegistry is OwnableUpgradeable { function getAttestationIdCounter() public view returns (uint32) { return attestationIdCounter; } + + /** + * @notice Checks if an address owns a given attestation following ERC-1155 + * @param account The address of the token holder + * @param id ID of the attestation + * @return The _owner's balance of the attestations on a given attestation ID + */ + function balanceOf(address account, uint256 id) public view returns (uint256) { + bytes32 attestationId = bytes32(abi.encode(id)); + Attestation memory attestation = attestations[attestationId]; + if (attestation.subject.length > 20 && keccak256(attestation.subject) == keccak256(abi.encode(account))) return 1; + if (attestation.subject.length == 20 && keccak256(attestation.subject) == keccak256(abi.encodePacked(account))) + return 1; + return 0; + } + + /** + * @notice Get the balance of multiple account/attestation pairs following ERC-1155 + * @param accounts The addresses of the attestation holders + * @param ids ID of the attestations + * @return The _owner's balance of the attestation for a given address (i.e. balance for each (owner, id) pair) + */ + function balanceOfBatch(address[] memory accounts, uint256[] memory ids) public view returns (uint256[] memory) { + if (accounts.length != ids.length) revert ArrayLengthMismatch(); + uint256[] memory result = new uint256[](accounts.length); + for (uint256 i = 0; i < accounts.length; i++) { + result[i] = balanceOf(accounts[i], ids[i]); + } + return result; + } } diff --git a/contracts/test/AttestationRegistry.t.sol b/contracts/test/AttestationRegistry.t.sol index f6d3f1b2..25cbace5 100644 --- a/contracts/test/AttestationRegistry.t.sol +++ b/contracts/test/AttestationRegistry.t.sol @@ -484,25 +484,91 @@ contract AttestationRegistryTest is Test { SchemaRegistryMock schemaRegistryMock = SchemaRegistryMock(router.getSchemaRegistry()); attestationPayload.schemaId = schemaRegistryMock.getIdFromSchemaString("schemaString"); schemaRegistryMock.createSchema("name", "description", "context", "schemaString"); - uint32 version = attestationRegistry.getAttestationIdCounter(); + uint32 attestationIdCounter = attestationRegistry.getAttestationIdCounter(); - assertEq(version, 0); + assertEq(attestationIdCounter, 0); vm.startPrank(portal); attestationRegistry.attest(attestationPayload, attester); - version = attestationRegistry.getAttestationIdCounter(); - assertEq(version, 1); + attestationIdCounter = attestationRegistry.getAttestationIdCounter(); + assertEq(attestationIdCounter, 1); attestationRegistry.attest(attestationPayload, attester); - version = attestationRegistry.getAttestationIdCounter(); - assertEq(version, 2); + attestationIdCounter = attestationRegistry.getAttestationIdCounter(); + assertEq(attestationIdCounter, 2); vm.stopPrank(); } + function test_balanceOf_subjectEncodedAddress(AttestationPayload memory attestationPayload) public { + vm.assume(attestationPayload.subject.length != 0); + vm.assume(attestationPayload.attestationData.length != 0); + SchemaRegistryMock schemaRegistryMock = SchemaRegistryMock(router.getSchemaRegistry()); + attestationPayload.schemaId = schemaRegistryMock.getIdFromSchemaString("schemaString"); + schemaRegistryMock.createSchema("name", "description", "context", "schemaString"); + + vm.startPrank(portal); + attestationPayload.subject = abi.encode(address(1)); + attestationRegistry.attest(attestationPayload, attester); + + uint256 balance = attestationRegistry.balanceOf(address(1), 1); + assertEq(balance, 1); + } + + function test_balanceOf_subjectPackedEncodedAddress(AttestationPayload memory attestationPayload) public { + vm.assume(attestationPayload.subject.length != 0); + vm.assume(attestationPayload.attestationData.length != 0); + SchemaRegistryMock schemaRegistryMock = SchemaRegistryMock(router.getSchemaRegistry()); + attestationPayload.schemaId = schemaRegistryMock.getIdFromSchemaString("schemaString"); + schemaRegistryMock.createSchema("name", "description", "context", "schemaString"); + + vm.startPrank(portal); + attestationPayload.subject = abi.encodePacked(address(1)); + attestationRegistry.attest(attestationPayload, attester); + + uint256 balance = attestationRegistry.balanceOf(address(1), 1); + assertEq(balance, 1); + } + + function test_balanceOfBatch(AttestationPayload memory attestationPayload) public { + vm.assume(attestationPayload.subject.length != 0); + vm.assume(attestationPayload.attestationData.length != 0); + SchemaRegistryMock schemaRegistryMock = SchemaRegistryMock(router.getSchemaRegistry()); + attestationPayload.schemaId = schemaRegistryMock.getIdFromSchemaString("schemaString"); + schemaRegistryMock.createSchema("name", "description", "context", "schemaString"); + + address[] memory owners = new address[](2); + owners[0] = address(1); + owners[1] = address(2); + + vm.startPrank(portal); + attestationPayload.subject = abi.encode(owners[0]); // Address fully encoded + attestationRegistry.attest(attestationPayload, attester); + + attestationPayload.subject = abi.encodePacked(owners[1]); + attestationRegistry.attest(attestationPayload, attester); // Address as subject + + uint256[] memory ids = new uint256[](2); + ids[0] = 1; + ids[1] = 2; + uint256[] memory balance = attestationRegistry.balanceOfBatch(owners, ids); + assertEq(balance[0], 1); + assertEq(balance[1], 1); + } + + function test_balanceOfBatch_ArrayLengthMismatch() public { + address[] memory owners = new address[](2); + owners[0] = address(1); + owners[1] = address(2); + uint256[] memory ids = new uint256[](1); + ids[0] = 1; + vm.expectRevert(AttestationRegistry.ArrayLengthMismatch.selector); + attestationRegistry.balanceOfBatch(owners, ids); + } + function _createAttestation( AttestationPayload memory attestationPayload, uint256 id From 1ddb29fafa2c7a8f8f19cf6ead9bfcbfcf279b72 Mon Sep 17 00:00:00 2001 From: Alain Nicolas Date: Thu, 5 Oct 2023 11:08:28 +0200 Subject: [PATCH 19/36] feat: As a Dev, I want to benefit from a skeleton of the SDK (#254) --- .eslintrc.json | 5 +- package.json | 3 +- pnpm-lock.yaml | 574 +++++++++++++++++- pnpm-workspace.yaml | 1 + sdk/.env.example | 1 + sdk/README.md | 177 +++++- sdk/examples/AttestationFindOneById.ts | 9 + sdk/index.html | 18 + sdk/package.json | 31 + sdk/src/AttestationRegistryWrapper.ts | 90 +++ sdk/src/VeraxSdk.ts | 53 ++ sdk/src/abi/AttestationRegistry.ts | 610 ++++++++++++++++++++ sdk/src/dataMapper/AttestationDataMapper.ts | 3 + sdk/src/dataMapper/BaseDataMapper.ts | 20 + sdk/src/dataMapper/ModuleDataMapper.ts | 3 + sdk/src/dataMapper/PortalDataMapper.ts | 3 + sdk/src/dataMapper/SchemaDataMapper.ts | 3 + sdk/src/interface/Conf.ts | 10 + sdk/tsconfig.json | 10 + tsconfig.json | 3 + 20 files changed, 1601 insertions(+), 26 deletions(-) create mode 100644 sdk/.env.example create mode 100644 sdk/examples/AttestationFindOneById.ts create mode 100644 sdk/index.html create mode 100644 sdk/package.json create mode 100644 sdk/src/AttestationRegistryWrapper.ts create mode 100644 sdk/src/VeraxSdk.ts create mode 100644 sdk/src/abi/AttestationRegistry.ts create mode 100644 sdk/src/dataMapper/AttestationDataMapper.ts create mode 100644 sdk/src/dataMapper/BaseDataMapper.ts create mode 100644 sdk/src/dataMapper/ModuleDataMapper.ts create mode 100644 sdk/src/dataMapper/PortalDataMapper.ts create mode 100644 sdk/src/dataMapper/SchemaDataMapper.ts create mode 100644 sdk/src/interface/Conf.ts create mode 100644 sdk/tsconfig.json diff --git a/.eslintrc.json b/.eslintrc.json index 2f751e50..9949a9eb 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -5,12 +5,13 @@ "parser": "@typescript-eslint/parser", "plugins": ["@typescript-eslint"], "parserOptions": { - "project": ["tsconfig.json"], "ecmaVersion": "latest", "sourceType": "module" }, "extends": ["eslint:recommended", "plugin:@typescript-eslint/recommended"], - "rules": {}, + "rules": { + "@typescript-eslint/no-explicit-any": 1 + }, "settings": { "import/resolver": { "node": { diff --git a/package.json b/package.json index b48624ab..b40ba4fa 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,8 @@ "@typescript-eslint/parser": "^6.7.3", "eslint": "^8.50.0", "husky": "^8.0.3", - "prettier": "^2.8.8" + "prettier": "^2.8.8", + "typescript": "^5.2.2" }, "pnpm": { "overrides": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0f780f7f..ba0f8bb2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,5 +1,9 @@ lockfileVersion: '6.0' +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + overrides: flat@<5.0.1: '>=5.0.1' ejs@<3.1.7: '>=3.1.7' @@ -26,6 +30,9 @@ importers: prettier: specifier: ^2.8.8 version: 2.8.8 + typescript: + specifier: ^5.2.2 + version: 5.2.2 contracts: devDependencies: @@ -57,6 +64,25 @@ importers: specifier: ^0.0.5 version: 0.0.5(prettier-plugin-solidity@1.1.3)(prettier@2.8.8) + sdk: + dependencies: + '@apollo/client': + specifier: ^3.8.4 + version: 3.8.4(graphql@16.8.1) + graphql: + specifier: ^16.8.1 + version: 16.8.1 + viem: + specifier: ^1.14.0 + version: 1.15.1(typescript@5.2.2) + devDependencies: + ts-node: + specifier: ^10.9.1 + version: 10.9.1(@types/node@20.8.0)(typescript@5.2.2) + vite: + specifier: ^4.4.9 + version: 4.4.10(@types/node@20.8.0) + subgraph: devDependencies: '@graphprotocol/graph-cli': @@ -77,6 +103,44 @@ packages: resolution: {integrity: sha512-0h+FrQDqe2Wn+IIGFkTCd4aAwTJ+7834Ek1COohCyV26AXhwQ7WQaz+4F/nLOeVl/3BtWHOHLPsq46V8YB46Eg==} dev: true + /@adraffy/ens-normalize@1.9.4: + resolution: {integrity: sha512-UK0bHA7hh9cR39V+4gl2/NnBBjoXIxkuWAPCaY4X7fbH4L/azIi7ilWOCjMUYfpJgraLUAqkRi2BqrjME8Rynw==} + dev: false + + /@apollo/client@3.8.4(graphql@16.8.1): + resolution: {integrity: sha512-QFXE4ylSHUa6LgYoOGsPysJCm4YJOOM1NwHyF6msZdZXIerqUVpLvxQOdQEXgS0RWvYiBMC1wGOWKzJKSWBdAg==} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 + graphql-ws: ^5.5.5 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + subscriptions-transport-ws: ^0.9.0 || ^0.11.0 + peerDependenciesMeta: + graphql-ws: + optional: true + react: + optional: true + react-dom: + optional: true + subscriptions-transport-ws: + optional: true + dependencies: + '@graphql-typed-document-node/core': 3.2.0(graphql@16.8.1) + '@wry/context': 0.7.3 + '@wry/equality': 0.5.6 + '@wry/trie': 0.4.3 + graphql: 16.8.1 + graphql-tag: 2.12.6(graphql@16.8.1) + hoist-non-react-statics: 3.3.2 + optimism: 0.17.5 + prop-types: 15.8.1 + response-iterator: 0.2.6 + symbol-observable: 4.0.0 + ts-invariant: 0.10.3 + tslib: 2.6.2 + zen-observable-ts: 1.2.5 + dev: false + /@aws-crypto/sha256-js@1.2.2: resolution: {integrity: sha512-Nr1QJIbW/afYYGzYvrF70LtaHrIRtd4TNAglX8BvlfxJLZ45SAmueIKYl5tWoNBPzp65ymXGFK0Bb1vZUpuc9g==} dependencies: @@ -167,6 +231,204 @@ packages: '@jridgewell/trace-mapping': 0.3.9 dev: true + /@esbuild/android-arm64@0.18.20: + resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-arm@0.18.20: + resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-x64@0.18.20: + resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/darwin-arm64@0.18.20: + resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@esbuild/darwin-x64@0.18.20: + resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@esbuild/freebsd-arm64@0.18.20: + resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/freebsd-x64@0.18.20: + resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-arm64@0.18.20: + resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-arm@0.18.20: + resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-ia32@0.18.20: + resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64@0.18.20: + resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-mips64el@0.18.20: + resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-ppc64@0.18.20: + resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-riscv64@0.18.20: + resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-s390x@0.18.20: + resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-x64@0.18.20: + resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/netbsd-x64@0.18.20: + resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/openbsd-x64@0.18.20: + resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/sunos-x64@0.18.20: + resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-arm64@0.18.20: + resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-ia32@0.18.20: + resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-x64@0.18.20: + resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /@eslint-community/eslint-utils@4.4.0(eslint@8.50.0): resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -614,6 +876,14 @@ packages: assemblyscript: 0.19.10 dev: true + /@graphql-typed-document-node/core@3.2.0(graphql@16.8.1): + resolution: {integrity: sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==} + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + graphql: 16.8.1 + dev: false + /@humanwhocodes/config-array@0.11.11: resolution: {integrity: sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==} engines: {node: '>=10.10.0'} @@ -687,6 +957,12 @@ packages: '@noble/hashes': 1.3.1 dev: true + /@noble/curves@1.2.0: + resolution: {integrity: sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==} + dependencies: + '@noble/hashes': 1.3.2 + dev: false + /@noble/hashes@1.1.2: resolution: {integrity: sha512-KYRCASVTv6aeUi1tsF8/vpyR7zpfs3FUzy2Jqm+MU+LmUKhQ0y2FpfwqkCcxSg2ua4GALJd8k2R76WxwZGbQpA==} dev: true @@ -700,6 +976,10 @@ packages: engines: {node: '>= 16'} dev: true + /@noble/hashes@1.3.2: + resolution: {integrity: sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==} + engines: {node: '>= 16'} + /@noble/secp256k1@1.7.1: resolution: {integrity: sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==} dev: true @@ -1371,7 +1651,6 @@ packages: /@scure/base@1.1.3: resolution: {integrity: sha512-/+SgoRjLq7Xlf0CWuLHq2LUZeL/w65kfzAPG5NH9pcmBhs+nunQTn4gvdwgMTIXnt9b2C/1SeL2XiysZEyIC9Q==} - dev: true /@scure/bip32@1.1.5: resolution: {integrity: sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw==} @@ -1385,10 +1664,18 @@ packages: resolution: {integrity: sha512-osvveYtyzdEVbt3OfwwXFr4P2iVBL5u1Q3q4ONBfDY/UpOuXmOlbgwc1xECEboY8wIays8Yt6onaWMUdUbfl0A==} dependencies: '@noble/curves': 1.1.0 - '@noble/hashes': 1.3.1 + '@noble/hashes': 1.3.2 '@scure/base': 1.1.3 dev: true + /@scure/bip32@1.3.2: + resolution: {integrity: sha512-N1ZhksgwD3OBlwTv3R6KFEcPojl/W4ElJOeCZdi+vuI5QmTFwLq3OFf2zd2ROpKvxFdgZ6hUpb0dx9bVNEwYCA==} + dependencies: + '@noble/curves': 1.2.0 + '@noble/hashes': 1.3.2 + '@scure/base': 1.1.3 + dev: false + /@scure/bip39@1.1.1: resolution: {integrity: sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg==} dependencies: @@ -1399,9 +1686,8 @@ packages: /@scure/bip39@1.2.1: resolution: {integrity: sha512-Z3/Fsz1yr904dduJD0NpiyRHhRYHdcnyh73FZWiV+/qhWi83wNJ3NWolYqCEN+ZWsUz2TWwajJggcRE9r1zUYg==} dependencies: - '@noble/hashes': 1.3.1 + '@noble/hashes': 1.3.2 '@scure/base': 1.1.3 - dev: true /@sentry/core@5.30.0: resolution: {integrity: sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg==} @@ -1540,7 +1826,7 @@ packages: /@types/bn.js@4.11.6: resolution: {integrity: sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==} dependencies: - '@types/node': 20.5.7 + '@types/node': 20.8.0 dev: true /@types/bn.js@5.1.1: @@ -1568,7 +1854,7 @@ packages: /@types/concat-stream@1.6.1: resolution: {integrity: sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==} dependencies: - '@types/node': 20.5.7 + '@types/node': 20.8.0 dev: true /@types/connect@3.4.36: @@ -1580,7 +1866,7 @@ packages: /@types/form-data@0.0.33: resolution: {integrity: sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==} dependencies: - '@types/node': 20.5.7 + '@types/node': 20.8.0 dev: true /@types/glob@7.2.0: @@ -1632,7 +1918,6 @@ packages: /@types/node@20.8.0: resolution: {integrity: sha512-LzcWltT83s1bthcvjBmiBvGJiiUe84NWRHkw+ZV6Fr41z2FbIzvc815dk2nQ3RAKMuN2fkenM/z3Xv2QzEpYxQ==} - dev: true /@types/node@8.10.66: resolution: {integrity: sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw==} @@ -1645,7 +1930,7 @@ packages: /@types/pbkdf2@3.1.0: resolution: {integrity: sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ==} dependencies: - '@types/node': 20.5.7 + '@types/node': 20.8.0 dev: true /@types/prettier@2.7.3: @@ -1659,14 +1944,14 @@ packages: /@types/readable-stream@2.3.15: resolution: {integrity: sha512-oM5JSKQCcICF1wvGgmecmHldZ48OZamtMxcGGVICOJA8o8cahXC1zEVAif8iwoc5j8etxFaRFnf095+CDsuoFQ==} dependencies: - '@types/node': 20.5.7 + '@types/node': 20.8.0 safe-buffer: 5.1.2 dev: true /@types/secp256k1@4.0.3: resolution: {integrity: sha512-Da66lEIFeIz9ltsdMZcpQvmrmmoqrfju8pm1BH8WbYjZSwUgCwXLb9C+9XYogwBITnbsSaMdVPb2ekf7TV+03w==} dependencies: - '@types/node': 20.5.7 + '@types/node': 20.8.0 dev: true /@types/semver@7.5.3: @@ -1679,6 +1964,12 @@ packages: '@types/node': 20.5.7 dev: true + /@types/ws@8.5.6: + resolution: {integrity: sha512-8B5EO9jLVCy+B58PLHvLDuOD8DRVMgQzq8d55SjLCOn9kqGyqOvy27exVaTio1q1nX5zLu8/6N0n2ThSxOM6tg==} + dependencies: + '@types/node': 20.8.0 + dev: false + /@typescript-eslint/eslint-plugin@6.7.3(@typescript-eslint/parser@6.7.3)(eslint@8.50.0)(typescript@5.2.2): resolution: {integrity: sha512-vntq452UHNltxsaaN+L9WyuMch8bMd9CqJ3zhzTPXXidwbf5mqqKCVXEuvRZUqLJSTLeWE65lQwyXsRGnXkCTA==} engines: {node: ^16.0.0 || >=18.0.0} @@ -1834,6 +2125,27 @@ packages: tslib: 2.6.2 dev: true + /@wry/context@0.7.3: + resolution: {integrity: sha512-Nl8WTesHp89RF803Se9X3IiHjdmLBrIvPMaJkl+rKVJAYyPsz1TEUbu89943HpvujtSJgDUx9W4vZw3K1Mr3sA==} + engines: {node: '>=8'} + dependencies: + tslib: 2.6.2 + dev: false + + /@wry/equality@0.5.6: + resolution: {integrity: sha512-D46sfMTngaYlrH+OspKf8mIJETntFnf6Hsjb0V41jAXJ7Bx2kB8Rv8RCUujuVWYttFtHkUNp7g+FwxNQAr6mXA==} + engines: {node: '>=8'} + dependencies: + tslib: 2.6.2 + dev: false + + /@wry/trie@0.4.3: + resolution: {integrity: sha512-I6bHwH0fSf6RqQcnnXLJKhkSXG45MFral3GxPaY4uAl0LYDZM+YDVDAiU9bYwjTuysy1S0IeecWtmq1SZA3M1w==} + engines: {node: '>=8'} + dependencies: + tslib: 2.6.2 + dev: false + /JSONStream@1.3.2: resolution: {integrity: sha512-mn0KSip7N4e0UDPZHnqDsHECo5uGQrixQKnAskOM1BIB8hd7QKbd6il8IPRPudPHOeHiECoCFqhyMaRO9+nWyA==} hasBin: true @@ -1854,6 +2166,20 @@ packages: resolution: {integrity: sha512-LEyx4aLEC3x6T0UguF6YILf+ntvmOaWsVfENmIW0E9H09vKlLDGelMjjSm0jkDHALj8A8quZ/HapKNigzwge+Q==} dev: true + /abitype@0.9.8(typescript@5.2.2): + resolution: {integrity: sha512-puLifILdm+8sjyss4S+fsUN09obiT1g2YW6CtcQF+QDzxR0euzgEB29MZujC6zMk2a6SVmtttq1fc6+YFA7WYQ==} + peerDependencies: + typescript: '>=5.0.4' + zod: ^3 >=3.19.1 + peerDependenciesMeta: + typescript: + optional: true + zod: + optional: true + dependencies: + typescript: 5.2.2 + dev: false + /abort-controller@3.0.0: resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} engines: {node: '>=6.5'} @@ -3165,6 +3491,36 @@ packages: es6-promise: 4.2.8 dev: true + /esbuild@0.18.20: + resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + optionalDependencies: + '@esbuild/android-arm': 0.18.20 + '@esbuild/android-arm64': 0.18.20 + '@esbuild/android-x64': 0.18.20 + '@esbuild/darwin-arm64': 0.18.20 + '@esbuild/darwin-x64': 0.18.20 + '@esbuild/freebsd-arm64': 0.18.20 + '@esbuild/freebsd-x64': 0.18.20 + '@esbuild/linux-arm': 0.18.20 + '@esbuild/linux-arm64': 0.18.20 + '@esbuild/linux-ia32': 0.18.20 + '@esbuild/linux-loong64': 0.18.20 + '@esbuild/linux-mips64el': 0.18.20 + '@esbuild/linux-ppc64': 0.18.20 + '@esbuild/linux-riscv64': 0.18.20 + '@esbuild/linux-s390x': 0.18.20 + '@esbuild/linux-x64': 0.18.20 + '@esbuild/netbsd-x64': 0.18.20 + '@esbuild/openbsd-x64': 0.18.20 + '@esbuild/sunos-x64': 0.18.20 + '@esbuild/win32-arm64': 0.18.20 + '@esbuild/win32-ia32': 0.18.20 + '@esbuild/win32-x64': 0.18.20 + dev: true + /escalade@3.1.1: resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} engines: {node: '>=6'} @@ -3892,7 +4248,7 @@ packages: dependencies: inflight: 1.0.6 inherits: 2.0.4 - minimatch: 3.1.2 + minimatch: 8.0.4 once: 1.4.0 path-is-absolute: 1.0.1 dev: true @@ -3903,7 +4259,7 @@ packages: fs.realpath: 1.0.0 inflight: 1.0.6 inherits: 2.0.4 - minimatch: 3.1.2 + minimatch: 8.0.4 once: 1.4.0 path-is-absolute: 1.0.1 dev: true @@ -4067,6 +4423,16 @@ packages: graphql: 16.8.1 dev: true + /graphql-tag@2.12.6(graphql@16.8.1): + resolution: {integrity: sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg==} + engines: {node: '>=10'} + peerDependencies: + graphql: ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + dependencies: + graphql: 16.8.1 + tslib: 2.6.2 + dev: false + /graphql@15.5.0: resolution: {integrity: sha512-OmaM7y0kaK31NKG31q4YbD2beNYa6jBBKtMFT6gLYJljHLJr42IqJ8KX08u3Li/0ifzTU5HjmoOOrwa5BRLeDA==} engines: {node: '>= 10.x'} @@ -4075,7 +4441,6 @@ packages: /graphql@16.8.1: resolution: {integrity: sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw==} engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} - dev: true /handlebars@4.7.8: resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==} @@ -4270,6 +4635,12 @@ packages: minimalistic-crypto-utils: 1.0.1 dev: true + /hoist-non-react-statics@3.3.2: + resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} + dependencies: + react-is: 16.13.1 + dev: false + /http-basic@8.1.3: resolution: {integrity: sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==} engines: {node: '>=6.0.0'} @@ -4769,6 +5140,14 @@ packages: ws: 7.5.9 dev: true + /isomorphic-ws@5.0.0(ws@8.13.0): + resolution: {integrity: sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==} + peerDependencies: + ws: '*' + dependencies: + ws: 8.13.0 + dev: false + /isstream@0.1.2: resolution: {integrity: sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==} dev: true @@ -4858,7 +5237,6 @@ packages: /js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - dev: true /js-yaml@3.14.1: resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} @@ -5132,6 +5510,13 @@ packages: resolution: {integrity: sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==} dev: true + /loose-envify@1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + dependencies: + js-tokens: 4.0.0 + dev: false + /loupe@2.3.6: resolution: {integrity: sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==} dependencies: @@ -5404,6 +5789,12 @@ packages: hasBin: true dev: true + /nanoid@3.3.6: + resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + dev: true + /napi-macros@2.2.2: resolution: {integrity: sha512-hmEVtAGYzVQpCKdbQea4skABsdXW4RUh5t5mJ2zzqowJS2OyXZTU1KhDVFhx+NlWZ4ap9mqR9TcDO3LTTttd+g==} dev: true @@ -5524,7 +5915,6 @@ packages: /object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} - dev: true /object-inspect@1.12.3: resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==} @@ -5567,6 +5957,14 @@ packages: mimic-fn: 2.1.0 dev: true + /optimism@0.17.5: + resolution: {integrity: sha512-TEcp8ZwK1RczmvMnvktxHSF2tKgMWjJ71xEFGX5ApLh67VsMSTy1ZUlipJw8W+KaqgOmQ+4pqwkeivY89j+4Vw==} + dependencies: + '@wry/context': 0.7.3 + '@wry/trie': 0.4.3 + tslib: 2.6.2 + dev: false + /optionator@0.8.3: resolution: {integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==} engines: {node: '>= 0.8.0'} @@ -5753,6 +6151,10 @@ packages: resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==} dev: true + /picocolors@1.0.0: + resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + dev: true + /picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} @@ -5768,6 +6170,15 @@ packages: engines: {node: '>=4'} dev: true + /postcss@8.4.31: + resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} + engines: {node: ^10 || ^12 || >=14} + dependencies: + nanoid: 3.3.6 + picocolors: 1.0.0 + source-map-js: 1.0.2 + dev: true + /prelude-ls@1.1.2: resolution: {integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==} engines: {node: '>= 0.8.0'} @@ -5820,6 +6231,14 @@ packages: asap: 2.0.6 dev: true + /prop-types@15.8.1: + resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + dependencies: + loose-envify: 1.4.0 + object-assign: 4.1.1 + react-is: 16.13.1 + dev: false + /proper-lockfile@4.1.2: resolution: {integrity: sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==} dependencies: @@ -5844,7 +6263,7 @@ packages: '@protobufjs/pool': 1.1.0 '@protobufjs/utf8': 1.1.0 '@types/long': 4.0.2 - '@types/node': 20.5.7 + '@types/node': 20.8.0 long: 4.0.0 dev: true @@ -5919,6 +6338,10 @@ packages: unpipe: 1.0.0 dev: true + /react-is@16.13.1: + resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + dev: false + /react-native-fetch-api@3.0.0: resolution: {integrity: sha512-g2rtqPjdroaboDKTsJCTlcmtw54E25OjyaunUP0anOZn4Fuo2IKs8BVfe02zVggA/UysbmfSnRJIqtNkAgggNA==} dependencies: @@ -6086,6 +6509,11 @@ packages: supports-preserve-symlinks-flag: 1.0.0 dev: true + /response-iterator@0.2.6: + resolution: {integrity: sha512-pVzEEzrsg23Sh053rmDUvLSkGXluZio0qu8VT6ukrYuvtjVfCbDZH9d6PGXb8HZfzdNZt8feXv/jvUzlhRgLnw==} + engines: {node: '>=0.8'} + dev: false + /restore-cursor@3.1.0: resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} engines: {node: '>=8'} @@ -6141,6 +6569,14 @@ packages: bn.js: 5.2.1 dev: true + /rollup@3.29.4: + resolution: {integrity: sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==} + engines: {node: '>=14.18.0', npm: '>=8.0.0'} + hasBin: true + optionalDependencies: + fsevents: 2.3.3 + dev: true + /run-parallel-limit@1.1.0: resolution: {integrity: sha512-jJA7irRNM91jaKc3Hcl1npHsFLOXOoTkPCUL1JEa1R82O2miplXXRaGdjW/KM/98YQWDhJLiSs793CnXfblJUw==} dependencies: @@ -6411,6 +6847,11 @@ packages: - supports-color dev: true + /source-map-js@1.0.2: + resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} + engines: {node: '>=0.10.0'} + dev: true + /source-map-support@0.5.21: resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} dependencies: @@ -6620,6 +7061,11 @@ packages: engines: {node: '>= 0.4'} dev: true + /symbol-observable@4.0.0: + resolution: {integrity: sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==} + engines: {node: '>=0.10'} + dev: false + /sync-request@6.1.0: resolution: {integrity: sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==} engines: {node: '>=8.0.0'} @@ -6800,6 +7246,13 @@ packages: typescript: 5.2.2 dev: true + /ts-invariant@0.10.3: + resolution: {integrity: sha512-uivwYcQaxAucv1CzRp2n/QdYPo4ILf9VXgH19zEIjFx2EJufV16P0JtJVpYHy89DItG6Kwj2oIUjrcK5au+4tQ==} + engines: {node: '>=8'} + dependencies: + tslib: 2.6.2 + dev: false + /ts-node@10.9.1(@types/node@20.8.0)(typescript@5.2.2): resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} hasBin: true @@ -6841,7 +7294,6 @@ packages: /tslib@2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} - dev: true /tsort@0.0.1: resolution: {integrity: sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==} @@ -6966,7 +7418,6 @@ packages: resolution: {integrity: sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==} engines: {node: '>=14.17'} hasBin: true - dev: true /typical@4.0.0: resolution: {integrity: sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==} @@ -7092,6 +7543,66 @@ packages: extsprintf: 1.3.0 dev: true + /viem@1.15.1(typescript@5.2.2): + resolution: {integrity: sha512-lxk8wwUK7ZivYAUZ6pH+9Y6jjrfXXjafCOoASa4lw3ULUCT2BajU4SELarlxJQimpsFd7OZD4m4iEXYLF/bt6w==} + peerDependencies: + typescript: '>=5.0.4' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@adraffy/ens-normalize': 1.9.4 + '@noble/curves': 1.2.0 + '@noble/hashes': 1.3.2 + '@scure/bip32': 1.3.2 + '@scure/bip39': 1.2.1 + '@types/ws': 8.5.6 + abitype: 0.9.8(typescript@5.2.2) + isomorphic-ws: 5.0.0(ws@8.13.0) + typescript: 5.2.2 + ws: 8.13.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + - zod + dev: false + + /vite@4.4.10(@types/node@20.8.0): + resolution: {integrity: sha512-TzIjiqx9BEXF8yzYdF2NTf1kFFbjMjUSV0LFZ3HyHoI3SGSPLnnFUKiIQtL3gl2AjHvMrprOvQ3amzaHgQlAxw==} + engines: {node: ^14.18.0 || >=16.0.0} + hasBin: true + peerDependencies: + '@types/node': '>= 14' + less: '*' + lightningcss: ^1.21.0 + sass: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + dependencies: + '@types/node': 20.8.0 + esbuild: 0.18.20 + postcss: 8.4.31 + rollup: 3.29.4 + optionalDependencies: + fsevents: 2.3.3 + dev: true + /wcwidth@1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} dependencies: @@ -7262,6 +7773,19 @@ packages: optional: true dev: true + /ws@8.13.0: + resolution: {integrity: sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dev: false + /ws@8.5.0: resolution: {integrity: sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==} engines: {node: '>=10.0.0'} @@ -7341,6 +7865,12 @@ packages: engines: {node: '>=10'} dev: true -settings: - autoInstallPeers: true - excludeLinksFromLockfile: false + /zen-observable-ts@1.2.5: + resolution: {integrity: sha512-QZWQekv6iB72Naeake9hS1KxHlotfRpe+WGNbNx5/ta+R3DNjVO2bswf63gXlWDcs+EMd7XY8HfVQyP1X6T4Zg==} + dependencies: + zen-observable: 0.8.15 + dev: false + + /zen-observable@0.8.15: + resolution: {integrity: sha512-PQ2PC7R9rslx84ndNBZB/Dkv8V8fZEpk83RLgXtYd0fwUgEjseMn1Dgajh2x6S8QbZAFa9p2qVCEuYZNgve0dQ==} + dev: false diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 1a8a4af8..b917e0db 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,3 +1,4 @@ packages: - 'contracts' - 'subgraph' + - 'sdk' diff --git a/sdk/.env.example b/sdk/.env.example new file mode 100644 index 00000000..7fee7dc2 --- /dev/null +++ b/sdk/.env.example @@ -0,0 +1 @@ +GRAPH_QUERY_URL= diff --git a/sdk/README.md b/sdk/README.md index 23103e6e..d85c3b66 100644 --- a/sdk/README.md +++ b/sdk/README.md @@ -1,3 +1,178 @@ -## Verax Attestation Registry - SDK +# Verax Attestation Registry - SDK The `verax-sdk` facilitates the interactions with the contracts and the subgraph, both from a frontend and a backend. + +[DRAFT] + +## Installation + +VeraxSDK is a [npm package](https://www.npmjs.com/package/verax-sdk/). + +```bash +# npm +npm install --save verax-sdk +``` + +```bash +# yarn +yarn add verax-sdk +``` + +## Getting Started + +### 1. Import VeraxSdk + +```js +// CommonJS +var VeraxSdk = require("verax-sdk"); +``` + +```js +// ES6 +import VeraxSdk from "verax-sdk"; +``` + +### 2. Instantiate VeraxSdk + +```js +// Default configuration for Linea Testnet +const veraxSdk = new VeraxSdk(VeraxSdk.LineaConfTestnet); +``` + +or, + +```js +// Default configuration for Linea Mainnet +const veraxSdk = new VeraxSdk(VeraxSdk.LineaConfMainnet); +``` + +or, + +```js +// Custom configuration +const myVeraxConfiguration = { + rpcUrl: "https://my.rpc.url", + chain: 12345, + subgraphUrl: "https://my.subgraph.url", + portalRegistryAddress: "0xMyPortalRegistryAddress", + moduleRegistryAddress: "0xMyModuleRegistryAddress", + schemaRegistryAddress: "0xMySchemaRegistryAddress", + attestationRegistryAddress: "0xMyAttestationRegistryAddress", +}; +const veraxSdk = new VeraxSdk(myVeraxConfiguration); +``` + +## Read and write objects + +### 1. Get DataMappers + +```js +// Each Verax classes has its DataMapper +// Get them from the SDK instance +const portalDataMapper = veraxSdk.portalDataMapper; // RW Portals +const schemaDataMapper = veraxSdk.schemaDataMapper; // RW Schemas +const moduleDataMapper = veraxSdk.moduleDataMapper; // RW Modules +const attestationDataMapper = veraxSdk.attestationDataMapper; // RW Attestations +``` + +### 2. Read content (one object) + +Each DataMapper comes with the method `findOneById` to get one object by ID. + +```js +const myAttestation = await attestationDataMapper.findOneById("12345"); +console.log(myAttestation); + +// +// id: "12345" +// schemaId: "99AE34" +// portalId: "37773" +// data: decoded payload {...} +// ... +``` + +### 3. Read content (list / many objects) + +Each DataMapper comes with the method `findBy` to get objects by criteria. + +```js +// +// args: +// - criteria: object {property1: value1, property2: value2, ...} +// - page: integer (optional, default 0) +// - offset: integer (optional, default 50, max= 500) +// - orderBy: string (optional, default createdAt) +// - order(property?): enum string "ASC", "DESC" (optional, default "DESC") +// +const myAttestations = await attestationDataMapper.findBy( + { portalId: "37773", subject: "John" }, + 4, + 30, + "schemaId", + "ASC", +); + +console.log(myAttestations); +// +// totalNumber: 147, +// page: 0, +// objects: [ +// {id: "12345", schemaId: "99AE34", portalId: "37773", subject: "Florian", ...}, +// {id: "2221E", schemaId: "AAF77E", portalId: "37773", subject: "Florian", ...}, +// ... +// ] +// +``` + +### 4. Write content + +[WORK IN PROGRESS] Each dataMapper comes with write methods, that may vary depending on the class. See the detail of +write method per class dataMapper. + +```js +const result = await attestationDataMapper.attest( + { + schemaId: "muhpoih", + portalId: "OJOJ43432", + expirationDate: null, + subject: "florian.demiramon@...", + data: { + foo: "bar", + zee: "plop", + }, + }, + signer, +); + +console.log(result); +// +// txReceipt: .... +// object: { +// { +// id: "0XAZFZF" +// schemaId: "muhpoih" +// portalId: "OJOJ43432" +// expirationDate: null +// subject: "florian.demiramon@..." +// attestationData: { +// foo: "bar", +// zee: "plop" +// } +// attestationRawData: "1234234124124FAAZC" +// replacedBy: null +// attester: "0x1111" +// attestedDate: "today" +// revocationDate: null +// version: 1 +// revoked: false +// } +// +``` + +## Other operations + +[Work in progress] The class `veraxSdk.utils` extends the capabilities: + +- precompute the ID of an Attestation +- precompute the ID of a Schema +- encode decode payload diff --git a/sdk/examples/AttestationFindOneById.ts b/sdk/examples/AttestationFindOneById.ts new file mode 100644 index 00000000..8b6ea8a6 --- /dev/null +++ b/sdk/examples/AttestationFindOneById.ts @@ -0,0 +1,9 @@ +import VeraxSdk from "../src/VeraxSdk"; + +const veraxSdk = new VeraxSdk(VeraxSdk.DEFAULT_LINEA_TESTNET); + +console.log( + await veraxSdk.attestationDataMapper.findOneById( + "0x00000000000000000000000000000000000000000000000000000000000007b5", + ), +); diff --git a/sdk/index.html b/sdk/index.html new file mode 100644 index 00000000..4c2b4e35 --- /dev/null +++ b/sdk/index.html @@ -0,0 +1,18 @@ + + + + + + + +

Attestation Registry

+
Loading...
+ + + diff --git a/sdk/package.json b/sdk/package.json new file mode 100644 index 00000000..891458f8 --- /dev/null +++ b/sdk/package.json @@ -0,0 +1,31 @@ +{ + "name": "linea-attestation-registry-sdk", + "version": "0.0.1", + "description": "Verax Attestation Registry SDK to interact with the subgraph and the contracts", + "keywords": [ + "linea-attestation-registry", + "blockchain", + "attestation", + "ethereum", + "foundry", + "smart-contracts", + "solidity" + ], + "type": "module", + "repository": "github.com/Consensys/linea-attestation-registry", + "license": "MIT", + "author": "Consensys", + "scripts": { + "dev": "vite", + "attestation": "ts-node examples/AttestationFindOneById.ts" + }, + "dependencies": { + "@apollo/client": "^3.8.4", + "graphql": "^16.8.1", + "viem": "^1.14.0" + }, + "devDependencies": { + "ts-node": "^10.9.1", + "vite": "^4.4.9" + } +} diff --git a/sdk/src/AttestationRegistryWrapper.ts b/sdk/src/AttestationRegistryWrapper.ts new file mode 100644 index 00000000..54b4017a --- /dev/null +++ b/sdk/src/AttestationRegistryWrapper.ts @@ -0,0 +1,90 @@ +import { createPublicClient, http } from "viem"; +import { lineaTestnet } from "viem/chains"; +import { attestationRegistry } from "./abi/AttestationRegistry"; +import { ApolloClient, gql, InMemoryCache } from "@apollo/client/core"; + +const web3Client = createPublicClient({ + chain: lineaTestnet, + transport: http(), +}); + +const apolloClient = new ApolloClient({ + uri: "https://graph-query.goerli.linea.build/subgraphs/name/Consensys/linea-attestation-registry", + cache: new InMemoryCache(), +}); + +export const getVersionNumber = async () => { + return await web3Client.readContract({ + ...attestationRegistry, + functionName: "getVersionNumber", + }); +}; + +export const getAttestationIdCounter = async () => { + return await web3Client.readContract({ + ...attestationRegistry, + functionName: "getAttestationIdCounter", + }); +}; + +export const findOneById = async (id: string) => { + const queryResult = await apolloClient.query({ + query: gql` + query GetAttestation($id: ID!) { + attestation(id: $id) { + id + schemaId + replacedBy + attester + portal + attestedDate + expirationDate + revocationDate + version + revoked + subject + attestationData + schemaString + decodedData + } + } + `, + variables: { id }, + }); + + return JSON.stringify(queryResult.data.attestation); +}; +export const findBy = async () => { + const queryResult = await apolloClient.query({ + query: gql` + query GetAttestations { + attestations { + id + schemaId + replacedBy + attester + portal + attestedDate + expirationDate + revocationDate + version + revoked + subject + attestationData + schemaString + decodedData + } + } + `, + }); + + return JSON.stringify(queryResult.data.attestations); +}; + +export default [ + `AttestationRegistry address: ${attestationRegistry.address}`, + `Version: ${await getVersionNumber()}`, + `Attestations counter: ${await getAttestationIdCounter()}`, + `Find one by ID: ${await findOneById("0x00000000000000000000000000000000000000000000000000000000000007b5")}`, + `Find by: ${await findBy()}`, +]; diff --git a/sdk/src/VeraxSdk.ts b/sdk/src/VeraxSdk.ts new file mode 100644 index 00000000..ef004eb4 --- /dev/null +++ b/sdk/src/VeraxSdk.ts @@ -0,0 +1,53 @@ +import { linea, lineaTestnet } from "viem/chains"; +import Conf from "./interface/Conf"; +import AttestationDataMapper from "./dataMapper/AttestationDataMapper"; +import SchemaDataMapper from "./dataMapper/SchemaDataMapper"; +import ModuleDataMapper from "./dataMapper/ModuleDataMapper"; +import PortalDataMapper from "./dataMapper/PortalDataMapper"; +import { createPublicClient, http, PublicClient } from "viem"; +import { ApolloClient, InMemoryCache } from "@apollo/client/core"; + +export default class VeraxSdk { + static DEFAULT_LINEA_MAINNET: Conf = { + chain: linea, + subgraphUrl: "https://graph-query.linea.build/subgraphs/name/Consensys/linea-attestation-registry", + portalRegistryAddress: "foo", + moduleRegistryAddress: "foo", + schemaRegistryAddress: "foo", + attestationRegistryAddress: "bar", + }; + + static DEFAULT_LINEA_TESTNET: Conf = { + chain: lineaTestnet, + subgraphUrl: "https://graph-query.goerli.linea.build/subgraphs/name/Consensys/linea-attestation-registry", + portalRegistryAddress: "bar", + moduleRegistryAddress: "bar", + schemaRegistryAddress: "bar", + attestationRegistryAddress: "bar", + }; + + private readonly web3Client: PublicClient; + private readonly apolloClient: ApolloClient; + + public attestationDataMapper: AttestationDataMapper; + public schemaDataMapper: SchemaDataMapper; + public moduleDataMapper: ModuleDataMapper; + public portalDataMapper: PortalDataMapper; + + constructor(conf: Conf) { + this.web3Client = createPublicClient({ + chain: conf.chain, + transport: http(), + }); + + this.apolloClient = new ApolloClient({ + uri: conf.subgraphUrl, + cache: new InMemoryCache(), + }); + + this.attestationDataMapper = new AttestationDataMapper(conf, this.web3Client, this.apolloClient); + this.schemaDataMapper = new SchemaDataMapper(conf, this.web3Client, this.apolloClient); + this.moduleDataMapper = new ModuleDataMapper(conf, this.web3Client, this.apolloClient); + this.portalDataMapper = new PortalDataMapper(conf, this.web3Client, this.apolloClient); + } +} diff --git a/sdk/src/abi/AttestationRegistry.ts b/sdk/src/abi/AttestationRegistry.ts new file mode 100644 index 00000000..ec1967a3 --- /dev/null +++ b/sdk/src/abi/AttestationRegistry.ts @@ -0,0 +1,610 @@ +export const attestationRegistry = { + address: "0xC765F28096F6121C2F2b82D35A4346280164428b", + abi: [ + { + inputs: [], + stateMutability: "nonpayable", + type: "constructor", + }, + { + inputs: [], + name: "AlreadyRevoked", + type: "error", + }, + { + inputs: [], + name: "ArrayLengthMismatch", + type: "error", + }, + { + inputs: [], + name: "AttestationDataFieldEmpty", + type: "error", + }, + { + inputs: [], + name: "AttestationNotAttested", + type: "error", + }, + { + inputs: [], + name: "AttestationNotRevocable", + type: "error", + }, + { + inputs: [], + name: "AttestationSubjectFieldEmpty", + type: "error", + }, + { + inputs: [], + name: "OnlyAttestingPortal", + type: "error", + }, + { + inputs: [], + name: "OnlyPortal", + type: "error", + }, + { + inputs: [], + name: "RouterInvalid", + type: "error", + }, + { + inputs: [], + name: "SchemaNotRegistered", + type: "error", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "bytes32", + name: "attestationId", + type: "bytes32", + }, + ], + name: "AttestationRegistered", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "bytes32", + name: "attestationId", + type: "bytes32", + }, + { + indexed: false, + internalType: "bytes32", + name: "replacedBy", + type: "bytes32", + }, + ], + name: "AttestationReplaced", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "bytes32", + name: "attestationId", + type: "bytes32", + }, + ], + name: "AttestationRevoked", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "uint8", + name: "version", + type: "uint8", + }, + ], + name: "Initialized", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "previousOwner", + type: "address", + }, + { + indexed: true, + internalType: "address", + name: "newOwner", + type: "address", + }, + ], + name: "OwnershipTransferred", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "uint16", + name: "version", + type: "uint16", + }, + ], + name: "VersionUpdated", + type: "event", + }, + { + inputs: [ + { + components: [ + { + internalType: "bytes32", + name: "schemaId", + type: "bytes32", + }, + { + internalType: "uint64", + name: "expirationDate", + type: "uint64", + }, + { + internalType: "bytes", + name: "subject", + type: "bytes", + }, + { + internalType: "bytes", + name: "attestationData", + type: "bytes", + }, + ], + internalType: "struct AttestationPayload", + name: "attestationPayload", + type: "tuple", + }, + { + internalType: "address", + name: "attester", + type: "address", + }, + ], + name: "attest", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + components: [ + { + internalType: "bytes32", + name: "schemaId", + type: "bytes32", + }, + { + internalType: "uint64", + name: "expirationDate", + type: "uint64", + }, + { + internalType: "bytes", + name: "subject", + type: "bytes", + }, + { + internalType: "bytes", + name: "attestationData", + type: "bytes", + }, + ], + internalType: "struct AttestationPayload[]", + name: "attestationsPayloads", + type: "tuple[]", + }, + { + internalType: "address", + name: "attester", + type: "address", + }, + ], + name: "bulkAttest", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes32[]", + name: "attestationIds", + type: "bytes32[]", + }, + { + components: [ + { + internalType: "bytes32", + name: "schemaId", + type: "bytes32", + }, + { + internalType: "uint64", + name: "expirationDate", + type: "uint64", + }, + { + internalType: "bytes", + name: "subject", + type: "bytes", + }, + { + internalType: "bytes", + name: "attestationData", + type: "bytes", + }, + ], + internalType: "struct AttestationPayload[]", + name: "attestationPayloads", + type: "tuple[]", + }, + { + internalType: "address", + name: "attester", + type: "address", + }, + ], + name: "bulkReplace", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes32[]", + name: "attestationIds", + type: "bytes32[]", + }, + ], + name: "bulkRevoke", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes32", + name: "attestationId", + type: "bytes32", + }, + ], + name: "getAttestation", + outputs: [ + { + components: [ + { + internalType: "bytes32", + name: "attestationId", + type: "bytes32", + }, + { + internalType: "bytes32", + name: "schemaId", + type: "bytes32", + }, + { + internalType: "bytes32", + name: "replacedBy", + type: "bytes32", + }, + { + internalType: "address", + name: "attester", + type: "address", + }, + { + internalType: "address", + name: "portal", + type: "address", + }, + { + internalType: "uint64", + name: "attestedDate", + type: "uint64", + }, + { + internalType: "uint64", + name: "expirationDate", + type: "uint64", + }, + { + internalType: "uint64", + name: "revocationDate", + type: "uint64", + }, + { + internalType: "uint16", + name: "version", + type: "uint16", + }, + { + internalType: "bool", + name: "revoked", + type: "bool", + }, + { + internalType: "bytes", + name: "subject", + type: "bytes", + }, + { + internalType: "bytes", + name: "attestationData", + type: "bytes", + }, + ], + internalType: "struct Attestation", + name: "", + type: "tuple", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "getAttestationIdCounter", + outputs: [ + { + internalType: "uint32", + name: "", + type: "uint32", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "getVersionNumber", + outputs: [ + { + internalType: "uint16", + name: "", + type: "uint16", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "incrementVersionNumber", + outputs: [ + { + internalType: "uint16", + name: "", + type: "uint16", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "initialize", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes32", + name: "attestationId", + type: "bytes32", + }, + ], + name: "isRegistered", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "portalId", + type: "address", + }, + ], + name: "isRevocable", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + components: [ + { + internalType: "bytes32", + name: "schemaId", + type: "bytes32", + }, + { + internalType: "uint64", + name: "expirationDate", + type: "uint64", + }, + { + internalType: "bytes", + name: "subject", + type: "bytes", + }, + { + internalType: "bytes", + name: "attestationData", + type: "bytes", + }, + ], + internalType: "struct AttestationPayload[]", + name: "attestationsPayloads", + type: "tuple[]", + }, + { + internalType: "address", + name: "portal", + type: "address", + }, + ], + name: "massImport", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "owner", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "renounceOwnership", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes32", + name: "attestationId", + type: "bytes32", + }, + { + components: [ + { + internalType: "bytes32", + name: "schemaId", + type: "bytes32", + }, + { + internalType: "uint64", + name: "expirationDate", + type: "uint64", + }, + { + internalType: "bytes", + name: "subject", + type: "bytes", + }, + { + internalType: "bytes", + name: "attestationData", + type: "bytes", + }, + ], + internalType: "struct AttestationPayload", + name: "attestationPayload", + type: "tuple", + }, + { + internalType: "address", + name: "attester", + type: "address", + }, + ], + name: "replace", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes32", + name: "attestationId", + type: "bytes32", + }, + ], + name: "revoke", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "router", + outputs: [ + { + internalType: "contract IRouter", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "newOwner", + type: "address", + }, + ], + name: "transferOwnership", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "_router", + type: "address", + }, + ], + name: "updateRouter", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + ], +} as const; diff --git a/sdk/src/dataMapper/AttestationDataMapper.ts b/sdk/src/dataMapper/AttestationDataMapper.ts new file mode 100644 index 00000000..0b2a3a84 --- /dev/null +++ b/sdk/src/dataMapper/AttestationDataMapper.ts @@ -0,0 +1,3 @@ +import BaseDataMapper from "./BaseDataMapper"; + +export default class AttestationDataMapper extends BaseDataMapper {} diff --git a/sdk/src/dataMapper/BaseDataMapper.ts b/sdk/src/dataMapper/BaseDataMapper.ts new file mode 100644 index 00000000..7cfc01bf --- /dev/null +++ b/sdk/src/dataMapper/BaseDataMapper.ts @@ -0,0 +1,20 @@ +import Conf from "./../interface/Conf"; +import { findOneById } from "../AttestationRegistryWrapper"; +import { PublicClient } from "viem"; +import { ApolloClient } from "@apollo/client/core"; + +export default class BaseDataMapper { + private conf: Conf; + private web3Client: PublicClient; + private apolloClient: ApolloClient; + + constructor(_conf: Conf, _web3Client: PublicClient, _apolloClient: ApolloClient) { + this.conf = _conf; + this.web3Client = _web3Client; + this.apolloClient = _apolloClient; + } + + findOneById(id: string): object { + return findOneById(id); + } +} diff --git a/sdk/src/dataMapper/ModuleDataMapper.ts b/sdk/src/dataMapper/ModuleDataMapper.ts new file mode 100644 index 00000000..b6a6def8 --- /dev/null +++ b/sdk/src/dataMapper/ModuleDataMapper.ts @@ -0,0 +1,3 @@ +import BaseDataMapper from "./BaseDataMapper"; + +export default class ModuleDataMapper extends BaseDataMapper {} diff --git a/sdk/src/dataMapper/PortalDataMapper.ts b/sdk/src/dataMapper/PortalDataMapper.ts new file mode 100644 index 00000000..f660f763 --- /dev/null +++ b/sdk/src/dataMapper/PortalDataMapper.ts @@ -0,0 +1,3 @@ +import BaseDataMapper from "./BaseDataMapper"; + +export default class PortalDataMapper extends BaseDataMapper {} diff --git a/sdk/src/dataMapper/SchemaDataMapper.ts b/sdk/src/dataMapper/SchemaDataMapper.ts new file mode 100644 index 00000000..c5858173 --- /dev/null +++ b/sdk/src/dataMapper/SchemaDataMapper.ts @@ -0,0 +1,3 @@ +import BaseDataMapper from "./BaseDataMapper"; + +export default class SchemaDataMapper extends BaseDataMapper {} diff --git a/sdk/src/interface/Conf.ts b/sdk/src/interface/Conf.ts new file mode 100644 index 00000000..94ff7120 --- /dev/null +++ b/sdk/src/interface/Conf.ts @@ -0,0 +1,10 @@ +import { Chain } from "viem"; + +export default interface Conf { + chain: Chain; + subgraphUrl: string; + portalRegistryAddress: string; + moduleRegistryAddress: string; + schemaRegistryAddress: string; + attestationRegistryAddress: string; +} diff --git a/sdk/tsconfig.json b/sdk/tsconfig.json new file mode 100644 index 00000000..66b41977 --- /dev/null +++ b/sdk/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "module": "ESNext" + }, + "ts-node": { + "esm": true, + "experimentalSpecifierResolution": "node" + } +} diff --git a/tsconfig.json b/tsconfig.json index a15e2c79..0edc506d 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -24,6 +24,9 @@ }, { "path": "subgraph" + }, + { + "path": "sdk" } ], "include": ["**/*.ts"], From 40312f4ac57c996cdf0e191e6648d046413b0d2f Mon Sep 17 00:00:00 2001 From: Alain Nicolas Date: Fri, 6 Oct 2023 20:20:09 +0200 Subject: [PATCH 20/36] chore: Create a data mapper for the 4 main Verax objects (#260) --- .eslintrc.json | 4 +- README.md | 262 ---- pnpm-lock.yaml | 299 ---- sdk/.env.example | 1 - sdk/.gitkeep | 0 sdk/examples/AttestationFindOneById.ts | 9 - sdk/examples/attestation/findBy.ts | 5 + sdk/examples/attestation/findOneById.ts | 7 + sdk/examples/module/findBy.ts | 5 + sdk/examples/module/findOneById.ts | 5 + sdk/examples/portal/findBy.ts | 5 + sdk/examples/portal/findOneById.ts | 5 + sdk/examples/schema/findBy.ts | 5 + sdk/examples/schema/findOneById.ts | 5 + sdk/examples/utils/getAttestationIdCounter.ts | 5 + sdk/examples/utils/getModulesNumber.ts | 5 + sdk/examples/utils/getPortalsCount.ts | 5 + sdk/examples/utils/getSchemasNumber.ts | 5 + sdk/examples/utils/getVersionNumber.ts | 5 + sdk/index.html | 18 - sdk/package.json | 20 +- sdk/src/AttestationRegistryWrapper.ts | 90 -- sdk/src/VeraxSdk.ts | 39 +- sdk/src/abi/AttestationRegistry.ts | 1217 ++++++++--------- sdk/src/abi/ModuleRegistry.ts | 392 ++++++ sdk/src/abi/PortalRegistry.ts | 374 +++++ sdk/src/abi/SchemaRegistry.ts | 329 +++++ sdk/src/dataMapper/AttestationDataMapper.ts | 20 +- sdk/src/dataMapper/BaseDataMapper.ts | 34 +- sdk/src/dataMapper/ModuleDataMapper.ts | 10 +- sdk/src/dataMapper/PortalDataMapper.ts | 13 +- sdk/src/dataMapper/SchemaDataMapper.ts | 11 +- sdk/src/dataMapper/UtilsDataMapper.ts | 55 + sdk/src/interface/Conf.ts | 10 - sdk/src/types/index.d.ts | 10 + sdk/tsconfig.json | 3 +- 36 files changed, 1947 insertions(+), 1340 deletions(-) delete mode 100644 sdk/.env.example delete mode 100644 sdk/.gitkeep delete mode 100644 sdk/examples/AttestationFindOneById.ts create mode 100644 sdk/examples/attestation/findBy.ts create mode 100644 sdk/examples/attestation/findOneById.ts create mode 100644 sdk/examples/module/findBy.ts create mode 100644 sdk/examples/module/findOneById.ts create mode 100644 sdk/examples/portal/findBy.ts create mode 100644 sdk/examples/portal/findOneById.ts create mode 100644 sdk/examples/schema/findBy.ts create mode 100644 sdk/examples/schema/findOneById.ts create mode 100644 sdk/examples/utils/getAttestationIdCounter.ts create mode 100644 sdk/examples/utils/getModulesNumber.ts create mode 100644 sdk/examples/utils/getPortalsCount.ts create mode 100644 sdk/examples/utils/getSchemasNumber.ts create mode 100644 sdk/examples/utils/getVersionNumber.ts delete mode 100644 sdk/index.html delete mode 100644 sdk/src/AttestationRegistryWrapper.ts create mode 100644 sdk/src/abi/ModuleRegistry.ts create mode 100644 sdk/src/abi/PortalRegistry.ts create mode 100644 sdk/src/abi/SchemaRegistry.ts create mode 100644 sdk/src/dataMapper/UtilsDataMapper.ts delete mode 100644 sdk/src/interface/Conf.ts create mode 100644 sdk/src/types/index.d.ts diff --git a/.eslintrc.json b/.eslintrc.json index 9949a9eb..a3e24586 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -9,9 +9,7 @@ "sourceType": "module" }, "extends": ["eslint:recommended", "plugin:@typescript-eslint/recommended"], - "rules": { - "@typescript-eslint/no-explicit-any": 1 - }, + "rules": {}, "settings": { "import/resolver": { "node": { diff --git a/README.md b/README.md index 8bb3b47f..15dd8094 100644 --- a/README.md +++ b/README.md @@ -3,268 +3,6 @@ **Verax, previously known as "Linea Attestation Registry", is a set of contracts that allows anyone to read and write attestations of any type and any subject.** -## Foundry Installation - -**Using Foundryup** - -Foundryup is the Foundry toolchain installer. Open your terminal and run the following command: - -`curl -L https://foundry.paradigm.xyz | bash` This will install Foundryup, then simply follow the instructions -on-screen, which will make the foundryup command available in your CLI. - -Running foundryup by itself will install the latest (nightly) precompiled binaries: forge, cast, anvil and chisel. See -foundryup --help for more options, like installing from a specific version or commit. - -ℹ️ Note - -If you're on Windows, you will need to install and use Git BASH or WSL, as your terminal, since Foundryup currently does -not support Powershell or Cmd. - -For more details on installation, see the [installation guide](https://book.getfoundry.sh/getting-started/installation) -in the book. - -If you're experiencing any issues while installing, check out the [FAQ](https://book.getfoundry.sh/faq). - -## Forge - build and test - -We can build the project with forge build: - -``` -$ forge build -[⠊] Compiling... -[⠘] Compiling 22 files with 0.8.20 -[⠒] Solc 0.8.20 finished in 2.97s -Compiler run successful! -``` - -And run the tests with forge test: - -``` -$ forge test -No files changed, compilation skipped - -Running 2 tests for test/Counter.t.sol:CounterTest -[PASS] testIncrement() (gas: 28334) -[PASS] testSetNumber(uint256) (runs: 256, μ: 27398, ~: 28409) -Test result: ok. 2 passed; 0 failed; 0 skipped; finished in 10.42ms -Ran 1 test suites: 2 tests passed, 0 failed, 0 skipped (2 total tests) -``` - -## Deployment - using Anvil - -Anvil is a local testnet node shipped with Foundry. You can use it for testing your contracts from frontends or for -interacting over RPC. Anvil is part of the Foundry suite and is installed alongside forge, cast and chisel. - -**Step 1 : Run a local node using Anvil** - -To run a local node, simply type anvil. You should see a list of accounts and private keys available for use, as well as -the address and port the node is listening on. - -``` -$ anvil - - - _ _ - (_) | | - __ _ _ __ __ __ _ | | - / _` | | '_ \ \ \ / / | | | | - | (_| | | | | | \ V / | | | | - \__,_| |_| |_| \_/ |_| |_| - - 0.1.0 (02e430c 2023-07-21T00:20:33.193960100Z) - https://github.com/foundry-rs/foundry - -Available Accounts -================== - -(0) "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266" (10000.000000000000000000 ETH) -(1) "0x70997970C51812dc3A010C7d01b50e0d17dc79C8" (10000.000000000000000000 ETH) -(2) "0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC" (10000.000000000000000000 ETH) -(3) "0x90F79bf6EB2c4f870365E785982E1f101E93b906" (10000.000000000000000000 ETH) -(4) "0x15d34AAf54267DB7D7c367839AAf71A00a2C6A65" (10000.000000000000000000 ETH) -(5) "0x9965507D1a55bcC2695C58ba16FB37d819B0A4dc" (10000.000000000000000000 ETH) -(6) "0x976EA74026E726554dB657fA54763abd0C3a0aa9" (10000.000000000000000000 ETH) -(7) "0x14dC79964da2C08b23698B3D3cc7Ca32193d9955" (10000.000000000000000000 ETH) -(8) "0x23618e81E3f5cdF7f54C3d65f7FBc0aBf5B21E8f" (10000.000000000000000000 ETH) -(9) "0xa0Ee7A142d267C1f36714E4a8F75612F20a79720" (10000.000000000000000000 ETH) - -Private Keys -================== - -(0) 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 -(1) 0x59c6995e998f97a5a0044966f0945389dc9e86dae88c7a8412f4603b6b78690d -(2) 0x5de4111afa1a4b94908f83103eb1f1706367c2e68ca870fc3fb9a804cdab365a -(3) 0x7c852118294e51e653712a81e05800f419141751be58f605c371e15141b007a6 -(4) 0x47e179ec197488593b187f80a00eb0da91f1b9d0b13f8733639f19c30a34926a -(5) 0x8b3a350cf5c34c9194ca85829a2df0ec3153be0318b5e2d3348e872092edffba -(6) 0x92db14e403b83dfe3df233f83dfa3a0d7096f21ca9b0d6d6b8d88b2b4ec1564e -(7) 0x4bbbf85ce3377467afe5d46f804f221813b2bb87f24d81f60f1fcdbf7cbf4356 -(8) 0xdbda1821b80551c9d65939329250298aa3472ba22feea921c0cf5d620ea67b97 -(9) 0x2a871d0798f97d79848a013d4936a73bf4cc922c825d33c1cf7073dff6d409c6 - -Wallet -================== -Mnemonic: test test test test test test test test test test test junk -Derivation path: m/44'/60'/0'/0/ - - -Chain ID -================== - -31337 -1000000000 - -Gas Limit -================== - -30000000 - -Genesis Timestamp -================== - -1689949885 - -Listening on 127.0.0.1:8545 -``` - -Anvil is highly configurable. You can run anvil -h to see all the configuration options. - -Some basic options are: - -``` -# Number of dev accounts to generate and configure. [default: 10] -anvil -a, --accounts - -# The EVM hardfork to use. [default: latest] -anvil --hardfork - -# Port number to listen on. [default: 8545] -anvil -p, --port -``` - -**Step 2 : Deployment** - -Forge can deploy smart contracts to a given network with the forge create command. - -Forge can deploy only one contract at a time. - -To deploy on Anvil local node use `forge create` command with RPC url and any private key provided by anvil local node -mentioned above. - -e.g. - -``` -forge create --rpc-url http://127.0.0.1:8545 --private-key 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 src/Counter.sol:Counter -[⠆] Compiling... -No files changed, compilation skipped -Deployer: 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266 -Deployed to: 0x5FbDB2315678afecb367f032d93F642f64180aa3 -Transaction hash: 0x15b25752da1dfd458b92069248825ce959f5be104f974d62b4ae95050710325d -``` - -## Verax contracts deployment - -### On the Linea Goerli testnet: - -1. Copy the `.env.example` file to a `.env` file -2. Fill it with your Infura key -3. Add your private key -4. To verify the contracts on Etherscan, also add your Etherscan API key -5. Deploy every contract via the `pnpm run deploy:all:goerli` command -6. Note down the summarized addresses (proxies), and the total logs can be of interest too -7. Gather the first list of issuers addresses -8. Set the issuers via the PortalRegistry’s `setIssuers` method -9. Deploy an instance of DefaultPortal via the PortalRegistry’s `deployDefaultPortal` method and note down its address -10. Verify this contract via `npx hardhat verify --network linea-goerli ADDRESS` -11. _Optional_: Deploy some valid modules via the `pnpm run deploy:CorrectModule:goerli` command and note down their - addresses -12. _Optional_: Deploy an invalid module via the `pnpm run deploy:IncorrectModule:goerli` command and note down its - address - -### On the Linea mainnet: - -1. Copy the `.env.example` file to a `.env` file -2. Fill it with your Infura key -3. Add your private key -4. To verify the contracts on Etherscan, also add your Etherscan API key -5. Deploy every contract via the `pnpm run deploy:all` command -6. Note down the summarized addresses (proxies), and the total logs can be of interest too -7. Gather the first list of issuers addresses -8. Set the issuers via the PortalRegistry’s `setIssuers` method -9. Deploy an instance of DefaultPortal via the PortalRegistry’s `deployDefaultPortal` method and note down its address -10. Verify this contract via `npx hardhat verify --network linea ADDRESS` -11. _Optional_: Deploy some valid modules via the `pnpm run deploy:CorrectModule` command and note down their addresses -12. _Optional_: Deploy an invalid module via the `pnpm run deploy:IncorrectModule` command and note down its address - -## Verax contracts upgrade - -### Check all registries implementations follow the upgradability rules - -Run `pnpm run check:upgradeability` to check if the local versions of the registries follow the upgradability rules. - -:warning: Note: this is a static check, not run against the already deployed contracts. - -### Check all registries implementations are upgradeable - -Run `pnpm run check:upgradeable:goerli` or `pnpm run check:upgradeable` to check if the already deployed registries are -upgradable to the new local versions. - -:warning: Note: this is a dynamic check, run against the already deployed contracts. - -### Recreate the network files - -:warning: Note: this script must only be run on a branch/commit corresponding to the version of the contracts deployed -on the targeted network!. - -Run `pnpm run check:upgradeable:goerli` or `pnpm run check:upgradeable` to re-generate the network files describing the -deployed contracts. This can be useful if the file was lost/modified since the last upgrade or the first deployment. - -:warning: Note: the script will fail if a network file already contains one of the targeted proxy addresses. - -### On the Linea Goerli testnet: - -1. Check that your `.env` file contains the address of all the proxies -2. Upgrade only the implementations that changed since the last upgrade via the `pnpm run upgrade:all:goerli` command -3. _Optional_: Upgrade all the implementations by forcing their re-deployment via the - `pnpm run upgrade:all:goerli:force` command - -:warning: Note: Forcing the redeployment of all the implementations is more expensive! - -### On the Linea mainnet: - -1. Check that your `.env` file contains the address of all the proxies -2. Upgrade only the implementations that changed since the last upgrade via the `pnpm run upgrade:all` command -3. _Optional_: Upgrade all the implementations by forcing their re-deployment via the `pnpm run upgrade:all:force` - command - -:warning: Note: Forcing the redeployment of all the implementations is more expensive! - -## Utils - -### Encode - -Change the data you want to encode in `contracts/script/encode.ts`, then run: - -``` -pnpm run encode -``` - -### Decode - -Change the data you want to decode in `contracts/script/decode.ts`, then run: - -``` -pnpm run decode -``` - -### Verify with arguments - -Change the arguments you want to use fpr the verify action in `contracts/script/arguments.ts`, then run: - -``` -npx hardhat verify --network NETWORK_NAME CONTRACT_ADDRESS --constructor-args contracts/script/arguments.ts -``` - ## Contracts addresses ### Testnet diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ba0f8bb2..52e4b8cd 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -79,9 +79,6 @@ importers: ts-node: specifier: ^10.9.1 version: 10.9.1(@types/node@20.8.0)(typescript@5.2.2) - vite: - specifier: ^4.4.9 - version: 4.4.10(@types/node@20.8.0) subgraph: devDependencies: @@ -231,204 +228,6 @@ packages: '@jridgewell/trace-mapping': 0.3.9 dev: true - /@esbuild/android-arm64@0.18.20: - resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true - - /@esbuild/android-arm@0.18.20: - resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==} - engines: {node: '>=12'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true - optional: true - - /@esbuild/android-x64@0.18.20: - resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==} - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true - optional: true - - /@esbuild/darwin-arm64@0.18.20: - resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - /@esbuild/darwin-x64@0.18.20: - resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - /@esbuild/freebsd-arm64@0.18.20: - resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - /@esbuild/freebsd-x64@0.18.20: - resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-arm64@0.18.20: - resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-arm@0.18.20: - resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-ia32@0.18.20: - resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==} - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-loong64@0.18.20: - resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==} - engines: {node: '>=12'} - cpu: [loong64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-mips64el@0.18.20: - resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-ppc64@0.18.20: - resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-riscv64@0.18.20: - resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-s390x@0.18.20: - resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-x64@0.18.20: - resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==} - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/netbsd-x64@0.18.20: - resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true - optional: true - - /@esbuild/openbsd-x64@0.18.20: - resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true - optional: true - - /@esbuild/sunos-x64@0.18.20: - resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true - optional: true - - /@esbuild/win32-arm64@0.18.20: - resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - /@esbuild/win32-ia32@0.18.20: - resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - - /@esbuild/win32-x64@0.18.20: - resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true - /@eslint-community/eslint-utils@4.4.0(eslint@8.50.0): resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -3491,36 +3290,6 @@ packages: es6-promise: 4.2.8 dev: true - /esbuild@0.18.20: - resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} - engines: {node: '>=12'} - hasBin: true - requiresBuild: true - optionalDependencies: - '@esbuild/android-arm': 0.18.20 - '@esbuild/android-arm64': 0.18.20 - '@esbuild/android-x64': 0.18.20 - '@esbuild/darwin-arm64': 0.18.20 - '@esbuild/darwin-x64': 0.18.20 - '@esbuild/freebsd-arm64': 0.18.20 - '@esbuild/freebsd-x64': 0.18.20 - '@esbuild/linux-arm': 0.18.20 - '@esbuild/linux-arm64': 0.18.20 - '@esbuild/linux-ia32': 0.18.20 - '@esbuild/linux-loong64': 0.18.20 - '@esbuild/linux-mips64el': 0.18.20 - '@esbuild/linux-ppc64': 0.18.20 - '@esbuild/linux-riscv64': 0.18.20 - '@esbuild/linux-s390x': 0.18.20 - '@esbuild/linux-x64': 0.18.20 - '@esbuild/netbsd-x64': 0.18.20 - '@esbuild/openbsd-x64': 0.18.20 - '@esbuild/sunos-x64': 0.18.20 - '@esbuild/win32-arm64': 0.18.20 - '@esbuild/win32-ia32': 0.18.20 - '@esbuild/win32-x64': 0.18.20 - dev: true - /escalade@3.1.1: resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} engines: {node: '>=6'} @@ -5789,12 +5558,6 @@ packages: hasBin: true dev: true - /nanoid@3.3.6: - resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - dev: true - /napi-macros@2.2.2: resolution: {integrity: sha512-hmEVtAGYzVQpCKdbQea4skABsdXW4RUh5t5mJ2zzqowJS2OyXZTU1KhDVFhx+NlWZ4ap9mqR9TcDO3LTTttd+g==} dev: true @@ -6151,10 +5914,6 @@ packages: resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==} dev: true - /picocolors@1.0.0: - resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} - dev: true - /picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} @@ -6170,15 +5929,6 @@ packages: engines: {node: '>=4'} dev: true - /postcss@8.4.31: - resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} - engines: {node: ^10 || ^12 || >=14} - dependencies: - nanoid: 3.3.6 - picocolors: 1.0.0 - source-map-js: 1.0.2 - dev: true - /prelude-ls@1.1.2: resolution: {integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==} engines: {node: '>= 0.8.0'} @@ -6569,14 +6319,6 @@ packages: bn.js: 5.2.1 dev: true - /rollup@3.29.4: - resolution: {integrity: sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==} - engines: {node: '>=14.18.0', npm: '>=8.0.0'} - hasBin: true - optionalDependencies: - fsevents: 2.3.3 - dev: true - /run-parallel-limit@1.1.0: resolution: {integrity: sha512-jJA7irRNM91jaKc3Hcl1npHsFLOXOoTkPCUL1JEa1R82O2miplXXRaGdjW/KM/98YQWDhJLiSs793CnXfblJUw==} dependencies: @@ -6847,11 +6589,6 @@ packages: - supports-color dev: true - /source-map-js@1.0.2: - resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} - engines: {node: '>=0.10.0'} - dev: true - /source-map-support@0.5.21: resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} dependencies: @@ -7567,42 +7304,6 @@ packages: - zod dev: false - /vite@4.4.10(@types/node@20.8.0): - resolution: {integrity: sha512-TzIjiqx9BEXF8yzYdF2NTf1kFFbjMjUSV0LFZ3HyHoI3SGSPLnnFUKiIQtL3gl2AjHvMrprOvQ3amzaHgQlAxw==} - engines: {node: ^14.18.0 || >=16.0.0} - hasBin: true - peerDependencies: - '@types/node': '>= 14' - less: '*' - lightningcss: ^1.21.0 - sass: '*' - stylus: '*' - sugarss: '*' - terser: ^5.4.0 - peerDependenciesMeta: - '@types/node': - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - dependencies: - '@types/node': 20.8.0 - esbuild: 0.18.20 - postcss: 8.4.31 - rollup: 3.29.4 - optionalDependencies: - fsevents: 2.3.3 - dev: true - /wcwidth@1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} dependencies: diff --git a/sdk/.env.example b/sdk/.env.example deleted file mode 100644 index 7fee7dc2..00000000 --- a/sdk/.env.example +++ /dev/null @@ -1 +0,0 @@ -GRAPH_QUERY_URL= diff --git a/sdk/.gitkeep b/sdk/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/sdk/examples/AttestationFindOneById.ts b/sdk/examples/AttestationFindOneById.ts deleted file mode 100644 index 8b6ea8a6..00000000 --- a/sdk/examples/AttestationFindOneById.ts +++ /dev/null @@ -1,9 +0,0 @@ -import VeraxSdk from "../src/VeraxSdk"; - -const veraxSdk = new VeraxSdk(VeraxSdk.DEFAULT_LINEA_TESTNET); - -console.log( - await veraxSdk.attestationDataMapper.findOneById( - "0x00000000000000000000000000000000000000000000000000000000000007b5", - ), -); diff --git a/sdk/examples/attestation/findBy.ts b/sdk/examples/attestation/findBy.ts new file mode 100644 index 00000000..2e5e5d7e --- /dev/null +++ b/sdk/examples/attestation/findBy.ts @@ -0,0 +1,5 @@ +import VeraxSdk from "../../src/VeraxSdk"; + +const veraxSdk = new VeraxSdk(VeraxSdk.DEFAULT_LINEA_TESTNET); + +console.log(await veraxSdk.attestation.findBy()); diff --git a/sdk/examples/attestation/findOneById.ts b/sdk/examples/attestation/findOneById.ts new file mode 100644 index 00000000..2240b195 --- /dev/null +++ b/sdk/examples/attestation/findOneById.ts @@ -0,0 +1,7 @@ +import VeraxSdk from "../../src/VeraxSdk"; + +const veraxSdk = new VeraxSdk(VeraxSdk.DEFAULT_LINEA_TESTNET); + +console.log( + await veraxSdk.attestation.findOneById("0x00000000000000000000000000000000000000000000000000000000000007b5"), +); diff --git a/sdk/examples/module/findBy.ts b/sdk/examples/module/findBy.ts new file mode 100644 index 00000000..a8a51841 --- /dev/null +++ b/sdk/examples/module/findBy.ts @@ -0,0 +1,5 @@ +import VeraxSdk from "../../src/VeraxSdk"; + +const veraxSdk = new VeraxSdk(VeraxSdk.DEFAULT_LINEA_TESTNET); + +console.log(await veraxSdk.module.findBy()); diff --git a/sdk/examples/module/findOneById.ts b/sdk/examples/module/findOneById.ts new file mode 100644 index 00000000..9f0df275 --- /dev/null +++ b/sdk/examples/module/findOneById.ts @@ -0,0 +1,5 @@ +import VeraxSdk from "../../src/VeraxSdk"; + +const veraxSdk = new VeraxSdk(VeraxSdk.DEFAULT_LINEA_TESTNET); + +console.log(await veraxSdk.module.findOneById("0xf75be6f9418710fd516fa82afb3aad07e11a0f1b")); diff --git a/sdk/examples/portal/findBy.ts b/sdk/examples/portal/findBy.ts new file mode 100644 index 00000000..da0c6896 --- /dev/null +++ b/sdk/examples/portal/findBy.ts @@ -0,0 +1,5 @@ +import VeraxSdk from "../../src/VeraxSdk"; + +const veraxSdk = new VeraxSdk(VeraxSdk.DEFAULT_LINEA_TESTNET); + +console.log(await veraxSdk.portal.findBy()); diff --git a/sdk/examples/portal/findOneById.ts b/sdk/examples/portal/findOneById.ts new file mode 100644 index 00000000..fa541db4 --- /dev/null +++ b/sdk/examples/portal/findOneById.ts @@ -0,0 +1,5 @@ +import VeraxSdk from "../../src/VeraxSdk"; + +const veraxSdk = new VeraxSdk(VeraxSdk.DEFAULT_LINEA_TESTNET); + +console.log(await veraxSdk.portal.findOneById("0x1495341ab1019798dd08976f4a3e5ab0e095510b")); diff --git a/sdk/examples/schema/findBy.ts b/sdk/examples/schema/findBy.ts new file mode 100644 index 00000000..8a6cb70a --- /dev/null +++ b/sdk/examples/schema/findBy.ts @@ -0,0 +1,5 @@ +import VeraxSdk from "../../src/VeraxSdk"; + +const veraxSdk = new VeraxSdk(VeraxSdk.DEFAULT_LINEA_TESTNET); + +console.log(await veraxSdk.schema.findBy()); diff --git a/sdk/examples/schema/findOneById.ts b/sdk/examples/schema/findOneById.ts new file mode 100644 index 00000000..37437635 --- /dev/null +++ b/sdk/examples/schema/findOneById.ts @@ -0,0 +1,5 @@ +import VeraxSdk from "../../src/VeraxSdk"; + +const veraxSdk = new VeraxSdk(VeraxSdk.DEFAULT_LINEA_TESTNET); + +console.log(await veraxSdk.schema.findOneById("0x01f031da36192c34057c764239eb77bb6ec8ebfb808f72a7bb172f37a5bec31f")); diff --git a/sdk/examples/utils/getAttestationIdCounter.ts b/sdk/examples/utils/getAttestationIdCounter.ts new file mode 100644 index 00000000..f14a3763 --- /dev/null +++ b/sdk/examples/utils/getAttestationIdCounter.ts @@ -0,0 +1,5 @@ +import VeraxSdk from "../../src/VeraxSdk"; + +const veraxSdk = new VeraxSdk(VeraxSdk.DEFAULT_LINEA_TESTNET); + +console.log(await veraxSdk.utils.getAttestationIdCounter()); diff --git a/sdk/examples/utils/getModulesNumber.ts b/sdk/examples/utils/getModulesNumber.ts new file mode 100644 index 00000000..43dd10ad --- /dev/null +++ b/sdk/examples/utils/getModulesNumber.ts @@ -0,0 +1,5 @@ +import VeraxSdk from "../../src/VeraxSdk"; + +const veraxSdk = new VeraxSdk(VeraxSdk.DEFAULT_LINEA_TESTNET); + +console.log(await veraxSdk.utils.getModulesNumber()); diff --git a/sdk/examples/utils/getPortalsCount.ts b/sdk/examples/utils/getPortalsCount.ts new file mode 100644 index 00000000..03d82420 --- /dev/null +++ b/sdk/examples/utils/getPortalsCount.ts @@ -0,0 +1,5 @@ +import VeraxSdk from "../../src/VeraxSdk"; + +const veraxSdk = new VeraxSdk(VeraxSdk.DEFAULT_LINEA_TESTNET); + +console.log(await veraxSdk.utils.getPortalsCount()); diff --git a/sdk/examples/utils/getSchemasNumber.ts b/sdk/examples/utils/getSchemasNumber.ts new file mode 100644 index 00000000..262c143f --- /dev/null +++ b/sdk/examples/utils/getSchemasNumber.ts @@ -0,0 +1,5 @@ +import VeraxSdk from "../../src/VeraxSdk"; + +const veraxSdk = new VeraxSdk(VeraxSdk.DEFAULT_LINEA_TESTNET); + +console.log(await veraxSdk.utils.getSchemasNumber()); diff --git a/sdk/examples/utils/getVersionNumber.ts b/sdk/examples/utils/getVersionNumber.ts new file mode 100644 index 00000000..fdd04bda --- /dev/null +++ b/sdk/examples/utils/getVersionNumber.ts @@ -0,0 +1,5 @@ +import VeraxSdk from "../../src/VeraxSdk"; + +const veraxSdk = new VeraxSdk(VeraxSdk.DEFAULT_LINEA_TESTNET); + +console.log(await veraxSdk.utils.getVersionNumber()); diff --git a/sdk/index.html b/sdk/index.html deleted file mode 100644 index 4c2b4e35..00000000 --- a/sdk/index.html +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - -

Attestation Registry

-
Loading...
- - - diff --git a/sdk/package.json b/sdk/package.json index 891458f8..8a615ead 100644 --- a/sdk/package.json +++ b/sdk/package.json @@ -11,13 +11,24 @@ "smart-contracts", "solidity" ], - "type": "module", "repository": "github.com/Consensys/linea-attestation-registry", "license": "MIT", "author": "Consensys", + "type": "module", "scripts": { - "dev": "vite", - "attestation": "ts-node examples/AttestationFindOneById.ts" + "attestation:all": "ts-node examples/attestation/findBy.ts", + "attestation:one": "ts-node examples/attestation/findOneById.ts", + "module:all": "ts-node examples/module/findBy.ts", + "module:one": "ts-node examples/module/findOneById.ts", + "portal:all": "ts-node examples/portal/findBy.ts", + "portal:one": "ts-node examples/portal/findOneById.ts", + "schema:all": "ts-node examples/schema/findBy.ts", + "schema:one": "ts-node examples/schema/findOneById.ts", + "utils:attestation:counter": "ts-node examples/utils/getAttestationIdCounter.ts", + "utils:attestation:version": "ts-node examples/utils/getVersionNumber.ts", + "utils:module:counter": "ts-node examples/utils/getModulesNumber.ts", + "utils:portal:counter": "ts-node examples/utils/getPortalsCount.ts", + "utils:schema:counter": "ts-node examples/utils/getSchemasNumber.ts" }, "dependencies": { "@apollo/client": "^3.8.4", @@ -25,7 +36,6 @@ "viem": "^1.14.0" }, "devDependencies": { - "ts-node": "^10.9.1", - "vite": "^4.4.9" + "ts-node": "^10.9.1" } } diff --git a/sdk/src/AttestationRegistryWrapper.ts b/sdk/src/AttestationRegistryWrapper.ts deleted file mode 100644 index 54b4017a..00000000 --- a/sdk/src/AttestationRegistryWrapper.ts +++ /dev/null @@ -1,90 +0,0 @@ -import { createPublicClient, http } from "viem"; -import { lineaTestnet } from "viem/chains"; -import { attestationRegistry } from "./abi/AttestationRegistry"; -import { ApolloClient, gql, InMemoryCache } from "@apollo/client/core"; - -const web3Client = createPublicClient({ - chain: lineaTestnet, - transport: http(), -}); - -const apolloClient = new ApolloClient({ - uri: "https://graph-query.goerli.linea.build/subgraphs/name/Consensys/linea-attestation-registry", - cache: new InMemoryCache(), -}); - -export const getVersionNumber = async () => { - return await web3Client.readContract({ - ...attestationRegistry, - functionName: "getVersionNumber", - }); -}; - -export const getAttestationIdCounter = async () => { - return await web3Client.readContract({ - ...attestationRegistry, - functionName: "getAttestationIdCounter", - }); -}; - -export const findOneById = async (id: string) => { - const queryResult = await apolloClient.query({ - query: gql` - query GetAttestation($id: ID!) { - attestation(id: $id) { - id - schemaId - replacedBy - attester - portal - attestedDate - expirationDate - revocationDate - version - revoked - subject - attestationData - schemaString - decodedData - } - } - `, - variables: { id }, - }); - - return JSON.stringify(queryResult.data.attestation); -}; -export const findBy = async () => { - const queryResult = await apolloClient.query({ - query: gql` - query GetAttestations { - attestations { - id - schemaId - replacedBy - attester - portal - attestedDate - expirationDate - revocationDate - version - revoked - subject - attestationData - schemaString - decodedData - } - } - `, - }); - - return JSON.stringify(queryResult.data.attestations); -}; - -export default [ - `AttestationRegistry address: ${attestationRegistry.address}`, - `Version: ${await getVersionNumber()}`, - `Attestations counter: ${await getAttestationIdCounter()}`, - `Find one by ID: ${await findOneById("0x00000000000000000000000000000000000000000000000000000000000007b5")}`, - `Find by: ${await findBy()}`, -]; diff --git a/sdk/src/VeraxSdk.ts b/sdk/src/VeraxSdk.ts index ef004eb4..c7397ba6 100644 --- a/sdk/src/VeraxSdk.ts +++ b/sdk/src/VeraxSdk.ts @@ -1,38 +1,40 @@ import { linea, lineaTestnet } from "viem/chains"; -import Conf from "./interface/Conf"; import AttestationDataMapper from "./dataMapper/AttestationDataMapper"; import SchemaDataMapper from "./dataMapper/SchemaDataMapper"; import ModuleDataMapper from "./dataMapper/ModuleDataMapper"; import PortalDataMapper from "./dataMapper/PortalDataMapper"; import { createPublicClient, http, PublicClient } from "viem"; import { ApolloClient, InMemoryCache } from "@apollo/client/core"; +import { Conf } from "./types"; +import UtilsDataMapper from "./dataMapper/UtilsDataMapper"; export default class VeraxSdk { static DEFAULT_LINEA_MAINNET: Conf = { chain: linea, subgraphUrl: "https://graph-query.linea.build/subgraphs/name/Consensys/linea-attestation-registry", - portalRegistryAddress: "foo", - moduleRegistryAddress: "foo", - schemaRegistryAddress: "foo", - attestationRegistryAddress: "bar", + portalRegistryAddress: "0xd5d61e4ECDf6d46A63BfdC262af92544DFc19083", + moduleRegistryAddress: "0xf851513A732996F22542226341748f3C9978438f", + schemaRegistryAddress: "0x0f95dCec4c7a93F2637eb13b655F2223ea036B59", + attestationRegistryAddress: "0x3de3893aa4Cdea029e84e75223a152FD08315138", }; static DEFAULT_LINEA_TESTNET: Conf = { chain: lineaTestnet, subgraphUrl: "https://graph-query.goerli.linea.build/subgraphs/name/Consensys/linea-attestation-registry", - portalRegistryAddress: "bar", - moduleRegistryAddress: "bar", - schemaRegistryAddress: "bar", - attestationRegistryAddress: "bar", + portalRegistryAddress: "0x506f88a5Ca8D5F001f2909b029738A40042e42a6", + moduleRegistryAddress: "0x1a20b2CFA134686306436D2c9f778D7eC6c43A43", + schemaRegistryAddress: "0xB2c4Da1f8F08A0CA25862509E5431289BE2b598B", + attestationRegistryAddress: "0xC765F28096F6121C2F2b82D35A4346280164428b", }; private readonly web3Client: PublicClient; - private readonly apolloClient: ApolloClient; + private readonly apolloClient: ApolloClient; - public attestationDataMapper: AttestationDataMapper; - public schemaDataMapper: SchemaDataMapper; - public moduleDataMapper: ModuleDataMapper; - public portalDataMapper: PortalDataMapper; + public attestation: AttestationDataMapper; + public schema: SchemaDataMapper; + public module: ModuleDataMapper; + public portal: PortalDataMapper; + public utils: UtilsDataMapper; constructor(conf: Conf) { this.web3Client = createPublicClient({ @@ -45,9 +47,10 @@ export default class VeraxSdk { cache: new InMemoryCache(), }); - this.attestationDataMapper = new AttestationDataMapper(conf, this.web3Client, this.apolloClient); - this.schemaDataMapper = new SchemaDataMapper(conf, this.web3Client, this.apolloClient); - this.moduleDataMapper = new ModuleDataMapper(conf, this.web3Client, this.apolloClient); - this.portalDataMapper = new PortalDataMapper(conf, this.web3Client, this.apolloClient); + this.attestation = new AttestationDataMapper(conf, this.web3Client, this.apolloClient); + this.schema = new SchemaDataMapper(conf, this.web3Client, this.apolloClient); + this.module = new ModuleDataMapper(conf, this.web3Client, this.apolloClient); + this.portal = new PortalDataMapper(conf, this.web3Client, this.apolloClient); + this.utils = new UtilsDataMapper(conf, this.web3Client, this.apolloClient); } } diff --git a/sdk/src/abi/AttestationRegistry.ts b/sdk/src/abi/AttestationRegistry.ts index ec1967a3..416dc039 100644 --- a/sdk/src/abi/AttestationRegistry.ts +++ b/sdk/src/abi/AttestationRegistry.ts @@ -1,610 +1,607 @@ -export const attestationRegistry = { - address: "0xC765F28096F6121C2F2b82D35A4346280164428b", - abi: [ - { - inputs: [], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [], - name: "AlreadyRevoked", - type: "error", - }, - { - inputs: [], - name: "ArrayLengthMismatch", - type: "error", - }, - { - inputs: [], - name: "AttestationDataFieldEmpty", - type: "error", - }, - { - inputs: [], - name: "AttestationNotAttested", - type: "error", - }, - { - inputs: [], - name: "AttestationNotRevocable", - type: "error", - }, - { - inputs: [], - name: "AttestationSubjectFieldEmpty", - type: "error", - }, - { - inputs: [], - name: "OnlyAttestingPortal", - type: "error", - }, - { - inputs: [], - name: "OnlyPortal", - type: "error", - }, - { - inputs: [], - name: "RouterInvalid", - type: "error", - }, - { - inputs: [], - name: "SchemaNotRegistered", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "bytes32", - name: "attestationId", - type: "bytes32", - }, - ], - name: "AttestationRegistered", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes32", - name: "attestationId", - type: "bytes32", - }, - { - indexed: false, - internalType: "bytes32", - name: "replacedBy", - type: "bytes32", - }, - ], - name: "AttestationReplaced", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes32", - name: "attestationId", - type: "bytes32", - }, - ], - name: "AttestationRevoked", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint8", - name: "version", - type: "uint8", - }, - ], - name: "Initialized", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "previousOwner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "newOwner", - type: "address", - }, - ], - name: "OwnershipTransferred", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint16", - name: "version", - type: "uint16", - }, - ], - name: "VersionUpdated", - type: "event", - }, - { - inputs: [ - { - components: [ - { - internalType: "bytes32", - name: "schemaId", - type: "bytes32", - }, - { - internalType: "uint64", - name: "expirationDate", - type: "uint64", - }, - { - internalType: "bytes", - name: "subject", - type: "bytes", - }, - { - internalType: "bytes", - name: "attestationData", - type: "bytes", - }, - ], - internalType: "struct AttestationPayload", - name: "attestationPayload", - type: "tuple", - }, - { - internalType: "address", - name: "attester", - type: "address", - }, - ], - name: "attest", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - components: [ - { - internalType: "bytes32", - name: "schemaId", - type: "bytes32", - }, - { - internalType: "uint64", - name: "expirationDate", - type: "uint64", - }, - { - internalType: "bytes", - name: "subject", - type: "bytes", - }, - { - internalType: "bytes", - name: "attestationData", - type: "bytes", - }, - ], - internalType: "struct AttestationPayload[]", - name: "attestationsPayloads", - type: "tuple[]", - }, - { - internalType: "address", - name: "attester", - type: "address", - }, - ], - name: "bulkAttest", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes32[]", - name: "attestationIds", - type: "bytes32[]", - }, - { - components: [ - { - internalType: "bytes32", - name: "schemaId", - type: "bytes32", - }, - { - internalType: "uint64", - name: "expirationDate", - type: "uint64", - }, - { - internalType: "bytes", - name: "subject", - type: "bytes", - }, - { - internalType: "bytes", - name: "attestationData", - type: "bytes", - }, - ], - internalType: "struct AttestationPayload[]", - name: "attestationPayloads", - type: "tuple[]", - }, - { - internalType: "address", - name: "attester", - type: "address", - }, - ], - name: "bulkReplace", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes32[]", - name: "attestationIds", - type: "bytes32[]", - }, - ], - name: "bulkRevoke", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "attestationId", - type: "bytes32", - }, - ], - name: "getAttestation", - outputs: [ - { - components: [ - { - internalType: "bytes32", - name: "attestationId", - type: "bytes32", - }, - { - internalType: "bytes32", - name: "schemaId", - type: "bytes32", - }, - { - internalType: "bytes32", - name: "replacedBy", - type: "bytes32", - }, - { - internalType: "address", - name: "attester", - type: "address", - }, - { - internalType: "address", - name: "portal", - type: "address", - }, - { - internalType: "uint64", - name: "attestedDate", - type: "uint64", - }, - { - internalType: "uint64", - name: "expirationDate", - type: "uint64", - }, - { - internalType: "uint64", - name: "revocationDate", - type: "uint64", - }, - { - internalType: "uint16", - name: "version", - type: "uint16", - }, - { - internalType: "bool", - name: "revoked", - type: "bool", - }, - { - internalType: "bytes", - name: "subject", - type: "bytes", - }, - { - internalType: "bytes", - name: "attestationData", - type: "bytes", - }, - ], - internalType: "struct Attestation", - name: "", - type: "tuple", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "getAttestationIdCounter", - outputs: [ - { - internalType: "uint32", - name: "", - type: "uint32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "getVersionNumber", - outputs: [ - { - internalType: "uint16", - name: "", - type: "uint16", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "incrementVersionNumber", - outputs: [ - { - internalType: "uint16", - name: "", - type: "uint16", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "attestationId", - type: "bytes32", - }, - ], - name: "isRegistered", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "portalId", - type: "address", - }, - ], - name: "isRevocable", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - components: [ - { - internalType: "bytes32", - name: "schemaId", - type: "bytes32", - }, - { - internalType: "uint64", - name: "expirationDate", - type: "uint64", - }, - { - internalType: "bytes", - name: "subject", - type: "bytes", - }, - { - internalType: "bytes", - name: "attestationData", - type: "bytes", - }, - ], - internalType: "struct AttestationPayload[]", - name: "attestationsPayloads", - type: "tuple[]", - }, - { - internalType: "address", - name: "portal", - type: "address", - }, - ], - name: "massImport", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "owner", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "renounceOwnership", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "attestationId", - type: "bytes32", - }, - { - components: [ - { - internalType: "bytes32", - name: "schemaId", - type: "bytes32", - }, - { - internalType: "uint64", - name: "expirationDate", - type: "uint64", - }, - { - internalType: "bytes", - name: "subject", - type: "bytes", - }, - { - internalType: "bytes", - name: "attestationData", - type: "bytes", - }, - ], - internalType: "struct AttestationPayload", - name: "attestationPayload", - type: "tuple", - }, - { - internalType: "address", - name: "attester", - type: "address", - }, - ], - name: "replace", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "attestationId", - type: "bytes32", - }, - ], - name: "revoke", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "router", - outputs: [ - { - internalType: "contract IRouter", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "newOwner", - type: "address", - }, - ], - name: "transferOwnership", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_router", - type: "address", - }, - ], - name: "updateRouter", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - ], -} as const; +export const abiAttestationRegistry = [ + { + inputs: [], + stateMutability: "nonpayable", + type: "constructor", + }, + { + inputs: [], + name: "AlreadyRevoked", + type: "error", + }, + { + inputs: [], + name: "ArrayLengthMismatch", + type: "error", + }, + { + inputs: [], + name: "AttestationDataFieldEmpty", + type: "error", + }, + { + inputs: [], + name: "AttestationNotAttested", + type: "error", + }, + { + inputs: [], + name: "AttestationNotRevocable", + type: "error", + }, + { + inputs: [], + name: "AttestationSubjectFieldEmpty", + type: "error", + }, + { + inputs: [], + name: "OnlyAttestingPortal", + type: "error", + }, + { + inputs: [], + name: "OnlyPortal", + type: "error", + }, + { + inputs: [], + name: "RouterInvalid", + type: "error", + }, + { + inputs: [], + name: "SchemaNotRegistered", + type: "error", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "bytes32", + name: "attestationId", + type: "bytes32", + }, + ], + name: "AttestationRegistered", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "bytes32", + name: "attestationId", + type: "bytes32", + }, + { + indexed: false, + internalType: "bytes32", + name: "replacedBy", + type: "bytes32", + }, + ], + name: "AttestationReplaced", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "bytes32", + name: "attestationId", + type: "bytes32", + }, + ], + name: "AttestationRevoked", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "uint8", + name: "version", + type: "uint8", + }, + ], + name: "Initialized", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "previousOwner", + type: "address", + }, + { + indexed: true, + internalType: "address", + name: "newOwner", + type: "address", + }, + ], + name: "OwnershipTransferred", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "uint16", + name: "version", + type: "uint16", + }, + ], + name: "VersionUpdated", + type: "event", + }, + { + inputs: [ + { + components: [ + { + internalType: "bytes32", + name: "schemaId", + type: "bytes32", + }, + { + internalType: "uint64", + name: "expirationDate", + type: "uint64", + }, + { + internalType: "bytes", + name: "subject", + type: "bytes", + }, + { + internalType: "bytes", + name: "attestationData", + type: "bytes", + }, + ], + internalType: "struct AttestationPayload", + name: "attestationPayload", + type: "tuple", + }, + { + internalType: "address", + name: "attester", + type: "address", + }, + ], + name: "attest", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + components: [ + { + internalType: "bytes32", + name: "schemaId", + type: "bytes32", + }, + { + internalType: "uint64", + name: "expirationDate", + type: "uint64", + }, + { + internalType: "bytes", + name: "subject", + type: "bytes", + }, + { + internalType: "bytes", + name: "attestationData", + type: "bytes", + }, + ], + internalType: "struct AttestationPayload[]", + name: "attestationsPayloads", + type: "tuple[]", + }, + { + internalType: "address", + name: "attester", + type: "address", + }, + ], + name: "bulkAttest", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes32[]", + name: "attestationIds", + type: "bytes32[]", + }, + { + components: [ + { + internalType: "bytes32", + name: "schemaId", + type: "bytes32", + }, + { + internalType: "uint64", + name: "expirationDate", + type: "uint64", + }, + { + internalType: "bytes", + name: "subject", + type: "bytes", + }, + { + internalType: "bytes", + name: "attestationData", + type: "bytes", + }, + ], + internalType: "struct AttestationPayload[]", + name: "attestationPayloads", + type: "tuple[]", + }, + { + internalType: "address", + name: "attester", + type: "address", + }, + ], + name: "bulkReplace", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes32[]", + name: "attestationIds", + type: "bytes32[]", + }, + ], + name: "bulkRevoke", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes32", + name: "attestationId", + type: "bytes32", + }, + ], + name: "getAttestation", + outputs: [ + { + components: [ + { + internalType: "bytes32", + name: "attestationId", + type: "bytes32", + }, + { + internalType: "bytes32", + name: "schemaId", + type: "bytes32", + }, + { + internalType: "bytes32", + name: "replacedBy", + type: "bytes32", + }, + { + internalType: "address", + name: "attester", + type: "address", + }, + { + internalType: "address", + name: "portal", + type: "address", + }, + { + internalType: "uint64", + name: "attestedDate", + type: "uint64", + }, + { + internalType: "uint64", + name: "expirationDate", + type: "uint64", + }, + { + internalType: "uint64", + name: "revocationDate", + type: "uint64", + }, + { + internalType: "uint16", + name: "version", + type: "uint16", + }, + { + internalType: "bool", + name: "revoked", + type: "bool", + }, + { + internalType: "bytes", + name: "subject", + type: "bytes", + }, + { + internalType: "bytes", + name: "attestationData", + type: "bytes", + }, + ], + internalType: "struct Attestation", + name: "", + type: "tuple", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "getAttestationIdCounter", + outputs: [ + { + internalType: "uint32", + name: "", + type: "uint32", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "getVersionNumber", + outputs: [ + { + internalType: "uint16", + name: "", + type: "uint16", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "incrementVersionNumber", + outputs: [ + { + internalType: "uint16", + name: "", + type: "uint16", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "initialize", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes32", + name: "attestationId", + type: "bytes32", + }, + ], + name: "isRegistered", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "portalId", + type: "address", + }, + ], + name: "isRevocable", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + components: [ + { + internalType: "bytes32", + name: "schemaId", + type: "bytes32", + }, + { + internalType: "uint64", + name: "expirationDate", + type: "uint64", + }, + { + internalType: "bytes", + name: "subject", + type: "bytes", + }, + { + internalType: "bytes", + name: "attestationData", + type: "bytes", + }, + ], + internalType: "struct AttestationPayload[]", + name: "attestationsPayloads", + type: "tuple[]", + }, + { + internalType: "address", + name: "portal", + type: "address", + }, + ], + name: "massImport", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "owner", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "renounceOwnership", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes32", + name: "attestationId", + type: "bytes32", + }, + { + components: [ + { + internalType: "bytes32", + name: "schemaId", + type: "bytes32", + }, + { + internalType: "uint64", + name: "expirationDate", + type: "uint64", + }, + { + internalType: "bytes", + name: "subject", + type: "bytes", + }, + { + internalType: "bytes", + name: "attestationData", + type: "bytes", + }, + ], + internalType: "struct AttestationPayload", + name: "attestationPayload", + type: "tuple", + }, + { + internalType: "address", + name: "attester", + type: "address", + }, + ], + name: "replace", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes32", + name: "attestationId", + type: "bytes32", + }, + ], + name: "revoke", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "router", + outputs: [ + { + internalType: "contract IRouter", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "newOwner", + type: "address", + }, + ], + name: "transferOwnership", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "_router", + type: "address", + }, + ], + name: "updateRouter", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, +]; diff --git a/sdk/src/abi/ModuleRegistry.ts b/sdk/src/abi/ModuleRegistry.ts new file mode 100644 index 00000000..6dcb5c18 --- /dev/null +++ b/sdk/src/abi/ModuleRegistry.ts @@ -0,0 +1,392 @@ +export const abiModuleRegistry = [ + { + inputs: [], + stateMutability: "nonpayable", + type: "constructor", + }, + { + inputs: [], + name: "AttestationPayloadMissing", + type: "error", + }, + { + inputs: [], + name: "ModuleAddressInvalid", + type: "error", + }, + { + inputs: [], + name: "ModuleAlreadyExists", + type: "error", + }, + { + inputs: [], + name: "ModuleInvalid", + type: "error", + }, + { + inputs: [], + name: "ModuleNameMissing", + type: "error", + }, + { + inputs: [], + name: "ModuleNotRegistered", + type: "error", + }, + { + inputs: [], + name: "ModuleValidationPayloadMismatch", + type: "error", + }, + { + inputs: [], + name: "OnlyIssuer", + type: "error", + }, + { + inputs: [], + name: "RouterInvalid", + type: "error", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "uint8", + name: "version", + type: "uint8", + }, + ], + name: "Initialized", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "string", + name: "name", + type: "string", + }, + { + indexed: false, + internalType: "string", + name: "description", + type: "string", + }, + { + indexed: false, + internalType: "address", + name: "moduleAddress", + type: "address", + }, + ], + name: "ModuleRegistered", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "previousOwner", + type: "address", + }, + { + indexed: true, + internalType: "address", + name: "newOwner", + type: "address", + }, + ], + name: "OwnershipTransferred", + type: "event", + }, + { + inputs: [ + { + internalType: "address[]", + name: "modulesAddresses", + type: "address[]", + }, + { + components: [ + { + internalType: "bytes32", + name: "schemaId", + type: "bytes32", + }, + { + internalType: "uint64", + name: "expirationDate", + type: "uint64", + }, + { + internalType: "bytes", + name: "subject", + type: "bytes", + }, + { + internalType: "bytes", + name: "attestationData", + type: "bytes", + }, + ], + internalType: "struct AttestationPayload[]", + name: "attestationsPayloads", + type: "tuple[]", + }, + { + internalType: "bytes[][]", + name: "validationPayloads", + type: "bytes[][]", + }, + ], + name: "bulkRunModules", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "getModulesNumber", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "initialize", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "contractAddress", + type: "address", + }, + ], + name: "isContractAddress", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "moduleAddress", + type: "address", + }, + ], + name: "isRegistered", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + name: "moduleAddresses", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "id", + type: "address", + }, + ], + name: "modules", + outputs: [ + { + internalType: "address", + name: "moduleAddress", + type: "address", + }, + { + internalType: "string", + name: "name", + type: "string", + }, + { + internalType: "string", + name: "description", + type: "string", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "owner", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "string", + name: "name", + type: "string", + }, + { + internalType: "string", + name: "description", + type: "string", + }, + { + internalType: "address", + name: "moduleAddress", + type: "address", + }, + ], + name: "register", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "renounceOwnership", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "router", + outputs: [ + { + internalType: "contract IRouter", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address[]", + name: "modulesAddresses", + type: "address[]", + }, + { + components: [ + { + internalType: "bytes32", + name: "schemaId", + type: "bytes32", + }, + { + internalType: "uint64", + name: "expirationDate", + type: "uint64", + }, + { + internalType: "bytes", + name: "subject", + type: "bytes", + }, + { + internalType: "bytes", + name: "attestationData", + type: "bytes", + }, + ], + internalType: "struct AttestationPayload", + name: "attestationPayload", + type: "tuple", + }, + { + internalType: "bytes[]", + name: "validationPayloads", + type: "bytes[]", + }, + { + internalType: "uint256", + name: "value", + type: "uint256", + }, + ], + name: "runModules", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "newOwner", + type: "address", + }, + ], + name: "transferOwnership", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "_router", + type: "address", + }, + ], + name: "updateRouter", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, +]; diff --git a/sdk/src/abi/PortalRegistry.ts b/sdk/src/abi/PortalRegistry.ts new file mode 100644 index 00000000..149789f6 --- /dev/null +++ b/sdk/src/abi/PortalRegistry.ts @@ -0,0 +1,374 @@ +export const abiPortalRegistry = [ + { + inputs: [], + stateMutability: "nonpayable", + type: "constructor", + }, + { + inputs: [], + name: "OnlyIssuer", + type: "error", + }, + { + inputs: [], + name: "PortalAddressInvalid", + type: "error", + }, + { + inputs: [], + name: "PortalAlreadyExists", + type: "error", + }, + { + inputs: [], + name: "PortalDescriptionMissing", + type: "error", + }, + { + inputs: [], + name: "PortalInvalid", + type: "error", + }, + { + inputs: [], + name: "PortalNameMissing", + type: "error", + }, + { + inputs: [], + name: "PortalNotRegistered", + type: "error", + }, + { + inputs: [], + name: "PortalOwnerNameMissing", + type: "error", + }, + { + inputs: [], + name: "RouterInvalid", + type: "error", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "uint8", + name: "version", + type: "uint8", + }, + ], + name: "Initialized", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "previousOwner", + type: "address", + }, + { + indexed: true, + internalType: "address", + name: "newOwner", + type: "address", + }, + ], + name: "OwnershipTransferred", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "string", + name: "name", + type: "string", + }, + { + indexed: false, + internalType: "string", + name: "description", + type: "string", + }, + { + indexed: false, + internalType: "address", + name: "portalAddress", + type: "address", + }, + ], + name: "PortalRegistered", + type: "event", + }, + { + inputs: [ + { + internalType: "address[]", + name: "modules", + type: "address[]", + }, + { + internalType: "string", + name: "name", + type: "string", + }, + { + internalType: "string", + name: "description", + type: "string", + }, + { + internalType: "bool", + name: "isRevocable", + type: "bool", + }, + { + internalType: "string", + name: "ownerName", + type: "string", + }, + ], + name: "deployDefaultPortal", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "id", + type: "address", + }, + ], + name: "getPortalByAddress", + outputs: [ + { + components: [ + { + internalType: "address", + name: "id", + type: "address", + }, + { + internalType: "address", + name: "ownerAddress", + type: "address", + }, + { + internalType: "address[]", + name: "modules", + type: "address[]", + }, + { + internalType: "bool", + name: "isRevocable", + type: "bool", + }, + { + internalType: "string", + name: "name", + type: "string", + }, + { + internalType: "string", + name: "description", + type: "string", + }, + { + internalType: "string", + name: "ownerName", + type: "string", + }, + ], + internalType: "struct Portal", + name: "", + type: "tuple", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "getPortalsCount", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "initialize", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "issuer", + type: "address", + }, + ], + name: "isIssuer", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "id", + type: "address", + }, + ], + name: "isRegistered", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "owner", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "id", + type: "address", + }, + { + internalType: "string", + name: "name", + type: "string", + }, + { + internalType: "string", + name: "description", + type: "string", + }, + { + internalType: "bool", + name: "isRevocable", + type: "bool", + }, + { + internalType: "string", + name: "ownerName", + type: "string", + }, + ], + name: "register", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "issuer", + type: "address", + }, + ], + name: "removeIssuer", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "renounceOwnership", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "router", + outputs: [ + { + internalType: "contract IRouter", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "issuer", + type: "address", + }, + ], + name: "setIssuer", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "newOwner", + type: "address", + }, + ], + name: "transferOwnership", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "_router", + type: "address", + }, + ], + name: "updateRouter", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, +]; diff --git a/sdk/src/abi/SchemaRegistry.ts b/sdk/src/abi/SchemaRegistry.ts new file mode 100644 index 00000000..91cfb2f6 --- /dev/null +++ b/sdk/src/abi/SchemaRegistry.ts @@ -0,0 +1,329 @@ +export const abiSchemaRegistry = [ + { + inputs: [], + stateMutability: "nonpayable", + type: "constructor", + }, + { + inputs: [], + name: "OnlyIssuer", + type: "error", + }, + { + inputs: [], + name: "RouterInvalid", + type: "error", + }, + { + inputs: [], + name: "SchemaAlreadyExists", + type: "error", + }, + { + inputs: [], + name: "SchemaNameMissing", + type: "error", + }, + { + inputs: [], + name: "SchemaNotRegistered", + type: "error", + }, + { + inputs: [], + name: "SchemaStringMissing", + type: "error", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "uint8", + name: "version", + type: "uint8", + }, + ], + name: "Initialized", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "previousOwner", + type: "address", + }, + { + indexed: true, + internalType: "address", + name: "newOwner", + type: "address", + }, + ], + name: "OwnershipTransferred", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "bytes32", + name: "id", + type: "bytes32", + }, + { + indexed: false, + internalType: "string", + name: "name", + type: "string", + }, + { + indexed: false, + internalType: "string", + name: "description", + type: "string", + }, + { + indexed: false, + internalType: "string", + name: "context", + type: "string", + }, + { + indexed: false, + internalType: "string", + name: "schemaString", + type: "string", + }, + ], + name: "SchemaCreated", + type: "event", + }, + { + inputs: [ + { + internalType: "string", + name: "name", + type: "string", + }, + { + internalType: "string", + name: "description", + type: "string", + }, + { + internalType: "string", + name: "context", + type: "string", + }, + { + internalType: "string", + name: "schemaString", + type: "string", + }, + ], + name: "createSchema", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "string", + name: "schema", + type: "string", + }, + ], + name: "getIdFromSchemaString", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32", + }, + ], + stateMutability: "pure", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes32", + name: "schemaId", + type: "bytes32", + }, + ], + name: "getSchema", + outputs: [ + { + components: [ + { + internalType: "string", + name: "name", + type: "string", + }, + { + internalType: "string", + name: "description", + type: "string", + }, + { + internalType: "string", + name: "context", + type: "string", + }, + { + internalType: "string", + name: "schema", + type: "string", + }, + ], + internalType: "struct Schema", + name: "", + type: "tuple", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "getSchemasNumber", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "initialize", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes32", + name: "schemaId", + type: "bytes32", + }, + ], + name: "isRegistered", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "owner", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "renounceOwnership", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "router", + outputs: [ + { + internalType: "contract IRouter", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + name: "schemaIds", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "newOwner", + type: "address", + }, + ], + name: "transferOwnership", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes32", + name: "schemaId", + type: "bytes32", + }, + { + internalType: "string", + name: "context", + type: "string", + }, + ], + name: "updateContext", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "_router", + type: "address", + }, + ], + name: "updateRouter", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, +]; diff --git a/sdk/src/dataMapper/AttestationDataMapper.ts b/sdk/src/dataMapper/AttestationDataMapper.ts index 0b2a3a84..801b3c37 100644 --- a/sdk/src/dataMapper/AttestationDataMapper.ts +++ b/sdk/src/dataMapper/AttestationDataMapper.ts @@ -1,3 +1,21 @@ import BaseDataMapper from "./BaseDataMapper"; -export default class AttestationDataMapper extends BaseDataMapper {} +export default class AttestationDataMapper extends BaseDataMapper { + typeName = "attestation"; + gqlInterface = `{ + id + schemaId + replacedBy + attester + portal + attestedDate + expirationDate + revocationDate + version + revoked + subject + attestationData + schemaString + decodedData + }`; +} diff --git a/sdk/src/dataMapper/BaseDataMapper.ts b/sdk/src/dataMapper/BaseDataMapper.ts index 7cfc01bf..cd6855e1 100644 --- a/sdk/src/dataMapper/BaseDataMapper.ts +++ b/sdk/src/dataMapper/BaseDataMapper.ts @@ -1,20 +1,34 @@ -import Conf from "./../interface/Conf"; -import { findOneById } from "../AttestationRegistryWrapper"; import { PublicClient } from "viem"; -import { ApolloClient } from "@apollo/client/core"; +import { ApolloClient, gql } from "@apollo/client/core"; +import { Conf } from "../types"; -export default class BaseDataMapper { - private conf: Conf; - private web3Client: PublicClient; - private apolloClient: ApolloClient; +export default abstract class BaseDataMapper { + protected readonly conf: Conf; + protected readonly web3Client: PublicClient; + protected readonly apolloClient: ApolloClient; + protected abstract typeName: string; + protected abstract gqlInterface: string; - constructor(_conf: Conf, _web3Client: PublicClient, _apolloClient: ApolloClient) { + constructor(_conf: Conf, _web3Client: PublicClient, _apolloClient: ApolloClient) { this.conf = _conf; this.web3Client = _web3Client; this.apolloClient = _apolloClient; } - findOneById(id: string): object { - return findOneById(id); + async findOneById(id: string) { + const queryResult = await this.apolloClient.query({ + query: gql(`query GetOne($id: ID!) { ${this.typeName}(id: $id) ${this.gqlInterface} }`), + variables: { id }, + }); + + return JSON.stringify(queryResult.data[this.typeName]); + } + + async findBy() { + const queryResult = await this.apolloClient.query({ + query: gql(`query GetBy { ${this.typeName}s ${this.gqlInterface} }`), + }); + + return JSON.stringify(queryResult.data[`${this.typeName}s`]); } } diff --git a/sdk/src/dataMapper/ModuleDataMapper.ts b/sdk/src/dataMapper/ModuleDataMapper.ts index b6a6def8..c51ac698 100644 --- a/sdk/src/dataMapper/ModuleDataMapper.ts +++ b/sdk/src/dataMapper/ModuleDataMapper.ts @@ -1,3 +1,11 @@ import BaseDataMapper from "./BaseDataMapper"; -export default class ModuleDataMapper extends BaseDataMapper {} +export default class ModuleDataMapper extends BaseDataMapper { + typeName = "module"; + gqlInterface = `{ + id + moduleAddress + name + description + }`; +} diff --git a/sdk/src/dataMapper/PortalDataMapper.ts b/sdk/src/dataMapper/PortalDataMapper.ts index f660f763..9cd54840 100644 --- a/sdk/src/dataMapper/PortalDataMapper.ts +++ b/sdk/src/dataMapper/PortalDataMapper.ts @@ -1,3 +1,14 @@ import BaseDataMapper from "./BaseDataMapper"; -export default class PortalDataMapper extends BaseDataMapper {} +export default class PortalDataMapper extends BaseDataMapper { + typeName = "portal"; + gqlInterface = `{ + id + ownerAddress + modules + isRevocable + name + description + ownerName + }`; +} diff --git a/sdk/src/dataMapper/SchemaDataMapper.ts b/sdk/src/dataMapper/SchemaDataMapper.ts index c5858173..039c854a 100644 --- a/sdk/src/dataMapper/SchemaDataMapper.ts +++ b/sdk/src/dataMapper/SchemaDataMapper.ts @@ -1,3 +1,12 @@ import BaseDataMapper from "./BaseDataMapper"; -export default class SchemaDataMapper extends BaseDataMapper {} +export default class SchemaDataMapper extends BaseDataMapper { + typeName = "schema"; + gqlInterface = `{ + id + name + description + context + schema + }`; +} diff --git a/sdk/src/dataMapper/UtilsDataMapper.ts b/sdk/src/dataMapper/UtilsDataMapper.ts new file mode 100644 index 00000000..a33651e8 --- /dev/null +++ b/sdk/src/dataMapper/UtilsDataMapper.ts @@ -0,0 +1,55 @@ +import BaseDataMapper from "./BaseDataMapper"; +import { abiAttestationRegistry } from "../abi/AttestationRegistry"; +import { abiModuleRegistry } from "../abi/ModuleRegistry"; +import { abiPortalRegistry } from "../abi/PortalRegistry"; +import { abiSchemaRegistry } from "../abi/SchemaRegistry"; + +export default class ModuleDataMapper extends BaseDataMapper { + typeName = "counter"; + gqlInterface = `{ + attestations + modules + portals + schemas + }`; + + async getModulesNumber() { + return await this.web3Client.readContract({ + abi: abiModuleRegistry, + address: this.conf.moduleRegistryAddress, + functionName: "getModulesNumber", + }); + } + + async getPortalsCount() { + return await this.web3Client.readContract({ + abi: abiPortalRegistry, + address: this.conf.portalRegistryAddress, + functionName: "getPortalsCount", + }); + } + + async getSchemasNumber() { + return await this.web3Client.readContract({ + abi: abiSchemaRegistry, + address: this.conf.schemaRegistryAddress, + functionName: "getSchemasNumber", + }); + } + + async getVersionNumber() { + return await this.web3Client.readContract({ + abi: abiAttestationRegistry, + address: this.conf.attestationRegistryAddress, + functionName: "getVersionNumber", + }); + } + + async getAttestationIdCounter() { + return await this.web3Client.readContract({ + abi: abiAttestationRegistry, + address: this.conf.attestationRegistryAddress, + functionName: "getAttestationIdCounter", + }); + } +} diff --git a/sdk/src/interface/Conf.ts b/sdk/src/interface/Conf.ts deleted file mode 100644 index 94ff7120..00000000 --- a/sdk/src/interface/Conf.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { Chain } from "viem"; - -export default interface Conf { - chain: Chain; - subgraphUrl: string; - portalRegistryAddress: string; - moduleRegistryAddress: string; - schemaRegistryAddress: string; - attestationRegistryAddress: string; -} diff --git a/sdk/src/types/index.d.ts b/sdk/src/types/index.d.ts new file mode 100644 index 00000000..f1e92836 --- /dev/null +++ b/sdk/src/types/index.d.ts @@ -0,0 +1,10 @@ +import { Chain } from "viem"; + +export interface Conf { + chain: Chain; + subgraphUrl: string; + portalRegistryAddress: `0x${string}`; + moduleRegistryAddress: `0x${string}`; + schemaRegistryAddress: `0x${string}`; + attestationRegistryAddress: `0x${string}`; +} diff --git a/sdk/tsconfig.json b/sdk/tsconfig.json index 66b41977..0959b598 100644 --- a/sdk/tsconfig.json +++ b/sdk/tsconfig.json @@ -1,7 +1,8 @@ { "extends": "../tsconfig.json", "compilerOptions": { - "module": "ESNext" + "module": "ESNext", + "target": "ESNext" }, "ts-node": { "esm": true, From 7e957678c21f4716e716ee61987a56e0ec9af469 Mon Sep 17 00:00:00 2001 From: Alain Nicolas Date: Mon, 9 Oct 2023 21:53:53 +0200 Subject: [PATCH 21/36] chore: Provide a way to encode/decode attestation data (#263) --- sdk/examples/utils/decode.ts | 15 +++++++ sdk/examples/utils/encode.ts | 59 +++++++++++++++++++++++++++ sdk/package.json | 2 + sdk/src/dataMapper/UtilsDataMapper.ts | 11 ++++- sdk/src/utils/abiCoder.ts | 9 ++++ 5 files changed, 95 insertions(+), 1 deletion(-) create mode 100644 sdk/examples/utils/decode.ts create mode 100644 sdk/examples/utils/encode.ts create mode 100644 sdk/src/utils/abiCoder.ts diff --git a/sdk/examples/utils/decode.ts b/sdk/examples/utils/decode.ts new file mode 100644 index 00000000..901ed506 --- /dev/null +++ b/sdk/examples/utils/decode.ts @@ -0,0 +1,15 @@ +import VeraxSdk from "../../src/VeraxSdk"; + +const veraxSdk = new VeraxSdk(VeraxSdk.DEFAULT_LINEA_TESTNET); + +// This example relies on a complex Schema written by Clique +console.log( + JSON.stringify( + veraxSdk.utils.decode( + "((string type, ((string name, uint256 count)[] GameGenres, (string name, uint256 count)[] GameSetting, (string name, uint256 count)[] PlayStyle) items, (string type, (string level, string hoursPlayedSteam) items) subHoursPlayedSteam, (string type, (string topTag, string hoursSteam) items) gameGenresTopTagByHoursSteam, (string type, (string playstyle, string hoursSteam) items) playstyleTopTagByHoursSteam, string sumHourByTop10GamesSteam) userGamingPieChartSteam)", + "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000003a000000000000000000000000000000000000000000000000000000000000004e000000000000000000000000000000000000000000000000000000000000006200000000000000000000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000000000000000000000352504700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000001e0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000000000000967616d6567656e72650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000007c000000000000000000000000000000000000000000000000000000000000000873657474696e6731000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000000009706c61795374796c65000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000001774797065537562486f757273506c61796564537465616d0000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000053e39393939000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000331323500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000207479706567616d6547656e726573546f705461674279486f757273537465616d000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000006746f7054616700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004313236380000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000001f74797065706c61797374796c65546f705461674279486f757273537465616d00000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000009706c61797374796c6500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006313235383734000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000093132353839363534310000000000000000000000000000000000000000000000", + ), + (key, value) => (typeof value === "bigint" ? value.toString() : value), // return everything else unchanged + 2, + ), +); diff --git a/sdk/examples/utils/encode.ts b/sdk/examples/utils/encode.ts new file mode 100644 index 00000000..d7c9cc70 --- /dev/null +++ b/sdk/examples/utils/encode.ts @@ -0,0 +1,59 @@ +import VeraxSdk from "../../src/VeraxSdk"; + +const veraxSdk = new VeraxSdk(VeraxSdk.DEFAULT_LINEA_TESTNET); + +// This example relies on a complex Schema written by Clique +console.log( + veraxSdk.utils.encode( + "((string type, ((string name, uint256 count)[] GameGenres, (string name, uint256 count)[] GameSetting, (string name, uint256 count)[] PlayStyle) items, (string type, (string level, string hoursPlayedSteam) items) subHoursPlayedSteam, (string type, (string topTag, string hoursSteam) items) gameGenresTopTagByHoursSteam, (string type, (string playstyle, string hoursSteam) items) playstyleTopTagByHoursSteam, string sumHourByTop10GamesSteam) userGamingPieChartSteam)", + [ + { + userGamingPieChartSteam: { + type: "RPG", + items: { + GameGenres: [ + { + name: "gamegenre", + count: 123, + }, + ], + GameSetting: [ + { + name: "setting1", + count: 124, + }, + ], + PlayStyle: [ + { + name: "playStyle", + count: 125, + }, + ], + }, + subHoursPlayedSteam: { + type: "typeSubHoursPlayedSteam", + items: { + level: ">9999", + hoursPlayedSteam: "125", + }, + }, + gameGenresTopTagByHoursSteam: { + type: "typegameGenresTopTagByHoursSteam", + items: { + topTag: "topTag", + hoursSteam: "1268", + }, + }, + playstyleTopTagByHoursSteam: { + type: "typeplaystyleTopTagByHoursSteam", + items: { + playstyle: "playstyle", + hoursSteam: "125874", + }, + }, + sumHourByTop10GamesSteam: "125896541", + }, + }, + ], + ), +); diff --git a/sdk/package.json b/sdk/package.json index 8a615ead..064c9a3f 100644 --- a/sdk/package.json +++ b/sdk/package.json @@ -26,6 +26,8 @@ "schema:one": "ts-node examples/schema/findOneById.ts", "utils:attestation:counter": "ts-node examples/utils/getAttestationIdCounter.ts", "utils:attestation:version": "ts-node examples/utils/getVersionNumber.ts", + "utils:decode": "ts-node examples/utils/decode.ts", + "utils:encode": "ts-node examples/utils/encode.ts", "utils:module:counter": "ts-node examples/utils/getModulesNumber.ts", "utils:portal:counter": "ts-node examples/utils/getPortalsCount.ts", "utils:schema:counter": "ts-node examples/utils/getSchemasNumber.ts" diff --git a/sdk/src/dataMapper/UtilsDataMapper.ts b/sdk/src/dataMapper/UtilsDataMapper.ts index a33651e8..79c7b932 100644 --- a/sdk/src/dataMapper/UtilsDataMapper.ts +++ b/sdk/src/dataMapper/UtilsDataMapper.ts @@ -3,8 +3,9 @@ import { abiAttestationRegistry } from "../abi/AttestationRegistry"; import { abiModuleRegistry } from "../abi/ModuleRegistry"; import { abiPortalRegistry } from "../abi/PortalRegistry"; import { abiSchemaRegistry } from "../abi/SchemaRegistry"; +import { decode, encode } from "../utils/abiCoder"; -export default class ModuleDataMapper extends BaseDataMapper { +export default class UtilsDataMapper extends BaseDataMapper { typeName = "counter"; gqlInterface = `{ attestations @@ -52,4 +53,12 @@ export default class ModuleDataMapper extends BaseDataMapper { functionName: "getAttestationIdCounter", }); } + + encode(schema: string, values: unknown[]): `0x${string}` { + return encode(schema, values); + } + + decode(schema: string, attestationData: `0x${string}`): readonly unknown[] { + return decode(schema, attestationData); + } } diff --git a/sdk/src/utils/abiCoder.ts b/sdk/src/utils/abiCoder.ts new file mode 100644 index 00000000..1c47ed02 --- /dev/null +++ b/sdk/src/utils/abiCoder.ts @@ -0,0 +1,9 @@ +import { decodeAbiParameters, encodeAbiParameters, parseAbiParameters } from "viem"; + +export function encode(schema: string, values: unknown[]): `0x${string}` { + return encodeAbiParameters(parseAbiParameters(schema), values); +} + +export function decode(schema: string, attestationData: `0x${string}`): readonly unknown[] { + return decodeAbiParameters(parseAbiParameters(schema), attestationData); +} From 1be21808f4e41bfa1c1f0c943ee296f4664a7510 Mon Sep 17 00:00:00 2001 From: Satyajeet Kolhapure <77279246+satyajeetkolhapure@users.noreply.github.com> Date: Mon, 9 Oct 2023 21:01:04 +0100 Subject: [PATCH 22/36] chore: Add test framework (#261) Co-authored-by: Satyajeet Kolhapure --- pnpm-lock.yaml | 2053 ++++++++++++++++- sdk/jest.config.js | 5 + sdk/package.json | 7 +- .../dataMapper/AttestationDataMapper.test.ts | 69 + 4 files changed, 2084 insertions(+), 50 deletions(-) create mode 100644 sdk/jest.config.js create mode 100644 sdk/test/dataMapper/AttestationDataMapper.test.ts diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 52e4b8cd..3e500158 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -76,9 +76,21 @@ importers: specifier: ^1.14.0 version: 1.15.1(typescript@5.2.2) devDependencies: + '@types/jest': + specifier: ^29.5.5 + version: 29.5.5 + jest: + specifier: ^29.7.0 + version: 29.7.0(@types/node@20.8.0)(ts-node@10.9.1) + ts-jest: + specifier: ^29.1.1 + version: 29.1.1(@babel/core@7.23.0)(jest@29.7.0)(typescript@5.2.2) ts-node: specifier: ^10.9.1 version: 10.9.1(@types/node@20.8.0)(typescript@5.2.2) + vite: + specifier: ^4.4.9 + version: 4.4.10(@types/node@20.8.0) subgraph: devDependencies: @@ -104,6 +116,14 @@ packages: resolution: {integrity: sha512-UK0bHA7hh9cR39V+4gl2/NnBBjoXIxkuWAPCaY4X7fbH4L/azIi7ilWOCjMUYfpJgraLUAqkRi2BqrjME8Rynw==} dev: false + /@ampproject/remapping@2.2.1: + resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.19 + dev: true + /@apollo/client@3.8.4(graphql@16.8.1): resolution: {integrity: sha512-QFXE4ylSHUa6LgYoOGsPysJCm4YJOOM1NwHyF6msZdZXIerqUVpLvxQOdQEXgS0RWvYiBMC1wGOWKzJKSWBdAg==} peerDependencies: @@ -176,11 +196,146 @@ packages: chalk: 2.4.2 dev: true + /@babel/compat-data@7.22.20: + resolution: {integrity: sha512-BQYjKbpXjoXwFW5jGqiizJQQT/aC7pFm9Ok1OWssonuguICi264lbgMzRp2ZMmRSlfkX6DsWDDcsrctK8Rwfiw==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/core@7.23.0: + resolution: {integrity: sha512-97z/ju/Jy1rZmDxybphrBuI+jtJjFVoz7Mr9yUQVVVi+DNZE333uFQeMOqcCIy1x3WYBIbWftUSLmbNXNT7qFQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@ampproject/remapping': 2.2.1 + '@babel/code-frame': 7.22.13 + '@babel/generator': 7.23.0 + '@babel/helper-compilation-targets': 7.22.15 + '@babel/helper-module-transforms': 7.23.0(@babel/core@7.23.0) + '@babel/helpers': 7.23.1 + '@babel/parser': 7.23.0 + '@babel/template': 7.22.15 + '@babel/traverse': 7.23.0 + '@babel/types': 7.23.0 + convert-source-map: 2.0.0 + debug: 4.3.4(supports-color@8.1.1) + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/generator@7.23.0: + resolution: {integrity: sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.0 + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.19 + jsesc: 2.5.2 + dev: true + + /@babel/helper-compilation-targets@7.22.15: + resolution: {integrity: sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/compat-data': 7.22.20 + '@babel/helper-validator-option': 7.22.15 + browserslist: 4.22.1 + lru-cache: 5.1.1 + semver: 6.3.1 + dev: true + + /@babel/helper-environment-visitor@7.22.20: + resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-function-name@7.23.0: + resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.22.15 + '@babel/types': 7.23.0 + dev: true + + /@babel/helper-hoist-variables@7.22.5: + resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.0 + dev: true + + /@babel/helper-module-imports@7.22.15: + resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.0 + dev: true + + /@babel/helper-module-transforms@7.23.0(@babel/core@7.23.0): + resolution: {integrity: sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.0 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-module-imports': 7.22.15 + '@babel/helper-simple-access': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/helper-validator-identifier': 7.22.20 + dev: true + + /@babel/helper-plugin-utils@7.22.5: + resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-simple-access@7.22.5: + resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.0 + dev: true + + /@babel/helper-split-export-declaration@7.22.6: + resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.0 + dev: true + + /@babel/helper-string-parser@7.22.5: + resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-validator-identifier@7.22.20: + resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} + engines: {node: '>=6.9.0'} + dev: true + /@babel/helper-validator-identifier@7.22.5: resolution: {integrity: sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==} engines: {node: '>=6.9.0'} dev: true + /@babel/helper-validator-option@7.22.15: + resolution: {integrity: sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helpers@7.23.1: + resolution: {integrity: sha512-chNpneuK18yW5Oxsr+t553UZzzAs3aZnFm4bxhebsNTeshrC95yA7l5yl7GBAG+JG1rF0F7zzD2EixK9mWSDoA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.22.15 + '@babel/traverse': 7.23.0 + '@babel/types': 7.23.0 + transitivePeerDependencies: + - supports-color + dev: true + /@babel/highlight@7.22.13: resolution: {integrity: sha512-C/BaXcnnvBCmHTpz/VGZ8jgtE2aYlW4hxDhseJAWZb7gqGM/qtCK6iZUb0TyKFf7BOUsBH7Q7fkRsDRhg1XklQ==} engines: {node: '>=6.9.0'} @@ -190,6 +345,183 @@ packages: js-tokens: 4.0.0 dev: true + /@babel/parser@7.23.0: + resolution: {integrity: sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==} + engines: {node: '>=6.0.0'} + hasBin: true + dependencies: + '@babel/types': 7.23.0 + dev: true + + /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.23.0): + resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.0 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.23.0): + resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.0 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.23.0): + resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.0 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.23.0): + resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.0 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.23.0): + resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.0 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-jsx@7.22.5(@babel/core@7.23.0): + resolution: {integrity: sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.0 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.23.0): + resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.0 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.23.0): + resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.0 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.23.0): + resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.0 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.23.0): + resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.0 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.23.0): + resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.0 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.23.0): + resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.0 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.23.0): + resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.0 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-typescript@7.22.5(@babel/core@7.23.0): + resolution: {integrity: sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.0 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/template@7.22.15: + resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.22.13 + '@babel/parser': 7.23.0 + '@babel/types': 7.23.0 + dev: true + + /@babel/traverse@7.23.0: + resolution: {integrity: sha512-t/QaEvyIoIkwzpiZ7aoSKK8kObQYeF7T2v+dazAYCb8SXtp58zEVkWW7zAnju8FNKNdr4ScAOEDmMItbyOmEYw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.22.13 + '@babel/generator': 7.23.0 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-hoist-variables': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/parser': 7.23.0 + '@babel/types': 7.23.0 + debug: 4.3.4(supports-color@8.1.1) + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/types@7.23.0: + resolution: {integrity: sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-string-parser': 7.22.5 + '@babel/helper-validator-identifier': 7.22.20 + to-fast-properties: 2.0.0 + dev: true + + /@bcoe/v8-coverage@0.2.3: + resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} + dev: true + /@chainsafe/as-sha256@0.3.1: resolution: {integrity: sha512-hldFFYuf49ed7DAakWVXSJODuq3pzJEguD8tQ7h+sGkM18vja+OFoJI9krnGmgzyuZC2ETX0NOIcCTy31v2Mtg==} dev: true @@ -221,12 +553,210 @@ packages: case: 1.6.3 dev: true - /@cspotcode/source-map-support@0.8.1: - resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} + /@cspotcode/source-map-support@0.8.1: + resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} + engines: {node: '>=12'} + dependencies: + '@jridgewell/trace-mapping': 0.3.9 + dev: true + + /@esbuild/android-arm64@0.18.20: + resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-arm@0.18.20: + resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-x64@0.18.20: + resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/darwin-arm64@0.18.20: + resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@esbuild/darwin-x64@0.18.20: + resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@esbuild/freebsd-arm64@0.18.20: + resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/freebsd-x64@0.18.20: + resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-arm64@0.18.20: + resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-arm@0.18.20: + resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-ia32@0.18.20: + resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64@0.18.20: + resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-mips64el@0.18.20: + resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-ppc64@0.18.20: + resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-riscv64@0.18.20: + resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-s390x@0.18.20: + resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-x64@0.18.20: + resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/netbsd-x64@0.18.20: + resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/openbsd-x64@0.18.20: + resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/sunos-x64@0.18.20: + resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-arm64@0.18.20: + resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-ia32@0.18.20: + resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-x64@0.18.20: + resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==} engines: {node: '>=12'} - dependencies: - '@jridgewell/trace-mapping': 0.3.9 + cpu: [x64] + os: [win32] + requiresBuild: true dev: true + optional: true /@eslint-community/eslint-utils@4.4.0(eslint@8.50.0): resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} @@ -723,15 +1253,266 @@ packages: multiformats: 9.9.0 dev: true + /@istanbuljs/load-nyc-config@1.1.0: + resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} + engines: {node: '>=8'} + dependencies: + camelcase: 5.3.1 + find-up: 4.1.0 + get-package-type: 0.1.0 + js-yaml: 3.14.1 + resolve-from: 5.0.0 + dev: true + + /@istanbuljs/schema@0.1.3: + resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} + engines: {node: '>=8'} + dev: true + + /@jest/console@29.7.0: + resolution: {integrity: sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/types': 29.6.3 + '@types/node': 20.8.0 + chalk: 4.1.2 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + slash: 3.0.0 + dev: true + + /@jest/core@29.7.0(ts-node@10.9.1): + resolution: {integrity: sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + dependencies: + '@jest/console': 29.7.0 + '@jest/reporters': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 20.8.0 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + ci-info: 3.9.0 + exit: 0.1.2 + graceful-fs: 4.2.11 + jest-changed-files: 29.7.0 + jest-config: 29.7.0(@types/node@20.8.0)(ts-node@10.9.1) + jest-haste-map: 29.7.0 + jest-message-util: 29.7.0 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-resolve-dependencies: 29.7.0 + jest-runner: 29.7.0 + jest-runtime: 29.7.0 + jest-snapshot: 29.7.0 + jest-util: 29.7.0 + jest-validate: 29.7.0 + jest-watcher: 29.7.0 + micromatch: 4.0.5 + pretty-format: 29.7.0 + slash: 3.0.0 + strip-ansi: 6.0.1 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + - ts-node + dev: true + + /@jest/environment@29.7.0: + resolution: {integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/fake-timers': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 20.8.0 + jest-mock: 29.7.0 + dev: true + + /@jest/expect-utils@29.7.0: + resolution: {integrity: sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + jest-get-type: 29.6.3 + dev: true + + /@jest/expect@29.7.0: + resolution: {integrity: sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + expect: 29.7.0 + jest-snapshot: 29.7.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@jest/fake-timers@29.7.0: + resolution: {integrity: sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/types': 29.6.3 + '@sinonjs/fake-timers': 10.3.0 + '@types/node': 20.8.0 + jest-message-util: 29.7.0 + jest-mock: 29.7.0 + jest-util: 29.7.0 + dev: true + + /@jest/globals@29.7.0: + resolution: {integrity: sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/environment': 29.7.0 + '@jest/expect': 29.7.0 + '@jest/types': 29.6.3 + jest-mock: 29.7.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@jest/reporters@29.7.0: + resolution: {integrity: sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + dependencies: + '@bcoe/v8-coverage': 0.2.3 + '@jest/console': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@jridgewell/trace-mapping': 0.3.19 + '@types/node': 20.8.0 + chalk: 4.1.2 + collect-v8-coverage: 1.0.2 + exit: 0.1.2 + glob: 7.2.3 + graceful-fs: 4.2.11 + istanbul-lib-coverage: 3.2.0 + istanbul-lib-instrument: 6.0.1 + istanbul-lib-report: 3.0.1 + istanbul-lib-source-maps: 4.0.1 + istanbul-reports: 3.1.6 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + jest-worker: 29.7.0 + slash: 3.0.0 + string-length: 4.0.2 + strip-ansi: 6.0.1 + v8-to-istanbul: 9.1.3 + transitivePeerDependencies: + - supports-color + dev: true + + /@jest/schemas@29.6.3: + resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@sinclair/typebox': 0.27.8 + dev: true + + /@jest/source-map@29.6.3: + resolution: {integrity: sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jridgewell/trace-mapping': 0.3.19 + callsites: 3.1.0 + graceful-fs: 4.2.11 + dev: true + + /@jest/test-result@29.7.0: + resolution: {integrity: sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/console': 29.7.0 + '@jest/types': 29.6.3 + '@types/istanbul-lib-coverage': 2.0.4 + collect-v8-coverage: 1.0.2 + dev: true + + /@jest/test-sequencer@29.7.0: + resolution: {integrity: sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/test-result': 29.7.0 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + slash: 3.0.0 + dev: true + + /@jest/transform@29.7.0: + resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@babel/core': 7.23.0 + '@jest/types': 29.6.3 + '@jridgewell/trace-mapping': 0.3.19 + babel-plugin-istanbul: 6.1.1 + chalk: 4.1.2 + convert-source-map: 2.0.0 + fast-json-stable-stringify: 2.1.0 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + jest-regex-util: 29.6.3 + jest-util: 29.7.0 + micromatch: 4.0.5 + pirates: 4.0.6 + slash: 3.0.0 + write-file-atomic: 4.0.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@jest/types@29.6.3: + resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/schemas': 29.6.3 + '@types/istanbul-lib-coverage': 2.0.4 + '@types/istanbul-reports': 3.0.2 + '@types/node': 20.8.0 + '@types/yargs': 17.0.26 + chalk: 4.1.2 + dev: true + + /@jridgewell/gen-mapping@0.3.3: + resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/set-array': 1.1.2 + '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/trace-mapping': 0.3.19 + dev: true + /@jridgewell/resolve-uri@3.1.1: resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} engines: {node: '>=6.0.0'} dev: true + /@jridgewell/set-array@1.1.2: + resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} + engines: {node: '>=6.0.0'} + dev: true + /@jridgewell/sourcemap-codec@1.4.15: resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} dev: true + /@jridgewell/trace-mapping@0.3.19: + resolution: {integrity: sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==} + dependencies: + '@jridgewell/resolve-uri': 3.1.1 + '@jridgewell/sourcemap-codec': 1.4.15 + dev: true + /@jridgewell/trace-mapping@0.3.9: resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} dependencies: @@ -1558,6 +2339,22 @@ packages: tslib: 1.14.1 dev: true + /@sinclair/typebox@0.27.8: + resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} + dev: true + + /@sinonjs/commons@3.0.0: + resolution: {integrity: sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==} + dependencies: + type-detect: 4.0.8 + dev: true + + /@sinonjs/fake-timers@10.3.0: + resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} + dependencies: + '@sinonjs/commons': 3.0.0 + dev: true + /@smithy/types@2.2.2: resolution: {integrity: sha512-4PS0y1VxDnELGHGgBWlDksB2LJK8TG8lcvlWxIsgR+8vROI7Ms8h1P4FQUx+ftAX2QZv5g1CJCdhdRmQKyonyw==} engines: {node: '>=14.0.0'} @@ -1622,6 +2419,35 @@ packages: typechain: 8.3.1(typescript@5.2.2) dev: true + /@types/babel__core@7.20.2: + resolution: {integrity: sha512-pNpr1T1xLUc2l3xJKuPtsEky3ybxN3m4fJkknfIpTCTfIZCDW57oAg+EfCgIIp2rvCe0Wn++/FfodDS4YXxBwA==} + dependencies: + '@babel/parser': 7.23.0 + '@babel/types': 7.23.0 + '@types/babel__generator': 7.6.5 + '@types/babel__template': 7.4.2 + '@types/babel__traverse': 7.20.2 + dev: true + + /@types/babel__generator@7.6.5: + resolution: {integrity: sha512-h9yIuWbJKdOPLJTbmSpPzkF67e659PbQDba7ifWm5BJ8xTv+sDmS7rFmywkWOvXedGTivCdeGSIIX8WLcRTz8w==} + dependencies: + '@babel/types': 7.23.0 + dev: true + + /@types/babel__template@7.4.2: + resolution: {integrity: sha512-/AVzPICMhMOMYoSx9MoKpGDKdBRsIXMNByh1PXSZoa+v6ZoLa8xxtsT/uLQ/NJm0XVAWl/BvId4MlDeXJaeIZQ==} + dependencies: + '@babel/parser': 7.23.0 + '@babel/types': 7.23.0 + dev: true + + /@types/babel__traverse@7.20.2: + resolution: {integrity: sha512-ojlGK1Hsfce93J0+kn3H5R73elidKUaZonirN33GSmgTUMpzI/MIFfSpF3haANe3G1bEBS9/9/QEqwTzwqFsKw==} + dependencies: + '@babel/types': 7.23.0 + dev: true + /@types/bn.js@4.11.6: resolution: {integrity: sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==} dependencies: @@ -1675,6 +2501,35 @@ packages: '@types/node': 20.8.0 dev: true + /@types/graceful-fs@4.1.7: + resolution: {integrity: sha512-MhzcwU8aUygZroVwL2jeYk6JisJrPl/oov/gsgGCue9mkgl9wjGbzReYQClxiUgFDnib9FuHqTndccKeZKxTRw==} + dependencies: + '@types/node': 20.8.0 + dev: true + + /@types/istanbul-lib-coverage@2.0.4: + resolution: {integrity: sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==} + dev: true + + /@types/istanbul-lib-report@3.0.1: + resolution: {integrity: sha512-gPQuzaPR5h/djlAv2apEG1HVOyj1IUs7GpfMZixU0/0KXT3pm64ylHuMUI1/Akh+sq/iikxg6Z2j+fcMDXaaTQ==} + dependencies: + '@types/istanbul-lib-coverage': 2.0.4 + dev: true + + /@types/istanbul-reports@3.0.2: + resolution: {integrity: sha512-kv43F9eb3Lhj+lr/Hn6OcLCs/sSM8bt+fIaP11rCYngfV6NVjzWXJ17owQtDQTL9tQ8WSLUrGsSJ6rJz0F1w1A==} + dependencies: + '@types/istanbul-lib-report': 3.0.1 + dev: true + + /@types/jest@29.5.5: + resolution: {integrity: sha512-ebylz2hnsWR9mYvmBFbXJXr+33UPc4+ZdxyDXh5w0FlPBTfCVN3wPL+kuOiQt3xvrK419v7XWeAs+AeOksafXg==} + dependencies: + expect: 29.7.0 + pretty-format: 29.7.0 + dev: true + /@types/json-schema@7.0.13: resolution: {integrity: sha512-RbSSoHliUbnXj3ny0CNFOoxrIDV6SUGyStHsvDqosw6CkdPV8TtWGlfecuK4ToyMEAql6pzNxgCFKanovUzlgQ==} dev: true @@ -1757,6 +2612,10 @@ packages: resolution: {integrity: sha512-OxepLK9EuNEIPxWNME+C6WwbRAOOI2o2BaQEGzz5Lu2e4Z5eDnEo+/aVEDMIXywoJitJ7xWd641wrGLZdtwRyw==} dev: true + /@types/stack-utils@2.0.1: + resolution: {integrity: sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==} + dev: true + /@types/ws@7.4.7: resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==} dependencies: @@ -1769,6 +2628,16 @@ packages: '@types/node': 20.8.0 dev: false + /@types/yargs-parser@21.0.1: + resolution: {integrity: sha512-axdPBuLuEJt0c4yI5OZssC19K2Mq1uKdrfZBzuxLvaztgqUtFYZUNw7lETExPYJR9jdEoIg4mb7RQKRQzOkeGQ==} + dev: true + + /@types/yargs@17.0.26: + resolution: {integrity: sha512-Y3vDy2X6zw/ZCumcwLpdhM5L7jmyGpmBCTYMHDLqT2IKVMYRRLdv6ZakA+wxhra6Z/3bwhNbNl9bDGXaFU+6rw==} + dependencies: + '@types/yargs-parser': 21.0.1 + dev: true + /@typescript-eslint/eslint-plugin@6.7.3(@typescript-eslint/parser@6.7.3)(eslint@8.50.0)(typescript@5.2.2): resolution: {integrity: sha512-vntq452UHNltxsaaN+L9WyuMch8bMd9CqJ3zhzTPXXidwbf5mqqKCVXEuvRZUqLJSTLeWE65lQwyXsRGnXkCTA==} engines: {node: ^16.0.0 || >=18.0.0} @@ -2136,6 +3005,11 @@ packages: color-convert: 2.0.1 dev: true + /ansi-styles@5.2.0: + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} + engines: {node: '>=10'} + dev: true + /ansicolors@0.3.2: resolution: {integrity: sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg==} dev: true @@ -2362,6 +3236,78 @@ packages: - debug dev: true + /babel-jest@29.7.0(@babel/core@7.23.0): + resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@babel/core': ^7.8.0 + dependencies: + '@babel/core': 7.23.0 + '@jest/transform': 29.7.0 + '@types/babel__core': 7.20.2 + babel-plugin-istanbul: 6.1.1 + babel-preset-jest: 29.6.3(@babel/core@7.23.0) + chalk: 4.1.2 + graceful-fs: 4.2.11 + slash: 3.0.0 + transitivePeerDependencies: + - supports-color + dev: true + + /babel-plugin-istanbul@6.1.1: + resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} + engines: {node: '>=8'} + dependencies: + '@babel/helper-plugin-utils': 7.22.5 + '@istanbuljs/load-nyc-config': 1.1.0 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-instrument: 5.2.1 + test-exclude: 6.0.0 + transitivePeerDependencies: + - supports-color + dev: true + + /babel-plugin-jest-hoist@29.6.3: + resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@babel/template': 7.22.15 + '@babel/types': 7.23.0 + '@types/babel__core': 7.20.2 + '@types/babel__traverse': 7.20.2 + dev: true + + /babel-preset-current-node-syntax@1.0.1(@babel/core@7.23.0): + resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.0 + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.0) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.23.0) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.23.0) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.23.0) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.0) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.0) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.0) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.0) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.0) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.0) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.0) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.23.0) + dev: true + + /babel-preset-jest@29.6.3(@babel/core@7.23.0): + resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.0 + babel-plugin-jest-hoist: 29.6.3 + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.23.0) + dev: true + /balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} dev: true @@ -2498,6 +3444,24 @@ packages: safe-buffer: 5.2.1 dev: true + /browserslist@4.22.1: + resolution: {integrity: sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + dependencies: + caniuse-lite: 1.0.30001546 + electron-to-chromium: 1.4.543 + node-releases: 2.0.13 + update-browserslist-db: 1.0.13(browserslist@4.22.1) + dev: true + + /bs-logger@0.2.6: + resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==} + engines: {node: '>= 6'} + dependencies: + fast-json-stable-stringify: 2.1.0 + dev: true + /bs58@4.0.1: resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==} dependencies: @@ -2512,6 +3476,12 @@ packages: safe-buffer: 5.2.1 dev: true + /bser@2.1.1: + resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} + dependencies: + node-int64: 0.4.0 + dev: true + /buffer-alloc-unsafe@1.1.0: resolution: {integrity: sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==} dev: true @@ -2574,11 +3544,20 @@ packages: engines: {node: '>=6'} dev: true + /camelcase@5.3.1: + resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} + engines: {node: '>=6'} + dev: true + /camelcase@6.3.0: resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} engines: {node: '>=10'} dev: true + /caniuse-lite@1.0.30001546: + resolution: {integrity: sha512-zvtSJwuQFpewSyRrI3AsftF6rM0X80mZkChIt1spBGEvRglCrjTniXvinc8JKRoqTwXAgvqTImaN9igfSMtUBw==} + dev: true + /cardinal@2.1.1: resolution: {integrity: sha512-JSr5eOgoEymtYHBjNWyjrMqet9Am2miJhlfKNdqLp6zoeAh0KN5dRAcxlecj5mAJrmQomgiOBj35xHLrFjqBpw==} hasBin: true @@ -2667,6 +3646,11 @@ packages: supports-color: 7.2.0 dev: true + /char-regex@1.0.2: + resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} + engines: {node: '>=10'} + dev: true + /charenc@0.0.2: resolution: {integrity: sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==} dev: true @@ -2705,6 +3689,11 @@ packages: resolution: {integrity: sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==} dev: true + /ci-info@3.9.0: + resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} + engines: {node: '>=8'} + dev: true + /cipher-base@1.0.4: resolution: {integrity: sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==} dependencies: @@ -2712,6 +3701,10 @@ packages: safe-buffer: 5.2.1 dev: true + /cjs-module-lexer@1.2.3: + resolution: {integrity: sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==} + dev: true + /classic-level@1.3.0: resolution: {integrity: sha512-iwFAJQYtqRTRM0F6L8h4JCt00ZSGdOyqh7yVrhhjrOpFhmBjNlRUey64MCiyo6UmQHMJ+No3c81nujPv+n9yrg==} engines: {node: '>=12'} @@ -2783,11 +3776,29 @@ packages: wrap-ansi: 7.0.0 dev: true + /cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + dev: true + /clone@1.0.4: resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} engines: {node: '>=0.8'} dev: true + /co@4.6.0: + resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} + engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} + dev: true + + /collect-v8-coverage@1.0.2: + resolution: {integrity: sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==} + dev: true + /color-convert@1.9.3: resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} dependencies: @@ -2876,6 +3887,10 @@ packages: typedarray: 0.0.6 dev: true + /convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + dev: true + /cookie@0.4.2: resolution: {integrity: sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==} engines: {node: '>= 0.6'} @@ -2937,6 +3952,25 @@ packages: sha.js: 2.4.11 dev: true + /create-jest@29.7.0(@types/node@20.8.0)(ts-node@10.9.1): + resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + dependencies: + '@jest/types': 29.6.3 + chalk: 4.1.2 + exit: 0.1.2 + graceful-fs: 4.2.11 + jest-config: 29.7.0(@types/node@20.8.0)(ts-node@10.9.1) + jest-util: 29.7.0 + prompts: 2.4.2 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + dev: true + /create-require@1.1.1: resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} dev: true @@ -3000,6 +4034,15 @@ packages: engines: {node: '>=10'} dev: true + /dedent@1.5.1: + resolution: {integrity: sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==} + peerDependencies: + babel-plugin-macros: ^3.1.0 + peerDependenciesMeta: + babel-plugin-macros: + optional: true + dev: true + /deep-eql@4.1.3: resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==} engines: {node: '>=6'} @@ -3016,6 +4059,11 @@ packages: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} dev: true + /deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} + dev: true + /defaults@1.0.4: resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} dependencies: @@ -3045,6 +4093,11 @@ packages: engines: {node: '>= 0.8'} dev: true + /detect-newline@3.1.0: + resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} + engines: {node: '>=8'} + dev: true + /detect-port@1.5.1: resolution: {integrity: sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ==} hasBin: true @@ -3055,6 +4108,11 @@ packages: - supports-color dev: true + /diff-sequences@29.6.3: + resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dev: true + /diff@4.0.2: resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} engines: {node: '>=0.3.1'} @@ -3153,6 +4211,10 @@ packages: encoding: 0.1.13 dev: true + /electron-to-chromium@1.4.543: + resolution: {integrity: sha512-t2ZP4AcGE0iKCCQCBx/K2426crYdxD3YU6l0uK2EO3FZH0pbC4pFz/sZm2ruZsND6hQBTcDWWlo/MLpiOdif5g==} + dev: true + /elliptic@6.5.4: resolution: {integrity: sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==} dependencies: @@ -3165,6 +4227,11 @@ packages: minimalistic-crypto-utils: 1.0.1 dev: true + /emittery@0.13.1: + resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} + engines: {node: '>=12'} + dev: true + /emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} dev: true @@ -3290,6 +4357,36 @@ packages: es6-promise: 4.2.8 dev: true + /esbuild@0.18.20: + resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + optionalDependencies: + '@esbuild/android-arm': 0.18.20 + '@esbuild/android-arm64': 0.18.20 + '@esbuild/android-x64': 0.18.20 + '@esbuild/darwin-arm64': 0.18.20 + '@esbuild/darwin-x64': 0.18.20 + '@esbuild/freebsd-arm64': 0.18.20 + '@esbuild/freebsd-x64': 0.18.20 + '@esbuild/linux-arm': 0.18.20 + '@esbuild/linux-arm64': 0.18.20 + '@esbuild/linux-ia32': 0.18.20 + '@esbuild/linux-loong64': 0.18.20 + '@esbuild/linux-mips64el': 0.18.20 + '@esbuild/linux-ppc64': 0.18.20 + '@esbuild/linux-riscv64': 0.18.20 + '@esbuild/linux-s390x': 0.18.20 + '@esbuild/linux-x64': 0.18.20 + '@esbuild/netbsd-x64': 0.18.20 + '@esbuild/openbsd-x64': 0.18.20 + '@esbuild/sunos-x64': 0.18.20 + '@esbuild/win32-arm64': 0.18.20 + '@esbuild/win32-ia32': 0.18.20 + '@esbuild/win32-x64': 0.18.20 + dev: true + /escalade@3.1.1: resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} engines: {node: '>=6'} @@ -3300,6 +4397,11 @@ packages: engines: {node: '>=0.8.0'} dev: true + /escape-string-regexp@2.0.0: + resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} + engines: {node: '>=8'} + dev: true + /escape-string-regexp@4.0.0: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} @@ -3625,6 +4727,22 @@ packages: strip-final-newline: 2.0.0 dev: true + /exit@0.1.2: + resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} + engines: {node: '>= 0.8.0'} + dev: true + + /expect@29.7.0: + resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/expect-utils': 29.7.0 + jest-get-type: 29.6.3 + jest-matcher-utils: 29.7.0 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + dev: true + /extend@3.0.2: resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} dev: true @@ -3707,6 +4825,12 @@ packages: reusify: 1.0.4 dev: true + /fb-watchman@2.0.2: + resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} + dependencies: + bser: 2.1.1 + dev: true + /fetch-blob@3.2.0: resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} engines: {node: ^12.20 || >= 14.13} @@ -3749,6 +4873,14 @@ packages: locate-path: 2.0.0 dev: true + /find-up@4.1.0: + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} + dependencies: + locate-path: 5.0.0 + path-exists: 4.0.0 + dev: true + /find-up@5.0.0: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} engines: {node: '>=10'} @@ -3939,6 +5071,11 @@ packages: resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} dev: true + /gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + dev: true + /get-caller-file@2.0.5: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} @@ -4017,7 +5154,7 @@ packages: dependencies: inflight: 1.0.6 inherits: 2.0.4 - minimatch: 8.0.4 + minimatch: 3.1.2 once: 1.4.0 path-is-absolute: 1.0.1 dev: true @@ -4028,7 +5165,7 @@ packages: fs.realpath: 1.0.0 inflight: 1.0.6 inherits: 2.0.4 - minimatch: 8.0.4 + minimatch: 3.1.2 once: 1.4.0 path-is-absolute: 1.0.1 dev: true @@ -4092,6 +5229,11 @@ packages: which: 1.3.1 dev: true + /globals@11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + dev: true + /globals@13.22.0: resolution: {integrity: sha512-H1Ddc/PbZHTDVJSnj8kWptIRSD6AM3pK+mKytuIVF4uoBV7rshFlhhvA58ceJ5wp3Er58w6zj7bykMpYXt3ETw==} engines: {node: '>=8'} @@ -4410,6 +5552,10 @@ packages: react-is: 16.13.1 dev: false + /html-escaper@2.0.2: + resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} + dev: true + /http-basic@8.1.3: resolution: {integrity: sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==} engines: {node: '>=6.0.0'} @@ -4511,6 +5657,15 @@ packages: resolve-from: 4.0.0 dev: true + /import-local@3.1.0: + resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==} + engines: {node: '>=8'} + hasBin: true + dependencies: + pkg-dir: 4.2.0 + resolve-cwd: 3.0.0 + dev: true + /imurmurhash@0.1.4: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} @@ -4758,6 +5913,11 @@ packages: engines: {node: '>=8'} dev: true + /is-generator-fn@2.1.0: + resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} + engines: {node: '>=6'} + dev: true + /is-glob@4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} @@ -4921,6 +6081,65 @@ packages: resolution: {integrity: sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==} dev: true + /istanbul-lib-coverage@3.2.0: + resolution: {integrity: sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==} + engines: {node: '>=8'} + dev: true + + /istanbul-lib-instrument@5.2.1: + resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} + engines: {node: '>=8'} + dependencies: + '@babel/core': 7.23.0 + '@babel/parser': 7.23.0 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-coverage: 3.2.0 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + dev: true + + /istanbul-lib-instrument@6.0.1: + resolution: {integrity: sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA==} + engines: {node: '>=10'} + dependencies: + '@babel/core': 7.23.0 + '@babel/parser': 7.23.0 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-coverage: 3.2.0 + semver: 7.5.4 + transitivePeerDependencies: + - supports-color + dev: true + + /istanbul-lib-report@3.0.1: + resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} + engines: {node: '>=10'} + dependencies: + istanbul-lib-coverage: 3.2.0 + make-dir: 4.0.0 + supports-color: 7.2.0 + dev: true + + /istanbul-lib-source-maps@4.0.1: + resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} + engines: {node: '>=10'} + dependencies: + debug: 4.3.4(supports-color@8.1.1) + istanbul-lib-coverage: 3.2.0 + source-map: 0.6.1 + transitivePeerDependencies: + - supports-color + dev: true + + /istanbul-reports@3.1.6: + resolution: {integrity: sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==} + engines: {node: '>=8'} + dependencies: + html-escaper: 2.0.2 + istanbul-lib-report: 3.0.1 + dev: true + /it-all@1.0.6: resolution: {integrity: sha512-3cmCc6Heqe3uWi3CVM/k51fa/XbMFpQVzFoDsV0IZNHSQDyAXl3c4MjHkFX5kF3922OGj7Myv1nSEUgRtcuM1A==} dev: true @@ -4929,67 +6148,478 @@ packages: resolution: {integrity: sha512-nvJKZoBpZD/6Rtde6FXqwDqDZGF1sCADmr2Zoc0hZsIvnE449gRFnGctxDf09Bzc/FWnHXAdaHVIetY6lrE0/g==} dev: true - /it-glob@1.0.2: - resolution: {integrity: sha512-Ch2Dzhw4URfB9L/0ZHyY+uqOnKvBNeS/SMcRiPmJfpHiM0TsUZn+GkpcZxAoF3dJVdPm/PuIk3A4wlV7SUo23Q==} + /it-glob@1.0.2: + resolution: {integrity: sha512-Ch2Dzhw4URfB9L/0ZHyY+uqOnKvBNeS/SMcRiPmJfpHiM0TsUZn+GkpcZxAoF3dJVdPm/PuIk3A4wlV7SUo23Q==} + dependencies: + '@types/minimatch': 3.0.5 + minimatch: 3.1.2 + dev: true + + /it-last@1.0.6: + resolution: {integrity: sha512-aFGeibeiX/lM4bX3JY0OkVCFkAw8+n9lkukkLNivbJRvNz8lI3YXv5xcqhFUV2lDJiraEK3OXRDbGuevnnR67Q==} + dev: true + + /it-map@1.0.6: + resolution: {integrity: sha512-XT4/RM6UHIFG9IobGlQPFQUrlEKkU4eBUFG3qhWhfAdh1JfF2x11ShCrKCdmZ0OiZppPfoLuzcfA4cey6q3UAQ==} + dev: true + + /it-peekable@1.0.3: + resolution: {integrity: sha512-5+8zemFS+wSfIkSZyf0Zh5kNN+iGyccN02914BY4w/Dj+uoFEoPSvj5vaWn8pNZJNSxzjW0zHRxC3LUb2KWJTQ==} + dev: true + + /it-to-stream@1.0.0: + resolution: {integrity: sha512-pLULMZMAB/+vbdvbZtebC0nWBTbG581lk6w8P7DfIIIKUfa8FbY7Oi0FxZcFPbxvISs7A9E+cMpLDBc1XhpAOA==} + dependencies: + buffer: 6.0.3 + fast-fifo: 1.3.2 + get-iterator: 1.0.2 + p-defer: 3.0.0 + p-fifo: 1.0.0 + readable-stream: 3.6.2 + dev: true + + /jake@10.8.7: + resolution: {integrity: sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==} + engines: {node: '>=10'} + hasBin: true + dependencies: + async: 3.2.4 + chalk: 4.1.2 + filelist: 1.0.4 + minimatch: 3.1.2 + dev: true + + /jayson@4.0.0: + resolution: {integrity: sha512-v2RNpDCMu45fnLzSk47vx7I+QUaOsox6f5X0CUlabAFwxoP+8MfAY0NQRFwOEYXIxm8Ih5y6OaEa5KYiQMkyAA==} + engines: {node: '>=8'} + hasBin: true + dependencies: + '@types/connect': 3.4.36 + '@types/node': 12.20.55 + '@types/ws': 7.4.7 + 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(ws@7.5.9) + json-stringify-safe: 5.0.1 + uuid: 8.3.2 + ws: 7.5.9 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: true + + /jest-changed-files@29.7.0: + resolution: {integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + execa: 5.1.1 + jest-util: 29.7.0 + p-limit: 3.1.0 + dev: true + + /jest-circus@29.7.0: + resolution: {integrity: sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/environment': 29.7.0 + '@jest/expect': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 20.8.0 + chalk: 4.1.2 + co: 4.6.0 + dedent: 1.5.1 + is-generator-fn: 2.1.0 + jest-each: 29.7.0 + jest-matcher-utils: 29.7.0 + jest-message-util: 29.7.0 + jest-runtime: 29.7.0 + jest-snapshot: 29.7.0 + jest-util: 29.7.0 + p-limit: 3.1.0 + pretty-format: 29.7.0 + pure-rand: 6.0.4 + slash: 3.0.0 + stack-utils: 2.0.6 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + dev: true + + /jest-cli@29.7.0(@types/node@20.8.0)(ts-node@10.9.1): + resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + dependencies: + '@jest/core': 29.7.0(ts-node@10.9.1) + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 + chalk: 4.1.2 + create-jest: 29.7.0(@types/node@20.8.0)(ts-node@10.9.1) + exit: 0.1.2 + import-local: 3.1.0 + jest-config: 29.7.0(@types/node@20.8.0)(ts-node@10.9.1) + jest-util: 29.7.0 + jest-validate: 29.7.0 + yargs: 17.7.2 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + dev: true + + /jest-config@29.7.0(@types/node@20.8.0)(ts-node@10.9.1): + resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@types/node': '*' + ts-node: '>=9.0.0' + peerDependenciesMeta: + '@types/node': + optional: true + ts-node: + optional: true + dependencies: + '@babel/core': 7.23.0 + '@jest/test-sequencer': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 20.8.0 + babel-jest: 29.7.0(@babel/core@7.23.0) + chalk: 4.1.2 + ci-info: 3.9.0 + deepmerge: 4.3.1 + glob: 7.2.3 + graceful-fs: 4.2.11 + jest-circus: 29.7.0 + jest-environment-node: 29.7.0 + jest-get-type: 29.6.3 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-runner: 29.7.0 + jest-util: 29.7.0 + jest-validate: 29.7.0 + micromatch: 4.0.5 + parse-json: 5.2.0 + pretty-format: 29.7.0 + slash: 3.0.0 + strip-json-comments: 3.1.1 + ts-node: 10.9.1(@types/node@20.8.0)(typescript@5.2.2) + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + dev: true + + /jest-diff@29.7.0: + resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + chalk: 4.1.2 + diff-sequences: 29.6.3 + jest-get-type: 29.6.3 + pretty-format: 29.7.0 + dev: true + + /jest-docblock@29.7.0: + resolution: {integrity: sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + detect-newline: 3.1.0 + dev: true + + /jest-each@29.7.0: + resolution: {integrity: sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/types': 29.6.3 + chalk: 4.1.2 + jest-get-type: 29.6.3 + jest-util: 29.7.0 + pretty-format: 29.7.0 + dev: true + + /jest-environment-node@29.7.0: + resolution: {integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/environment': 29.7.0 + '@jest/fake-timers': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 20.8.0 + jest-mock: 29.7.0 + jest-util: 29.7.0 + dev: true + + /jest-get-type@29.6.3: + resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dev: true + + /jest-haste-map@29.7.0: + resolution: {integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/types': 29.6.3 + '@types/graceful-fs': 4.1.7 + '@types/node': 20.8.0 + anymatch: 3.1.3 + fb-watchman: 2.0.2 + graceful-fs: 4.2.11 + jest-regex-util: 29.6.3 + jest-util: 29.7.0 + jest-worker: 29.7.0 + micromatch: 4.0.5 + walker: 1.0.8 + optionalDependencies: + fsevents: 2.3.3 + dev: true + + /jest-leak-detector@29.7.0: + resolution: {integrity: sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + jest-get-type: 29.6.3 + pretty-format: 29.7.0 + dev: true + + /jest-matcher-utils@29.7.0: + resolution: {integrity: sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + chalk: 4.1.2 + jest-diff: 29.7.0 + jest-get-type: 29.6.3 + pretty-format: 29.7.0 + dev: true + + /jest-message-util@29.7.0: + resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@babel/code-frame': 7.22.13 + '@jest/types': 29.6.3 + '@types/stack-utils': 2.0.1 + chalk: 4.1.2 + graceful-fs: 4.2.11 + micromatch: 4.0.5 + pretty-format: 29.7.0 + slash: 3.0.0 + stack-utils: 2.0.6 + dev: true + + /jest-mock@29.7.0: + resolution: {integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/types': 29.6.3 + '@types/node': 20.8.0 + jest-util: 29.7.0 + dev: true + + /jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): + resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} + engines: {node: '>=6'} + peerDependencies: + jest-resolve: '*' + peerDependenciesMeta: + jest-resolve: + optional: true + dependencies: + jest-resolve: 29.7.0 + dev: true + + /jest-regex-util@29.6.3: + resolution: {integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dev: true + + /jest-resolve-dependencies@29.7.0: + resolution: {integrity: sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + jest-regex-util: 29.6.3 + jest-snapshot: 29.7.0 + transitivePeerDependencies: + - supports-color + dev: true + + /jest-resolve@29.7.0: + resolution: {integrity: sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + chalk: 4.1.2 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + jest-pnp-resolver: 1.2.3(jest-resolve@29.7.0) + jest-util: 29.7.0 + jest-validate: 29.7.0 + resolve: 1.22.6 + resolve.exports: 2.0.2 + slash: 3.0.0 + dev: true + + /jest-runner@29.7.0: + resolution: {integrity: sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/console': 29.7.0 + '@jest/environment': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 20.8.0 + chalk: 4.1.2 + emittery: 0.13.1 + graceful-fs: 4.2.11 + jest-docblock: 29.7.0 + jest-environment-node: 29.7.0 + jest-haste-map: 29.7.0 + jest-leak-detector: 29.7.0 + jest-message-util: 29.7.0 + jest-resolve: 29.7.0 + jest-runtime: 29.7.0 + jest-util: 29.7.0 + jest-watcher: 29.7.0 + jest-worker: 29.7.0 + p-limit: 3.1.0 + source-map-support: 0.5.13 + transitivePeerDependencies: + - supports-color + dev: true + + /jest-runtime@29.7.0: + resolution: {integrity: sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@types/minimatch': 3.0.5 - minimatch: 3.1.2 + '@jest/environment': 29.7.0 + '@jest/fake-timers': 29.7.0 + '@jest/globals': 29.7.0 + '@jest/source-map': 29.6.3 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 20.8.0 + chalk: 4.1.2 + cjs-module-lexer: 1.2.3 + collect-v8-coverage: 1.0.2 + glob: 7.2.3 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + jest-message-util: 29.7.0 + jest-mock: 29.7.0 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-snapshot: 29.7.0 + jest-util: 29.7.0 + slash: 3.0.0 + strip-bom: 4.0.0 + transitivePeerDependencies: + - supports-color dev: true - /it-last@1.0.6: - resolution: {integrity: sha512-aFGeibeiX/lM4bX3JY0OkVCFkAw8+n9lkukkLNivbJRvNz8lI3YXv5xcqhFUV2lDJiraEK3OXRDbGuevnnR67Q==} + /jest-snapshot@29.7.0: + resolution: {integrity: sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@babel/core': 7.23.0 + '@babel/generator': 7.23.0 + '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.23.0) + '@babel/plugin-syntax-typescript': 7.22.5(@babel/core@7.23.0) + '@babel/types': 7.23.0 + '@jest/expect-utils': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.23.0) + chalk: 4.1.2 + expect: 29.7.0 + graceful-fs: 4.2.11 + jest-diff: 29.7.0 + jest-get-type: 29.6.3 + jest-matcher-utils: 29.7.0 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + natural-compare: 1.4.0 + pretty-format: 29.7.0 + semver: 7.5.4 + transitivePeerDependencies: + - supports-color dev: true - /it-map@1.0.6: - resolution: {integrity: sha512-XT4/RM6UHIFG9IobGlQPFQUrlEKkU4eBUFG3qhWhfAdh1JfF2x11ShCrKCdmZ0OiZppPfoLuzcfA4cey6q3UAQ==} + /jest-util@29.7.0: + resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/types': 29.6.3 + '@types/node': 20.8.0 + chalk: 4.1.2 + ci-info: 3.9.0 + graceful-fs: 4.2.11 + picomatch: 2.3.1 dev: true - /it-peekable@1.0.3: - resolution: {integrity: sha512-5+8zemFS+wSfIkSZyf0Zh5kNN+iGyccN02914BY4w/Dj+uoFEoPSvj5vaWn8pNZJNSxzjW0zHRxC3LUb2KWJTQ==} + /jest-validate@29.7.0: + resolution: {integrity: sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/types': 29.6.3 + camelcase: 6.3.0 + chalk: 4.1.2 + jest-get-type: 29.6.3 + leven: 3.1.0 + pretty-format: 29.7.0 dev: true - /it-to-stream@1.0.0: - resolution: {integrity: sha512-pLULMZMAB/+vbdvbZtebC0nWBTbG581lk6w8P7DfIIIKUfa8FbY7Oi0FxZcFPbxvISs7A9E+cMpLDBc1XhpAOA==} + /jest-watcher@29.7.0: + resolution: {integrity: sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - buffer: 6.0.3 - fast-fifo: 1.3.2 - get-iterator: 1.0.2 - p-defer: 3.0.0 - p-fifo: 1.0.0 - readable-stream: 3.6.2 + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 20.8.0 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + emittery: 0.13.1 + jest-util: 29.7.0 + string-length: 4.0.2 dev: true - /jake@10.8.7: - resolution: {integrity: sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==} - engines: {node: '>=10'} - hasBin: true + /jest-worker@29.7.0: + resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - async: 3.2.4 - chalk: 4.1.2 - filelist: 1.0.4 - minimatch: 3.1.2 + '@types/node': 20.8.0 + jest-util: 29.7.0 + merge-stream: 2.0.0 + supports-color: 8.1.1 dev: true - /jayson@4.0.0: - resolution: {integrity: sha512-v2RNpDCMu45fnLzSk47vx7I+QUaOsox6f5X0CUlabAFwxoP+8MfAY0NQRFwOEYXIxm8Ih5y6OaEa5KYiQMkyAA==} - engines: {node: '>=8'} + /jest@29.7.0(@types/node@20.8.0)(ts-node@10.9.1): + resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true dependencies: - '@types/connect': 3.4.36 - '@types/node': 12.20.55 - '@types/ws': 7.4.7 - 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(ws@7.5.9) - json-stringify-safe: 5.0.1 - uuid: 8.3.2 - ws: 7.5.9 + '@jest/core': 29.7.0(ts-node@10.9.1) + '@jest/types': 29.6.3 + import-local: 3.1.0 + jest-cli: 29.7.0(@types/node@20.8.0)(ts-node@10.9.1) transitivePeerDependencies: - - bufferutil - - utf-8-validate + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node dev: true /js-cookie@2.2.1: @@ -5026,6 +6656,12 @@ packages: resolution: {integrity: sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==} dev: true + /jsesc@2.5.2: + resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} + engines: {node: '>=4'} + hasBin: true + dev: true + /json-buffer@3.0.1: resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} dev: true @@ -5054,6 +6690,12 @@ packages: resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} dev: true + /json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + dev: true + /jsonfile@2.4.0: resolution: {integrity: sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==} optionalDependencies: @@ -5120,6 +6762,11 @@ packages: graceful-fs: 4.2.11 dev: true + /kleur@3.0.3: + resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} + engines: {node: '>=6'} + dev: true + /level-supports@4.0.1: resolution: {integrity: sha512-PbXpve8rKeNcZ9C1mUicC9auIYFyGpkV9/i6g76tLgANwWhtG2v7I4xNBUlkn3lE2/dZF3Pi0ygYGtLc4RXXdA==} engines: {node: '>=12'} @@ -5141,6 +6788,11 @@ packages: classic-level: 1.3.0 dev: true + /leven@3.1.0: + resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} + engines: {node: '>=6'} + dev: true + /levn@0.3.0: resolution: {integrity: sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==} engines: {node: '>= 0.8.0'} @@ -5169,6 +6821,13 @@ packages: path-exists: 3.0.0 dev: true + /locate-path@5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} + dependencies: + p-locate: 4.1.0 + dev: true + /locate-path@6.0.0: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} @@ -5200,6 +6859,10 @@ packages: resolution: {integrity: sha512-UUKX7VhP1/JL54NXg2aq/E1Sfnjjes8fNYTNkPU8ZmsaVeBvPHKdbNaN79Re5XRL01u6wbq3j0cbYZj71Fcu5w==} dev: true + /lodash.memoize@4.1.2: + resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} + dev: true + /lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} dev: true @@ -5314,10 +6977,23 @@ packages: resolution: {integrity: sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==} dev: true + /make-dir@4.0.0: + resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} + engines: {node: '>=10'} + dependencies: + semver: 7.5.4 + dev: true + /make-error@1.3.6: resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} dev: true + /makeerror@1.0.12: + resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} + dependencies: + tmpl: 1.0.5 + dev: true + /markdown-table@1.1.3: resolution: {integrity: sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q==} dev: true @@ -5558,6 +7234,12 @@ packages: hasBin: true dev: true + /nanoid@3.3.6: + resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + dev: true + /napi-macros@2.2.2: resolution: {integrity: sha512-hmEVtAGYzVQpCKdbQea4skABsdXW4RUh5t5mJ2zzqowJS2OyXZTU1KhDVFhx+NlWZ4ap9mqR9TcDO3LTTttd+g==} dev: true @@ -5639,6 +7321,14 @@ packages: hasBin: true dev: true + /node-int64@0.4.0: + resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} + dev: true + + /node-releases@2.0.13: + resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==} + dev: true + /nofilter@3.1.0: resolution: {integrity: sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g==} engines: {node: '>=12.19'} @@ -5793,6 +7483,13 @@ packages: p-try: 1.0.0 dev: true + /p-limit@2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} + dependencies: + p-try: 2.2.0 + dev: true + /p-limit@3.1.0: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} @@ -5807,6 +7504,13 @@ packages: p-limit: 1.3.0 dev: true + /p-locate@4.1.0: + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} + dependencies: + p-limit: 2.3.0 + dev: true + /p-locate@5.0.0: resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} engines: {node: '>=10'} @@ -5826,6 +7530,11 @@ packages: engines: {node: '>=4'} dev: true + /p-try@2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} + dev: true + /parent-module@1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} @@ -5914,6 +7623,10 @@ packages: resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==} dev: true + /picocolors@1.0.0: + resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + dev: true + /picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} @@ -5924,11 +7637,32 @@ packages: engines: {node: '>=6'} dev: true + /pirates@4.0.6: + resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} + engines: {node: '>= 6'} + dev: true + + /pkg-dir@4.2.0: + resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} + engines: {node: '>=8'} + dependencies: + find-up: 4.1.0 + dev: true + /pluralize@8.0.0: resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} engines: {node: '>=4'} dev: true + /postcss@8.4.31: + resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} + engines: {node: ^10 || ^12 || >=14} + dependencies: + nanoid: 3.3.6 + picocolors: 1.0.0 + source-map-js: 1.0.2 + dev: true + /prelude-ls@1.1.2: resolution: {integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==} engines: {node: '>= 0.8.0'} @@ -5971,6 +7705,15 @@ packages: requiresBuild: true dev: true + /pretty-format@29.7.0: + resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/schemas': 29.6.3 + ansi-styles: 5.2.0 + react-is: 18.2.0 + dev: true + /process-nextick-args@2.0.1: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} dev: true @@ -5981,6 +7724,14 @@ packages: asap: 2.0.6 dev: true + /prompts@2.4.2: + resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} + engines: {node: '>= 6'} + dependencies: + kleur: 3.0.3 + sisteransi: 1.0.5 + dev: true + /prop-types@15.8.1: resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} dependencies: @@ -6041,6 +7792,10 @@ packages: engines: {node: '>=6'} dev: true + /pure-rand@6.0.4: + resolution: {integrity: sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA==} + dev: true + /pvtsutils@1.3.5: resolution: {integrity: sha512-ARvb14YB9Nm2Xi6nBq1ZX6dAM0FsJnuk+31aUp4TrcZEdKUlSqOqsxJHUPJDNE3qiIp+iUPEIeR6Je/tgV7zsA==} dependencies: @@ -6092,6 +7847,10 @@ packages: resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} dev: false + /react-is@18.2.0: + resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} + dev: true + /react-native-fetch-api@3.0.0: resolution: {integrity: sha512-g2rtqPjdroaboDKTsJCTlcmtw54E25OjyaunUP0anOZn4Fuo2IKs8BVfe02zVggA/UysbmfSnRJIqtNkAgggNA==} dependencies: @@ -6230,6 +7989,13 @@ packages: resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} dev: true + /resolve-cwd@3.0.0: + resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} + engines: {node: '>=8'} + dependencies: + resolve-from: 5.0.0 + dev: true + /resolve-from@3.0.0: resolution: {integrity: sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==} engines: {node: '>=4'} @@ -6240,6 +8006,16 @@ packages: engines: {node: '>=4'} dev: true + /resolve-from@5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} + dev: true + + /resolve.exports@2.0.2: + resolution: {integrity: sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==} + engines: {node: '>=10'} + dev: true + /resolve@1.1.7: resolution: {integrity: sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg==} dev: true @@ -6319,6 +8095,14 @@ packages: bn.js: 5.2.1 dev: true + /rollup@3.29.4: + resolution: {integrity: sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==} + engines: {node: '>=14.18.0', npm: '>=8.0.0'} + hasBin: true + optionalDependencies: + fsevents: 2.3.3 + dev: true + /run-parallel-limit@1.1.0: resolution: {integrity: sha512-jJA7irRNM91jaKc3Hcl1npHsFLOXOoTkPCUL1JEa1R82O2miplXXRaGdjW/KM/98YQWDhJLiSs793CnXfblJUw==} dependencies: @@ -6480,6 +8264,10 @@ packages: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} dev: true + /sisteransi@1.0.5: + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + dev: true + /slash@3.0.0: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} @@ -6589,6 +8377,18 @@ packages: - supports-color dev: true + /source-map-js@1.0.2: + resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} + engines: {node: '>=0.10.0'} + dev: true + + /source-map-support@0.5.13: + resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + dev: true + /source-map-support@0.5.21: resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} dependencies: @@ -6634,6 +8434,13 @@ packages: tweetnacl: 0.14.5 dev: true + /stack-utils@2.0.6: + resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} + engines: {node: '>=10'} + dependencies: + escape-string-regexp: 2.0.0 + dev: true + /stacktrace-parser@0.1.10: resolution: {integrity: sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==} engines: {node: '>=6'} @@ -6661,6 +8468,14 @@ packages: resolution: {integrity: sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA==} dev: true + /string-length@4.0.2: + resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} + engines: {node: '>=10'} + dependencies: + char-regex: 1.0.2 + strip-ansi: 6.0.1 + dev: true + /string-width@2.1.1: resolution: {integrity: sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==} engines: {node: '>=4'} @@ -6740,6 +8555,11 @@ packages: ansi-regex: 5.0.1 dev: true + /strip-bom@4.0.0: + resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} + engines: {node: '>=8'} + dev: true + /strip-final-newline@2.0.0: resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} engines: {node: '>=6'} @@ -6873,6 +8693,15 @@ packages: yallist: 4.0.0 dev: true + /test-exclude@6.0.0: + resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} + engines: {node: '>=8'} + dependencies: + '@istanbuljs/schema': 0.1.3 + glob: 7.2.3 + minimatch: 3.1.2 + dev: true + /text-table@0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} dev: true @@ -6926,10 +8755,19 @@ packages: rimraf: 3.0.2 dev: true + /tmpl@1.0.5: + resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} + dev: true + /to-buffer@1.1.1: resolution: {integrity: sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==} dev: true + /to-fast-properties@2.0.0: + resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} + engines: {node: '>=4'} + dev: true + /to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} @@ -6990,6 +8828,40 @@ packages: tslib: 2.6.2 dev: false + /ts-jest@29.1.1(@babel/core@7.23.0)(jest@29.7.0)(typescript@5.2.2): + resolution: {integrity: sha512-D6xjnnbP17cC85nliwGiL+tpoKN0StpgE0TeOjXQTU6MVCfsB4v7aW05CgQ/1OywGb0x/oy9hHFnN+sczTiRaA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + peerDependencies: + '@babel/core': '>=7.0.0-beta.0 <8' + '@jest/types': ^29.0.0 + babel-jest: ^29.0.0 + esbuild: '*' + jest: ^29.0.0 + typescript: '>=4.3 <6' + peerDependenciesMeta: + '@babel/core': + optional: true + '@jest/types': + optional: true + babel-jest: + optional: true + esbuild: + optional: true + dependencies: + '@babel/core': 7.23.0 + bs-logger: 0.2.6 + fast-json-stable-stringify: 2.1.0 + jest: 29.7.0(@types/node@20.8.0)(ts-node@10.9.1) + jest-util: 29.7.0 + json5: 2.2.3 + lodash.memoize: 4.1.2 + make-error: 1.3.6 + semver: 7.5.4 + typescript: 5.2.2 + yargs-parser: 21.1.1 + dev: true + /ts-node@10.9.1(@types/node@20.8.0)(typescript@5.2.2): resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} hasBin: true @@ -7227,6 +9099,17 @@ packages: engines: {node: '>= 0.8'} dev: true + /update-browserslist-db@1.0.13(browserslist@4.22.1): + resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + dependencies: + browserslist: 4.22.1 + escalade: 3.1.1 + picocolors: 1.0.0 + dev: true + /uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} dependencies: @@ -7267,6 +9150,15 @@ packages: resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} dev: true + /v8-to-istanbul@9.1.3: + resolution: {integrity: sha512-9lDD+EVI2fjFsMWXc6dy5JJzBsVTcQ2fVkfBvncZ6xJWG9wtBhOldG+mHkSL0+V1K/xgZz0JDO5UT5hFwHUghg==} + engines: {node: '>=10.12.0'} + dependencies: + '@jridgewell/trace-mapping': 0.3.19 + '@types/istanbul-lib-coverage': 2.0.4 + convert-source-map: 2.0.0 + dev: true + /varint@6.0.0: resolution: {integrity: sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==} dev: true @@ -7304,6 +9196,48 @@ packages: - zod dev: false + /vite@4.4.10(@types/node@20.8.0): + resolution: {integrity: sha512-TzIjiqx9BEXF8yzYdF2NTf1kFFbjMjUSV0LFZ3HyHoI3SGSPLnnFUKiIQtL3gl2AjHvMrprOvQ3amzaHgQlAxw==} + engines: {node: ^14.18.0 || >=16.0.0} + hasBin: true + peerDependencies: + '@types/node': '>= 14' + less: '*' + lightningcss: ^1.21.0 + sass: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + dependencies: + '@types/node': 20.8.0 + esbuild: 0.18.20 + postcss: 8.4.31 + rollup: 3.29.4 + optionalDependencies: + fsevents: 2.3.3 + dev: true + + /walker@1.0.8: + resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} + dependencies: + makeerror: 1.0.12 + dev: true + /wcwidth@1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} dependencies: @@ -7448,6 +9382,14 @@ packages: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} dev: true + /write-file-atomic@4.0.2: + resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + dependencies: + imurmurhash: 0.1.4 + signal-exit: 3.0.7 + dev: true + /ws@7.4.6: resolution: {integrity: sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==} engines: {node: '>=8.3.0'} @@ -7556,6 +9498,19 @@ packages: yargs-parser: 20.2.4 dev: true + /yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + dependencies: + cliui: 8.0.1 + escalade: 3.1.1 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 21.1.1 + dev: true + /yn@3.1.1: resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} engines: {node: '>=6'} diff --git a/sdk/jest.config.js b/sdk/jest.config.js new file mode 100644 index 00000000..39825120 --- /dev/null +++ b/sdk/jest.config.js @@ -0,0 +1,5 @@ +export default { + preset: 'ts-jest', + testEnvironment: 'node', + // ... other Jest configuration options +}; \ No newline at end of file diff --git a/sdk/package.json b/sdk/package.json index 064c9a3f..b10ae31e 100644 --- a/sdk/package.json +++ b/sdk/package.json @@ -24,6 +24,7 @@ "portal:one": "ts-node examples/portal/findOneById.ts", "schema:all": "ts-node examples/schema/findBy.ts", "schema:one": "ts-node examples/schema/findOneById.ts", + "test": "jest", "utils:attestation:counter": "ts-node examples/utils/getAttestationIdCounter.ts", "utils:attestation:version": "ts-node examples/utils/getVersionNumber.ts", "utils:decode": "ts-node examples/utils/decode.ts", @@ -38,6 +39,10 @@ "viem": "^1.14.0" }, "devDependencies": { - "ts-node": "^10.9.1" + "@types/jest": "^29.5.5", + "jest": "^29.7.0", + "ts-jest": "^29.1.1", + "ts-node": "^10.9.1", + "vite": "^4.4.9" } } diff --git a/sdk/test/dataMapper/AttestationDataMapper.test.ts b/sdk/test/dataMapper/AttestationDataMapper.test.ts new file mode 100644 index 00000000..f5dc4fc6 --- /dev/null +++ b/sdk/test/dataMapper/AttestationDataMapper.test.ts @@ -0,0 +1,69 @@ +import AttestationDataMapper from "../../src/dataMapper/AttestationDataMapper"; +import VeraxSdk from "../../src/VeraxSdk"; +import { createPublicClient, PublicClient, http } from "viem"; +import { ApolloClient, InMemoryCache, ApolloQueryResult, gql } from "@apollo/client/core"; +//TODO : This is a basic test example. mock data and assertions should be more precise +describe("AttestationDataMapper", () => { + let mockApolloClient: ApolloClient; + let web3Client: PublicClient; + let attestationDataMapper: AttestationDataMapper; + const typeName: string = "attestation"; + const gqlInterface: string = `{ + id + schemaId + replacedBy + attester + portal + attestedDate + expirationDate + revocationDate + version + revoked + subject + attestationData + schemaString + decodedData + }`; + + beforeAll(() => { + // Create web3Client + web3Client = createPublicClient({ + chain: VeraxSdk.DEFAULT_LINEA_TESTNET.chain, + transport: http(), + }); + + // Create a mock Apollo Client with an in-memory cache + mockApolloClient = new ApolloClient({ + cache: new InMemoryCache(), + }); + + attestationDataMapper = new AttestationDataMapper(VeraxSdk.DEFAULT_LINEA_TESTNET, web3Client, mockApolloClient); + }); + + afterEach(() => { + // Clear the mock function's call history after each test + jest.clearAllMocks(); + }); + + describe("findOneById", () => { + it("should return the expected attestation", async () => { + const attestationId = "attestationId1"; + // Mock the behavior of the query method + const queryMock = jest.spyOn(mockApolloClient, "query"); + queryMock.mockResolvedValueOnce({ + data: { + attestation: { result: "success" }, + }, + } as ApolloQueryResult); + + const result = await attestationDataMapper.findOneById(attestationId); + + // Assert + expect(result).toBe('{"result":"success"}'); + expect(mockApolloClient.query).toHaveBeenCalledWith({ + query: gql(`query GetOne($id: ID!) { ${typeName}(id: $id) ${gqlInterface} }`), + variables: { id: attestationId }, + }); + }); + }); +}); From 6f0f3a1beb9789199501f98fc00d3edc512a2953 Mon Sep 17 00:00:00 2001 From: Satyajeet Kolhapure <77279246+satyajeetkolhapure@users.noreply.github.com> Date: Tue, 10 Oct 2023 16:59:31 +0100 Subject: [PATCH 23/36] chore: Add example calls for all the methods the SDK will implement (#268) Co-authored-by: Satyajeet Kolhapure --- .../attestation/attestationExamples.ts | 22 +++++++++ sdk/examples/attestation/findOneById.ts | 7 --- sdk/examples/attestation/index.ts | 6 +++ sdk/examples/module/findOneById.ts | 5 -- .../findBy.ts => module/index.ts} | 3 +- sdk/examples/module/moduleExamples.ts | 17 +++++++ sdk/examples/portal/findOneById.ts | 5 -- sdk/examples/portal/{findBy.ts => index.ts} | 3 +- sdk/examples/portal/portalExamples.ts | 34 +++++++++++++ sdk/examples/schema/findBy.ts | 5 -- sdk/examples/schema/findOneById.ts | 5 -- .../{module/findBy.ts => schema/index.ts} | 3 +- sdk/examples/schema/schemaExamples.ts | 19 ++++++++ sdk/package.json | 4 ++ sdk/src/dataMapper/AttestationDataMapper.ts | 3 +- sdk/src/dataMapper/BaseDataMapper.ts | 17 +++---- sdk/src/dataMapper/ModuleDataMapper.ts | 7 ++- sdk/src/dataMapper/PortalDataMapper.ts | 35 +++++++++++++- sdk/src/dataMapper/SchemaDataMapper.ts | 7 ++- sdk/src/dataMapper/UtilsDataMapper.ts | 2 +- sdk/src/types/index.d.ts | 48 +++++++++++++++++-- sdk/src/utils/apolloClientHelper.ts | 4 ++ .../dataMapper/AttestationDataMapper.test.ts | 2 +- 23 files changed, 214 insertions(+), 49 deletions(-) create mode 100644 sdk/examples/attestation/attestationExamples.ts delete mode 100644 sdk/examples/attestation/findOneById.ts create mode 100644 sdk/examples/attestation/index.ts delete mode 100644 sdk/examples/module/findOneById.ts rename sdk/examples/{attestation/findBy.ts => module/index.ts} (50%) create mode 100644 sdk/examples/module/moduleExamples.ts delete mode 100644 sdk/examples/portal/findOneById.ts rename sdk/examples/portal/{findBy.ts => index.ts} (50%) create mode 100644 sdk/examples/portal/portalExamples.ts delete mode 100644 sdk/examples/schema/findBy.ts delete mode 100644 sdk/examples/schema/findOneById.ts rename sdk/examples/{module/findBy.ts => schema/index.ts} (50%) create mode 100644 sdk/examples/schema/schemaExamples.ts create mode 100644 sdk/src/utils/apolloClientHelper.ts diff --git a/sdk/examples/attestation/attestationExamples.ts b/sdk/examples/attestation/attestationExamples.ts new file mode 100644 index 00000000..f2389db2 --- /dev/null +++ b/sdk/examples/attestation/attestationExamples.ts @@ -0,0 +1,22 @@ +import VeraxSdk from "../../src/VeraxSdk"; + +export default class AttestationExamples { + private veraxSdk: VeraxSdk; + constructor(_veraxSdk: VeraxSdk) { + this.veraxSdk = _veraxSdk; + } + async run(methodName: string = "") { + if (methodName.toLowerCase() == "findOneById".toLowerCase() || methodName == "") + console.log( + await this.veraxSdk.attestation.findOneById( + "0x00000000000000000000000000000000000000000000000000000000000007b5", + ), + ); + if (methodName.toLowerCase() == "findBy".toLowerCase() || methodName == "") + console.log( + await this.veraxSdk.attestation.findBy({ + schemaId: "0xd1664d97bd195df77e3d5fe78c1737ab3adaa38bbe52a680d1aa30fa51f186ba", + }), + ); + } +} diff --git a/sdk/examples/attestation/findOneById.ts b/sdk/examples/attestation/findOneById.ts deleted file mode 100644 index 2240b195..00000000 --- a/sdk/examples/attestation/findOneById.ts +++ /dev/null @@ -1,7 +0,0 @@ -import VeraxSdk from "../../src/VeraxSdk"; - -const veraxSdk = new VeraxSdk(VeraxSdk.DEFAULT_LINEA_TESTNET); - -console.log( - await veraxSdk.attestation.findOneById("0x00000000000000000000000000000000000000000000000000000000000007b5"), -); diff --git a/sdk/examples/attestation/index.ts b/sdk/examples/attestation/index.ts new file mode 100644 index 00000000..28635a16 --- /dev/null +++ b/sdk/examples/attestation/index.ts @@ -0,0 +1,6 @@ +import VeraxSdk from "../../src/VeraxSdk"; +import AttestationExamples from "./attestationExamples"; + +const veraxSdk = new VeraxSdk(VeraxSdk.DEFAULT_LINEA_TESTNET); + +await new AttestationExamples(veraxSdk).run(process.argv[2]); diff --git a/sdk/examples/module/findOneById.ts b/sdk/examples/module/findOneById.ts deleted file mode 100644 index 9f0df275..00000000 --- a/sdk/examples/module/findOneById.ts +++ /dev/null @@ -1,5 +0,0 @@ -import VeraxSdk from "../../src/VeraxSdk"; - -const veraxSdk = new VeraxSdk(VeraxSdk.DEFAULT_LINEA_TESTNET); - -console.log(await veraxSdk.module.findOneById("0xf75be6f9418710fd516fa82afb3aad07e11a0f1b")); diff --git a/sdk/examples/attestation/findBy.ts b/sdk/examples/module/index.ts similarity index 50% rename from sdk/examples/attestation/findBy.ts rename to sdk/examples/module/index.ts index 2e5e5d7e..98833344 100644 --- a/sdk/examples/attestation/findBy.ts +++ b/sdk/examples/module/index.ts @@ -1,5 +1,6 @@ import VeraxSdk from "../../src/VeraxSdk"; +import ModuleExamples from "./moduleExamples"; const veraxSdk = new VeraxSdk(VeraxSdk.DEFAULT_LINEA_TESTNET); -console.log(await veraxSdk.attestation.findBy()); +await new ModuleExamples(veraxSdk).run(process.argv[2]); diff --git a/sdk/examples/module/moduleExamples.ts b/sdk/examples/module/moduleExamples.ts new file mode 100644 index 00000000..e1e069f1 --- /dev/null +++ b/sdk/examples/module/moduleExamples.ts @@ -0,0 +1,17 @@ +import VeraxSdk from "../../src/VeraxSdk"; + +export default class ModuleExamples { + private veraxSdk: VeraxSdk; + constructor(_veraxSdk: VeraxSdk) { + this.veraxSdk = _veraxSdk; + } + async run(methodName: string = "") { + if (methodName.toLowerCase() == "findOneById".toLowerCase() || methodName == "") + console.log(await this.veraxSdk.module.findOneById("0xf75be6f9418710fd516fa82afb3aad07e11a0f1b")); + + if (methodName.toLowerCase() == "findBy".toLowerCase() || methodName == "") + console.log(await this.veraxSdk.module.findBy({ name: "SchemaCheckerModule" })); + + if (methodName.toLowerCase() == "register" || methodName == "") console.log(await this.veraxSdk.module.register()); + } +} diff --git a/sdk/examples/portal/findOneById.ts b/sdk/examples/portal/findOneById.ts deleted file mode 100644 index fa541db4..00000000 --- a/sdk/examples/portal/findOneById.ts +++ /dev/null @@ -1,5 +0,0 @@ -import VeraxSdk from "../../src/VeraxSdk"; - -const veraxSdk = new VeraxSdk(VeraxSdk.DEFAULT_LINEA_TESTNET); - -console.log(await veraxSdk.portal.findOneById("0x1495341ab1019798dd08976f4a3e5ab0e095510b")); diff --git a/sdk/examples/portal/findBy.ts b/sdk/examples/portal/index.ts similarity index 50% rename from sdk/examples/portal/findBy.ts rename to sdk/examples/portal/index.ts index da0c6896..2a5b0266 100644 --- a/sdk/examples/portal/findBy.ts +++ b/sdk/examples/portal/index.ts @@ -1,5 +1,6 @@ import VeraxSdk from "../../src/VeraxSdk"; +import PortalExamples from "./portalExamples"; const veraxSdk = new VeraxSdk(VeraxSdk.DEFAULT_LINEA_TESTNET); -console.log(await veraxSdk.portal.findBy()); +await new PortalExamples(veraxSdk).run(process.argv[2]); diff --git a/sdk/examples/portal/portalExamples.ts b/sdk/examples/portal/portalExamples.ts new file mode 100644 index 00000000..a0067f39 --- /dev/null +++ b/sdk/examples/portal/portalExamples.ts @@ -0,0 +1,34 @@ +import VeraxSdk from "../../src/VeraxSdk"; + +export default class PortalExamples { + private veraxSdk: VeraxSdk; + constructor(_veraxSdk: VeraxSdk) { + this.veraxSdk = _veraxSdk; + } + async run(methodName: string = "") { + if (methodName.toLowerCase() == "findOneById".toLowerCase() || methodName == "") + console.log(await this.veraxSdk.portal.findOneById("0x1495341ab1019798dd08976f4a3e5ab0e095510b")); + + if (methodName.toLowerCase() == "findBy".toLowerCase() || methodName == "") + console.log(await this.veraxSdk.portal.findBy({ ownerName: "Clique" })); + + if (methodName.toLowerCase() == "attest" || methodName == "") console.log(await this.veraxSdk.portal.attest()); + + if (methodName.toLowerCase() == "bulkAttest".toLowerCase() || methodName == "") + console.log(await this.veraxSdk.portal.bulkAttest()); + + if (methodName.toLowerCase() == "replace" || methodName == "") console.log(await this.veraxSdk.portal.replace()); + + if (methodName.toLowerCase() == "revoke" || methodName == "") console.log(await this.veraxSdk.portal.revoke()); + + if (methodName.toLowerCase() == "bulkRevoke".toLowerCase() || methodName == "") + console.log(await this.veraxSdk.portal.bulkRevoke()); + + if (methodName.toLowerCase() == "massImport".toLowerCase() || methodName == "") + console.log(await this.veraxSdk.portal.massImport()); + + if (methodName.toLowerCase() == "register" || methodName == "") console.log(await this.veraxSdk.portal.register()); + + if (methodName.toLowerCase() == "clone" || methodName == "") console.log(await this.veraxSdk.portal.clone()); + } +} diff --git a/sdk/examples/schema/findBy.ts b/sdk/examples/schema/findBy.ts deleted file mode 100644 index 8a6cb70a..00000000 --- a/sdk/examples/schema/findBy.ts +++ /dev/null @@ -1,5 +0,0 @@ -import VeraxSdk from "../../src/VeraxSdk"; - -const veraxSdk = new VeraxSdk(VeraxSdk.DEFAULT_LINEA_TESTNET); - -console.log(await veraxSdk.schema.findBy()); diff --git a/sdk/examples/schema/findOneById.ts b/sdk/examples/schema/findOneById.ts deleted file mode 100644 index 37437635..00000000 --- a/sdk/examples/schema/findOneById.ts +++ /dev/null @@ -1,5 +0,0 @@ -import VeraxSdk from "../../src/VeraxSdk"; - -const veraxSdk = new VeraxSdk(VeraxSdk.DEFAULT_LINEA_TESTNET); - -console.log(await veraxSdk.schema.findOneById("0x01f031da36192c34057c764239eb77bb6ec8ebfb808f72a7bb172f37a5bec31f")); diff --git a/sdk/examples/module/findBy.ts b/sdk/examples/schema/index.ts similarity index 50% rename from sdk/examples/module/findBy.ts rename to sdk/examples/schema/index.ts index a8a51841..9897b4a3 100644 --- a/sdk/examples/module/findBy.ts +++ b/sdk/examples/schema/index.ts @@ -1,5 +1,6 @@ import VeraxSdk from "../../src/VeraxSdk"; +import PortalExamples from "./schemaExamples"; const veraxSdk = new VeraxSdk(VeraxSdk.DEFAULT_LINEA_TESTNET); -console.log(await veraxSdk.module.findBy()); +await new PortalExamples(veraxSdk).run(process.argv[2]); diff --git a/sdk/examples/schema/schemaExamples.ts b/sdk/examples/schema/schemaExamples.ts new file mode 100644 index 00000000..a5b3dd26 --- /dev/null +++ b/sdk/examples/schema/schemaExamples.ts @@ -0,0 +1,19 @@ +import VeraxSdk from "../../src/VeraxSdk"; + +export default class SchemaExamples { + private veraxSdk: VeraxSdk; + constructor(_veraxSdk: VeraxSdk) { + this.veraxSdk = _veraxSdk; + } + async run(methodName: string = "") { + if (methodName.toLowerCase() == "findOneById".toLowerCase() || methodName == "") + console.log( + await this.veraxSdk.schema.findOneById("0x01f031da36192c34057c764239eb77bb6ec8ebfb808f72a7bb172f37a5bec31f"), + ); + + if (methodName.toLowerCase() == "findBy".toLowerCase() || methodName == "") + console.log(await this.veraxSdk.schema.findBy({ name: "Relationship" })); + + if (methodName.toLowerCase() == "create" || methodName == "") console.log(await this.veraxSdk.schema.create()); + } +} diff --git a/sdk/package.json b/sdk/package.json index b10ae31e..e7b130ab 100644 --- a/sdk/package.json +++ b/sdk/package.json @@ -16,6 +16,10 @@ "author": "Consensys", "type": "module", "scripts": { + "attestation": "ts-node examples/attestation/index.ts", + "module": "ts-node examples/module/index.ts", + "portal": "ts-node examples/portal/index.ts", + "schema": "ts-node examples/schema/index.ts", "attestation:all": "ts-node examples/attestation/findBy.ts", "attestation:one": "ts-node examples/attestation/findOneById.ts", "module:all": "ts-node examples/module/findBy.ts", diff --git a/sdk/src/dataMapper/AttestationDataMapper.ts b/sdk/src/dataMapper/AttestationDataMapper.ts index 801b3c37..e7dd56a7 100644 --- a/sdk/src/dataMapper/AttestationDataMapper.ts +++ b/sdk/src/dataMapper/AttestationDataMapper.ts @@ -1,6 +1,7 @@ import BaseDataMapper from "./BaseDataMapper"; +import { Attestation } from "../types"; -export default class AttestationDataMapper extends BaseDataMapper { +export default class AttestationDataMapper extends BaseDataMapper { typeName = "attestation"; gqlInterface = `{ id diff --git a/sdk/src/dataMapper/BaseDataMapper.ts b/sdk/src/dataMapper/BaseDataMapper.ts index cd6855e1..0a3d4aa1 100644 --- a/sdk/src/dataMapper/BaseDataMapper.ts +++ b/sdk/src/dataMapper/BaseDataMapper.ts @@ -1,8 +1,9 @@ import { PublicClient } from "viem"; import { ApolloClient, gql } from "@apollo/client/core"; import { Conf } from "../types"; +import { stringifyWhereClause } from "../utils/apolloClientHelper"; -export default abstract class BaseDataMapper { +export default abstract class BaseDataMapper { protected readonly conf: Conf; protected readonly web3Client: PublicClient; protected readonly apolloClient: ApolloClient; @@ -15,20 +16,20 @@ export default abstract class BaseDataMapper { this.apolloClient = _apolloClient; } - async findOneById(id: string) { - const queryResult = await this.apolloClient.query({ + async findOneById(id: string): Promise { + const queryResult = await this.apolloClient.query({ query: gql(`query GetOne($id: ID!) { ${this.typeName}(id: $id) ${this.gqlInterface} }`), variables: { id }, }); - return JSON.stringify(queryResult.data[this.typeName]); + return queryResult.data; } - async findBy() { - const queryResult = await this.apolloClient.query({ - query: gql(`query GetBy { ${this.typeName}s ${this.gqlInterface} }`), + async findBy(whereClause: Partial) { + const queryResult = await this.apolloClient.query>({ + query: gql(`query GetBy { ${this.typeName}s(where: ${stringifyWhereClause(whereClause)}) ${this.gqlInterface} }`), }); - return JSON.stringify(queryResult.data[`${this.typeName}s`]); + return queryResult.data; } } diff --git a/sdk/src/dataMapper/ModuleDataMapper.ts b/sdk/src/dataMapper/ModuleDataMapper.ts index c51ac698..20504697 100644 --- a/sdk/src/dataMapper/ModuleDataMapper.ts +++ b/sdk/src/dataMapper/ModuleDataMapper.ts @@ -1,6 +1,7 @@ +import { Module } from "../types"; import BaseDataMapper from "./BaseDataMapper"; -export default class ModuleDataMapper extends BaseDataMapper { +export default class ModuleDataMapper extends BaseDataMapper { typeName = "module"; gqlInterface = `{ id @@ -8,4 +9,8 @@ export default class ModuleDataMapper extends BaseDataMapper { name description }`; + + async register() { + throw new Error("Not implemented"); + } } diff --git a/sdk/src/dataMapper/PortalDataMapper.ts b/sdk/src/dataMapper/PortalDataMapper.ts index 9cd54840..d76cd7da 100644 --- a/sdk/src/dataMapper/PortalDataMapper.ts +++ b/sdk/src/dataMapper/PortalDataMapper.ts @@ -1,6 +1,7 @@ +import { Portal } from "../types"; import BaseDataMapper from "./BaseDataMapper"; -export default class PortalDataMapper extends BaseDataMapper { +export default class PortalDataMapper extends BaseDataMapper { typeName = "portal"; gqlInterface = `{ id @@ -11,4 +12,36 @@ export default class PortalDataMapper extends BaseDataMapper { description ownerName }`; + + async attest() { + throw new Error("Not implemented"); + } + + async bulkAttest() { + throw new Error("Not implemented"); + } + + async replace() { + throw new Error("Not implemented"); + } + + async revoke() { + throw new Error("Not implemented"); + } + + async bulkRevoke() { + throw new Error("Not implemented"); + } + + async massImport() { + throw new Error("Not implemented"); + } + + async register() { + throw new Error("Not implemented"); + } + + async clone() { + throw new Error("Not implemented"); + } } diff --git a/sdk/src/dataMapper/SchemaDataMapper.ts b/sdk/src/dataMapper/SchemaDataMapper.ts index 039c854a..76293d21 100644 --- a/sdk/src/dataMapper/SchemaDataMapper.ts +++ b/sdk/src/dataMapper/SchemaDataMapper.ts @@ -1,6 +1,7 @@ +import { Schema } from "../types"; import BaseDataMapper from "./BaseDataMapper"; -export default class SchemaDataMapper extends BaseDataMapper { +export default class SchemaDataMapper extends BaseDataMapper { typeName = "schema"; gqlInterface = `{ id @@ -9,4 +10,8 @@ export default class SchemaDataMapper extends BaseDataMapper { context schema }`; + + async create() { + throw new Error("Not implemented"); + } } diff --git a/sdk/src/dataMapper/UtilsDataMapper.ts b/sdk/src/dataMapper/UtilsDataMapper.ts index 79c7b932..07685e52 100644 --- a/sdk/src/dataMapper/UtilsDataMapper.ts +++ b/sdk/src/dataMapper/UtilsDataMapper.ts @@ -5,7 +5,7 @@ import { abiPortalRegistry } from "../abi/PortalRegistry"; import { abiSchemaRegistry } from "../abi/SchemaRegistry"; import { decode, encode } from "../utils/abiCoder"; -export default class UtilsDataMapper extends BaseDataMapper { +export default class UtilsDataMapper extends BaseDataMapper { typeName = "counter"; gqlInterface = `{ attestations diff --git a/sdk/src/types/index.d.ts b/sdk/src/types/index.d.ts index f1e92836..1de13567 100644 --- a/sdk/src/types/index.d.ts +++ b/sdk/src/types/index.d.ts @@ -1,10 +1,48 @@ -import { Chain } from "viem"; +import { Chain, Address } from "viem"; export interface Conf { chain: Chain; subgraphUrl: string; - portalRegistryAddress: `0x${string}`; - moduleRegistryAddress: `0x${string}`; - schemaRegistryAddress: `0x${string}`; - attestationRegistryAddress: `0x${string}`; + portalRegistryAddress: Address; + moduleRegistryAddress: Address; + schemaRegistryAddress: Address; + attestationRegistryAddress: Address; } + +export type Attestation = { + attestationId: string; // The unique identifier of the attestation. + schemaId: string; // The identifier of the schema this attestation adheres to. + replacedBy: string | null; // Whether the attestation was replaced by a new one. + Address: string; // The address issuing the attestation to the subject. + Address: string; // The id of the portal that created the attestation. + attestedDate: number; // The date the attestation is issued. + expirationDate: number; // The expiration date of the attestation. + revocationDate: number | null; // The date when the attestation was revoked. + version: number; // Version of the registry when the attestation was created. + revoked: boolean; // Whether the attestation is revoked or not. + subject: string; // The ID of the attestee, EVM address, DID, URL etc. + attestationData: string; // The attestation data. +}; + +export type Schema = { + name: string; // The name of the schema. + description: string; // A description of the schema. + context: string; // The context of the schema. + schema: string; // The schema definition. +}; + +export type Portal = { + id: Address; // The unique identifier of the portal (address). + ownerAddress: Address; // The address of the owner of this portal. + modules: Address[]; // Addresses of modules implemented by the portal. + isRevocable: boolean; // Whether attestations issued can be revoked. + name: string; // The name of the portal. + description: string; // A description of the portal. + ownerName: string; // The name of the owner of this portal. +}; + +export type Module = { + moduleAddress: Address; // The address of the module. + name: string; // The name of the module. + description: string; // A description of the module. +}; diff --git a/sdk/src/utils/apolloClientHelper.ts b/sdk/src/utils/apolloClientHelper.ts new file mode 100644 index 00000000..8df5d6bb --- /dev/null +++ b/sdk/src/utils/apolloClientHelper.ts @@ -0,0 +1,4 @@ +export function stringifyWhereClause(whereClauseObj: Record) { + const json = JSON.stringify(whereClauseObj); + return json.replace(/"([^"]+)":/g, "$1:"); +} diff --git a/sdk/test/dataMapper/AttestationDataMapper.test.ts b/sdk/test/dataMapper/AttestationDataMapper.test.ts index f5dc4fc6..00b9895d 100644 --- a/sdk/test/dataMapper/AttestationDataMapper.test.ts +++ b/sdk/test/dataMapper/AttestationDataMapper.test.ts @@ -59,7 +59,7 @@ describe("AttestationDataMapper", () => { const result = await attestationDataMapper.findOneById(attestationId); // Assert - expect(result).toBe('{"result":"success"}'); + expect(result).toMatchObject({ attestation: { result: "success" } }); expect(mockApolloClient.query).toHaveBeenCalledWith({ query: gql(`query GetOne($id: ID!) { ${typeName}(id: $id) ${gqlInterface} }`), variables: { id: attestationId }, From 2a56f53d2a15107fe3b3a39cf7f8605e53cf684e Mon Sep 17 00:00:00 2001 From: Alain Nicolas Date: Tue, 10 Oct 2023 18:02:56 +0200 Subject: [PATCH 24/36] chore: Add a CI pipeline for the SDK (#266) --- .github/workflows/sdk.yml | 61 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 .github/workflows/sdk.yml diff --git a/.github/workflows/sdk.yml b/.github/workflows/sdk.yml new file mode 100644 index 00000000..9e1e1172 --- /dev/null +++ b/.github/workflows/sdk.yml @@ -0,0 +1,61 @@ +name: SDK + +on: + pull_request: + branches: + - main + - dev + - release/* + push: + branches: + - main + - dev + - release/* + +jobs: + test: + runs-on: ubuntu-latest + + defaults: + run: + working-directory: sdk + + steps: + - name: Check out the repo + uses: actions/checkout@v3 + + - name: Install Pnpm + uses: pnpm/action-setup@v2 + with: + version: 8 + run_install: false + + - name: Install Node.js + uses: actions/setup-node@v3 + with: + node-version: 18 + cache: pnpm + + - name: Get pnpm store directory + shell: bash + run: | + echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV + + - uses: actions/cache@v3 + name: Setup pnpm cache + with: + path: ${{ env.STORE_PATH }} + key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} + restore-keys: | + ${{ runner.os }}-pnpm-store- + + - name: Install dependencies + run: pnpm install --frozen-lockfile + + - name: Run the unit tests + run: pnpm run test + + - name: Add test summary + run: | + echo "## Unit tests result" >> $GITHUB_STEP_SUMMARY + echo "✅ Passed" >> $GITHUB_STEP_SUMMARY From c9283aa022ac45cffa539430520e141c13a4157a Mon Sep 17 00:00:00 2001 From: Alain Nicolas Date: Wed, 11 Oct 2023 20:01:29 +0200 Subject: [PATCH 25/36] feat: As user, I want to use the SDK to return all attestations that have a relationship to a specific attestation (#271) --- .../attestation/attestationExamples.ts | 17 +++++++++-- sdk/src/dataMapper/AttestationDataMapper.ts | 8 +++++ sdk/src/dataMapper/BaseDataMapper.ts | 4 +-- sdk/src/types/index.d.ts | 17 ++++++++++- sdk/src/utils/constants.ts | 5 ++++ .../dataMapper/AttestationDataMapper.test.ts | 30 +++++++++++++++++-- 6 files changed, 73 insertions(+), 8 deletions(-) create mode 100644 sdk/src/utils/constants.ts diff --git a/sdk/examples/attestation/attestationExamples.ts b/sdk/examples/attestation/attestationExamples.ts index f2389db2..5b955756 100644 --- a/sdk/examples/attestation/attestationExamples.ts +++ b/sdk/examples/attestation/attestationExamples.ts @@ -2,21 +2,34 @@ import VeraxSdk from "../../src/VeraxSdk"; export default class AttestationExamples { private veraxSdk: VeraxSdk; + constructor(_veraxSdk: VeraxSdk) { this.veraxSdk = _veraxSdk; } + async run(methodName: string = "") { - if (methodName.toLowerCase() == "findOneById".toLowerCase() || methodName == "") + if (methodName.toLowerCase() == "findOneById".toLowerCase() || methodName == "") { console.log( await this.veraxSdk.attestation.findOneById( "0x00000000000000000000000000000000000000000000000000000000000007b5", ), ); - if (methodName.toLowerCase() == "findBy".toLowerCase() || methodName == "") + } + + if (methodName.toLowerCase() == "findBy".toLowerCase() || methodName == "") { console.log( await this.veraxSdk.attestation.findBy({ schemaId: "0xd1664d97bd195df77e3d5fe78c1737ab3adaa38bbe52a680d1aa30fa51f186ba", }), ); + } + + if (methodName.toLowerCase() == "getRelatedAttestations".toLowerCase() || methodName == "") { + console.log( + await this.veraxSdk.attestation.getRelatedAttestations( + "0x0000000000000000000000000000000000000000000000000000000000000001", + ), + ); + } } } diff --git a/sdk/src/dataMapper/AttestationDataMapper.ts b/sdk/src/dataMapper/AttestationDataMapper.ts index e7dd56a7..d4b16d05 100644 --- a/sdk/src/dataMapper/AttestationDataMapper.ts +++ b/sdk/src/dataMapper/AttestationDataMapper.ts @@ -1,5 +1,6 @@ import BaseDataMapper from "./BaseDataMapper"; import { Attestation } from "../types"; +import { Constants } from "../utils/constants"; export default class AttestationDataMapper extends BaseDataMapper { typeName = "attestation"; @@ -19,4 +20,11 @@ export default class AttestationDataMapper extends BaseDataMapper { schemaString decodedData }`; + + async getRelatedAttestations(id: string) { + return this.findBy({ + attestationData_contains: id, + schemaId_in: [Constants.RELATIONSHIP_SCHEMA_ID, Constants.NAMED_GRAPH_RELATIONSHIP_SCHEMA_ID], + }); + } } diff --git a/sdk/src/dataMapper/BaseDataMapper.ts b/sdk/src/dataMapper/BaseDataMapper.ts index 0a3d4aa1..d679612b 100644 --- a/sdk/src/dataMapper/BaseDataMapper.ts +++ b/sdk/src/dataMapper/BaseDataMapper.ts @@ -1,6 +1,6 @@ import { PublicClient } from "viem"; import { ApolloClient, gql } from "@apollo/client/core"; -import { Conf } from "../types"; +import { Conf, FilterMap } from "../types"; import { stringifyWhereClause } from "../utils/apolloClientHelper"; export default abstract class BaseDataMapper { @@ -25,7 +25,7 @@ export default abstract class BaseDataMapper { return queryResult.data; } - async findBy(whereClause: Partial) { + async findBy(whereClause: Partial) { const queryResult = await this.apolloClient.query>({ query: gql(`query GetBy { ${this.typeName}s(where: ${stringifyWhereClause(whereClause)}) ${this.gqlInterface} }`), }); diff --git a/sdk/src/types/index.d.ts b/sdk/src/types/index.d.ts index 1de13567..a2201f0c 100644 --- a/sdk/src/types/index.d.ts +++ b/sdk/src/types/index.d.ts @@ -1,4 +1,4 @@ -import { Chain, Address } from "viem"; +import { Address, Chain } from "viem"; export interface Conf { chain: Chain; @@ -46,3 +46,18 @@ export type Module = { name: string; // The name of the module. description: string; // A description of the module. }; + +export type FilterMap = { + Attestation: FilterAttestation; + Module: FilterModule; + Schema: FilterSchema; + Portal: FilterPortal; +}; + +export type FilterAttestation = Attestation & { schemaId_in: string[]; attestationData_contains: string }; + +export type FilterModule = Module; + +export type FilterSchema = Schema; + +export type FilterPortal = Portal; diff --git a/sdk/src/utils/constants.ts b/sdk/src/utils/constants.ts new file mode 100644 index 00000000..f7ea3773 --- /dev/null +++ b/sdk/src/utils/constants.ts @@ -0,0 +1,5 @@ +export class Constants { + static readonly RELATIONSHIP_SCHEMA_ID = "0x89bd76e17fd84df8e1e448fa1b46dd8d97f7e8e806552b003f8386a5aebcb9f0"; + static readonly NAMED_GRAPH_RELATIONSHIP_SCHEMA_ID = + "0x5003a7832fa2734780a5bf6a1f3940b84c0c66a398e62dd4e7f183fdbc7da6ee"; +} diff --git a/sdk/test/dataMapper/AttestationDataMapper.test.ts b/sdk/test/dataMapper/AttestationDataMapper.test.ts index 00b9895d..602f18c5 100644 --- a/sdk/test/dataMapper/AttestationDataMapper.test.ts +++ b/sdk/test/dataMapper/AttestationDataMapper.test.ts @@ -1,8 +1,9 @@ import AttestationDataMapper from "../../src/dataMapper/AttestationDataMapper"; import VeraxSdk from "../../src/VeraxSdk"; -import { createPublicClient, PublicClient, http } from "viem"; -import { ApolloClient, InMemoryCache, ApolloQueryResult, gql } from "@apollo/client/core"; -//TODO : This is a basic test example. mock data and assertions should be more precise +import { createPublicClient, http, PublicClient } from "viem"; +import { ApolloClient, ApolloQueryResult, gql, InMemoryCache } from "@apollo/client/core"; +import { Constants } from "../../src/utils/constants"; + describe("AttestationDataMapper", () => { let mockApolloClient: ApolloClient; let web3Client: PublicClient; @@ -66,4 +67,27 @@ describe("AttestationDataMapper", () => { }); }); }); + + describe("getRelatedAttestations", () => { + it("should return the expected attestations", async () => { + const attestationId = "0x0000000000000000000000000000000000000000000000000000000000000001"; + // Mock the behavior of the query method + const queryMock = jest.spyOn(mockApolloClient, "query"); + queryMock.mockResolvedValueOnce({ + data: { + attestations: { result: "success" }, + }, + } as ApolloQueryResult); + + const result = await attestationDataMapper.getRelatedAttestations(attestationId); + + // Assert + expect(result).toMatchObject({ attestations: { result: "success" } }); + expect(mockApolloClient.query).toHaveBeenCalledWith({ + query: gql( + `query GetBy { ${typeName}s(where: {attestationData_contains:"${attestationId}",schemaId_in:["${Constants.RELATIONSHIP_SCHEMA_ID}","${Constants.NAMED_GRAPH_RELATIONSHIP_SCHEMA_ID}"]}) ${gqlInterface} }`, + ), + }); + }); + }); }); From d0b3281016f9bed2166d1591e02cd17f45602ee9 Mon Sep 17 00:00:00 2001 From: Alain Nicolas Date: Thu, 12 Oct 2023 11:33:32 +0200 Subject: [PATCH 26/36] feat: As a user, I want to create an attestation using the SDK (#270) --- .github/workflows/sdk.yml | 2 +- pnpm-lock.yaml | 8 +- sdk/.env.example | 1 + sdk/examples/portal/portalExamples.ts | 32 +- sdk/package.json | 17 +- sdk/src/VeraxSdk.ts | 44 +- sdk/src/abi/DefaultPortal.ts | 403 ++++++++++++++++++ sdk/src/dataMapper/BaseDataMapper.ts | 25 +- sdk/src/dataMapper/PortalDataMapper.ts | 45 +- sdk/src/types/index.d.ts | 25 +- sdk/src/utils/constants.ts | 5 + .../dataMapper/AttestationDataMapper.test.ts | 21 +- 12 files changed, 584 insertions(+), 44 deletions(-) create mode 100644 sdk/.env.example create mode 100644 sdk/src/abi/DefaultPortal.ts diff --git a/.github/workflows/sdk.yml b/.github/workflows/sdk.yml index 9e1e1172..784c3d71 100644 --- a/.github/workflows/sdk.yml +++ b/.github/workflows/sdk.yml @@ -53,7 +53,7 @@ jobs: run: pnpm install --frozen-lockfile - name: Run the unit tests - run: pnpm run test + run: pnpm run test:ci - name: Add test summary run: | diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3e500158..09856b34 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -69,6 +69,9 @@ importers: '@apollo/client': specifier: ^3.8.4 version: 3.8.4(graphql@16.8.1) + dotenv: + specifier: ^16.3.1 + version: 16.3.1 graphql: specifier: ^16.8.1 version: 16.8.1 @@ -4187,7 +4190,6 @@ packages: /dotenv@16.3.1: resolution: {integrity: sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==} engines: {node: '>=12'} - dev: true /ecc-jsbn@0.1.2: resolution: {integrity: sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==} @@ -5154,7 +5156,7 @@ packages: dependencies: inflight: 1.0.6 inherits: 2.0.4 - minimatch: 3.1.2 + minimatch: 8.0.4 once: 1.4.0 path-is-absolute: 1.0.1 dev: true @@ -5165,7 +5167,7 @@ packages: fs.realpath: 1.0.0 inflight: 1.0.6 inherits: 2.0.4 - minimatch: 3.1.2 + minimatch: 8.0.4 once: 1.4.0 path-is-absolute: 1.0.1 dev: true diff --git a/sdk/.env.example b/sdk/.env.example new file mode 100644 index 00000000..40104188 --- /dev/null +++ b/sdk/.env.example @@ -0,0 +1 @@ +PRIVATE_KEY=0x0000000000000000000000000000000000000000000000000000000000000001 diff --git a/sdk/examples/portal/portalExamples.ts b/sdk/examples/portal/portalExamples.ts index a0067f39..ec0cc9db 100644 --- a/sdk/examples/portal/portalExamples.ts +++ b/sdk/examples/portal/portalExamples.ts @@ -2,9 +2,11 @@ import VeraxSdk from "../../src/VeraxSdk"; export default class PortalExamples { private veraxSdk: VeraxSdk; + constructor(_veraxSdk: VeraxSdk) { this.veraxSdk = _veraxSdk; } + async run(methodName: string = "") { if (methodName.toLowerCase() == "findOneById".toLowerCase() || methodName == "") console.log(await this.veraxSdk.portal.findOneById("0x1495341ab1019798dd08976f4a3e5ab0e095510b")); @@ -12,7 +14,35 @@ export default class PortalExamples { if (methodName.toLowerCase() == "findBy".toLowerCase() || methodName == "") console.log(await this.veraxSdk.portal.findBy({ ownerName: "Clique" })); - if (methodName.toLowerCase() == "attest" || methodName == "") console.log(await this.veraxSdk.portal.attest()); + if (methodName.toLowerCase() == "simulateAttest".toLowerCase() || methodName == "") { + console.log( + await this.veraxSdk.portal.simulateAttest( + "0xeea25bc2ec56cae601df33b8fc676673285e12cc", + { + schemaId: "0x9ba590dd7fbd5bd1a7d06cdcb4744e20a49b3520560575cd63de17734a408738", + expirationDate: 1693583329, + subject: "0x828c9f04D1a07E3b0aBE12A9F8238a3Ff7E57b47", + attestationData: [{ isBuidler: true }], + }, + [], + ), + ); + } + + if (methodName.toLowerCase() == "attest" || methodName == "") { + console.log( + await this.veraxSdk.portal.attest( + "0xeea25bc2ec56cae601df33b8fc676673285e12cc", + { + schemaId: "0x9ba590dd7fbd5bd1a7d06cdcb4744e20a49b3520560575cd63de17734a408738", + expirationDate: 1693583329, + subject: "0x828c9f04D1a07E3b0aBE12A9F8238a3Ff7E57b47", + attestationData: [{ isBuidler: true }], + }, + [], + ), + ); + } if (methodName.toLowerCase() == "bulkAttest".toLowerCase() || methodName == "") console.log(await this.veraxSdk.portal.bulkAttest()); diff --git a/sdk/package.json b/sdk/package.json index e7b130ab..f450cb54 100644 --- a/sdk/package.json +++ b/sdk/package.json @@ -20,25 +20,12 @@ "module": "ts-node examples/module/index.ts", "portal": "ts-node examples/portal/index.ts", "schema": "ts-node examples/schema/index.ts", - "attestation:all": "ts-node examples/attestation/findBy.ts", - "attestation:one": "ts-node examples/attestation/findOneById.ts", - "module:all": "ts-node examples/module/findBy.ts", - "module:one": "ts-node examples/module/findOneById.ts", - "portal:all": "ts-node examples/portal/findBy.ts", - "portal:one": "ts-node examples/portal/findOneById.ts", - "schema:all": "ts-node examples/schema/findBy.ts", - "schema:one": "ts-node examples/schema/findOneById.ts", "test": "jest", - "utils:attestation:counter": "ts-node examples/utils/getAttestationIdCounter.ts", - "utils:attestation:version": "ts-node examples/utils/getVersionNumber.ts", - "utils:decode": "ts-node examples/utils/decode.ts", - "utils:encode": "ts-node examples/utils/encode.ts", - "utils:module:counter": "ts-node examples/utils/getModulesNumber.ts", - "utils:portal:counter": "ts-node examples/utils/getPortalsCount.ts", - "utils:schema:counter": "ts-node examples/utils/getSchemasNumber.ts" + "test:ci": "cp .env.example .env && jest" }, "dependencies": { "@apollo/client": "^3.8.4", + "dotenv": "^16.3.1", "graphql": "^16.8.1", "viem": "^1.14.0" }, diff --git a/sdk/src/VeraxSdk.ts b/sdk/src/VeraxSdk.ts index c7397ba6..d937bea1 100644 --- a/sdk/src/VeraxSdk.ts +++ b/sdk/src/VeraxSdk.ts @@ -3,14 +3,20 @@ import AttestationDataMapper from "./dataMapper/AttestationDataMapper"; import SchemaDataMapper from "./dataMapper/SchemaDataMapper"; import ModuleDataMapper from "./dataMapper/ModuleDataMapper"; import PortalDataMapper from "./dataMapper/PortalDataMapper"; -import { createPublicClient, http, PublicClient } from "viem"; +import { createPublicClient, createWalletClient, custom, Hex, http, PublicClient, WalletClient } from "viem"; import { ApolloClient, InMemoryCache } from "@apollo/client/core"; -import { Conf } from "./types"; import UtilsDataMapper from "./dataMapper/UtilsDataMapper"; +import { privateKeyToAccount } from "viem/accounts"; +import dotenv from "dotenv"; +import { Conf } from "./types"; +import { SDKMode } from "./utils/constants"; + +dotenv.config({ path: "./.env" }); export default class VeraxSdk { static DEFAULT_LINEA_MAINNET: Conf = { chain: linea, + mode: SDKMode.BACKEND, subgraphUrl: "https://graph-query.linea.build/subgraphs/name/Consensys/linea-attestation-registry", portalRegistryAddress: "0xd5d61e4ECDf6d46A63BfdC262af92544DFc19083", moduleRegistryAddress: "0xf851513A732996F22542226341748f3C9978438f", @@ -18,8 +24,14 @@ export default class VeraxSdk { attestationRegistryAddress: "0x3de3893aa4Cdea029e84e75223a152FD08315138", }; + static DEFAULT_LINEA_MAINNET_FRONTEND: Conf = { + ...VeraxSdk.DEFAULT_LINEA_MAINNET, + mode: SDKMode.BACKEND, + }; + static DEFAULT_LINEA_TESTNET: Conf = { chain: lineaTestnet, + mode: SDKMode.BACKEND, subgraphUrl: "https://graph-query.goerli.linea.build/subgraphs/name/Consensys/linea-attestation-registry", portalRegistryAddress: "0x506f88a5Ca8D5F001f2909b029738A40042e42a6", moduleRegistryAddress: "0x1a20b2CFA134686306436D2c9f778D7eC6c43A43", @@ -27,7 +39,13 @@ export default class VeraxSdk { attestationRegistryAddress: "0xC765F28096F6121C2F2b82D35A4346280164428b", }; + static DEFAULT_LINEA_TESTNET_FRONTEND: Conf = { + ...VeraxSdk.DEFAULT_LINEA_TESTNET, + mode: SDKMode.BACKEND, + }; + private readonly web3Client: PublicClient; + private readonly walletClient: WalletClient; private readonly apolloClient: ApolloClient; public attestation: AttestationDataMapper; @@ -42,15 +60,27 @@ export default class VeraxSdk { transport: http(), }); + this.walletClient = + conf.mode === SDKMode.BACKEND + ? createWalletClient({ + chain: conf.chain, + account: privateKeyToAccount(process.env.PRIVATE_KEY as Hex), + transport: http(), + }) + : createWalletClient({ + chain: conf.chain, + transport: custom(window.ethereum), + }); + this.apolloClient = new ApolloClient({ uri: conf.subgraphUrl, cache: new InMemoryCache(), }); - this.attestation = new AttestationDataMapper(conf, this.web3Client, this.apolloClient); - this.schema = new SchemaDataMapper(conf, this.web3Client, this.apolloClient); - this.module = new ModuleDataMapper(conf, this.web3Client, this.apolloClient); - this.portal = new PortalDataMapper(conf, this.web3Client, this.apolloClient); - this.utils = new UtilsDataMapper(conf, this.web3Client, this.apolloClient); + this.attestation = new AttestationDataMapper(conf, this.web3Client, this.walletClient, this.apolloClient, this); + this.schema = new SchemaDataMapper(conf, this.web3Client, this.walletClient, this.apolloClient, this); + this.module = new ModuleDataMapper(conf, this.web3Client, this.walletClient, this.apolloClient, this); + this.portal = new PortalDataMapper(conf, this.web3Client, this.walletClient, this.apolloClient, this); + this.utils = new UtilsDataMapper(conf, this.web3Client, this.walletClient, this.apolloClient, this); } } diff --git a/sdk/src/abi/DefaultPortal.ts b/sdk/src/abi/DefaultPortal.ts new file mode 100644 index 00000000..04fe0715 --- /dev/null +++ b/sdk/src/abi/DefaultPortal.ts @@ -0,0 +1,403 @@ +export const abiDefaultPortal = [ + { + inputs: [ + { + internalType: "address[]", + name: "modules", + type: "address[]", + }, + { + internalType: "address", + name: "router", + type: "address", + }, + ], + stateMutability: "nonpayable", + type: "constructor", + }, + { + inputs: [], + name: "OnlyPortalOwner", + type: "error", + }, + { + inputs: [], + name: "AlreadyRevoked", + type: "error", + }, + { + inputs: [], + name: "ArrayLengthMismatch", + type: "error", + }, + { + inputs: [], + name: "AttestationDataFieldEmpty", + type: "error", + }, + { + inputs: [], + name: "AttestationNotAttested", + type: "error", + }, + { + inputs: [], + name: "AttestationNotRevocable", + type: "error", + }, + { + inputs: [], + name: "AttestationSubjectFieldEmpty", + type: "error", + }, + { + inputs: [], + name: "OnlyAttestingPortal", + type: "error", + }, + { + inputs: [], + name: "OnlyPortal", + type: "error", + }, + { + inputs: [], + name: "RouterInvalid", + type: "error", + }, + { + inputs: [], + name: "SchemaNotRegistered", + type: "error", + }, + { + inputs: [ + { + components: [ + { + internalType: "bytes32", + name: "schemaId", + type: "bytes32", + }, + { + internalType: "uint64", + name: "expirationDate", + type: "uint64", + }, + { + internalType: "bytes", + name: "subject", + type: "bytes", + }, + { + internalType: "bytes", + name: "attestationData", + type: "bytes", + }, + ], + internalType: "struct AttestationPayload", + name: "attestationPayload", + type: "tuple", + }, + { + internalType: "bytes[]", + name: "validationPayloads", + type: "bytes[]", + }, + ], + name: "attest", + outputs: [], + stateMutability: "payable", + type: "function", + }, + { + inputs: [], + name: "attestationRegistry", + outputs: [ + { + internalType: "contract AttestationRegistry", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + components: [ + { + internalType: "bytes32", + name: "schemaId", + type: "bytes32", + }, + { + internalType: "uint64", + name: "expirationDate", + type: "uint64", + }, + { + internalType: "bytes", + name: "subject", + type: "bytes", + }, + { + internalType: "bytes", + name: "attestationData", + type: "bytes", + }, + ], + internalType: "struct AttestationPayload[]", + name: "attestationsPayloads", + type: "tuple[]", + }, + { + internalType: "bytes[][]", + name: "validationPayloads", + type: "bytes[][]", + }, + ], + name: "bulkAttest", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes32[]", + name: "attestationIds", + type: "bytes32[]", + }, + { + components: [ + { + internalType: "bytes32", + name: "schemaId", + type: "bytes32", + }, + { + internalType: "uint64", + name: "expirationDate", + type: "uint64", + }, + { + internalType: "bytes", + name: "subject", + type: "bytes", + }, + { + internalType: "bytes", + name: "attestationData", + type: "bytes", + }, + ], + internalType: "struct AttestationPayload[]", + name: "attestationsPayloads", + type: "tuple[]", + }, + { + internalType: "bytes[][]", + name: "validationPayloads", + type: "bytes[][]", + }, + ], + name: "bulkReplace", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes32[]", + name: "attestationIds", + type: "bytes32[]", + }, + ], + name: "bulkRevoke", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "getAttester", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "getModules", + outputs: [ + { + internalType: "address[]", + name: "", + type: "address[]", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "moduleRegistry", + outputs: [ + { + internalType: "contract ModuleRegistry", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + name: "modules", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "portalRegistry", + outputs: [ + { + internalType: "contract PortalRegistry", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes32", + name: "attestationId", + type: "bytes32", + }, + { + components: [ + { + internalType: "bytes32", + name: "schemaId", + type: "bytes32", + }, + { + internalType: "uint64", + name: "expirationDate", + type: "uint64", + }, + { + internalType: "bytes", + name: "subject", + type: "bytes", + }, + { + internalType: "bytes", + name: "attestationData", + type: "bytes", + }, + ], + internalType: "struct AttestationPayload", + name: "attestationPayload", + type: "tuple", + }, + { + internalType: "bytes[]", + name: "validationPayloads", + type: "bytes[]", + }, + ], + name: "replace", + outputs: [], + stateMutability: "payable", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes32", + name: "attestationId", + type: "bytes32", + }, + ], + name: "revoke", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "router", + outputs: [ + { + internalType: "contract IRouter", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes4", + name: "interfaceID", + type: "bytes4", + }, + ], + name: "supportsInterface", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "pure", + type: "function", + }, + { + inputs: [ + { + internalType: "address payable", + name: "to", + type: "address", + }, + { + internalType: "uint256", + name: "amount", + type: "uint256", + }, + ], + name: "withdraw", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, +]; diff --git a/sdk/src/dataMapper/BaseDataMapper.ts b/sdk/src/dataMapper/BaseDataMapper.ts index d679612b..d708b6f7 100644 --- a/sdk/src/dataMapper/BaseDataMapper.ts +++ b/sdk/src/dataMapper/BaseDataMapper.ts @@ -1,35 +1,46 @@ -import { PublicClient } from "viem"; +import { PublicClient, WalletClient } from "viem"; import { ApolloClient, gql } from "@apollo/client/core"; -import { Conf, FilterMap } from "../types"; +import { Conf, FilterMap, QueryResult } from "../types"; import { stringifyWhereClause } from "../utils/apolloClientHelper"; +import VeraxSdk from "../VeraxSdk"; export default abstract class BaseDataMapper { protected readonly conf: Conf; protected readonly web3Client: PublicClient; + protected readonly walletClient: WalletClient; protected readonly apolloClient: ApolloClient; + protected readonly veraxSdk: VeraxSdk; protected abstract typeName: string; protected abstract gqlInterface: string; - constructor(_conf: Conf, _web3Client: PublicClient, _apolloClient: ApolloClient) { + constructor( + _conf: Conf, + _web3Client: PublicClient, + _walletClient: WalletClient, + _apolloClient: ApolloClient, + _veraxSdk: VeraxSdk, + ) { this.conf = _conf; this.web3Client = _web3Client; + this.walletClient = _walletClient; this.apolloClient = _apolloClient; + this.veraxSdk = _veraxSdk; } async findOneById(id: string): Promise { - const queryResult = await this.apolloClient.query({ + const queryResult = await this.apolloClient.query>({ query: gql(`query GetOne($id: ID!) { ${this.typeName}(id: $id) ${this.gqlInterface} }`), variables: { id }, }); - return queryResult.data; + return queryResult.data[this.typeName]; } async findBy(whereClause: Partial) { - const queryResult = await this.apolloClient.query>({ + const queryResult = await this.apolloClient.query, typeof this.typeName>>({ query: gql(`query GetBy { ${this.typeName}s(where: ${stringifyWhereClause(whereClause)}) ${this.gqlInterface} }`), }); - return queryResult.data; + return queryResult.data[`${this.typeName}s`]; } } diff --git a/sdk/src/dataMapper/PortalDataMapper.ts b/sdk/src/dataMapper/PortalDataMapper.ts index d76cd7da..998f907e 100644 --- a/sdk/src/dataMapper/PortalDataMapper.ts +++ b/sdk/src/dataMapper/PortalDataMapper.ts @@ -1,5 +1,8 @@ -import { Portal } from "../types"; +import { AttestationPayload, Portal } from "../types"; import BaseDataMapper from "./BaseDataMapper"; +import { abiDefaultPortal } from "../abi/DefaultPortal"; +import { Address, BaseError, ContractFunctionRevertedError, Hash } from "viem"; +import { encode } from "../utils/abiCoder"; export default class PortalDataMapper extends BaseDataMapper { typeName = "portal"; @@ -13,8 +16,44 @@ export default class PortalDataMapper extends BaseDataMapper { ownerName }`; - async attest() { - throw new Error("Not implemented"); + async simulateAttest(portalAddress: Address, attestationPayload: AttestationPayload, validationPayloads: string[]) { + const matchingSchema = await this.veraxSdk.schema.findOneById(attestationPayload.schemaId); + const attestationData = encode(matchingSchema.schema, attestationPayload.attestationData); + + try { + const { request } = await this.web3Client.simulateContract({ + address: portalAddress, + abi: abiDefaultPortal, + functionName: "attest", + account: this.walletClient.account, + args: [ + [attestationPayload.schemaId, attestationPayload.expirationDate, attestationPayload.subject, attestationData], + validationPayloads, + ], + }); + + return request; + } catch (err) { + if (err instanceof BaseError) { + const revertError = err.walk((err) => err instanceof ContractFunctionRevertedError); + if (revertError instanceof ContractFunctionRevertedError) { + const errorName = revertError.data?.errorName ?? ""; + console.error(`Failing with ${errorName}`); + } + } + console.error(err); + + throw new Error("Simulation failed"); + } + } + + async attest(portalAddress: Address, attestationPayload: AttestationPayload, validationPayloads: string[]) { + const request = await this.simulateAttest(portalAddress, attestationPayload, validationPayloads); + const hash: Hash = await this.walletClient.writeContract(request); + + console.log(`Transaction sent with hash ${hash}`); + + return hash; } async bulkAttest() { diff --git a/sdk/src/types/index.d.ts b/sdk/src/types/index.d.ts index a2201f0c..a39652b4 100644 --- a/sdk/src/types/index.d.ts +++ b/sdk/src/types/index.d.ts @@ -1,7 +1,8 @@ -import { Address, Chain } from "viem"; +import { Address, Chain, EthereumProvider } from "viem"; export interface Conf { chain: Chain; + mode: SDKMode; subgraphUrl: string; portalRegistryAddress: Address; moduleRegistryAddress: Address; @@ -9,12 +10,19 @@ export interface Conf { attestationRegistryAddress: Address; } +export type AttestationPayload = { + schemaId: string; // The identifier of the schema this attestation adheres to. + expirationDate: number; // The expiration date of the attestation. + subject: string; // The ID of the attestee, EVM address, DID, URL etc. + attestationData: object[]; // The attestation data. +}; + export type Attestation = { attestationId: string; // The unique identifier of the attestation. schemaId: string; // The identifier of the schema this attestation adheres to. replacedBy: string | null; // Whether the attestation was replaced by a new one. - Address: string; // The address issuing the attestation to the subject. - Address: string; // The id of the portal that created the attestation. + attester: Address; // The address issuing the attestation to the subject. + portal: Address; // The id of the portal that created the attestation. attestedDate: number; // The date the attestation is issued. expirationDate: number; // The expiration date of the attestation. revocationDate: number | null; // The date when the attestation was revoked. @@ -25,6 +33,7 @@ export type Attestation = { }; export type Schema = { + id: string; // The ID of the schema. name: string; // The name of the schema. description: string; // A description of the schema. context: string; // The context of the schema. @@ -61,3 +70,13 @@ export type FilterModule = Module; export type FilterSchema = Schema; export type FilterPortal = Portal; + +export type QueryResult = { + [P in K]: T; +}; + +declare global { + interface Window { + ethereum: EthereumProvider; + } +} diff --git a/sdk/src/utils/constants.ts b/sdk/src/utils/constants.ts index f7ea3773..925834bb 100644 --- a/sdk/src/utils/constants.ts +++ b/sdk/src/utils/constants.ts @@ -3,3 +3,8 @@ export class Constants { static readonly NAMED_GRAPH_RELATIONSHIP_SCHEMA_ID = "0x5003a7832fa2734780a5bf6a1f3940b84c0c66a398e62dd4e7f183fdbc7da6ee"; } + +export enum SDKMode { + BACKEND = "BACKEND", + FRONTEND = "FRONTEND", +} diff --git a/sdk/test/dataMapper/AttestationDataMapper.test.ts b/sdk/test/dataMapper/AttestationDataMapper.test.ts index 602f18c5..0ed5ac8b 100644 --- a/sdk/test/dataMapper/AttestationDataMapper.test.ts +++ b/sdk/test/dataMapper/AttestationDataMapper.test.ts @@ -1,12 +1,13 @@ import AttestationDataMapper from "../../src/dataMapper/AttestationDataMapper"; import VeraxSdk from "../../src/VeraxSdk"; -import { createPublicClient, http, PublicClient } from "viem"; +import { createPublicClient, createWalletClient, http, PublicClient, WalletClient } from "viem"; import { ApolloClient, ApolloQueryResult, gql, InMemoryCache } from "@apollo/client/core"; import { Constants } from "../../src/utils/constants"; describe("AttestationDataMapper", () => { let mockApolloClient: ApolloClient; let web3Client: PublicClient; + let walletClient: WalletClient; let attestationDataMapper: AttestationDataMapper; const typeName: string = "attestation"; const gqlInterface: string = `{ @@ -33,12 +34,24 @@ describe("AttestationDataMapper", () => { transport: http(), }); + // Create walletClient + walletClient = createWalletClient({ + chain: VeraxSdk.DEFAULT_LINEA_TESTNET.chain, + transport: http(), + }); + // Create a mock Apollo Client with an in-memory cache mockApolloClient = new ApolloClient({ cache: new InMemoryCache(), }); - attestationDataMapper = new AttestationDataMapper(VeraxSdk.DEFAULT_LINEA_TESTNET, web3Client, mockApolloClient); + attestationDataMapper = new AttestationDataMapper( + VeraxSdk.DEFAULT_LINEA_TESTNET, + web3Client, + walletClient, + mockApolloClient, + new VeraxSdk(VeraxSdk.DEFAULT_LINEA_TESTNET), + ); }); afterEach(() => { @@ -60,7 +73,7 @@ describe("AttestationDataMapper", () => { const result = await attestationDataMapper.findOneById(attestationId); // Assert - expect(result).toMatchObject({ attestation: { result: "success" } }); + expect(result).toMatchObject({ result: "success" }); expect(mockApolloClient.query).toHaveBeenCalledWith({ query: gql(`query GetOne($id: ID!) { ${typeName}(id: $id) ${gqlInterface} }`), variables: { id: attestationId }, @@ -82,7 +95,7 @@ describe("AttestationDataMapper", () => { const result = await attestationDataMapper.getRelatedAttestations(attestationId); // Assert - expect(result).toMatchObject({ attestations: { result: "success" } }); + expect(result).toMatchObject({ result: "success" }); expect(mockApolloClient.query).toHaveBeenCalledWith({ query: gql( `query GetBy { ${typeName}s(where: {attestationData_contains:"${attestationId}",schemaId_in:["${Constants.RELATIONSHIP_SCHEMA_ID}","${Constants.NAMED_GRAPH_RELATIONSHIP_SCHEMA_ID}"]}) ${gqlInterface} }`, From f0696e11acb32582f909bc8879489d7c030c3047 Mon Sep 17 00:00:00 2001 From: ollie <67156692+0xEillo@users.noreply.github.com> Date: Thu, 12 Oct 2023 19:07:21 +0200 Subject: [PATCH 27/36] chore: Add Scroll testnet config (#276) --- contracts/.env.example | 1 + contracts/hardhat.config.ts | 19 ++++++++++++++++--- contracts/package.json | 11 ++++++++++- 3 files changed, 27 insertions(+), 4 deletions(-) diff --git a/contracts/.env.example b/contracts/.env.example index 00a955e2..73423189 100644 --- a/contracts/.env.example +++ b/contracts/.env.example @@ -2,6 +2,7 @@ INFURA_KEY= PRIVATE_KEY=0000000000000000000000000000000000000000000000000000000000000001 ETHERSCAN_API_KEY= +SCROLL_API_KEY= # Verax Testnet Config ROUTER_ADDRESS=0x736c78b2f2cBf4F921E8551b2acB6A5Edc9177D5 diff --git a/contracts/hardhat.config.ts b/contracts/hardhat.config.ts index 8cccc30c..23c1bedf 100644 --- a/contracts/hardhat.config.ts +++ b/contracts/hardhat.config.ts @@ -22,15 +22,19 @@ const config: HardhatUserConfig = { hardhat: {}, "linea-goerli": { url: `https://linea-goerli.infura.io/v3/${process.env.INFURA_KEY ?? ""}`, - accounts: [process.env.PRIVATE_KEY ?? "0000000000000000000000000000000000000000000000000000000000000000"], + accounts: process.env.PRIVATE_KEY !== undefined ? [process.env.PRIVATE_KEY] : [], }, linea: { url: `https://linea-mainnet.infura.io/v3/${process.env.INFURA_KEY ?? ""}`, - accounts: [process.env.PRIVATE_KEY ?? "0000000000000000000000000000000000000000000000000000000000000000"], + accounts: process.env.PRIVATE_KEY !== undefined ? [process.env.PRIVATE_KEY] : [], }, sepolia: { url: `https://sepolia.infura.io/v3/${process.env.INFURA_KEY ?? ""}`, - accounts: [process.env.PRIVATE_KEY ?? "0000000000000000000000000000000000000000000000000000000000000000"], + accounts: process.env.PRIVATE_KEY !== undefined ? [process.env.PRIVATE_KEY] : [], + }, + "scroll-sepolia": { + url: "https://sepolia-rpc.scroll.io/" || "", + accounts: process.env.PRIVATE_KEY !== undefined ? [process.env.PRIVATE_KEY] : [], }, }, paths: { @@ -41,6 +45,7 @@ const config: HardhatUserConfig = { "linea-goerli": process.env.ETHERSCAN_API_KEY ?? "", linea: process.env.ETHERSCAN_API_KEY ?? "", sepolia: process.env.ETHERSCAN_API_KEY ?? "", + "scroll-sepolia": process.env.SCROLL_API_KEY ?? "", }, customChains: [ { @@ -59,6 +64,14 @@ const config: HardhatUserConfig = { browserURL: "https://lineascan.build", }, }, + { + network: "scroll-sepolia", + chainId: 534351, + urls: { + apiURL: "https://sepolia-blockscout.scroll.io/api", + browserURL: "https://sepolia-blockscout.scroll.io/", + }, + }, ], }, }; diff --git a/contracts/package.json b/contracts/package.json index 92104b4b..424c193e 100644 --- a/contracts/package.json +++ b/contracts/package.json @@ -23,27 +23,36 @@ "check:upgradeability:ci": "cp .env.example .env && pnpm run check:upgradeability", "check:upgradeable": "npx hardhat run --network linea script/upgrade/checkUpgradeable.ts", "check:upgradeable:goerli": "npx hardhat run --network linea-goerli script/upgrade/checkUpgradeable.ts", + "check:upgradeable:scroll-sepolia": "npx hardhat run --network scroll-sepolia script/upgrade/checkUpgradeable.ts", "clean": "rm -rf lcov.info coverage artifacts cache_hardhat cache out typechain-types", "decode": "npx hardhat run script/decode.ts", "deploy:CorrectModule": "npx hardhat run --network linea script/deploy/deployCorrectModule.ts", "deploy:CorrectModule:goerli": "npx hardhat run --network linea-goerli script/deploy/deployCorrectModule.ts", + "deploy:CorrectModule:scroll-sepolia": "npx hardhat run --network scroll-sepolia script/deploy/deployCorrectModule.ts", "deploy:IncorrectModule": "npx hardhat run --network linea script/deploy/deployIncorrectModule.ts", "deploy:IncorrectModule:goerli": "npx hardhat run --network linea-goerli script/deploy/deployIncorrectModule.ts", + "deploy:IncorrectModule:scroll-sepolia": "npx hardhat run --network scroll-sepolia script/deploy/deployIncorrectModule.ts", "deploy:MsgSenderModule": "npx hardhat run --network linea script/deploy/deployMsgSenderModule.ts", "deploy:MsgSenderModule:goerli": "npx hardhat run --network linea-goerli script/deploy/deployMsgSenderModule.ts", + "deploy:MsgSenderModule:scroll-sepolia": "npx hardhat run --network scroll-sepolia script/deploy/deployMsgSenderModule.ts", "deploy:all": "npx hardhat run --network linea script/deploy/deployEverything.ts", "deploy:all:goerli": "npx hardhat run --network linea-goerli script/deploy/deployEverything.ts", + "deploy:all:scroll-sepolia": "npx hardhat run --network scroll-sepolia script/deploy/deployEverything.ts", "deploy:post": "npx hardhat run --network linea script/deploy/postDeployment.ts", "deploy:post:goerli": "npx hardhat run --network linea-goerli script/deploy/postDeployment.ts", + "deploy:post:scroll-sepolia": "npx hardhat run --network scroll-sepolia script/deploy/postDeployment.ts", "encode": "npx hardhat run script/encode.ts", "lint": "pnpm solhint \"{script,src,test}/**/*.sol\"", "reimport": "npx hardhat run --network linea script/recreateNetworkFile.ts", "reimport:goerli": "npx hardhat run --network linea-goerli script/recreateNetworkFile.ts", + "reimport:scroll-sepolia": "npx hardhat run --network scroll-sepolia script/recreateNetworkFile.ts", "test": "forge test", "upgrade:all": "npx hardhat run --network linea script/upgrade/upgradeEverything.ts", "upgrade:all:force": "npx hardhat run --network linea script/upgrade/forceUpgradeEverything.ts", "upgrade:all:goerli": "npx hardhat run --network linea-goerli script/upgrade/upgradeEverything.ts", - "upgrade:all:goerli:force": "npx hardhat run --network linea-goerli script/upgrade/forceUpgradeEverything.ts" + "upgrade:all:goerli:force": "npx hardhat run --network linea-goerli script/upgrade/forceUpgradeEverything.ts", + "upgrade:all:scroll-sepolia": "npx hardhat run --network scroll-sepolia script/upgrade/upgradeEverything.ts", + "upgrade:all:goerli:scroll-sepolia": "npx hardhat run --network scroll-sepolia script/upgrade/forceUpgradeEverything.ts" }, "devDependencies": { "@nomicfoundation/hardhat-ethers": "^3.0.4", From 37a8b4577ffd6562997feea80b91868dae2f8d52 Mon Sep 17 00:00:00 2001 From: Satyajeet Kolhapure <77279246+satyajeetkolhapure@users.noreply.github.com> Date: Thu, 12 Oct 2023 18:14:03 +0100 Subject: [PATCH 28/36] feat: added revoke and simulateRevoke (#274) Co-authored-by: Satyajeet Kolhapure --- sdk/examples/portal/portalExamples.ts | 18 +++++++++- sdk/src/dataMapper/BaseDataMapper.ts | 2 +- sdk/src/dataMapper/PortalDataMapper.ts | 49 +++++++++++++++++++------- 3 files changed, 55 insertions(+), 14 deletions(-) diff --git a/sdk/examples/portal/portalExamples.ts b/sdk/examples/portal/portalExamples.ts index ec0cc9db..7e39e266 100644 --- a/sdk/examples/portal/portalExamples.ts +++ b/sdk/examples/portal/portalExamples.ts @@ -49,7 +49,23 @@ export default class PortalExamples { if (methodName.toLowerCase() == "replace" || methodName == "") console.log(await this.veraxSdk.portal.replace()); - if (methodName.toLowerCase() == "revoke" || methodName == "") console.log(await this.veraxSdk.portal.revoke()); + if (methodName.toLowerCase() == "revoke" || methodName == "") { + console.log( + await this.veraxSdk.portal.revoke( + "0xeea25bc2ec56cae601df33b8fc676673285e12cc", + "0x0000000000000000000000000000000000000000000000000000000000000001", + ), + ); + } + + if (methodName.toLowerCase() == "simulateRevoke".toLowerCase() || methodName == "") { + console.log( + await this.veraxSdk.portal.simulateRevoke( + "0xeea25bc2ec56cae601df33b8fc676673285e12cc", + "0x0000000000000000000000000000000000000000000000000000000000000001", + ), + ); + } if (methodName.toLowerCase() == "bulkRevoke".toLowerCase() || methodName == "") console.log(await this.veraxSdk.portal.bulkRevoke()); diff --git a/sdk/src/dataMapper/BaseDataMapper.ts b/sdk/src/dataMapper/BaseDataMapper.ts index d708b6f7..0a14a2f2 100644 --- a/sdk/src/dataMapper/BaseDataMapper.ts +++ b/sdk/src/dataMapper/BaseDataMapper.ts @@ -36,7 +36,7 @@ export default abstract class BaseDataMapper { return queryResult.data[this.typeName]; } - async findBy(whereClause: Partial) { + async findBy(whereClause: Partial) { const queryResult = await this.apolloClient.query, typeof this.typeName>>({ query: gql(`query GetBy { ${this.typeName}s(where: ${stringifyWhereClause(whereClause)}) ${this.gqlInterface} }`), }); diff --git a/sdk/src/dataMapper/PortalDataMapper.ts b/sdk/src/dataMapper/PortalDataMapper.ts index 998f907e..c5cb808c 100644 --- a/sdk/src/dataMapper/PortalDataMapper.ts +++ b/sdk/src/dataMapper/PortalDataMapper.ts @@ -34,16 +34,7 @@ export default class PortalDataMapper extends BaseDataMapper { return request; } catch (err) { - if (err instanceof BaseError) { - const revertError = err.walk((err) => err instanceof ContractFunctionRevertedError); - if (revertError instanceof ContractFunctionRevertedError) { - const errorName = revertError.data?.errorName ?? ""; - console.error(`Failing with ${errorName}`); - } - } - console.error(err); - - throw new Error("Simulation failed"); + this.handleError(err); } } @@ -64,8 +55,29 @@ export default class PortalDataMapper extends BaseDataMapper { throw new Error("Not implemented"); } - async revoke() { - throw new Error("Not implemented"); + async simulateRevoke(portalAddress: Address, attestationId: string) { + try { + const { request } = await this.web3Client.simulateContract({ + address: portalAddress, + abi: abiDefaultPortal, + functionName: "revoke", + account: this.walletClient.account, + args: [attestationId], + }); + + return request; + } catch (err) { + this.handleError(err); + } + } + + async revoke(portalAddress: Address, attestationId: string) { + const request = await this.simulateRevoke(portalAddress, attestationId); + const hash: Hash = await this.walletClient.writeContract(request); + + console.log(`Transaction sent with hash ${hash}`); + + return hash; } async bulkRevoke() { @@ -83,4 +95,17 @@ export default class PortalDataMapper extends BaseDataMapper { async clone() { throw new Error("Not implemented"); } + + private handleError(err: unknown): never { + if (err instanceof BaseError) { + const revertError = err.walk((err) => err instanceof ContractFunctionRevertedError); + if (revertError instanceof ContractFunctionRevertedError) { + const errorName = revertError.data?.errorName ?? ""; + console.error(`Failing with ${errorName}`); + } + } + console.error(err); + + throw new Error("Simulation failed"); + } } From 0964794643c8e3db23690551e0750cc2d73d9993 Mon Sep 17 00:00:00 2001 From: Satyajeet Kolhapure <77279246+satyajeetkolhapure@users.noreply.github.com> Date: Fri, 13 Oct 2023 15:56:39 +0100 Subject: [PATCH 29/36] feat: As a user, I want to batch create and batch revoke attestations with the SDK (#280) Co-authored-by: Satyajeet Kolhapure Co-authored-by: Alain Nicolas --- sdk/examples/portal/portalExamples.ts | 62 +++++++++++++++++++++-- sdk/src/dataMapper/PortalDataMapper.ts | 68 ++++++++++++++++++++++++-- 2 files changed, 123 insertions(+), 7 deletions(-) diff --git a/sdk/examples/portal/portalExamples.ts b/sdk/examples/portal/portalExamples.ts index 7e39e266..c5d2bfff 100644 --- a/sdk/examples/portal/portalExamples.ts +++ b/sdk/examples/portal/portalExamples.ts @@ -44,8 +44,51 @@ export default class PortalExamples { ); } - if (methodName.toLowerCase() == "bulkAttest".toLowerCase() || methodName == "") - console.log(await this.veraxSdk.portal.bulkAttest()); + if (methodName.toLowerCase() == "simulateBulkAttest".toLowerCase() || methodName == "") { + console.log( + await this.veraxSdk.portal.simulateBulkAttest( + "0x34798a866f52949208e67fb57ad36244024c50c0", + [ + { + schemaId: "0x9ba590dd7fbd5bd1a7d06cdcb4744e20a49b3520560575cd63de17734a408738", + expirationDate: 1693583329, + subject: "0x828c9f04D1a07E3b0aBE12A9F8238a3Ff7E57b47", + attestationData: [{ isBuidler: true }], + }, + { + schemaId: "0x9ba590dd7fbd5bd1a7d06cdcb4744e20a49b3520560575cd63de17734a408738", + expirationDate: 1693583329, + subject: "0x828c9f04D1a07E3b0aBE12A9F8238a3Ff7E57b47", + attestationData: [{ isBuidler: true }], + }, + ], + [], + ), + ); + } + + if (methodName.toLowerCase() == "bulkAttest".toLowerCase() || methodName == "") { + console.log( + await this.veraxSdk.portal.bulkAttest( + "0x34798a866f52949208e67fb57ad36244024c50c0", + [ + { + schemaId: "0x9ba590dd7fbd5bd1a7d06cdcb4744e20a49b3520560575cd63de17734a408738", + expirationDate: 1693583329, + subject: "0x828c9f04D1a07E3b0aBE12A9F8238a3Ff7E57b47", + attestationData: [{ isBuidler: true }], + }, + { + schemaId: "0x9ba590dd7fbd5bd1a7d06cdcb4744e20a49b3520560575cd63de17734a408738", + expirationDate: 1693583329, + subject: "0x828c9f04D1a07E3b0aBE12A9F8238a3Ff7E57b47", + attestationData: [{ isBuidler: false }], + }, + ], + [[], []], + ), + ); + } if (methodName.toLowerCase() == "replace" || methodName == "") console.log(await this.veraxSdk.portal.replace()); @@ -67,8 +110,21 @@ export default class PortalExamples { ); } + if (methodName.toLowerCase() == "simulateBulkRevoke".toLowerCase() || methodName == "") + console.log( + await this.veraxSdk.portal.simulateBulkRevoke("0x34798a866f52949208e67fb57ad36244024c50c0", [ + "0x00000000000000000000000000000000000000000000000000000000000010a0", + "0x00000000000000000000000000000000000000000000000000000000000010a1", + ]), + ); + if (methodName.toLowerCase() == "bulkRevoke".toLowerCase() || methodName == "") - console.log(await this.veraxSdk.portal.bulkRevoke()); + console.log( + await this.veraxSdk.portal.bulkRevoke("0x34798a866f52949208e67fb57ad36244024c50c0", [ + "0x00000000000000000000000000000000000000000000000000000000000010a0", + "0x00000000000000000000000000000000000000000000000000000000000010a1", + ]), + ); if (methodName.toLowerCase() == "massImport".toLowerCase() || methodName == "") console.log(await this.veraxSdk.portal.massImport()); diff --git a/sdk/src/dataMapper/PortalDataMapper.ts b/sdk/src/dataMapper/PortalDataMapper.ts index c5cb808c..dbe6d907 100644 --- a/sdk/src/dataMapper/PortalDataMapper.ts +++ b/sdk/src/dataMapper/PortalDataMapper.ts @@ -47,8 +47,47 @@ export default class PortalDataMapper extends BaseDataMapper { return hash; } - async bulkAttest() { - throw new Error("Not implemented"); + async simulateBulkAttest( + portalAddress: Address, + attestationPayloads: AttestationPayload[], + validationPayloads: string[][], + ) { + const attestationPayloadsArg = []; + + for (const attestationPayload of attestationPayloads) { + const matchingSchema = await this.veraxSdk.schema.findOneById(attestationPayload.schemaId); + const attestationData = encode(matchingSchema.schema, attestationPayload.attestationData); + + attestationPayloadsArg.push([ + attestationPayload.schemaId, + attestationPayload.expirationDate, + attestationPayload.subject, + attestationData, + ]); + } + + try { + const { request } = await this.web3Client.simulateContract({ + address: portalAddress, + abi: abiDefaultPortal, + functionName: "bulkAttest", + account: this.walletClient.account, + args: [attestationPayloadsArg, validationPayloads], + }); + + return request; + } catch (err) { + this.handleError(err); + } + } + + async bulkAttest(portalAddress: Address, attestationPayloads: AttestationPayload[], validationPayloads: string[][]) { + const request = await this.simulateBulkAttest(portalAddress, attestationPayloads, validationPayloads); + const hash: Hash = await this.walletClient.writeContract(request); + + console.log(`Transaction sent with hash ${hash}`); + + return hash; } async replace() { @@ -80,8 +119,29 @@ export default class PortalDataMapper extends BaseDataMapper { return hash; } - async bulkRevoke() { - throw new Error("Not implemented"); + async simulateBulkRevoke(portalAddress: Address, attestationIds: string[]) { + try { + const { request } = await this.web3Client.simulateContract({ + address: portalAddress, + abi: abiDefaultPortal, + functionName: "bulkRevoke", + account: this.walletClient.account, + args: [attestationIds], + }); + + return request; + } catch (err) { + this.handleError(err); + } + } + + async bulkRevoke(portalAddress: Address, attestationIds: string[]) { + const request = await this.simulateBulkRevoke(portalAddress, attestationIds); + const hash: Hash = await this.walletClient.writeContract(request); + + console.log(`Transaction sent with hash ${hash}`); + + return hash; } async massImport() { From 346a9815f1e759581562dc8590cf7505b0ba83d8 Mon Sep 17 00:00:00 2001 From: Satyajeet Kolhapure <77279246+satyajeetkolhapure@users.noreply.github.com> Date: Fri, 13 Oct 2023 16:08:45 +0100 Subject: [PATCH 30/36] chore: accepting the param values for examples (#279) Co-authored-by: Satyajeet Kolhapure --- sdk/README.md | 48 ++++++++++ .../attestation/attestationExamples.ts | 29 +++--- sdk/examples/attestation/index.ts | 5 +- sdk/examples/module/index.ts | 5 +- sdk/examples/module/moduleExamples.ts | 15 ++- sdk/examples/portal/index.ts | 5 +- sdk/examples/portal/portalExamples.ts | 94 +++++++++++-------- sdk/examples/schema/index.ts | 5 +- sdk/examples/schema/schemaExamples.ts | 18 ++-- 9 files changed, 151 insertions(+), 73 deletions(-) diff --git a/sdk/README.md b/sdk/README.md index d85c3b66..fe7c8571 100644 --- a/sdk/README.md +++ b/sdk/README.md @@ -169,6 +169,54 @@ console.log(result); // ``` +## CLI examples + +You can use command lines to test all the implemented SDK methods. Here are some examples. + +Note: if your don't pass any parameter (e.g. `pnpm portal findBy`)`, some default values will be used. + +### Portal examples + +```shell +pnpm portal findby '{\"ownerName\": \"Tester\"}' + +pnpm portal findonebyid '0x34798a866f52949208e67fb57ad36244024c50c0' + +pnpm portal simulateattest '{\"portalAddress\": \"0x34798a866f52949208e67fb57ad36244024c50c0\", \"attestationPayload\" : { \"schemaId\": \"0x9ba590dd7fbd5bd1a7d06cdcb4744e20a49b3520560575cd63de17734a408738\", \"expirationDate\": \"1693583329\", \"subject\": \"0x828c9f04D1a07E3b0aBE12A9F8238a3Ff7E57b47\", \"attestationData\": [{ \"isBuidler\": \"true\" }]}, \"validationPayloads\": []}' + +pnpm portal attest '{\"portalAddress\": \"0x34798a866f52949208e67fb57ad36244024c50c0\", \"attestationPayload\" : { \"schemaId\": \"0x9ba590dd7fbd5bd1a7d06cdcb4744e20a49b3520560575cd63de17734a408738\", \"expirationDate\": \"1693583329\", \"subject\": \"0x828c9f04D1a07E3b0aBE12A9F8238a3Ff7E57b47\", \"attestationData\": [{ \"isBuidler\": \"true\" }]}, \"validationPayloads\": []}' + +pnpm portal simulaterevoke '{\"portalAddress\": \"0x34798a866f52949208e67fb57ad36244024c50c0\", \"attestationId\" : \"0x000000000000000000000000000000000000000000000000000000000000109b\" }' + +pnpm portal revoke '{\"portalAddress\": \"0x34798a866f52949208e67fb57ad36244024c50c0\", \"attestationId\" : \"0x000000000000000000000000000000000000000000000000000000000000109b\" }' +``` + +### Attestation examples + +```shell +pnpm attestation findonebyid "0x000000000000000000000000000000000000000000000000000000000000109b" + +pnpm attestation findby '{\"portal\": \"0x34798a866f52949208e67fb57ad36244024c50c0\"}' + +pnpm attestation getRelatedAttestations "0x000000000000000000000000000000000000000000000000000000000000109b" +``` + +### Module examples + +```shell +pnpm module findonebyid "0x4bb8769e18f1518c35be8405d43d7cc07ecf501c" + +pnpm module findby '{\"name\": \"Msg Sender Module\"}' +``` + +### Schema examples + +```shell +pnpm schema findonebyid "0xce2647ed39aa89e6d1528a56deb6c30667ed2aae1ec2378ec3140c0c5d98a61e" + +pnpm schema findby '{\"description\": \"Gitcoin Passport Score\"}' +``` + ## Other operations [Work in progress] The class `veraxSdk.utils` extends the capabilities: diff --git a/sdk/examples/attestation/attestationExamples.ts b/sdk/examples/attestation/attestationExamples.ts index 5b955756..3a27c89f 100644 --- a/sdk/examples/attestation/attestationExamples.ts +++ b/sdk/examples/attestation/attestationExamples.ts @@ -1,4 +1,5 @@ import VeraxSdk from "../../src/VeraxSdk"; +import { Attestation } from "../../src/types"; export default class AttestationExamples { private veraxSdk: VeraxSdk; @@ -7,29 +8,25 @@ export default class AttestationExamples { this.veraxSdk = _veraxSdk; } - async run(methodName: string = "") { + async run(methodName: string = "", argv: string) { if (methodName.toLowerCase() == "findOneById".toLowerCase() || methodName == "") { - console.log( - await this.veraxSdk.attestation.findOneById( - "0x00000000000000000000000000000000000000000000000000000000000007b5", - ), - ); + const attestationId: string = + argv === "" ? "0x00000000000000000000000000000000000000000000000000000000000007b5" : argv; + console.log(await this.veraxSdk.attestation.findOneById(attestationId)); } if (methodName.toLowerCase() == "findBy".toLowerCase() || methodName == "") { - console.log( - await this.veraxSdk.attestation.findBy({ - schemaId: "0xd1664d97bd195df77e3d5fe78c1737ab3adaa38bbe52a680d1aa30fa51f186ba", - }), - ); + const params: Partial = + argv === "" + ? { schemaId: "0xd1664d97bd195df77e3d5fe78c1737ab3adaa38bbe52a680d1aa30fa51f186ba" } + : JSON.parse(argv); + console.log(await this.veraxSdk.attestation.findBy(params)); } if (methodName.toLowerCase() == "getRelatedAttestations".toLowerCase() || methodName == "") { - console.log( - await this.veraxSdk.attestation.getRelatedAttestations( - "0x0000000000000000000000000000000000000000000000000000000000000001", - ), - ); + const attestationId: string = + argv === "" ? "0x0000000000000000000000000000000000000000000000000000000000000001" : argv; + console.log(await this.veraxSdk.attestation.getRelatedAttestations(attestationId)); } } } diff --git a/sdk/examples/attestation/index.ts b/sdk/examples/attestation/index.ts index 28635a16..cc413e37 100644 --- a/sdk/examples/attestation/index.ts +++ b/sdk/examples/attestation/index.ts @@ -1,6 +1,9 @@ import VeraxSdk from "../../src/VeraxSdk"; import AttestationExamples from "./attestationExamples"; +let argv: string | null | undefined = process.argv[3] as string; +argv !== null && argv !== undefined ? (argv = argv.replaceAll("\\", "")) : (argv = ""); + const veraxSdk = new VeraxSdk(VeraxSdk.DEFAULT_LINEA_TESTNET); -await new AttestationExamples(veraxSdk).run(process.argv[2]); +await new AttestationExamples(veraxSdk).run(process.argv[2], argv); diff --git a/sdk/examples/module/index.ts b/sdk/examples/module/index.ts index 98833344..3d12902b 100644 --- a/sdk/examples/module/index.ts +++ b/sdk/examples/module/index.ts @@ -1,6 +1,9 @@ import VeraxSdk from "../../src/VeraxSdk"; import ModuleExamples from "./moduleExamples"; +let argv: string | null | undefined = process.argv[3] as string; +argv !== null && argv !== undefined ? (argv = argv.replaceAll("\\", "")) : (argv = ""); + const veraxSdk = new VeraxSdk(VeraxSdk.DEFAULT_LINEA_TESTNET); -await new ModuleExamples(veraxSdk).run(process.argv[2]); +await new ModuleExamples(veraxSdk).run(process.argv[2], argv); diff --git a/sdk/examples/module/moduleExamples.ts b/sdk/examples/module/moduleExamples.ts index e1e069f1..2f73c0da 100644 --- a/sdk/examples/module/moduleExamples.ts +++ b/sdk/examples/module/moduleExamples.ts @@ -1,16 +1,21 @@ import VeraxSdk from "../../src/VeraxSdk"; +import { Module } from "../../src/types"; export default class ModuleExamples { private veraxSdk: VeraxSdk; constructor(_veraxSdk: VeraxSdk) { this.veraxSdk = _veraxSdk; } - async run(methodName: string = "") { - if (methodName.toLowerCase() == "findOneById".toLowerCase() || methodName == "") - console.log(await this.veraxSdk.module.findOneById("0xf75be6f9418710fd516fa82afb3aad07e11a0f1b")); + async run(methodName: string = "", argv: string) { + if (methodName.toLowerCase() == "findOneById".toLowerCase() || methodName == "") { + const moduleId: string = argv === "" ? "0xf75be6f9418710fd516fa82afb3aad07e11a0f1b" : argv; + console.log(await this.veraxSdk.module.findOneById(moduleId)); + } - if (methodName.toLowerCase() == "findBy".toLowerCase() || methodName == "") - console.log(await this.veraxSdk.module.findBy({ name: "SchemaCheckerModule" })); + if (methodName.toLowerCase() == "findBy".toLowerCase() || methodName == "") { + const params: Partial = argv === "" ? { name: "SchemaCheckerModule" } : JSON.parse(argv); + console.log(await this.veraxSdk.module.findBy(params)); + } if (methodName.toLowerCase() == "register" || methodName == "") console.log(await this.veraxSdk.module.register()); } diff --git a/sdk/examples/portal/index.ts b/sdk/examples/portal/index.ts index 2a5b0266..c8a010ba 100644 --- a/sdk/examples/portal/index.ts +++ b/sdk/examples/portal/index.ts @@ -1,6 +1,9 @@ import VeraxSdk from "../../src/VeraxSdk"; import PortalExamples from "./portalExamples"; +let argv: string | null | undefined = process.argv[3] as string; +argv !== null && argv !== undefined ? (argv = argv.replaceAll("\\", "")) : (argv = ""); + const veraxSdk = new VeraxSdk(VeraxSdk.DEFAULT_LINEA_TESTNET); -await new PortalExamples(veraxSdk).run(process.argv[2]); +await new PortalExamples(veraxSdk).run(process.argv[2], argv); diff --git a/sdk/examples/portal/portalExamples.ts b/sdk/examples/portal/portalExamples.ts index c5d2bfff..95763d60 100644 --- a/sdk/examples/portal/portalExamples.ts +++ b/sdk/examples/portal/portalExamples.ts @@ -1,4 +1,6 @@ +import { Address } from "viem"; import VeraxSdk from "../../src/VeraxSdk"; +import { Portal } from "../../src/types"; export default class PortalExamples { private veraxSdk: VeraxSdk; @@ -7,41 +9,47 @@ export default class PortalExamples { this.veraxSdk = _veraxSdk; } - async run(methodName: string = "") { - if (methodName.toLowerCase() == "findOneById".toLowerCase() || methodName == "") - console.log(await this.veraxSdk.portal.findOneById("0x1495341ab1019798dd08976f4a3e5ab0e095510b")); + async run(methodName: string = "", argv: string) { + if (methodName.toLowerCase() == "findOneById".toLowerCase() || methodName == "") { + const portalId: string = argv === "" ? "0x1495341ab1019798dd08976f4a3e5ab0e095510b" : argv; + console.log(await this.veraxSdk.portal.findOneById(portalId)); + } - if (methodName.toLowerCase() == "findBy".toLowerCase() || methodName == "") - console.log(await this.veraxSdk.portal.findBy({ ownerName: "Clique" })); + if (methodName.toLowerCase() == "findBy".toLowerCase() || methodName == "") { + const params: Partial = argv === "" ? { ownerName: "Clique" } : JSON.parse(argv); + console.log(await this.veraxSdk.portal.findBy(params)); + } if (methodName.toLowerCase() == "simulateAttest".toLowerCase() || methodName == "") { - console.log( - await this.veraxSdk.portal.simulateAttest( - "0xeea25bc2ec56cae601df33b8fc676673285e12cc", - { - schemaId: "0x9ba590dd7fbd5bd1a7d06cdcb4744e20a49b3520560575cd63de17734a408738", - expirationDate: 1693583329, - subject: "0x828c9f04D1a07E3b0aBE12A9F8238a3Ff7E57b47", - attestationData: [{ isBuidler: true }], - }, - [], - ), - ); + let params; + if (argv !== "") params = JSON.parse(argv); + const portalAddress = params?.portalAddress + ? (params.portalAddress as Address) + : "0xeea25bc2ec56cae601df33b8fc676673285e12cc"; + const attestationData = params?.attestationData ?? { + schemaId: "0x9ba590dd7fbd5bd1a7d06cdcb4744e20a49b3520560575cd63de17734a408738", + expirationDate: 1693583329, + subject: "0x828c9f04D1a07E3b0aBE12A9F8238a3Ff7E57b47", + attestationData: [{ isBuidler: true }], + }; + const validationPayloads = params?.validationPayloads ?? []; + console.log(await this.veraxSdk.portal.simulateAttest(portalAddress, attestationData, validationPayloads)); } if (methodName.toLowerCase() == "attest" || methodName == "") { - console.log( - await this.veraxSdk.portal.attest( - "0xeea25bc2ec56cae601df33b8fc676673285e12cc", - { - schemaId: "0x9ba590dd7fbd5bd1a7d06cdcb4744e20a49b3520560575cd63de17734a408738", - expirationDate: 1693583329, - subject: "0x828c9f04D1a07E3b0aBE12A9F8238a3Ff7E57b47", - attestationData: [{ isBuidler: true }], - }, - [], - ), - ); + let params; + if (argv !== "") params = JSON.parse(argv); + const portalAddress = params?.portalAddress + ? (params.portalAddress as Address) + : "0xeea25bc2ec56cae601df33b8fc676673285e12cc"; + const attestationData = params?.attestationData ?? { + schemaId: "0x9ba590dd7fbd5bd1a7d06cdcb4744e20a49b3520560575cd63de17734a408738", + expirationDate: 1693583329, + subject: "0x828c9f04D1a07E3b0aBE12A9F8238a3Ff7E57b47", + attestationData: [{ isBuidler: true }], + }; + const validationPayloads = params?.validationPayloads ?? []; + console.log(await this.veraxSdk.portal.attest(portalAddress, attestationData, validationPayloads)); } if (methodName.toLowerCase() == "simulateBulkAttest".toLowerCase() || methodName == "") { @@ -93,21 +101,25 @@ export default class PortalExamples { if (methodName.toLowerCase() == "replace" || methodName == "") console.log(await this.veraxSdk.portal.replace()); if (methodName.toLowerCase() == "revoke" || methodName == "") { - console.log( - await this.veraxSdk.portal.revoke( - "0xeea25bc2ec56cae601df33b8fc676673285e12cc", - "0x0000000000000000000000000000000000000000000000000000000000000001", - ), - ); + let params; + if (argv !== "") params = JSON.parse(argv); + const portalAddress = params?.portalAddress + ? (params.portalAddress as Address) + : "0xeea25bc2ec56cae601df33b8fc676673285e12cc"; + const attestationId = + params?.attestationId ?? "0x0000000000000000000000000000000000000000000000000000000000000001"; + console.log(await this.veraxSdk.portal.revoke(portalAddress, attestationId)); } if (methodName.toLowerCase() == "simulateRevoke".toLowerCase() || methodName == "") { - console.log( - await this.veraxSdk.portal.simulateRevoke( - "0xeea25bc2ec56cae601df33b8fc676673285e12cc", - "0x0000000000000000000000000000000000000000000000000000000000000001", - ), - ); + let params; + if (argv !== "") params = JSON.parse(argv); + const portalAddress = params?.portalAddress + ? (params.portalAddress as Address) + : "0xeea25bc2ec56cae601df33b8fc676673285e12cc"; + const attestationId = + params?.attestationId ?? "0x0000000000000000000000000000000000000000000000000000000000000001"; + console.log(await this.veraxSdk.portal.simulateRevoke(portalAddress, attestationId)); } if (methodName.toLowerCase() == "simulateBulkRevoke".toLowerCase() || methodName == "") diff --git a/sdk/examples/schema/index.ts b/sdk/examples/schema/index.ts index 9897b4a3..9b858a23 100644 --- a/sdk/examples/schema/index.ts +++ b/sdk/examples/schema/index.ts @@ -1,6 +1,9 @@ import VeraxSdk from "../../src/VeraxSdk"; import PortalExamples from "./schemaExamples"; +let argv: string | null | undefined = process.argv[3] as string; +argv !== null && argv !== undefined ? (argv = argv.replaceAll("\\", "")) : (argv = ""); + const veraxSdk = new VeraxSdk(VeraxSdk.DEFAULT_LINEA_TESTNET); -await new PortalExamples(veraxSdk).run(process.argv[2]); +await new PortalExamples(veraxSdk).run(process.argv[2], argv); diff --git a/sdk/examples/schema/schemaExamples.ts b/sdk/examples/schema/schemaExamples.ts index a5b3dd26..e9bd21f6 100644 --- a/sdk/examples/schema/schemaExamples.ts +++ b/sdk/examples/schema/schemaExamples.ts @@ -1,18 +1,22 @@ import VeraxSdk from "../../src/VeraxSdk"; +import { Schema } from "../../src/types"; export default class SchemaExamples { private veraxSdk: VeraxSdk; constructor(_veraxSdk: VeraxSdk) { this.veraxSdk = _veraxSdk; } - async run(methodName: string = "") { - if (methodName.toLowerCase() == "findOneById".toLowerCase() || methodName == "") - console.log( - await this.veraxSdk.schema.findOneById("0x01f031da36192c34057c764239eb77bb6ec8ebfb808f72a7bb172f37a5bec31f"), - ); + async run(methodName: string = "", argv: string) { + if (methodName.toLowerCase() == "findOneById".toLowerCase() || methodName == "") { + const schemaId: string = + argv === "" ? "0x01f031da36192c34057c764239eb77bb6ec8ebfb808f72a7bb172f37a5bec31f" : argv; + console.log(await this.veraxSdk.schema.findOneById(schemaId)); + } - if (methodName.toLowerCase() == "findBy".toLowerCase() || methodName == "") - console.log(await this.veraxSdk.schema.findBy({ name: "Relationship" })); + if (methodName.toLowerCase() == "findBy".toLowerCase() || methodName == "") { + const params: Partial = argv === "" ? { name: "Relationship" } : JSON.parse(argv); + console.log(await this.veraxSdk.schema.findBy(params)); + } if (methodName.toLowerCase() == "create" || methodName == "") console.log(await this.veraxSdk.schema.create()); } From e02bfaba320816ec6527205c1362f989c2fdefc2 Mon Sep 17 00:00:00 2001 From: Alain Nicolas Date: Mon, 16 Oct 2023 14:21:29 +0200 Subject: [PATCH 31/36] feat: As a user, I want to query the Attestations on the subgraph via the SDK (#278) Co-authored-by: Satyajeet Kolhapure --- .eslintignore | 1 + .github/workflows/sdk.yml | 7 +- .prettierignore | 1 + pnpm-lock.yaml | 7053 +++++++++-- sdk/.graphclient/index.ts | 1205 ++ sdk/.graphclient/schema.graphql | 836 ++ .../introspectionSchema.ts | 10190 ++++++++++++++++ .../linea-attestation-registry/schema.graphql | 836 ++ .../linea-attestation-registry/types.ts | 840 ++ sdk/.graphclientrc.yml | 6 + sdk/README.md | 22 +- sdk/babel-jest.config.cjs | 4 + .../attestation/attestationExamples.ts | 17 +- sdk/examples/attestation/index.ts | 2 +- sdk/examples/module/index.ts | 2 +- sdk/examples/module/moduleExamples.ts | 8 +- sdk/examples/portal/index.ts | 2 +- sdk/examples/portal/portalExamples.ts | 134 +- sdk/examples/schema/index.ts | 2 +- sdk/examples/schema/schemaExamples.ts | 8 +- sdk/examples/utils/getRelatedAttestation.ts | 9 + sdk/jest.config.js | 10 +- sdk/package.json | 26 +- sdk/src/VeraxSdk.ts | 17 +- sdk/src/dataMapper/AttestationDataMapper.ts | 21 +- sdk/src/dataMapper/BaseDataMapper.ts | 72 +- sdk/src/dataMapper/ModuleDataMapper.ts | 3 +- sdk/src/dataMapper/PortalDataMapper.ts | 3 +- sdk/src/dataMapper/SchemaDataMapper.ts | 3 +- sdk/src/dataMapper/UtilsDataMapper.ts | 2 +- sdk/src/types/index.d.ts | 31 +- ...loClientHelper.ts => graphClientHelper.ts} | 0 .../dataMapper/AttestationDataMapper.test.ts | 106 - .../Attestation.integration.test.ts | 77 + .../integration/Module.integration.test.ts | 56 + .../integration/Portal.integration.test.ts | 59 + .../integration/Schema.integration.test.ts | 57 + sdk/tsconfig.json | 3 +- 38 files changed, 20244 insertions(+), 1487 deletions(-) create mode 100644 sdk/.graphclient/index.ts create mode 100644 sdk/.graphclient/schema.graphql create mode 100644 sdk/.graphclient/sources/linea-attestation-registry/introspectionSchema.ts create mode 100644 sdk/.graphclient/sources/linea-attestation-registry/schema.graphql create mode 100644 sdk/.graphclient/sources/linea-attestation-registry/types.ts create mode 100644 sdk/.graphclientrc.yml create mode 100644 sdk/babel-jest.config.cjs create mode 100644 sdk/examples/utils/getRelatedAttestation.ts rename sdk/src/utils/{apolloClientHelper.ts => graphClientHelper.ts} (100%) delete mode 100644 sdk/test/dataMapper/AttestationDataMapper.test.ts create mode 100644 sdk/test/integration/Attestation.integration.test.ts create mode 100644 sdk/test/integration/Module.integration.test.ts create mode 100644 sdk/test/integration/Portal.integration.test.ts create mode 100644 sdk/test/integration/Schema.integration.test.ts diff --git a/.eslintignore b/.eslintignore index 228d1d4b..6bde2b2c 100644 --- a/.eslintignore +++ b/.eslintignore @@ -5,3 +5,4 @@ lib typechain-types generated build +.graphclient diff --git a/.github/workflows/sdk.yml b/.github/workflows/sdk.yml index 784c3d71..516824ce 100644 --- a/.github/workflows/sdk.yml +++ b/.github/workflows/sdk.yml @@ -53,9 +53,12 @@ jobs: run: pnpm install --frozen-lockfile - name: Run the unit tests - run: pnpm run test:ci + run: pnpm run test:unit:ci + + - name: Run the integration tests + run: pnpm run test:integration:ci - name: Add test summary run: | - echo "## Unit tests result" >> $GITHUB_STEP_SUMMARY + echo "## Tests result" >> $GITHUB_STEP_SUMMARY echo "✅ Passed" >> $GITHUB_STEP_SUMMARY diff --git a/.prettierignore b/.prettierignore index 31e0efa9..74dd5707 100644 --- a/.prettierignore +++ b/.prettierignore @@ -10,6 +10,7 @@ cache_hardhat typechain-types generated build +.graphclient # files *.env diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 09856b34..79428e9c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -66,9 +66,39 @@ importers: sdk: dependencies: - '@apollo/client': - specifier: ^3.8.4 - version: 3.8.4(graphql@16.8.1) + '@graphprotocol/client-cli': + specifier: ^3.0.0 + version: 3.0.0(@babel/core@7.23.0)(@envelop/core@4.0.3)(@graphql-mesh/cross-helpers@0.4.1)(@graphql-mesh/store@0.95.7)(@graphql-mesh/types@0.93.2)(@graphql-mesh/utils@0.95.7)(@graphql-tools/delegate@10.0.3)(@graphql-tools/merge@9.0.0)(@graphql-tools/utils@9.2.1)(@graphql-tools/wrap@10.0.1)(@types/node@20.8.0)(graphql-tag@2.12.6)(graphql@16.8.1)(react-native@0.72.5) + '@graphql-mesh/cache-localforage': + specifier: ^0.95.7 + version: 0.95.7(@graphql-mesh/types@0.93.2)(@graphql-mesh/utils@0.95.7)(graphql@16.8.1)(tslib@2.6.2) + '@graphql-mesh/cross-helpers': + specifier: ^0.4.1 + version: 0.4.1(@graphql-tools/utils@9.2.1)(graphql@16.8.1) + '@graphql-mesh/graphql': + specifier: ^0.95.7 + version: 0.95.7(@graphql-mesh/cross-helpers@0.4.1)(@graphql-mesh/store@0.95.7)(@graphql-mesh/types@0.93.2)(@graphql-mesh/utils@0.95.7)(@graphql-tools/utils@9.2.1)(@types/node@20.8.0)(graphql@16.8.1)(react@18.2.0)(tslib@2.6.2) + '@graphql-mesh/http': + specifier: ^0.96.12 + version: 0.96.12(@graphql-mesh/cross-helpers@0.4.1)(@graphql-mesh/runtime@0.96.11)(@graphql-mesh/types@0.93.2)(@graphql-mesh/utils@0.95.7)(graphql@16.8.1)(tslib@2.6.2) + '@graphql-mesh/merger-bare': + specifier: ^0.95.7 + version: 0.95.7(@graphql-mesh/store@0.95.7)(@graphql-mesh/types@0.93.2)(@graphql-mesh/utils@0.95.7)(@graphql-tools/utils@9.2.1)(graphql@16.8.1)(tslib@2.6.2) + '@graphql-mesh/runtime': + specifier: ^0.96.11 + version: 0.96.11(@graphql-mesh/cross-helpers@0.4.1)(@graphql-mesh/types@0.93.2)(@graphql-mesh/utils@0.95.7)(@graphql-tools/utils@9.2.1)(graphql@16.8.1)(tslib@2.6.2) + '@graphql-mesh/store': + specifier: ^0.95.7 + version: 0.95.7(@graphql-mesh/cross-helpers@0.4.1)(@graphql-mesh/types@0.93.2)(@graphql-mesh/utils@0.95.7)(@graphql-tools/utils@9.2.1)(graphql@16.8.1)(tslib@2.6.2) + '@graphql-mesh/utils': + specifier: ^0.95.7 + version: 0.95.7(@graphql-mesh/cross-helpers@0.4.1)(@graphql-mesh/types@0.93.2)(@graphql-tools/utils@9.2.1)(graphql@16.8.1)(tslib@2.6.2) + '@whatwg-node/fetch': + specifier: ^0.9.13 + version: 0.9.13 + axios: + specifier: ^1.5.1 + version: 1.5.1(debug@4.3.4) dotenv: specifier: ^16.3.1 version: 16.3.1 @@ -77,23 +107,35 @@ importers: version: 16.8.1 viem: specifier: ^1.14.0 - version: 1.15.1(typescript@5.2.2) + version: 1.15.1(typescript@5.2.2)(zod@3.22.4) devDependencies: + '@babel/plugin-transform-runtime': + specifier: ^7.23.2 + version: 7.23.2(@babel/core@7.23.0) + '@babel/preset-env': + specifier: ^7.23.2 + version: 7.23.2(@babel/core@7.23.0) + '@babel/preset-typescript': + specifier: ^7.23.2 + version: 7.23.2(@babel/core@7.23.0) '@types/jest': specifier: ^29.5.5 version: 29.5.5 + babel-jest: + specifier: ^29.7.0 + version: 29.7.0(@babel/core@7.23.0) + babel-plugin-transform-import-meta: + specifier: ^2.2.1 + version: 2.2.1(@babel/core@7.23.0) jest: specifier: ^29.7.0 version: 29.7.0(@types/node@20.8.0)(ts-node@10.9.1) ts-jest: specifier: ^29.1.1 - version: 29.1.1(@babel/core@7.23.0)(jest@29.7.0)(typescript@5.2.2) + version: 29.1.1(@babel/core@7.23.0)(babel-jest@29.7.0)(jest@29.7.0)(typescript@5.2.2) ts-node: specifier: ^10.9.1 version: 10.9.1(@types/node@20.8.0)(typescript@5.2.2) - vite: - specifier: ^4.4.9 - version: 4.4.10(@types/node@20.8.0) subgraph: devDependencies: @@ -125,10 +167,10 @@ packages: dependencies: '@jridgewell/gen-mapping': 0.3.3 '@jridgewell/trace-mapping': 0.3.19 - dev: true - /@apollo/client@3.8.4(graphql@16.8.1): - resolution: {integrity: sha512-QFXE4ylSHUa6LgYoOGsPysJCm4YJOOM1NwHyF6msZdZXIerqUVpLvxQOdQEXgS0RWvYiBMC1wGOWKzJKSWBdAg==} + /@apollo/client@3.8.5(graphql@16.8.1)(react@18.2.0): + resolution: {integrity: sha512-/ueWC3f1pFeH+tWbM1phz6pzUGGijyml6oQ+LKUcQzpXF6tVFPrb6oUIUQCbZpr6Xmv/dtNiFDohc39ra7Solg==} + requiresBuild: true peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 graphql-ws: ^5.5.5 @@ -154,12 +196,65 @@ packages: hoist-non-react-statics: 3.3.2 optimism: 0.17.5 prop-types: 15.8.1 + react: 18.2.0 response-iterator: 0.2.6 symbol-observable: 4.0.0 ts-invariant: 0.10.3 tslib: 2.6.2 zen-observable-ts: 1.2.5 dev: false + optional: true + + /@ardatan/fast-json-stringify@0.0.6(ajv-formats@2.1.1)(ajv@8.12.0): + resolution: {integrity: sha512-//BefMIP6U1ptNeBf44Le4vqThejTwZndtYLtAuFBwA/DmbVbbYTCLNIMhZ96WZnhI92EvTXneT5tKJrgINE9A==} + peerDependencies: + ajv: ^8.10.0 + ajv-formats: ^2.1.1 + dependencies: + '@fastify/deepmerge': 1.3.0 + ajv: 8.12.0 + ajv-formats: 2.1.1(ajv@8.12.0) + fast-deep-equal: 3.1.3 + rfdc: 1.3.0 + dev: false + + /@ardatan/relay-compiler@12.0.0(graphql@16.8.1): + resolution: {integrity: sha512-9anThAaj1dQr6IGmzBMcfzOQKTa5artjuPmw8NYK/fiGEMjADbSguBY2FMDykt+QhilR3wc9VA/3yVju7JHg7Q==} + hasBin: true + peerDependencies: + graphql: '*' + dependencies: + '@babel/core': 7.23.0 + '@babel/generator': 7.23.0 + '@babel/parser': 7.23.0 + '@babel/runtime': 7.23.2 + '@babel/traverse': 7.23.0 + '@babel/types': 7.23.0 + babel-preset-fbjs: 3.4.0(@babel/core@7.23.0) + chalk: 4.1.2 + fb-watchman: 2.0.2 + fbjs: 3.0.5 + glob: 7.2.3 + graphql: 16.8.1 + immutable: 3.7.6 + invariant: 2.2.4 + nullthrows: 1.1.1 + relay-runtime: 12.0.0 + signedsource: 1.0.0 + yargs: 15.4.1 + transitivePeerDependencies: + - encoding + - supports-color + dev: false + + /@ardatan/sync-fetch@0.0.1: + resolution: {integrity: sha512-xhlTqH0m31mnsG0tIP4ETgfSB6gXDaYYsUWTrlUV93fFQPI9dd8hE0Ot6MHLCtqgB32hwJAC3YZMWlXZw7AleA==} + engines: {node: '>=14'} + dependencies: + node-fetch: 2.7.0 + transitivePeerDependencies: + - encoding + dev: false /@aws-crypto/sha256-js@1.2.2: resolution: {integrity: sha512-Nr1QJIbW/afYYGzYvrF70LtaHrIRtd4TNAglX8BvlfxJLZ45SAmueIKYl5tWoNBPzp65ymXGFK0Bb1vZUpuc9g==} @@ -197,12 +292,15 @@ packages: dependencies: '@babel/highlight': 7.22.13 chalk: 2.4.2 - dev: true /@babel/compat-data@7.22.20: resolution: {integrity: sha512-BQYjKbpXjoXwFW5jGqiizJQQT/aC7pFm9Ok1OWssonuguICi264lbgMzRp2ZMmRSlfkX6DsWDDcsrctK8Rwfiw==} engines: {node: '>=6.9.0'} - dev: true + dev: false + + /@babel/compat-data@7.23.2: + resolution: {integrity: sha512-0S9TQMmDHlqAZ2ITT95irXKfxN9bncq8ZCoJhun3nHL/lLUxd2NKBJYoNGWH7S0hz6fRQwWlAWn/ILM0C70KZQ==} + engines: {node: '>=6.9.0'} /@babel/core@7.23.0: resolution: {integrity: sha512-97z/ju/Jy1rZmDxybphrBuI+jtJjFVoz7Mr9yUQVVVi+DNZE333uFQeMOqcCIy1x3WYBIbWftUSLmbNXNT7qFQ==} @@ -225,7 +323,6 @@ packages: semver: 6.3.1 transitivePeerDependencies: - supports-color - dev: true /@babel/generator@7.23.0: resolution: {integrity: sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==} @@ -235,23 +332,74 @@ packages: '@jridgewell/gen-mapping': 0.3.3 '@jridgewell/trace-mapping': 0.3.19 jsesc: 2.5.2 - dev: true + + /@babel/helper-annotate-as-pure@7.22.5: + resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.0 + + /@babel/helper-builder-binary-assignment-operator-visitor@7.22.15: + resolution: {integrity: sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.0 /@babel/helper-compilation-targets@7.22.15: resolution: {integrity: sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/compat-data': 7.22.20 + '@babel/compat-data': 7.23.2 '@babel/helper-validator-option': 7.22.15 browserslist: 4.22.1 lru-cache: 5.1.1 semver: 6.3.1 - dev: true + + /@babel/helper-create-class-features-plugin@7.22.15(@babel/core@7.23.0): + resolution: {integrity: sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.0 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-member-expression-to-functions': 7.23.0 + '@babel/helper-optimise-call-expression': 7.22.5 + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.0) + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + semver: 6.3.1 + + /@babel/helper-create-regexp-features-plugin@7.22.15(@babel/core@7.23.0): + resolution: {integrity: sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.0 + '@babel/helper-annotate-as-pure': 7.22.5 + regexpu-core: 5.3.2 + semver: 6.3.1 + + /@babel/helper-define-polyfill-provider@0.4.3(@babel/core@7.23.0): + resolution: {integrity: sha512-WBrLmuPP47n7PNwsZ57pqam6G/RGo1vw/87b0Blc53tZNGZ4x7YvZ6HgQe2vo1W/FR20OgjeZuGXzudPiXHFug==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + dependencies: + '@babel/core': 7.23.0 + '@babel/helper-compilation-targets': 7.22.15 + '@babel/helper-plugin-utils': 7.22.5 + debug: 4.3.4(supports-color@8.1.1) + lodash.debounce: 4.0.8 + resolve: 1.22.6 + transitivePeerDependencies: + - supports-color /@babel/helper-environment-visitor@7.22.20: resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==} engines: {node: '>=6.9.0'} - dev: true /@babel/helper-function-name@7.23.0: resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} @@ -259,21 +407,24 @@ packages: dependencies: '@babel/template': 7.22.15 '@babel/types': 7.23.0 - dev: true /@babel/helper-hoist-variables@7.22.5: resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.23.0 - dev: true + + /@babel/helper-member-expression-to-functions@7.23.0: + resolution: {integrity: sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.0 /@babel/helper-module-imports@7.22.15: resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.23.0 - dev: true /@babel/helper-module-transforms@7.23.0(@babel/core@7.23.0): resolution: {integrity: sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw==} @@ -287,46 +438,80 @@ packages: '@babel/helper-simple-access': 7.22.5 '@babel/helper-split-export-declaration': 7.22.6 '@babel/helper-validator-identifier': 7.22.20 - dev: true + + /@babel/helper-optimise-call-expression@7.22.5: + resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.0 /@babel/helper-plugin-utils@7.22.5: resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} engines: {node: '>=6.9.0'} - dev: true + + /@babel/helper-remap-async-to-generator@7.22.20(@babel/core@7.23.0): + resolution: {integrity: sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.0 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-wrap-function': 7.22.20 + + /@babel/helper-replace-supers@7.22.20(@babel/core@7.23.0): + resolution: {integrity: sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.0 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-member-expression-to-functions': 7.23.0 + '@babel/helper-optimise-call-expression': 7.22.5 /@babel/helper-simple-access@7.22.5: resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.23.0 - dev: true + + /@babel/helper-skip-transparent-expression-wrappers@7.22.5: + resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.0 /@babel/helper-split-export-declaration@7.22.6: resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.23.0 - dev: true /@babel/helper-string-parser@7.22.5: resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==} engines: {node: '>=6.9.0'} - dev: true /@babel/helper-validator-identifier@7.22.20: resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} engines: {node: '>=6.9.0'} - dev: true /@babel/helper-validator-identifier@7.22.5: resolution: {integrity: sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==} engines: {node: '>=6.9.0'} - dev: true /@babel/helper-validator-option@7.22.15: resolution: {integrity: sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==} engines: {node: '>=6.9.0'} - dev: true + + /@babel/helper-wrap-function@7.22.20: + resolution: {integrity: sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-function-name': 7.23.0 + '@babel/template': 7.22.15 + '@babel/types': 7.23.0 /@babel/helpers@7.23.1: resolution: {integrity: sha512-chNpneuK18yW5Oxsr+t553UZzzAs3aZnFm4bxhebsNTeshrC95yA7l5yl7GBAG+JG1rF0F7zzD2EixK9mWSDoA==} @@ -337,7 +522,6 @@ packages: '@babel/types': 7.23.0 transitivePeerDependencies: - supports-color - dev: true /@babel/highlight@7.22.13: resolution: {integrity: sha512-C/BaXcnnvBCmHTpz/VGZ8jgtE2aYlW4hxDhseJAWZb7gqGM/qtCK6iZUb0TyKFf7BOUsBH7Q7fkRsDRhg1XklQ==} @@ -346,7 +530,6 @@ packages: '@babel/helper-validator-identifier': 7.22.5 chalk: 2.4.2 js-tokens: 4.0.0 - dev: true /@babel/parser@7.23.0: resolution: {integrity: sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==} @@ -354,101 +537,146 @@ packages: hasBin: true dependencies: '@babel/types': 7.23.0 - dev: true - /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.23.0): - resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} + /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.22.15(@babel/core@7.23.0): + resolution: {integrity: sha512-FB9iYlz7rURmRJyXRKEnalYPPdn87H5no108cyuQQyMwlpJ2SJtpIUBI27kdTin956pz+LPypkPVPUTlxOmrsg==} + engines: {node: '>=6.9.0'} peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.23.0 '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.23.0): - resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} + /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.22.15(@babel/core@7.23.0): + resolution: {integrity: sha512-Hyph9LseGvAeeXzikV88bczhsrLrIZqDPxO+sSmAunMPaGrBGhfMWzCPYTtiW9t+HzSE2wtV8e5cc5P6r1xMDQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.13.0 + dependencies: + '@babel/core': 7.23.0 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/plugin-transform-optional-chaining': 7.23.0(@babel/core@7.23.0) + + /@babel/plugin-proposal-async-generator-functions@7.20.7(@babel/core@7.23.0): + resolution: {integrity: sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-async-generator-functions instead. peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.23.0 + '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-plugin-utils': 7.22.5 - dev: true + '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.23.0) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.0) + dev: false - /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.23.0): - resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} + /@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.23.0): + resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead. peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.23.0 + '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.0) '@babel/helper-plugin-utils': 7.22.5 - dev: true + dev: false - /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.23.0): - resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} + /@babel/plugin-proposal-export-default-from@7.22.17(@babel/core@7.23.0): + resolution: {integrity: sha512-cop/3quQBVvdz6X5SJC6AhUv3C9DrVTM06LUEXimEdWAhCSyOJIr9NiZDU9leHZ0/aiG0Sh7Zmvaku5TWYNgbA==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.23.0 '@babel/helper-plugin-utils': 7.22.5 - dev: true + '@babel/plugin-syntax-export-default-from': 7.22.5(@babel/core@7.23.0) + dev: false - /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.23.0): - resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} + /@babel/plugin-proposal-nullish-coalescing-operator@7.18.6(@babel/core@7.23.0): + resolution: {integrity: sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-nullish-coalescing-operator instead. peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.23.0 '@babel/helper-plugin-utils': 7.22.5 - dev: true + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.0) + dev: false - /@babel/plugin-syntax-jsx@7.22.5(@babel/core@7.23.0): - resolution: {integrity: sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==} + /@babel/plugin-proposal-numeric-separator@7.18.6(@babel/core@7.23.0): + resolution: {integrity: sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==} engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-numeric-separator instead. peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.23.0 '@babel/helper-plugin-utils': 7.22.5 - dev: true + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.0) + dev: false - /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.23.0): - resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} + /@babel/plugin-proposal-object-rest-spread@7.20.7(@babel/core@7.23.0): + resolution: {integrity: sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-object-rest-spread instead. peerDependencies: '@babel/core': ^7.0.0-0 dependencies: + '@babel/compat-data': 7.22.20 '@babel/core': 7.23.0 + '@babel/helper-compilation-targets': 7.22.15 '@babel/helper-plugin-utils': 7.22.5 - dev: true + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.0) + '@babel/plugin-transform-parameters': 7.22.15(@babel/core@7.23.0) + dev: false - /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.23.0): - resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} + /@babel/plugin-proposal-optional-catch-binding@7.18.6(@babel/core@7.23.0): + resolution: {integrity: sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-catch-binding instead. peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.23.0 '@babel/helper-plugin-utils': 7.22.5 - dev: true + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.0) + dev: false - /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.23.0): - resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} + /@babel/plugin-proposal-optional-chaining@7.21.0(@babel/core@7.23.0): + resolution: {integrity: sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-chaining instead. peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.23.0 '@babel/helper-plugin-utils': 7.22.5 - dev: true + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.0) + dev: false - /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.23.0): - resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} + /@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.23.0): + resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.0 + + /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.23.0): + resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.23.0 '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.23.0): - resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} + /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.23.0): + resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: @@ -456,757 +684,2930 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.23.0): - resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} + /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.23.0): + resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.23.0 '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.23.0): - resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} + /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.23.0): + resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.23.0 '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-typescript@7.22.5(@babel/core@7.23.0): - resolution: {integrity: sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==} - engines: {node: '>=6.9.0'} + /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.23.0): + resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.23.0 '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/template@7.22.15: - resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==} + /@babel/plugin-syntax-export-default-from@7.22.5(@babel/core@7.23.0): + resolution: {integrity: sha512-ODAqWWXB/yReh/jVQDag/3/tl6lgBueQkk/TcfW/59Oykm4c8a55XloX0CTk2k2VJiFWMgHby9xNX29IbCv9dQ==} engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: - '@babel/code-frame': 7.22.13 - '@babel/parser': 7.23.0 - '@babel/types': 7.23.0 - dev: true + '@babel/core': 7.23.0 + '@babel/helper-plugin-utils': 7.22.5 + dev: false - /@babel/traverse@7.23.0: - resolution: {integrity: sha512-t/QaEvyIoIkwzpiZ7aoSKK8kObQYeF7T2v+dazAYCb8SXtp58zEVkWW7zAnju8FNKNdr4ScAOEDmMItbyOmEYw==} + /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.23.0): + resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.0 + '@babel/helper-plugin-utils': 7.22.5 + + /@babel/plugin-syntax-flow@7.22.5(@babel/core@7.23.0): + resolution: {integrity: sha512-9RdCl0i+q0QExayk2nOS7853w08yLucnnPML6EN9S8fgMPVtdLDCdx/cOQ/i44Lb9UeQX9A35yaqBBOMMZxPxQ==} engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: - '@babel/code-frame': 7.22.13 - '@babel/generator': 7.23.0 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-function-name': 7.23.0 - '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - '@babel/parser': 7.23.0 - '@babel/types': 7.23.0 - debug: 4.3.4(supports-color@8.1.1) - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - dev: true + '@babel/core': 7.23.0 + '@babel/helper-plugin-utils': 7.22.5 + dev: false - /@babel/types@7.23.0: - resolution: {integrity: sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==} + /@babel/plugin-syntax-import-assertions@7.22.5(@babel/core@7.23.0): + resolution: {integrity: sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==} engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: - '@babel/helper-string-parser': 7.22.5 - '@babel/helper-validator-identifier': 7.22.20 - to-fast-properties: 2.0.0 - dev: true - - /@bcoe/v8-coverage@0.2.3: - resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} - dev: true + '@babel/core': 7.23.0 + '@babel/helper-plugin-utils': 7.22.5 - /@chainsafe/as-sha256@0.3.1: - resolution: {integrity: sha512-hldFFYuf49ed7DAakWVXSJODuq3pzJEguD8tQ7h+sGkM18vja+OFoJI9krnGmgzyuZC2ETX0NOIcCTy31v2Mtg==} - dev: true + /@babel/plugin-syntax-import-attributes@7.22.5(@babel/core@7.23.0): + resolution: {integrity: sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.0 + '@babel/helper-plugin-utils': 7.22.5 - /@chainsafe/persistent-merkle-tree@0.4.2: - resolution: {integrity: sha512-lLO3ihKPngXLTus/L7WHKaw9PnNJWizlOF1H9NNzHP6Xvh82vzg9F2bzkXhYIFshMZ2gTCEz8tq6STe7r5NDfQ==} + /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.23.0): + resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: - '@chainsafe/as-sha256': 0.3.1 - dev: true + '@babel/core': 7.23.0 + '@babel/helper-plugin-utils': 7.22.5 - /@chainsafe/persistent-merkle-tree@0.5.0: - resolution: {integrity: sha512-l0V1b5clxA3iwQLXP40zYjyZYospQLZXzBVIhhr9kDg/1qHZfzzHw0jj4VPBijfYCArZDlPkRi1wZaV2POKeuw==} + /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.23.0): + resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: - '@chainsafe/as-sha256': 0.3.1 - dev: true + '@babel/core': 7.23.0 + '@babel/helper-plugin-utils': 7.22.5 - /@chainsafe/ssz@0.10.2: - resolution: {integrity: sha512-/NL3Lh8K+0q7A3LsiFq09YXS9fPE+ead2rr7vM2QK8PLzrNsw3uqrif9bpRX5UxgeRjM+vYi+boCM3+GM4ovXg==} + /@babel/plugin-syntax-jsx@7.22.5(@babel/core@7.23.0): + resolution: {integrity: sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: - '@chainsafe/as-sha256': 0.3.1 - '@chainsafe/persistent-merkle-tree': 0.5.0 - dev: true + '@babel/core': 7.23.0 + '@babel/helper-plugin-utils': 7.22.5 - /@chainsafe/ssz@0.9.4: - resolution: {integrity: sha512-77Qtg2N1ayqs4Bg/wvnWfg5Bta7iy7IRh8XqXh7oNMeP2HBbBwx8m6yTpA8p0EHItWPEBkgZd5S5/LSlp3GXuQ==} + /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.23.0): + resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: - '@chainsafe/as-sha256': 0.3.1 - '@chainsafe/persistent-merkle-tree': 0.4.2 - case: 1.6.3 - dev: true + '@babel/core': 7.23.0 + '@babel/helper-plugin-utils': 7.22.5 - /@cspotcode/source-map-support@0.8.1: - resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} - engines: {node: '>=12'} + /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.23.0): + resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: - '@jridgewell/trace-mapping': 0.3.9 - dev: true + '@babel/core': 7.23.0 + '@babel/helper-plugin-utils': 7.22.5 - /@esbuild/android-arm64@0.18.20: - resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true + /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.23.0): + resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.0 + '@babel/helper-plugin-utils': 7.22.5 - /@esbuild/android-arm@0.18.20: - resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==} - engines: {node: '>=12'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true - optional: true + /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.23.0): + resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.0 + '@babel/helper-plugin-utils': 7.22.5 - /@esbuild/android-x64@0.18.20: - resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==} - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true - optional: true + /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.23.0): + resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.0 + '@babel/helper-plugin-utils': 7.22.5 - /@esbuild/darwin-arm64@0.18.20: - resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true + /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.23.0): + resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.0 + '@babel/helper-plugin-utils': 7.22.5 - /@esbuild/darwin-x64@0.18.20: - resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true + /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.23.0): + resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.0 + '@babel/helper-plugin-utils': 7.22.5 - /@esbuild/freebsd-arm64@0.18.20: - resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true + /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.23.0): + resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.0 + '@babel/helper-plugin-utils': 7.22.5 - /@esbuild/freebsd-x64@0.18.20: - resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true + /@babel/plugin-syntax-typescript@7.22.5(@babel/core@7.23.0): + resolution: {integrity: sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.0 + '@babel/helper-plugin-utils': 7.22.5 - /@esbuild/linux-arm64@0.18.20: - resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true + /@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.23.0): + resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.0 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.0) + '@babel/helper-plugin-utils': 7.22.5 - /@esbuild/linux-arm@0.18.20: - resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true + /@babel/plugin-transform-arrow-functions@7.22.5(@babel/core@7.23.0): + resolution: {integrity: sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.0 + '@babel/helper-plugin-utils': 7.22.5 - /@esbuild/linux-ia32@0.18.20: - resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==} - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true - optional: true + /@babel/plugin-transform-async-generator-functions@7.23.2(@babel/core@7.23.0): + resolution: {integrity: sha512-BBYVGxbDVHfoeXbOwcagAkOQAm9NxoTdMGfTqghu1GrvadSaw6iW3Je6IcL5PNOw8VwjxqBECXy50/iCQSY/lQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.0 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.23.0) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.0) - /@esbuild/linux-loong64@0.18.20: - resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==} - engines: {node: '>=12'} - cpu: [loong64] - os: [linux] - requiresBuild: true - dev: true - optional: true + /@babel/plugin-transform-async-to-generator@7.22.5(@babel/core@7.23.0): + resolution: {integrity: sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.0 + '@babel/helper-module-imports': 7.22.15 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.23.0) - /@esbuild/linux-mips64el@0.18.20: - resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true - optional: true + /@babel/plugin-transform-block-scoped-functions@7.22.5(@babel/core@7.23.0): + resolution: {integrity: sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.0 + '@babel/helper-plugin-utils': 7.22.5 - /@esbuild/linux-ppc64@0.18.20: - resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true - optional: true + /@babel/plugin-transform-block-scoping@7.23.0(@babel/core@7.23.0): + resolution: {integrity: sha512-cOsrbmIOXmf+5YbL99/S49Y3j46k/T16b9ml8bm9lP6N9US5iQ2yBK7gpui1pg0V/WMcXdkfKbTb7HXq9u+v4g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.0 + '@babel/helper-plugin-utils': 7.22.5 - /@esbuild/linux-riscv64@0.18.20: - resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true - optional: true + /@babel/plugin-transform-class-properties@7.22.5(@babel/core@7.23.0): + resolution: {integrity: sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.0 + '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.0) + '@babel/helper-plugin-utils': 7.22.5 - /@esbuild/linux-s390x@0.18.20: - resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true - optional: true + /@babel/plugin-transform-class-static-block@7.22.11(@babel/core@7.23.0): + resolution: {integrity: sha512-GMM8gGmqI7guS/llMFk1bJDkKfn3v3C4KHK9Yg1ey5qcHcOlKb0QvcMrgzvxo+T03/4szNh5lghY+fEC98Kq9g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.12.0 + dependencies: + '@babel/core': 7.23.0 + '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.0) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.23.0) - /@esbuild/linux-x64@0.18.20: - resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==} - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true + /@babel/plugin-transform-classes@7.22.15(@babel/core@7.23.0): + resolution: {integrity: sha512-VbbC3PGjBdE0wAWDdHM9G8Gm977pnYI0XpqMd6LrKISj8/DJXEsWqgRuTYaNE9Bv0JGhTZUzHDlMk18IpOuoqw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.0 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-compilation-targets': 7.22.15 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-optimise-call-expression': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.0) + '@babel/helper-split-export-declaration': 7.22.6 + globals: 11.12.0 + + /@babel/plugin-transform-computed-properties@7.22.5(@babel/core@7.23.0): + resolution: {integrity: sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.0 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/template': 7.22.15 + + /@babel/plugin-transform-destructuring@7.23.0(@babel/core@7.23.0): + resolution: {integrity: sha512-vaMdgNXFkYrB+8lbgniSYWHsgqK5gjaMNcc84bMIOMRLH0L9AqYq3hwMdvnyqj1OPqea8UtjPEuS/DCenah1wg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.0 + '@babel/helper-plugin-utils': 7.22.5 + + /@babel/plugin-transform-dotall-regex@7.22.5(@babel/core@7.23.0): + resolution: {integrity: sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.0 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.0) + '@babel/helper-plugin-utils': 7.22.5 + + /@babel/plugin-transform-duplicate-keys@7.22.5(@babel/core@7.23.0): + resolution: {integrity: sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.0 + '@babel/helper-plugin-utils': 7.22.5 + + /@babel/plugin-transform-dynamic-import@7.22.11(@babel/core@7.23.0): + resolution: {integrity: sha512-g/21plo58sfteWjaO0ZNVb+uEOkJNjAaHhbejrnBmu011l/eNDScmkbjCC3l4FKb10ViaGU4aOkFznSu2zRHgA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.0 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.0) + + /@babel/plugin-transform-exponentiation-operator@7.22.5(@babel/core@7.23.0): + resolution: {integrity: sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.0 + '@babel/helper-builder-binary-assignment-operator-visitor': 7.22.15 + '@babel/helper-plugin-utils': 7.22.5 + + /@babel/plugin-transform-export-namespace-from@7.22.11(@babel/core@7.23.0): + resolution: {integrity: sha512-xa7aad7q7OiT8oNZ1mU7NrISjlSkVdMbNxn9IuLZyL9AJEhs1Apba3I+u5riX1dIkdptP5EKDG5XDPByWxtehw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.0 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.23.0) + + /@babel/plugin-transform-flow-strip-types@7.22.5(@babel/core@7.23.0): + resolution: {integrity: sha512-tujNbZdxdG0/54g/oua8ISToaXTFBf8EnSb5PgQSciIXWOWKX3S4+JR7ZE9ol8FZwf9kxitzkGQ+QWeov/mCiA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.0 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-flow': 7.22.5(@babel/core@7.23.0) + dev: false + + /@babel/plugin-transform-for-of@7.22.15(@babel/core@7.23.0): + resolution: {integrity: sha512-me6VGeHsx30+xh9fbDLLPi0J1HzmeIIyenoOQHuw2D4m2SAU3NrspX5XxJLBpqn5yrLzrlw2Iy3RA//Bx27iOA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.0 + '@babel/helper-plugin-utils': 7.22.5 + + /@babel/plugin-transform-function-name@7.22.5(@babel/core@7.23.0): + resolution: {integrity: sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.0 + '@babel/helper-compilation-targets': 7.22.15 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-plugin-utils': 7.22.5 + + /@babel/plugin-transform-json-strings@7.22.11(@babel/core@7.23.0): + resolution: {integrity: sha512-CxT5tCqpA9/jXFlme9xIBCc5RPtdDq3JpkkhgHQqtDdiTnTI0jtZ0QzXhr5DILeYifDPp2wvY2ad+7+hLMW5Pw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.0 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.0) + + /@babel/plugin-transform-literals@7.22.5(@babel/core@7.23.0): + resolution: {integrity: sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.0 + '@babel/helper-plugin-utils': 7.22.5 + + /@babel/plugin-transform-logical-assignment-operators@7.22.11(@babel/core@7.23.0): + resolution: {integrity: sha512-qQwRTP4+6xFCDV5k7gZBF3C31K34ut0tbEcTKxlX/0KXxm9GLcO14p570aWxFvVzx6QAfPgq7gaeIHXJC8LswQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.0 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.0) + + /@babel/plugin-transform-member-expression-literals@7.22.5(@babel/core@7.23.0): + resolution: {integrity: sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.0 + '@babel/helper-plugin-utils': 7.22.5 + + /@babel/plugin-transform-modules-amd@7.23.0(@babel/core@7.23.0): + resolution: {integrity: sha512-xWT5gefv2HGSm4QHtgc1sYPbseOyf+FFDo2JbpE25GWl5BqTGO9IMwTYJRoIdjsF85GE+VegHxSCUt5EvoYTAw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.0 + '@babel/helper-module-transforms': 7.23.0(@babel/core@7.23.0) + '@babel/helper-plugin-utils': 7.22.5 + + /@babel/plugin-transform-modules-commonjs@7.23.0(@babel/core@7.23.0): + resolution: {integrity: sha512-32Xzss14/UVc7k9g775yMIvkVK8xwKE0DPdP5JTapr3+Z9w4tzeOuLNY6BXDQR6BdnzIlXnCGAzsk/ICHBLVWQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.0 + '@babel/helper-module-transforms': 7.23.0(@babel/core@7.23.0) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-simple-access': 7.22.5 + + /@babel/plugin-transform-modules-systemjs@7.23.0(@babel/core@7.23.0): + resolution: {integrity: sha512-qBej6ctXZD2f+DhlOC9yO47yEYgUh5CZNz/aBoH4j/3NOlRfJXJbY7xDQCqQVf9KbrqGzIWER1f23doHGrIHFg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.0 + '@babel/helper-hoist-variables': 7.22.5 + '@babel/helper-module-transforms': 7.23.0(@babel/core@7.23.0) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-validator-identifier': 7.22.20 + + /@babel/plugin-transform-modules-umd@7.22.5(@babel/core@7.23.0): + resolution: {integrity: sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.0 + '@babel/helper-module-transforms': 7.23.0(@babel/core@7.23.0) + '@babel/helper-plugin-utils': 7.22.5 + + /@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.23.0): + resolution: {integrity: sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.0 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.0) + '@babel/helper-plugin-utils': 7.22.5 + + /@babel/plugin-transform-new-target@7.22.5(@babel/core@7.23.0): + resolution: {integrity: sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.0 + '@babel/helper-plugin-utils': 7.22.5 + + /@babel/plugin-transform-nullish-coalescing-operator@7.22.11(@babel/core@7.23.0): + resolution: {integrity: sha512-YZWOw4HxXrotb5xsjMJUDlLgcDXSfO9eCmdl1bgW4+/lAGdkjaEvOnQ4p5WKKdUgSzO39dgPl0pTnfxm0OAXcg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.0 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.0) + + /@babel/plugin-transform-numeric-separator@7.22.11(@babel/core@7.23.0): + resolution: {integrity: sha512-3dzU4QGPsILdJbASKhF/V2TVP+gJya1PsueQCxIPCEcerqF21oEcrob4mzjsp2Py/1nLfF5m+xYNMDpmA8vffg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.0 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.0) + + /@babel/plugin-transform-object-rest-spread@7.22.15(@babel/core@7.23.0): + resolution: {integrity: sha512-fEB+I1+gAmfAyxZcX1+ZUwLeAuuf8VIg67CTznZE0MqVFumWkh8xWtn58I4dxdVf080wn7gzWoF8vndOViJe9Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/compat-data': 7.23.2 + '@babel/core': 7.23.0 + '@babel/helper-compilation-targets': 7.22.15 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.0) + '@babel/plugin-transform-parameters': 7.22.15(@babel/core@7.23.0) + + /@babel/plugin-transform-object-super@7.22.5(@babel/core@7.23.0): + resolution: {integrity: sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.0 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.0) + + /@babel/plugin-transform-optional-catch-binding@7.22.11(@babel/core@7.23.0): + resolution: {integrity: sha512-rli0WxesXUeCJnMYhzAglEjLWVDF6ahb45HuprcmQuLidBJFWjNnOzssk2kuc6e33FlLaiZhG/kUIzUMWdBKaQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.0 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.0) + + /@babel/plugin-transform-optional-chaining@7.23.0(@babel/core@7.23.0): + resolution: {integrity: sha512-sBBGXbLJjxTzLBF5rFWaikMnOGOk/BmK6vVByIdEggZ7Vn6CvWXZyRkkLFK6WE0IF8jSliyOkUN6SScFgzCM0g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.0 + '@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/core@7.23.0) + + /@babel/plugin-transform-parameters@7.22.15(@babel/core@7.23.0): + resolution: {integrity: sha512-hjk7qKIqhyzhhUvRT683TYQOFa/4cQKwQy7ALvTpODswN40MljzNDa0YldevS6tGbxwaEKVn502JmY0dP7qEtQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.0 + '@babel/helper-plugin-utils': 7.22.5 + + /@babel/plugin-transform-private-methods@7.22.5(@babel/core@7.23.0): + resolution: {integrity: sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.0 + '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.0) + '@babel/helper-plugin-utils': 7.22.5 + + /@babel/plugin-transform-private-property-in-object@7.22.11(@babel/core@7.23.0): + resolution: {integrity: sha512-sSCbqZDBKHetvjSwpyWzhuHkmW5RummxJBVbYLkGkaiTOWGxml7SXt0iWa03bzxFIx7wOj3g/ILRd0RcJKBeSQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.0 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.0) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.0) + + /@babel/plugin-transform-property-literals@7.22.5(@babel/core@7.23.0): + resolution: {integrity: sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.0 + '@babel/helper-plugin-utils': 7.22.5 + + /@babel/plugin-transform-react-display-name@7.22.5(@babel/core@7.23.0): + resolution: {integrity: sha512-PVk3WPYudRF5z4GKMEYUrLjPl38fJSKNaEOkFuoprioowGuWN6w2RKznuFNSlJx7pzzXXStPUnNSOEO0jL5EVw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.0 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-react-jsx-self@7.22.5(@babel/core@7.23.0): + resolution: {integrity: sha512-nTh2ogNUtxbiSbxaT4Ds6aXnXEipHweN9YRgOX/oNXdf0cCrGn/+2LozFa3lnPV5D90MkjhgckCPBrsoSc1a7g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.0 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-react-jsx-source@7.22.5(@babel/core@7.23.0): + resolution: {integrity: sha512-yIiRO6yobeEIaI0RTbIr8iAK9FcBHLtZq0S89ZPjDLQXBA4xvghaKqI0etp/tF3htTM0sazJKKLz9oEiGRtu7w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.0 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-react-jsx@7.22.15(@babel/core@7.23.0): + resolution: {integrity: sha512-oKckg2eZFa8771O/5vi7XeTvmM6+O9cxZu+kanTU7tD4sin5nO/G8jGJhq8Hvt2Z0kUoEDRayuZLaUlYl8QuGA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.0 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-module-imports': 7.22.15 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.23.0) + '@babel/types': 7.23.0 + dev: false + + /@babel/plugin-transform-regenerator@7.22.10(@babel/core@7.23.0): + resolution: {integrity: sha512-F28b1mDt8KcT5bUyJc/U9nwzw6cV+UmTeRlXYIl2TNqMMJif0Jeey9/RQ3C4NOd2zp0/TRsDns9ttj2L523rsw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.0 + '@babel/helper-plugin-utils': 7.22.5 + regenerator-transform: 0.15.2 + + /@babel/plugin-transform-reserved-words@7.22.5(@babel/core@7.23.0): + resolution: {integrity: sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.0 + '@babel/helper-plugin-utils': 7.22.5 + + /@babel/plugin-transform-runtime@7.23.2(@babel/core@7.23.0): + resolution: {integrity: sha512-XOntj6icgzMS58jPVtQpiuF6ZFWxQiJavISGx5KGjRj+3gqZr8+N6Kx+N9BApWzgS+DOjIZfXXj0ZesenOWDyA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.0 + '@babel/helper-module-imports': 7.22.15 + '@babel/helper-plugin-utils': 7.22.5 + babel-plugin-polyfill-corejs2: 0.4.6(@babel/core@7.23.0) + babel-plugin-polyfill-corejs3: 0.8.5(@babel/core@7.23.0) + babel-plugin-polyfill-regenerator: 0.5.3(@babel/core@7.23.0) + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + /@babel/plugin-transform-shorthand-properties@7.22.5(@babel/core@7.23.0): + resolution: {integrity: sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.0 + '@babel/helper-plugin-utils': 7.22.5 + + /@babel/plugin-transform-spread@7.22.5(@babel/core@7.23.0): + resolution: {integrity: sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.0 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + + /@babel/plugin-transform-sticky-regex@7.22.5(@babel/core@7.23.0): + resolution: {integrity: sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.0 + '@babel/helper-plugin-utils': 7.22.5 + + /@babel/plugin-transform-template-literals@7.22.5(@babel/core@7.23.0): + resolution: {integrity: sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.0 + '@babel/helper-plugin-utils': 7.22.5 + + /@babel/plugin-transform-typeof-symbol@7.22.5(@babel/core@7.23.0): + resolution: {integrity: sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.0 + '@babel/helper-plugin-utils': 7.22.5 + + /@babel/plugin-transform-typescript@7.22.15(@babel/core@7.23.0): + resolution: {integrity: sha512-1uirS0TnijxvQLnlv5wQBwOX3E1wCFX7ITv+9pBV2wKEk4K+M5tqDaoNXnTH8tjEIYHLO98MwiTWO04Ggz4XuA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.0 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.0) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-typescript': 7.22.5(@babel/core@7.23.0) + + /@babel/plugin-transform-unicode-escapes@7.22.10(@babel/core@7.23.0): + resolution: {integrity: sha512-lRfaRKGZCBqDlRU3UIFovdp9c9mEvlylmpod0/OatICsSfuQ9YFthRo1tpTkGsklEefZdqlEFdY4A2dwTb6ohg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.0 + '@babel/helper-plugin-utils': 7.22.5 + + /@babel/plugin-transform-unicode-property-regex@7.22.5(@babel/core@7.23.0): + resolution: {integrity: sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.0 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.0) + '@babel/helper-plugin-utils': 7.22.5 + + /@babel/plugin-transform-unicode-regex@7.22.5(@babel/core@7.23.0): + resolution: {integrity: sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.0 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.0) + '@babel/helper-plugin-utils': 7.22.5 + + /@babel/plugin-transform-unicode-sets-regex@7.22.5(@babel/core@7.23.0): + resolution: {integrity: sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.0 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.0) + '@babel/helper-plugin-utils': 7.22.5 + + /@babel/preset-env@7.23.2(@babel/core@7.23.0): + resolution: {integrity: sha512-BW3gsuDD+rvHL2VO2SjAUNTBe5YrjsTiDyqamPDWY723na3/yPQ65X5oQkFVJZ0o50/2d+svm1rkPoJeR1KxVQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/compat-data': 7.23.2 + '@babel/core': 7.23.0 + '@babel/helper-compilation-targets': 7.22.15 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-validator-option': 7.22.15 + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.22.15(@babel/core@7.23.0) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.22.15(@babel/core@7.23.0) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.23.0) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.0) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.23.0) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.23.0) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.0) + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.23.0) + '@babel/plugin-syntax-import-assertions': 7.22.5(@babel/core@7.23.0) + '@babel/plugin-syntax-import-attributes': 7.22.5(@babel/core@7.23.0) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.23.0) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.0) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.0) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.0) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.0) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.0) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.0) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.0) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.0) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.23.0) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.23.0) + '@babel/plugin-transform-arrow-functions': 7.22.5(@babel/core@7.23.0) + '@babel/plugin-transform-async-generator-functions': 7.23.2(@babel/core@7.23.0) + '@babel/plugin-transform-async-to-generator': 7.22.5(@babel/core@7.23.0) + '@babel/plugin-transform-block-scoped-functions': 7.22.5(@babel/core@7.23.0) + '@babel/plugin-transform-block-scoping': 7.23.0(@babel/core@7.23.0) + '@babel/plugin-transform-class-properties': 7.22.5(@babel/core@7.23.0) + '@babel/plugin-transform-class-static-block': 7.22.11(@babel/core@7.23.0) + '@babel/plugin-transform-classes': 7.22.15(@babel/core@7.23.0) + '@babel/plugin-transform-computed-properties': 7.22.5(@babel/core@7.23.0) + '@babel/plugin-transform-destructuring': 7.23.0(@babel/core@7.23.0) + '@babel/plugin-transform-dotall-regex': 7.22.5(@babel/core@7.23.0) + '@babel/plugin-transform-duplicate-keys': 7.22.5(@babel/core@7.23.0) + '@babel/plugin-transform-dynamic-import': 7.22.11(@babel/core@7.23.0) + '@babel/plugin-transform-exponentiation-operator': 7.22.5(@babel/core@7.23.0) + '@babel/plugin-transform-export-namespace-from': 7.22.11(@babel/core@7.23.0) + '@babel/plugin-transform-for-of': 7.22.15(@babel/core@7.23.0) + '@babel/plugin-transform-function-name': 7.22.5(@babel/core@7.23.0) + '@babel/plugin-transform-json-strings': 7.22.11(@babel/core@7.23.0) + '@babel/plugin-transform-literals': 7.22.5(@babel/core@7.23.0) + '@babel/plugin-transform-logical-assignment-operators': 7.22.11(@babel/core@7.23.0) + '@babel/plugin-transform-member-expression-literals': 7.22.5(@babel/core@7.23.0) + '@babel/plugin-transform-modules-amd': 7.23.0(@babel/core@7.23.0) + '@babel/plugin-transform-modules-commonjs': 7.23.0(@babel/core@7.23.0) + '@babel/plugin-transform-modules-systemjs': 7.23.0(@babel/core@7.23.0) + '@babel/plugin-transform-modules-umd': 7.22.5(@babel/core@7.23.0) + '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.23.0) + '@babel/plugin-transform-new-target': 7.22.5(@babel/core@7.23.0) + '@babel/plugin-transform-nullish-coalescing-operator': 7.22.11(@babel/core@7.23.0) + '@babel/plugin-transform-numeric-separator': 7.22.11(@babel/core@7.23.0) + '@babel/plugin-transform-object-rest-spread': 7.22.15(@babel/core@7.23.0) + '@babel/plugin-transform-object-super': 7.22.5(@babel/core@7.23.0) + '@babel/plugin-transform-optional-catch-binding': 7.22.11(@babel/core@7.23.0) + '@babel/plugin-transform-optional-chaining': 7.23.0(@babel/core@7.23.0) + '@babel/plugin-transform-parameters': 7.22.15(@babel/core@7.23.0) + '@babel/plugin-transform-private-methods': 7.22.5(@babel/core@7.23.0) + '@babel/plugin-transform-private-property-in-object': 7.22.11(@babel/core@7.23.0) + '@babel/plugin-transform-property-literals': 7.22.5(@babel/core@7.23.0) + '@babel/plugin-transform-regenerator': 7.22.10(@babel/core@7.23.0) + '@babel/plugin-transform-reserved-words': 7.22.5(@babel/core@7.23.0) + '@babel/plugin-transform-shorthand-properties': 7.22.5(@babel/core@7.23.0) + '@babel/plugin-transform-spread': 7.22.5(@babel/core@7.23.0) + '@babel/plugin-transform-sticky-regex': 7.22.5(@babel/core@7.23.0) + '@babel/plugin-transform-template-literals': 7.22.5(@babel/core@7.23.0) + '@babel/plugin-transform-typeof-symbol': 7.22.5(@babel/core@7.23.0) + '@babel/plugin-transform-unicode-escapes': 7.22.10(@babel/core@7.23.0) + '@babel/plugin-transform-unicode-property-regex': 7.22.5(@babel/core@7.23.0) + '@babel/plugin-transform-unicode-regex': 7.22.5(@babel/core@7.23.0) + '@babel/plugin-transform-unicode-sets-regex': 7.22.5(@babel/core@7.23.0) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.23.0) + '@babel/types': 7.23.0 + babel-plugin-polyfill-corejs2: 0.4.6(@babel/core@7.23.0) + babel-plugin-polyfill-corejs3: 0.8.5(@babel/core@7.23.0) + babel-plugin-polyfill-regenerator: 0.5.3(@babel/core@7.23.0) + core-js-compat: 3.33.0 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + /@babel/preset-flow@7.22.15(@babel/core@7.23.0): + resolution: {integrity: sha512-dB5aIMqpkgbTfN5vDdTRPzjqtWiZcRESNR88QYnoPR+bmdYoluOzMX9tQerTv0XzSgZYctPfO1oc0N5zdog1ew==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.0 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-validator-option': 7.22.15 + '@babel/plugin-transform-flow-strip-types': 7.22.5(@babel/core@7.23.0) + dev: false + + /@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.23.0): + resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==} + peerDependencies: + '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 + dependencies: + '@babel/core': 7.23.0 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/types': 7.23.0 + esutils: 2.0.3 + + /@babel/preset-typescript@7.23.2(@babel/core@7.23.0): + resolution: {integrity: sha512-u4UJc1XsS1GhIGteM8rnGiIvf9rJpiVgMEeCnwlLA7WJPC+jcXWJAGxYmeqs5hOZD8BbAfnV5ezBOxQbb4OUxA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.0 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-validator-option': 7.22.15 + '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.23.0) + '@babel/plugin-transform-modules-commonjs': 7.23.0(@babel/core@7.23.0) + '@babel/plugin-transform-typescript': 7.22.15(@babel/core@7.23.0) + + /@babel/register@7.22.15(@babel/core@7.23.0): + resolution: {integrity: sha512-V3Q3EqoQdn65RCgTLwauZaTfd1ShhwPmbBv+1dkZV/HpCGMKVyn6oFcRlI7RaKqiDQjX2Qd3AuoEguBgdjIKlg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.0 + clone-deep: 4.0.1 + find-cache-dir: 2.1.0 + make-dir: 2.1.0 + pirates: 4.0.6 + source-map-support: 0.5.21 + dev: false + + /@babel/regjsgen@0.8.0: + resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==} + + /@babel/runtime@7.23.2: + resolution: {integrity: sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg==} + engines: {node: '>=6.9.0'} + dependencies: + regenerator-runtime: 0.14.0 + + /@babel/template@7.22.15: + resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.22.13 + '@babel/parser': 7.23.0 + '@babel/types': 7.23.0 + + /@babel/traverse@7.23.0: + resolution: {integrity: sha512-t/QaEvyIoIkwzpiZ7aoSKK8kObQYeF7T2v+dazAYCb8SXtp58zEVkWW7zAnju8FNKNdr4ScAOEDmMItbyOmEYw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.22.13 + '@babel/generator': 7.23.0 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-hoist-variables': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/parser': 7.23.0 + '@babel/types': 7.23.0 + debug: 4.3.4(supports-color@8.1.1) + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + /@babel/types@7.23.0: + resolution: {integrity: sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-string-parser': 7.22.5 + '@babel/helper-validator-identifier': 7.22.20 + to-fast-properties: 2.0.0 + + /@bcoe/v8-coverage@0.2.3: + resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} + dev: true + + /@chainsafe/as-sha256@0.3.1: + resolution: {integrity: sha512-hldFFYuf49ed7DAakWVXSJODuq3pzJEguD8tQ7h+sGkM18vja+OFoJI9krnGmgzyuZC2ETX0NOIcCTy31v2Mtg==} + dev: true + + /@chainsafe/persistent-merkle-tree@0.4.2: + resolution: {integrity: sha512-lLO3ihKPngXLTus/L7WHKaw9PnNJWizlOF1H9NNzHP6Xvh82vzg9F2bzkXhYIFshMZ2gTCEz8tq6STe7r5NDfQ==} + dependencies: + '@chainsafe/as-sha256': 0.3.1 + dev: true + + /@chainsafe/persistent-merkle-tree@0.5.0: + resolution: {integrity: sha512-l0V1b5clxA3iwQLXP40zYjyZYospQLZXzBVIhhr9kDg/1qHZfzzHw0jj4VPBijfYCArZDlPkRi1wZaV2POKeuw==} + dependencies: + '@chainsafe/as-sha256': 0.3.1 + dev: true + + /@chainsafe/ssz@0.10.2: + resolution: {integrity: sha512-/NL3Lh8K+0q7A3LsiFq09YXS9fPE+ead2rr7vM2QK8PLzrNsw3uqrif9bpRX5UxgeRjM+vYi+boCM3+GM4ovXg==} + dependencies: + '@chainsafe/as-sha256': 0.3.1 + '@chainsafe/persistent-merkle-tree': 0.5.0 + dev: true + + /@chainsafe/ssz@0.9.4: + resolution: {integrity: sha512-77Qtg2N1ayqs4Bg/wvnWfg5Bta7iy7IRh8XqXh7oNMeP2HBbBwx8m6yTpA8p0EHItWPEBkgZd5S5/LSlp3GXuQ==} + dependencies: + '@chainsafe/as-sha256': 0.3.1 + '@chainsafe/persistent-merkle-tree': 0.4.2 + case: 1.6.3 + dev: true + + /@cspotcode/source-map-support@0.8.1: + resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} + engines: {node: '>=12'} + dependencies: + '@jridgewell/trace-mapping': 0.3.9 + + /@envelop/core@3.0.6: + resolution: {integrity: sha512-06t1xCPXq6QFN7W1JUEf68aCwYN0OUDNAIoJe7bAqhaoa2vn7NCcuX1VHkJ/OWpmElUgCsRO6RiBbIru1in0Ig==} + dependencies: + '@envelop/types': 3.0.2 + tslib: 2.6.2 + dev: false + + /@envelop/core@4.0.3: + resolution: {integrity: sha512-O0Vz8E0TObT6ijAob8jYFVJavcGywKThM3UAsxUIBBVPYZTMiqI9lo2gmAnbMUnrDcAYkUTZEW9FDYPRdF5l6g==} + engines: {node: '>=16.0.0'} + dependencies: + '@envelop/types': 4.0.1 + tslib: 2.6.2 + dev: false + + /@envelop/extended-validation@2.0.6(@envelop/core@3.0.6)(graphql@16.8.1): + resolution: {integrity: sha512-aXAf1bg5Z71YfEKLCZ8OMUZAOYPGHV/a+7avd5TIMFNDxl5wJTmIonep3T+kdMpwRInDphfNPGFD0GcGdGxpHg==} + peerDependencies: + '@envelop/core': ^3.0.6 + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 + dependencies: + '@envelop/core': 3.0.6 + '@graphql-tools/utils': 8.13.1(graphql@16.8.1) + graphql: 16.8.1 + tslib: 2.6.2 + dev: false + + /@envelop/extended-validation@3.0.3(@envelop/core@4.0.3)(graphql@16.8.1): + resolution: {integrity: sha512-KYYzNTpccryoDq7NXCXXSG8iR0m+1p0QG1L9ud8mZL/A8bxsTyPniw7szM5B3B3VLzojbij9OIW4t7y5HXD90g==} + engines: {node: '>=16.0.0'} + peerDependencies: + '@envelop/core': ^4.0.3 + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 + dependencies: + '@envelop/core': 4.0.3 + '@graphql-tools/utils': 10.0.7(graphql@16.8.1) + graphql: 16.8.1 + tslib: 2.6.2 + dev: false + + /@envelop/graphql-jit@7.0.0(@envelop/core@4.0.3)(graphql@16.8.1): + resolution: {integrity: sha512-YDJx3W0QKFaKA0/oHpgV5aEubRtq5SuWqWEZZwpxt4fbHrQImA+H8sVj63QwaBKSvNTP+td/mi5aETq1hCBXpw==} + engines: {node: '>=16.0.0'} + peerDependencies: + '@envelop/core': ^4.0.3 + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 + dependencies: + '@envelop/core': 4.0.3 + graphql: 16.8.1 + graphql-jit: 0.8.2(graphql@16.8.1) + tslib: 2.6.2 + value-or-promise: 1.0.12 + dev: false + + /@envelop/types@3.0.2: + resolution: {integrity: sha512-pOFea9ha0EkURWxJ/35axoH9fDGP5S2cUu/5Mmo9pb8zUf+TaEot8vB670XXihFEn/92759BMjLJNWBKmNhyng==} + dependencies: + tslib: 2.6.2 + dev: false + + /@envelop/types@4.0.1: + resolution: {integrity: sha512-ULo27/doEsP7uUhm2iTnElx13qTO6I5FKvmLoX41cpfuw8x6e0NUFknoqhEsLzAbgz8xVS5mjwcxGCXh4lDYzg==} + engines: {node: '>=16.0.0'} + dependencies: + tslib: 2.6.2 + dev: false + + /@envelop/validation-cache@5.1.3(@envelop/core@3.0.6)(graphql@16.8.1): + resolution: {integrity: sha512-MkzcScQHJJQ/9YCAPdWShEi3xZv4F4neTs+NszzSrZOdlU8z/THuRt7gZ0sO0y2be+sx+SKjHQP8Gq3VXXcTTg==} + peerDependencies: + '@envelop/core': ^3.0.6 + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 + dependencies: + '@envelop/core': 3.0.6 + graphql: 16.8.1 + hash-it: 6.0.0 + lru-cache: 6.0.0 + tslib: 2.6.2 + dev: false + + /@eslint-community/eslint-utils@4.4.0(eslint@8.50.0): + resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + dependencies: + eslint: 8.50.0 + eslint-visitor-keys: 3.4.3 + dev: true + + /@eslint-community/regexpp@4.9.1: + resolution: {integrity: sha512-Y27x+MBLjXa+0JWDhykM3+JE+il3kHKAEqabfEWq3SDhZjLYb6/BHL/JKFnH3fe207JaXkyDo685Oc2Glt6ifA==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + dev: true + + /@eslint/eslintrc@2.1.2: + resolution: {integrity: sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + ajv: 6.12.6 + debug: 4.3.4(supports-color@8.1.1) + espree: 9.6.1 + globals: 13.22.0 + ignore: 5.2.4 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + dev: true + + /@eslint/js@8.50.0: + resolution: {integrity: sha512-NCC3zz2+nvYd+Ckfh87rA47zfu2QsQpvc6k1yzTk+b9KzRj0wkGa8LSoGOXN6Zv4lRf/EIoZ80biDh9HOI+RNQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + + /@ethereumjs/rlp@4.0.1: + resolution: {integrity: sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw==} + engines: {node: '>=14'} + hasBin: true + dev: true + + /@ethereumjs/util@8.1.0: + resolution: {integrity: sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA==} + engines: {node: '>=14'} + dependencies: + '@ethereumjs/rlp': 4.0.1 + ethereum-cryptography: 2.1.2 + micro-ftch: 0.3.1 + dev: true + + /@ethersproject/abi@5.0.7: + resolution: {integrity: sha512-Cqktk+hSIckwP/W8O47Eef60VwmoSC/L3lY0+dIBhQPCNn9E4V7rwmm2aFrNRRDJfFlGuZ1khkQUOc3oBX+niw==} + dependencies: + '@ethersproject/address': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/hash': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/strings': 5.7.0 + dev: true + + /@ethersproject/abi@5.7.0: + resolution: {integrity: sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==} + dependencies: + '@ethersproject/address': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/hash': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/strings': 5.7.0 + dev: true + + /@ethersproject/abstract-provider@5.7.0: + resolution: {integrity: sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw==} + dependencies: + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/networks': 5.7.1 + '@ethersproject/properties': 5.7.0 + '@ethersproject/transactions': 5.7.0 + '@ethersproject/web': 5.7.1 + dev: true + + /@ethersproject/abstract-signer@5.7.0: + resolution: {integrity: sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ==} + dependencies: + '@ethersproject/abstract-provider': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + dev: true + + /@ethersproject/address@5.7.0: + resolution: {integrity: sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==} + dependencies: + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/rlp': 5.7.0 + dev: true + + /@ethersproject/base64@5.7.0: + resolution: {integrity: sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ==} + dependencies: + '@ethersproject/bytes': 5.7.0 + dev: true + + /@ethersproject/basex@5.7.0: + resolution: {integrity: sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw==} + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/properties': 5.7.0 + dev: true + + /@ethersproject/bignumber@5.7.0: + resolution: {integrity: sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==} + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + bn.js: 5.2.1 + dev: true + + /@ethersproject/bytes@5.7.0: + resolution: {integrity: sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==} + dependencies: + '@ethersproject/logger': 5.7.0 + dev: true + + /@ethersproject/constants@5.7.0: + resolution: {integrity: sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==} + dependencies: + '@ethersproject/bignumber': 5.7.0 + dev: true + + /@ethersproject/contracts@5.7.0: + resolution: {integrity: sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg==} + dependencies: + '@ethersproject/abi': 5.7.0 + '@ethersproject/abstract-provider': 5.7.0 + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/address': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/transactions': 5.7.0 + dev: true + + /@ethersproject/hash@5.7.0: + resolution: {integrity: sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==} + dependencies: + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/address': 5.7.0 + '@ethersproject/base64': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/strings': 5.7.0 + dev: true + + /@ethersproject/hdnode@5.7.0: + resolution: {integrity: sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg==} + dependencies: + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/basex': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/pbkdf2': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/sha2': 5.7.0 + '@ethersproject/signing-key': 5.7.0 + '@ethersproject/strings': 5.7.0 + '@ethersproject/transactions': 5.7.0 + '@ethersproject/wordlists': 5.7.0 + dev: true + + /@ethersproject/json-wallets@5.7.0: + resolution: {integrity: sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g==} + dependencies: + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/address': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/hdnode': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/pbkdf2': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/random': 5.7.0 + '@ethersproject/strings': 5.7.0 + '@ethersproject/transactions': 5.7.0 + aes-js: 3.0.0 + scrypt-js: 3.0.1 + dev: true + + /@ethersproject/keccak256@5.7.0: + resolution: {integrity: sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==} + dependencies: + '@ethersproject/bytes': 5.7.0 + js-sha3: 0.8.0 + dev: true + + /@ethersproject/logger@5.7.0: + resolution: {integrity: sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==} + dev: true + + /@ethersproject/networks@5.7.1: + resolution: {integrity: sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ==} + dependencies: + '@ethersproject/logger': 5.7.0 + dev: true + + /@ethersproject/pbkdf2@5.7.0: + resolution: {integrity: sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw==} + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/sha2': 5.7.0 + dev: true + + /@ethersproject/properties@5.7.0: + resolution: {integrity: sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==} + dependencies: + '@ethersproject/logger': 5.7.0 + dev: true + + /@ethersproject/providers@5.7.2: + resolution: {integrity: sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg==} + dependencies: + '@ethersproject/abstract-provider': 5.7.0 + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/address': 5.7.0 + '@ethersproject/base64': 5.7.0 + '@ethersproject/basex': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/hash': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/networks': 5.7.1 + '@ethersproject/properties': 5.7.0 + '@ethersproject/random': 5.7.0 + '@ethersproject/rlp': 5.7.0 + '@ethersproject/sha2': 5.7.0 + '@ethersproject/strings': 5.7.0 + '@ethersproject/transactions': 5.7.0 + '@ethersproject/web': 5.7.1 + bech32: 1.1.4 + ws: 7.4.6 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: true + + /@ethersproject/random@5.7.0: + resolution: {integrity: sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ==} + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + dev: true + + /@ethersproject/rlp@5.7.0: + resolution: {integrity: sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==} + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + dev: true + + /@ethersproject/sha2@5.7.0: + resolution: {integrity: sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw==} + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + hash.js: 1.1.7 + dev: true + + /@ethersproject/signing-key@5.7.0: + resolution: {integrity: sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==} + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + bn.js: 5.2.1 + elliptic: 6.5.4 + hash.js: 1.1.7 + dev: true + + /@ethersproject/solidity@5.7.0: + resolution: {integrity: sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA==} + dependencies: + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/sha2': 5.7.0 + '@ethersproject/strings': 5.7.0 + dev: true + + /@ethersproject/strings@5.7.0: + resolution: {integrity: sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==} + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/logger': 5.7.0 dev: true - optional: true - /@esbuild/netbsd-x64@0.18.20: - resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true + /@ethersproject/transactions@5.7.0: + resolution: {integrity: sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ==} + dependencies: + '@ethersproject/address': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/rlp': 5.7.0 + '@ethersproject/signing-key': 5.7.0 dev: true - optional: true - /@esbuild/openbsd-x64@0.18.20: - resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true + /@ethersproject/units@5.7.0: + resolution: {integrity: sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg==} + dependencies: + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/logger': 5.7.0 dev: true - optional: true - /@esbuild/sunos-x64@0.18.20: - resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true - optional: true + /@ethersproject/wallet@5.7.0: + resolution: {integrity: sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA==} + dependencies: + '@ethersproject/abstract-provider': 5.7.0 + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/address': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/hash': 5.7.0 + '@ethersproject/hdnode': 5.7.0 + '@ethersproject/json-wallets': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/random': 5.7.0 + '@ethersproject/signing-key': 5.7.0 + '@ethersproject/transactions': 5.7.0 + '@ethersproject/wordlists': 5.7.0 + dev: true + + /@ethersproject/web@5.7.1: + resolution: {integrity: sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==} + dependencies: + '@ethersproject/base64': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/strings': 5.7.0 + dev: true + + /@ethersproject/wordlists@5.7.0: + resolution: {integrity: sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA==} + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/hash': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/strings': 5.7.0 + dev: true + + /@fastify/busboy@2.0.0: + resolution: {integrity: sha512-JUFJad5lv7jxj926GPgymrWQxxjPYuJNiNjNMzqT+HiuP6Vl3dk5xzG+8sTX96np0ZAluvaMzPsjhHZ5rNuNQQ==} + engines: {node: '>=14'} + dev: true + + /@fastify/deepmerge@1.3.0: + resolution: {integrity: sha512-J8TOSBq3SoZbDhM9+R/u77hP93gz/rajSA+K2kGyijPpORPWUXHUpTaleoj+92As0S9uPRP7Oi8IqMf0u+ro6A==} + dev: false + + /@float-capital/float-subgraph-uncrashable@0.0.0-internal-testing.5: + resolution: {integrity: sha512-yZ0H5e3EpAYKokX/AbtplzlvSxEJY7ZfpvQyDzyODkks0hakAAlDG6fQu1SlDJMWorY7bbq1j7fCiFeTWci6TA==} + hasBin: true + dependencies: + '@rescript/std': 9.0.0 + graphql: 16.8.1 + graphql-import-node: 0.0.5(graphql@16.8.1) + js-yaml: 4.1.0 + dev: true + + /@graphprotocol/client-add-source-name@2.0.0(@graphql-mesh/types@0.93.2)(@graphql-tools/delegate@10.0.3)(@graphql-tools/utils@9.2.1)(@graphql-tools/wrap@10.0.1)(graphql@16.8.1): + resolution: {integrity: sha512-3vX8mVPIEJFwAoRhjTPd9IjQrBuE+Gv+JB7IEf8/9222qiU9EzHVFUekKxVtcxQXD40CfageS41CxOreWQ1enA==} + engines: {node: '>=16.0.0'} + peerDependencies: + '@graphql-mesh/types': ^0.78.0 || ^0.79.0 || ^0.80.0 || ^0.81.0 || ^0.82.0 || ^0.83.0 || ^0.84.0 || ^0.85.0 || ^0.89.0 || ^0.90.0 || ^0.91.0 || ^0.93.0 + '@graphql-tools/delegate': ^9.0.32 || ^10.0.0 + '@graphql-tools/utils': ^9.2.1 || ^10.0.0 + '@graphql-tools/wrap': ^9.4.2 || ^10.0.0 + graphql: ^15.2.0 || ^16.0.0 + dependencies: + '@graphql-mesh/types': 0.93.2(@graphql-mesh/store@0.95.7)(@graphql-tools/utils@9.2.1)(graphql@16.8.1)(tslib@2.6.2) + '@graphql-tools/delegate': 10.0.3(graphql@16.8.1) + '@graphql-tools/utils': 9.2.1(graphql@16.8.1) + '@graphql-tools/wrap': 10.0.1(graphql@16.8.1) + graphql: 16.8.1 + lodash: 4.17.21 + tslib: 2.6.2 + dev: false + + /@graphprotocol/client-auto-pagination@2.0.0(@graphql-mesh/types@0.93.2)(@graphql-tools/delegate@10.0.3)(@graphql-tools/utils@9.2.1)(@graphql-tools/wrap@10.0.1)(graphql@16.8.1): + resolution: {integrity: sha512-TouHgs6rQLpZSgnMoPdes8/ZTtMMEoxWeUUCkfho/xfSi49prb5DcsI83pykln0OEAUnNPnaX0MhP+xA5LtFSg==} + engines: {node: '>=16.0.0'} + peerDependencies: + '@graphql-mesh/types': ^0.78.0 || ^0.79.0 || ^0.80.0 || ^0.81.0 || ^0.82.0 || ^0.83.0 || ^0.84.0 || ^0.85.0 || ^0.89.0 || ^0.90.0 || ^0.91.0 || ^0.93.0 + '@graphql-tools/delegate': ^9.0.32 || ^10.0.0 + '@graphql-tools/utils': ^9.2.1 || ^10.0.0 + '@graphql-tools/wrap': ^9.4.2 || ^10.0.0 + graphql: ^15.2.0 || ^16.0.0 + dependencies: + '@graphql-mesh/types': 0.93.2(@graphql-mesh/store@0.95.7)(@graphql-tools/utils@9.2.1)(graphql@16.8.1)(tslib@2.6.2) + '@graphql-tools/delegate': 10.0.3(graphql@16.8.1) + '@graphql-tools/utils': 9.2.1(graphql@16.8.1) + '@graphql-tools/wrap': 10.0.1(graphql@16.8.1) + graphql: 16.8.1 + lodash: 4.17.21 + tslib: 2.6.2 + dev: false + + /@graphprotocol/client-auto-type-merging@2.0.0(@graphql-mesh/types@0.93.2)(@graphql-mesh/utils@0.95.7)(@graphql-tools/delegate@10.0.3)(graphql@16.8.1): + resolution: {integrity: sha512-mxqXKHK2lO+k4r02Q44n3qhd5dufo+SSDduD8zGUDBsYcRQAtQD9PwmXRHyUoB9nw4A+NC+CtVh+76fueXCG1w==} + engines: {node: '>=16.0.0'} + peerDependencies: + '@graphql-mesh/types': ^0.78.0 || ^0.79.0 || ^0.80.0 || ^0.81.0 || ^0.82.0 || ^0.83.0 || ^0.84.0 || ^0.85.0 || ^0.89.0 || ^0.90.0 || ^0.91.0 || ^0.93.0 + '@graphql-tools/delegate': ^9.0.32 || ^10.0.0 + graphql: ^15.2.0 || ^16.0.0 + dependencies: + '@graphql-mesh/transform-type-merging': 0.93.1(@graphql-mesh/types@0.93.2)(@graphql-mesh/utils@0.95.7)(graphql@16.8.1)(tslib@2.6.2) + '@graphql-mesh/types': 0.93.2(@graphql-mesh/store@0.95.7)(@graphql-tools/utils@9.2.1)(graphql@16.8.1)(tslib@2.6.2) + '@graphql-tools/delegate': 10.0.3(graphql@16.8.1) + graphql: 16.8.1 + tslib: 2.6.2 + transitivePeerDependencies: + - '@graphql-mesh/utils' + dev: false + + /@graphprotocol/client-block-tracking@2.0.0(@graphql-tools/delegate@10.0.3)(graphql@16.8.1): + resolution: {integrity: sha512-mpr0JAlefFGhxeb25ndeRKZ+t9cDHcUKGfRKIsoDzCclUEh5tBVTiQCDVGt6Eu+pxnrHPF2v/NQWktaB3+6twQ==} + engines: {node: '>=16.0.0'} + peerDependencies: + '@graphql-tools/delegate': ^9.0.32 || ^10.0.0 + graphql: ^15.2.0 || ^16.0.0 + dependencies: + '@graphql-tools/delegate': 10.0.3(graphql@16.8.1) + '@graphql-tools/utils': 10.0.7(graphql@16.8.1) + graphql: 16.8.1 + tslib: 2.6.2 + dev: false + + /@graphprotocol/client-cli@3.0.0(@babel/core@7.23.0)(@envelop/core@4.0.3)(@graphql-mesh/cross-helpers@0.4.1)(@graphql-mesh/store@0.95.7)(@graphql-mesh/types@0.93.2)(@graphql-mesh/utils@0.95.7)(@graphql-tools/delegate@10.0.3)(@graphql-tools/merge@9.0.0)(@graphql-tools/utils@9.2.1)(@graphql-tools/wrap@10.0.1)(@types/node@20.8.0)(graphql-tag@2.12.6)(graphql@16.8.1)(react-native@0.72.5): + resolution: {integrity: sha512-hTISbOzKavlDifBNsR6JqQMfdYwY7++hflPy+c3WHRrZ4OMoxFmW7ZuvaP6LvgKdJV77O8w9dnT/uxeHs6a90g==} + engines: {node: '>=16.0.0'} + hasBin: true + peerDependencies: + graphql: ^15.2.0 || ^16.0.0 + dependencies: + '@graphprotocol/client-add-source-name': 2.0.0(@graphql-mesh/types@0.93.2)(@graphql-tools/delegate@10.0.3)(@graphql-tools/utils@9.2.1)(@graphql-tools/wrap@10.0.1)(graphql@16.8.1) + '@graphprotocol/client-auto-pagination': 2.0.0(@graphql-mesh/types@0.93.2)(@graphql-tools/delegate@10.0.3)(@graphql-tools/utils@9.2.1)(@graphql-tools/wrap@10.0.1)(graphql@16.8.1) + '@graphprotocol/client-auto-type-merging': 2.0.0(@graphql-mesh/types@0.93.2)(@graphql-mesh/utils@0.95.7)(@graphql-tools/delegate@10.0.3)(graphql@16.8.1) + '@graphprotocol/client-block-tracking': 2.0.0(@graphql-tools/delegate@10.0.3)(graphql@16.8.1) + '@graphprotocol/client-polling-live': 2.0.0(@envelop/core@4.0.3)(@graphql-tools/merge@9.0.0)(graphql@16.8.1) + '@graphql-mesh/cli': 0.82.35(@babel/core@7.23.0)(@types/node@20.8.0)(graphql-tag@2.12.6)(graphql@16.8.1)(react-native@0.72.5) + '@graphql-mesh/graphql': 0.93.1(@graphql-mesh/cross-helpers@0.4.1)(@graphql-mesh/store@0.95.7)(@graphql-mesh/types@0.93.2)(@graphql-mesh/utils@0.95.7)(@graphql-tools/utils@9.2.1)(@types/node@20.8.0)(graphql@16.8.1)(tslib@2.6.2) + graphql: 16.8.1 + tslib: 2.6.2 + transitivePeerDependencies: + - '@babel/core' + - '@envelop/core' + - '@graphql-mesh/cross-helpers' + - '@graphql-mesh/store' + - '@graphql-mesh/types' + - '@graphql-mesh/utils' + - '@graphql-tools/delegate' + - '@graphql-tools/merge' + - '@graphql-tools/utils' + - '@graphql-tools/wrap' + - '@swc/core' + - '@swc/wasm' + - '@types/node' + - bufferutil + - encoding + - graphql-tag + - react-native + - react-native-windows + - supports-color + - utf-8-validate + dev: false + + /@graphprotocol/client-polling-live@2.0.0(@envelop/core@4.0.3)(@graphql-tools/merge@9.0.0)(graphql@16.8.1): + resolution: {integrity: sha512-JQ0sKiFCX+ErR0fynBNUg/WDiVaaEndlS12fkgrFZrQA2vVpSyow9pW0nKMGVZJa4cN+VDskgwqK5BWXMvdeRA==} + engines: {node: '>=16.0.0'} + peerDependencies: + '@envelop/core': ^2.4.2 || ^3.0.0 || ^4.0.0 + '@graphql-tools/merge': ^8.3.14 || ^9.0.0 + graphql: ^15.2.0 || ^16.0.0 + dependencies: + '@envelop/core': 4.0.3 + '@graphql-tools/merge': 9.0.0(graphql@16.8.1) + '@repeaterjs/repeater': 3.0.4 + graphql: 16.8.1 + tslib: 2.6.2 + dev: false + + /@graphprotocol/graph-cli@0.58.0(@types/node@20.8.0)(node-fetch@3.3.2)(typescript@5.2.2): + resolution: {integrity: sha512-EbdL5LZFmIMAuItQXv7LXgd7cqYQ3BdIJR2jxNr+LRL0juBAxmEz6zVvYnIUmgXoa5SB5rxE9ZT6pfe+fhbD6Q==} + engines: {node: '>=14'} + hasBin: true + dependencies: + '@float-capital/float-subgraph-uncrashable': 0.0.0-internal-testing.5 + '@oclif/core': 2.8.6(@types/node@20.8.0)(typescript@5.2.2) + '@oclif/plugin-autocomplete': 2.3.8(@types/node@20.8.0)(typescript@5.2.2) + '@oclif/plugin-not-found': 2.4.1(@types/node@20.8.0)(typescript@5.2.2) + '@whatwg-node/fetch': 0.8.8 + assemblyscript: 0.19.23 + binary-install-raw: 0.0.13(debug@4.3.4) + chalk: 3.0.0 + chokidar: 3.5.3 + debug: 4.3.4(supports-color@8.1.1) + docker-compose: 0.23.19 + dockerode: 2.5.8 + fs-extra: 9.1.0 + glob: 9.3.5 + gluegun: 5.1.2(debug@4.3.4) + graphql: 15.5.0 + immutable: 4.2.1 + ipfs-http-client: 55.0.0(node-fetch@3.3.2) + jayson: 4.0.0 + js-yaml: 3.14.1 + prettier: 1.19.1 + request: 2.88.2 + semver: 7.5.4 + sync-request: 6.1.0 + tmp-promise: 3.0.3 + web3-eth-abi: 1.7.0 + which: 2.0.2 + yaml: 1.10.2 + transitivePeerDependencies: + - '@swc/core' + - '@swc/wasm' + - '@types/node' + - bufferutil + - encoding + - node-fetch + - supports-color + - typescript + - utf-8-validate + dev: true + + /@graphprotocol/graph-ts@0.31.0: + resolution: {integrity: sha512-xreRVM6ho2BtolyOh2flDkNoGZximybnzUnF53zJVp0+Ed0KnAlO1/KOCUYw06euVI9tk0c9nA2Z/D5SIQV2Rg==} + dependencies: + assemblyscript: 0.19.10 + dev: true + + /@graphql-codegen/core@3.1.0(graphql@16.8.1): + resolution: {integrity: sha512-DH1/yaR7oJE6/B+c6ZF2Tbdh7LixF1K8L+8BoSubjNyQ8pNwR4a70mvc1sv6H7qgp6y1bPQ9tKE+aazRRshysw==} + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + dependencies: + '@graphql-codegen/plugin-helpers': 4.2.0(graphql@16.8.1) + '@graphql-tools/schema': 9.0.19(graphql@16.8.1) + '@graphql-tools/utils': 9.2.1(graphql@16.8.1) + graphql: 16.8.1 + tslib: 2.5.3 + dev: false + + /@graphql-codegen/plugin-helpers@2.7.2(graphql@16.8.1): + resolution: {integrity: sha512-kln2AZ12uii6U59OQXdjLk5nOlh1pHis1R98cDZGFnfaiAbX9V3fxcZ1MMJkB7qFUymTALzyjZoXXdyVmPMfRg==} + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + dependencies: + '@graphql-tools/utils': 8.13.1(graphql@16.8.1) + change-case-all: 1.0.14 + common-tags: 1.8.2 + graphql: 16.8.1 + import-from: 4.0.0 + lodash: 4.17.21 + tslib: 2.4.0 + dev: false + + /@graphql-codegen/plugin-helpers@3.1.2(graphql@16.8.1): + resolution: {integrity: sha512-emOQiHyIliVOIjKVKdsI5MXj312zmRDwmHpyUTZMjfpvxq/UVAHUJIVdVf+lnjjrI+LXBTgMlTWTgHQfmICxjg==} + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + dependencies: + '@graphql-tools/utils': 9.2.1(graphql@16.8.1) + change-case-all: 1.0.15 + common-tags: 1.8.2 + graphql: 16.8.1 + import-from: 4.0.0 + lodash: 4.17.21 + tslib: 2.4.0 + dev: false + + /@graphql-codegen/plugin-helpers@4.2.0(graphql@16.8.1): + resolution: {integrity: sha512-THFTCfg+46PXlXobYJ/OoCX6pzjI+9woQqCjdyKtgoI0tn3Xq2HUUCiidndxUpEYVrXb5pRiRXb7b/ZbMQqD0A==} + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + dependencies: + '@graphql-tools/utils': 9.2.1(graphql@16.8.1) + change-case-all: 1.0.15 + common-tags: 1.8.2 + graphql: 16.8.1 + import-from: 4.0.0 + lodash: 4.17.21 + tslib: 2.5.3 + dev: false + + /@graphql-codegen/schema-ast@3.0.1(graphql@16.8.1): + resolution: {integrity: sha512-rTKTi4XiW4QFZnrEqetpiYEWVsOFNoiR/v3rY9mFSttXFbIwNXPme32EspTiGWmEEdHY8UuTDtZN3vEcs/31zw==} + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + dependencies: + '@graphql-codegen/plugin-helpers': 4.2.0(graphql@16.8.1) + '@graphql-tools/utils': 9.2.1(graphql@16.8.1) + graphql: 16.8.1 + tslib: 2.5.3 + dev: false + + /@graphql-codegen/typed-document-node@4.0.1(graphql@16.8.1): + resolution: {integrity: sha512-mQNYCd12JsFSaK6xLry4olY9TdYG7GxQPexU6qU4Om++eKhseGwk2eGmQDRG4Qp8jEDFLMXuHMVUKqMQ1M+F/A==} + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + dependencies: + '@graphql-codegen/plugin-helpers': 4.2.0(graphql@16.8.1) + '@graphql-codegen/visitor-plugin-common': 3.1.1(graphql@16.8.1) + auto-bind: 4.0.0 + change-case-all: 1.0.15 + graphql: 16.8.1 + tslib: 2.5.3 + transitivePeerDependencies: + - encoding + - supports-color + dev: false + + /@graphql-codegen/typescript-generic-sdk@3.1.0(graphql-tag@2.12.6)(graphql@16.8.1): + resolution: {integrity: sha512-nQZi/YGRI1+qCZZsh0V5nz6+hCHSN4OU9tKyOTDsEPyDFnGEukDuRdCH2IZasGn22a3Iu5TUDkgp5w9wEQwGmg==} + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + graphql-tag: ^2.0.0 + dependencies: + '@graphql-codegen/plugin-helpers': 3.1.2(graphql@16.8.1) + '@graphql-codegen/visitor-plugin-common': 2.13.1(graphql@16.8.1) + auto-bind: 4.0.0 + graphql: 16.8.1 + graphql-tag: 2.12.6(graphql@16.8.1) + tslib: 2.4.0 + transitivePeerDependencies: + - encoding + - supports-color + dev: false + + /@graphql-codegen/typescript-operations@3.0.4(graphql@16.8.1): + resolution: {integrity: sha512-6yE2OL2+WJ1vd5MwFEGXpaxsFGzjAGUytPVHDML3Bi3TwP1F3lnQlIko4untwvHW0JhZEGQ7Ck30H9HjcxpdKA==} + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + dependencies: + '@graphql-codegen/plugin-helpers': 4.2.0(graphql@16.8.1) + '@graphql-codegen/typescript': 3.0.4(graphql@16.8.1) + '@graphql-codegen/visitor-plugin-common': 3.1.1(graphql@16.8.1) + auto-bind: 4.0.0 + graphql: 16.8.1 + tslib: 2.5.3 + transitivePeerDependencies: + - encoding + - supports-color + dev: false + + /@graphql-codegen/typescript-resolvers@3.2.1(graphql@16.8.1): + resolution: {integrity: sha512-2ZIHk5J6HTuylse5ZIxw+aega54prHxvj7vM8hiKJ6vejZ94kvVPAq4aWmSFOkZ5lqU3YnM/ZyWfnhT5CUDj1g==} + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + dependencies: + '@graphql-codegen/plugin-helpers': 4.2.0(graphql@16.8.1) + '@graphql-codegen/typescript': 3.0.4(graphql@16.8.1) + '@graphql-codegen/visitor-plugin-common': 3.1.1(graphql@16.8.1) + '@graphql-tools/utils': 9.2.1(graphql@16.8.1) + auto-bind: 4.0.0 + graphql: 16.8.1 + tslib: 2.5.3 + transitivePeerDependencies: + - encoding + - supports-color + dev: false + + /@graphql-codegen/typescript@3.0.4(graphql@16.8.1): + resolution: {integrity: sha512-x4O47447DZrWNtE/l5CU9QzzW4m1RbmCEdijlA3s2flG/y1Ckqdemob4CWfilSm5/tZ3w1junVDY616RDTSvZw==} + peerDependencies: + graphql: ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + dependencies: + '@graphql-codegen/plugin-helpers': 4.2.0(graphql@16.8.1) + '@graphql-codegen/schema-ast': 3.0.1(graphql@16.8.1) + '@graphql-codegen/visitor-plugin-common': 3.1.1(graphql@16.8.1) + auto-bind: 4.0.0 + graphql: 16.8.1 + tslib: 2.5.3 + transitivePeerDependencies: + - encoding + - supports-color + dev: false + + /@graphql-codegen/visitor-plugin-common@2.13.1(graphql@16.8.1): + resolution: {integrity: sha512-mD9ufZhDGhyrSaWQGrU1Q1c5f01TeWtSWy/cDwXYjJcHIj1Y/DG2x0tOflEfCvh5WcnmHNIw4lzDsg1W7iFJEg==} + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + dependencies: + '@graphql-codegen/plugin-helpers': 2.7.2(graphql@16.8.1) + '@graphql-tools/optimize': 1.4.0(graphql@16.8.1) + '@graphql-tools/relay-operation-optimizer': 6.5.18(graphql@16.8.1) + '@graphql-tools/utils': 8.13.1(graphql@16.8.1) + auto-bind: 4.0.0 + change-case-all: 1.0.14 + dependency-graph: 0.11.0 + graphql: 16.8.1 + graphql-tag: 2.12.6(graphql@16.8.1) + parse-filepath: 1.0.2 + tslib: 2.4.0 + transitivePeerDependencies: + - encoding + - supports-color + dev: false - /@esbuild/win32-arm64@0.18.20: - resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] - requiresBuild: true - dev: true - optional: true + /@graphql-codegen/visitor-plugin-common@3.1.1(graphql@16.8.1): + resolution: {integrity: sha512-uAfp+zu/009R3HUAuTK2AamR1bxIltM6rrYYI6EXSmkM3rFtFsLTuJhjUDj98HcUCszJZrADppz8KKLGRUVlNg==} + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + dependencies: + '@graphql-codegen/plugin-helpers': 4.2.0(graphql@16.8.1) + '@graphql-tools/optimize': 1.4.0(graphql@16.8.1) + '@graphql-tools/relay-operation-optimizer': 6.5.18(graphql@16.8.1) + '@graphql-tools/utils': 9.2.1(graphql@16.8.1) + auto-bind: 4.0.0 + change-case-all: 1.0.15 + dependency-graph: 0.11.0 + graphql: 16.8.1 + graphql-tag: 2.12.6(graphql@16.8.1) + parse-filepath: 1.0.2 + tslib: 2.5.3 + transitivePeerDependencies: + - encoding + - supports-color + dev: false - /@esbuild/win32-ia32@0.18.20: - resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true + /@graphql-inspector/core@3.3.0(graphql@16.8.1): + resolution: {integrity: sha512-LRtk9sHgj9qqVPIkkThAVq3iZ7QxgHCx6elEwd0eesZBCmaIYQxD/BFu+VT8jr10YfOURBZuAnVdyGu64vYpBg==} + peerDependencies: + graphql: ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + dependencies: + dependency-graph: 0.11.0 + graphql: 16.8.1 + object-inspect: 1.10.3 + tslib: 2.6.2 + dev: false - /@esbuild/win32-x64@0.18.20: - resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true + /@graphql-inspector/core@5.0.1(graphql@16.8.1): + resolution: {integrity: sha512-1CWfFYucnRdULGiN1NDSinlNlpucBT+0x4i4AIthKe5n5jD9RIVyJtkA8zBbujUFrP++YE3l+TQifwbN1yTQsw==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 + dependencies: + dependency-graph: 0.11.0 + graphql: 16.8.1 + object-inspect: 1.12.3 + tslib: 2.6.0 + dev: false - /@eslint-community/eslint-utils@4.4.0(eslint@8.50.0): - resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@graphql-mesh/cache-localforage@0.93.1(@graphql-mesh/types@0.93.2)(@graphql-mesh/utils@0.93.2)(graphql@16.8.1)(tslib@2.6.2): + resolution: {integrity: sha512-cY/LJ+XC8kiyPoLxqPAMlOAvaeB81CZafdadLNyNDFuu66qDiZqWTYPw/lnhp2nyeukC8o/P69oP7d2OqVaCZA==} peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + '@graphql-mesh/types': ^0.93.1 + '@graphql-mesh/utils': ^0.93.1 + graphql: '*' + tslib: ^2.4.0 dependencies: - eslint: 8.50.0 - eslint-visitor-keys: 3.4.3 - dev: true + '@graphql-mesh/types': 0.93.2(@graphql-mesh/store@0.95.7)(@graphql-tools/utils@9.2.1)(graphql@16.8.1)(tslib@2.6.2) + '@graphql-mesh/utils': 0.93.2(@graphql-mesh/cross-helpers@0.3.4)(@graphql-mesh/types@0.93.2)(@graphql-tools/utils@9.2.1)(graphql@16.8.1)(tslib@2.6.2) + graphql: 16.8.1 + localforage: 1.10.0 + tslib: 2.6.2 + dev: false - /@eslint-community/regexpp@4.9.1: - resolution: {integrity: sha512-Y27x+MBLjXa+0JWDhykM3+JE+il3kHKAEqabfEWq3SDhZjLYb6/BHL/JKFnH3fe207JaXkyDo685Oc2Glt6ifA==} - engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - dev: true + /@graphql-mesh/cache-localforage@0.95.7(@graphql-mesh/types@0.93.2)(@graphql-mesh/utils@0.95.7)(graphql@16.8.1)(tslib@2.6.2): + resolution: {integrity: sha512-/e9sFn0kgSxGE6O/GWfdGnFMOIfk1Y+IZwRqPIofHmIPdyC5cZ/gnkN6oRQv7nnx+c9hzQQ5OnxiOGdOKwb1cg==} + engines: {node: '>=16.0.0'} + peerDependencies: + '@graphql-mesh/types': ^0.95.7 + '@graphql-mesh/utils': ^0.95.7 + graphql: '*' + tslib: ^2.4.0 + dependencies: + '@graphql-mesh/types': 0.93.2(@graphql-mesh/store@0.95.7)(@graphql-tools/utils@9.2.1)(graphql@16.8.1)(tslib@2.6.2) + '@graphql-mesh/utils': 0.95.7(@graphql-mesh/cross-helpers@0.4.1)(@graphql-mesh/types@0.93.2)(@graphql-tools/utils@9.2.1)(graphql@16.8.1)(tslib@2.6.2) + graphql: 16.8.1 + localforage: 1.10.0 + tslib: 2.6.2 + dev: false - /@eslint/eslintrc@2.1.2: - resolution: {integrity: sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@graphql-mesh/cli@0.82.35(@babel/core@7.23.0)(@types/node@20.8.0)(graphql-tag@2.12.6)(graphql@16.8.1)(react-native@0.72.5): + resolution: {integrity: sha512-5IuXpk+Zpg05u6qNPX19VzC5/HCiLdDRF6EPZ3ze57FIRgGA3YsB1CUGga6Ky3inalURYwx0kWqmdjbdKZYx1w==} + hasBin: true + peerDependencies: + graphql: '*' dependencies: - ajv: 6.12.6 - debug: 4.3.4(supports-color@8.1.1) - espree: 9.6.1 - globals: 13.22.0 - ignore: 5.2.4 - import-fresh: 3.3.0 - js-yaml: 4.1.0 - minimatch: 3.1.2 - strip-json-comments: 3.1.1 + '@graphql-codegen/core': 3.1.0(graphql@16.8.1) + '@graphql-codegen/typed-document-node': 4.0.1(graphql@16.8.1) + '@graphql-codegen/typescript': 3.0.4(graphql@16.8.1) + '@graphql-codegen/typescript-generic-sdk': 3.1.0(graphql-tag@2.12.6)(graphql@16.8.1) + '@graphql-codegen/typescript-operations': 3.0.4(graphql@16.8.1) + '@graphql-codegen/typescript-resolvers': 3.2.1(graphql@16.8.1) + '@graphql-mesh/config': 0.93.1(@babel/core@7.23.0)(@graphql-mesh/cross-helpers@0.3.4)(@graphql-mesh/runtime@0.93.2)(@graphql-mesh/store@0.93.1)(@graphql-mesh/types@0.93.2)(@graphql-mesh/utils@0.93.2)(@graphql-tools/utils@9.2.1)(graphql@16.8.1)(tslib@2.6.2) + '@graphql-mesh/cross-helpers': 0.3.4(@graphql-tools/utils@9.2.1)(graphql@16.8.1)(react-native@0.72.5) + '@graphql-mesh/http': 0.93.2(@graphql-mesh/cross-helpers@0.3.4)(@graphql-mesh/runtime@0.93.2)(@graphql-mesh/types@0.93.2)(@graphql-mesh/utils@0.93.2)(graphql@16.8.1)(tslib@2.6.2) + '@graphql-mesh/runtime': 0.93.2(@graphql-mesh/cross-helpers@0.3.4)(@graphql-mesh/types@0.93.2)(@graphql-mesh/utils@0.93.2)(@graphql-tools/utils@9.2.1)(graphql@16.8.1)(tslib@2.6.2) + '@graphql-mesh/store': 0.93.1(@graphql-mesh/cross-helpers@0.3.4)(@graphql-mesh/types@0.93.2)(@graphql-mesh/utils@0.93.2)(@graphql-tools/utils@9.2.1)(graphql@16.8.1)(tslib@2.6.2) + '@graphql-mesh/types': 0.93.2(@graphql-mesh/store@0.95.7)(@graphql-tools/utils@9.2.1)(graphql@16.8.1)(tslib@2.6.2) + '@graphql-mesh/utils': 0.93.2(@graphql-mesh/cross-helpers@0.3.4)(@graphql-mesh/types@0.93.2)(@graphql-tools/utils@9.2.1)(graphql@16.8.1)(tslib@2.6.2) + '@graphql-tools/utils': 9.2.1(graphql@16.8.1) + ajv: 8.12.0 + change-case: 4.1.2 + cosmiconfig: 8.2.0 + dnscache: 1.0.2 + dotenv: 16.3.1 + graphql: 16.8.1 + graphql-import-node: 0.0.5(graphql@16.8.1) + graphql-ws: 5.14.1(graphql@16.8.1) + json-bigint-patch: 0.0.8 + json5: 2.2.3 + mkdirp: 3.0.1 + open: 7.4.2 + pascal-case: 3.1.2 + rimraf: 5.0.5 + ts-node: 10.9.1(@types/node@20.8.0)(typescript@5.2.2) + tsconfig-paths: 4.2.0 + tslib: 2.6.2 + typescript: 5.2.2 + ws: 8.13.0 + yargs: 17.7.2 transitivePeerDependencies: + - '@babel/core' + - '@swc/core' + - '@swc/wasm' + - '@types/node' + - bufferutil + - encoding + - graphql-tag + - react-native + - react-native-windows - supports-color - dev: true + - utf-8-validate + dev: false - /@eslint/js@8.50.0: - resolution: {integrity: sha512-NCC3zz2+nvYd+Ckfh87rA47zfu2QsQpvc6k1yzTk+b9KzRj0wkGa8LSoGOXN6Zv4lRf/EIoZ80biDh9HOI+RNQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true + /@graphql-mesh/config@0.93.1(@babel/core@7.23.0)(@graphql-mesh/cross-helpers@0.3.4)(@graphql-mesh/runtime@0.93.2)(@graphql-mesh/store@0.93.1)(@graphql-mesh/types@0.93.2)(@graphql-mesh/utils@0.93.2)(@graphql-tools/utils@9.2.1)(graphql@16.8.1)(tslib@2.6.2): + resolution: {integrity: sha512-g4omjuBBVPtyhEDeEa6uwfSSvUehV3zcwZVNbk+UJuFJEYPO4yBLsxfEZBpoeO6EriiPX2WnQyn5kiHbC3YTRA==} + peerDependencies: + '@graphql-mesh/cross-helpers': ^0.3.4 + '@graphql-mesh/runtime': ^0.93.1 + '@graphql-mesh/store': ^0.93.1 + '@graphql-mesh/types': ^0.93.1 + '@graphql-mesh/utils': ^0.93.1 + '@graphql-tools/utils': ^9.2.1 + graphql: '*' + tslib: ^2.4.0 + dependencies: + '@envelop/core': 3.0.6 + '@graphql-mesh/cache-localforage': 0.93.1(@graphql-mesh/types@0.93.2)(@graphql-mesh/utils@0.93.2)(graphql@16.8.1)(tslib@2.6.2) + '@graphql-mesh/cross-helpers': 0.3.4(@graphql-tools/utils@9.2.1)(graphql@16.8.1)(react-native@0.72.5) + '@graphql-mesh/merger-bare': 0.93.1(@graphql-mesh/store@0.93.1)(@graphql-mesh/types@0.93.2)(@graphql-mesh/utils@0.93.2)(@graphql-tools/utils@9.2.1)(graphql@16.8.1)(tslib@2.6.2) + '@graphql-mesh/merger-stitching': 0.93.1(@graphql-mesh/store@0.93.1)(@graphql-mesh/types@0.93.2)(@graphql-mesh/utils@0.93.2)(@graphql-tools/utils@9.2.1)(graphql@16.8.1)(tslib@2.6.2) + '@graphql-mesh/runtime': 0.93.2(@graphql-mesh/cross-helpers@0.3.4)(@graphql-mesh/types@0.93.2)(@graphql-mesh/utils@0.93.2)(@graphql-tools/utils@9.2.1)(graphql@16.8.1)(tslib@2.6.2) + '@graphql-mesh/store': 0.93.1(@graphql-mesh/cross-helpers@0.3.4)(@graphql-mesh/types@0.93.2)(@graphql-mesh/utils@0.93.2)(@graphql-tools/utils@9.2.1)(graphql@16.8.1)(tslib@2.6.2) + '@graphql-mesh/types': 0.93.2(@graphql-mesh/store@0.95.7)(@graphql-tools/utils@9.2.1)(graphql@16.8.1)(tslib@2.6.2) + '@graphql-mesh/utils': 0.93.2(@graphql-mesh/cross-helpers@0.3.4)(@graphql-mesh/types@0.93.2)(@graphql-tools/utils@9.2.1)(graphql@16.8.1)(tslib@2.6.2) + '@graphql-tools/code-file-loader': 7.3.23(@babel/core@7.23.0)(graphql@16.8.1) + '@graphql-tools/graphql-file-loader': 7.5.17(graphql@16.8.1) + '@graphql-tools/load': 7.8.14(graphql@16.8.1) + '@graphql-tools/utils': 9.2.1(graphql@16.8.1) + '@whatwg-node/fetch': 0.8.8 + camel-case: 4.1.2 + graphql: 16.8.1 + param-case: 3.0.4 + pascal-case: 3.1.2 + tslib: 2.6.2 + transitivePeerDependencies: + - '@babel/core' + - supports-color + dev: false - /@ethereumjs/rlp@4.0.1: - resolution: {integrity: sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw==} - engines: {node: '>=14'} - hasBin: true - dev: true + /@graphql-mesh/cross-helpers@0.3.4(@graphql-tools/utils@9.2.1)(graphql@16.8.1)(react-native@0.72.5): + resolution: {integrity: sha512-jseNppSNEwNWjcjDDwsxmRBK+ub8tz2qc/ca2ZfCTebuCk/+D3dI3LJ95ceNFOIhInK0g2HVq8BO8lMMX1pQtg==} + peerDependencies: + '@graphql-tools/utils': ^9.2.1 + graphql: '*' + dependencies: + '@graphql-tools/utils': 9.2.1(graphql@16.8.1) + graphql: 16.8.1 + path-browserify: 1.0.1 + react-native-fs: 2.20.0(react-native@0.72.5) + react-native-path: 0.0.5 + transitivePeerDependencies: + - react-native + - react-native-windows + dev: false - /@ethereumjs/util@8.1.0: - resolution: {integrity: sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA==} - engines: {node: '>=14'} + /@graphql-mesh/cross-helpers@0.4.1(@graphql-tools/utils@9.2.1)(graphql@16.8.1): + resolution: {integrity: sha512-NkLzFuY72tmmKO7gKWoDzoYcRVf3lLoCdlw30fSNKFKEWDAV3Tyh4v0fPvU3SEmoTJio7v0TIYZqtVt3dBBDFw==} + engines: {node: '>=16.0.0'} + peerDependencies: + '@graphql-tools/utils': ^9.2.1 || ^10.0.0 + graphql: '*' dependencies: - '@ethereumjs/rlp': 4.0.1 - ethereum-cryptography: 2.1.2 - micro-ftch: 0.3.1 - dev: true + '@graphql-tools/utils': 9.2.1(graphql@16.8.1) + graphql: 16.8.1 + path-browserify: 1.0.1 + dev: false - /@ethersproject/abi@5.0.7: - resolution: {integrity: sha512-Cqktk+hSIckwP/W8O47Eef60VwmoSC/L3lY0+dIBhQPCNn9E4V7rwmm2aFrNRRDJfFlGuZ1khkQUOc3oBX+niw==} + /@graphql-mesh/graphql@0.93.1(@graphql-mesh/cross-helpers@0.4.1)(@graphql-mesh/store@0.95.7)(@graphql-mesh/types@0.93.2)(@graphql-mesh/utils@0.95.7)(@graphql-tools/utils@9.2.1)(@types/node@20.8.0)(graphql@16.8.1)(tslib@2.6.2): + resolution: {integrity: sha512-1G2/1jkl1VPWhsZsUBwFQI5d9OxxEc+CMxy5ef0qI2WEXqIocOxMhEY53cc+tCSbuXR99rxos+KD/8Z6ZasaOQ==} + peerDependencies: + '@graphql-mesh/cross-helpers': ^0.3.4 + '@graphql-mesh/store': ^0.93.1 + '@graphql-mesh/types': ^0.93.1 + '@graphql-mesh/utils': ^0.93.1 + '@graphql-tools/utils': ^9.2.1 + graphql: '*' + tslib: ^2.4.0 + dependencies: + '@graphql-mesh/cross-helpers': 0.4.1(@graphql-tools/utils@9.2.1)(graphql@16.8.1) + '@graphql-mesh/store': 0.95.7(@graphql-mesh/cross-helpers@0.4.1)(@graphql-mesh/types@0.93.2)(@graphql-mesh/utils@0.95.7)(@graphql-tools/utils@9.2.1)(graphql@16.8.1)(tslib@2.6.2) + '@graphql-mesh/string-interpolation': 0.4.4(graphql@16.8.1)(tslib@2.6.2) + '@graphql-mesh/types': 0.93.2(@graphql-mesh/store@0.95.7)(@graphql-tools/utils@9.2.1)(graphql@16.8.1)(tslib@2.6.2) + '@graphql-mesh/utils': 0.95.7(@graphql-mesh/cross-helpers@0.4.1)(@graphql-mesh/types@0.93.2)(@graphql-tools/utils@9.2.1)(graphql@16.8.1)(tslib@2.6.2) + '@graphql-tools/delegate': 9.0.35(graphql@16.8.1) + '@graphql-tools/url-loader': 7.17.18(@types/node@20.8.0)(graphql@16.8.1) + '@graphql-tools/utils': 9.2.1(graphql@16.8.1) + '@graphql-tools/wrap': 9.4.2(graphql@16.8.1) + graphql: 16.8.1 + lodash.get: 4.4.2 + tslib: 2.6.2 + transitivePeerDependencies: + - '@types/node' + - bufferutil + - encoding + - utf-8-validate + dev: false + + /@graphql-mesh/graphql@0.95.7(@graphql-mesh/cross-helpers@0.4.1)(@graphql-mesh/store@0.95.7)(@graphql-mesh/types@0.93.2)(@graphql-mesh/utils@0.95.7)(@graphql-tools/utils@9.2.1)(@types/node@20.8.0)(graphql@16.8.1)(react@18.2.0)(tslib@2.6.2): + resolution: {integrity: sha512-Fjf1Ti2HYOEP+dFLVnVxafD/Z4Ev+sR6BUbx3E7Mw8r/XGY28KmCA/QftBOB6BRNKMLe5w7RsgjCrO+Qp0klNg==} + engines: {node: '>=16.0.0'} + peerDependencies: + '@graphql-mesh/cross-helpers': ^0.4.1 + '@graphql-mesh/store': ^0.95.7 + '@graphql-mesh/types': ^0.95.7 + '@graphql-mesh/utils': ^0.95.7 + '@graphql-tools/utils': ^9.2.1 || ^10.0.0 + graphql: '*' + tslib: ^2.4.0 + dependencies: + '@graphql-mesh/cross-helpers': 0.4.1(@graphql-tools/utils@9.2.1)(graphql@16.8.1) + '@graphql-mesh/store': 0.95.7(@graphql-mesh/cross-helpers@0.4.1)(@graphql-mesh/types@0.93.2)(@graphql-mesh/utils@0.95.7)(@graphql-tools/utils@9.2.1)(graphql@16.8.1)(tslib@2.6.2) + '@graphql-mesh/string-interpolation': 0.5.2(graphql@16.8.1)(tslib@2.6.2) + '@graphql-mesh/types': 0.93.2(@graphql-mesh/store@0.95.7)(@graphql-tools/utils@9.2.1)(graphql@16.8.1)(tslib@2.6.2) + '@graphql-mesh/utils': 0.95.7(@graphql-mesh/cross-helpers@0.4.1)(@graphql-mesh/types@0.93.2)(@graphql-tools/utils@9.2.1)(graphql@16.8.1)(tslib@2.6.2) + '@graphql-tools/delegate': 10.0.3(graphql@16.8.1) + '@graphql-tools/federation': 1.1.10(@types/node@20.8.0)(graphql@16.8.1)(react@18.2.0) + '@graphql-tools/url-loader': 8.0.0(@types/node@20.8.0)(graphql@16.8.1) + '@graphql-tools/utils': 9.2.1(graphql@16.8.1) + graphql: 16.8.1 + lodash.get: 4.4.2 + tslib: 2.6.2 + transitivePeerDependencies: + - '@types/node' + - bufferutil + - encoding + - graphql-ws + - react + - react-dom + - subscriptions-transport-ws + - utf-8-validate + dev: false + + /@graphql-mesh/http@0.93.2(@graphql-mesh/cross-helpers@0.3.4)(@graphql-mesh/runtime@0.93.2)(@graphql-mesh/types@0.93.2)(@graphql-mesh/utils@0.93.2)(graphql@16.8.1)(tslib@2.6.2): + resolution: {integrity: sha512-tdGEvijb3w2YJsncoh59ZobWLWpYPDmTd07XOYroJTg3m95zloFRJr/IzklKOsAa57zVIuRLCOfDju5m1m47CQ==} + peerDependencies: + '@graphql-mesh/cross-helpers': ^0.3.4 + '@graphql-mesh/runtime': ^0.93.2 + '@graphql-mesh/types': ^0.93.1 + '@graphql-mesh/utils': ^0.93.1 + graphql: '*' + tslib: ^2.4.0 dependencies: - '@ethersproject/address': 5.7.0 - '@ethersproject/bignumber': 5.7.0 - '@ethersproject/bytes': 5.7.0 - '@ethersproject/constants': 5.7.0 - '@ethersproject/hash': 5.7.0 - '@ethersproject/keccak256': 5.7.0 - '@ethersproject/logger': 5.7.0 - '@ethersproject/properties': 5.7.0 - '@ethersproject/strings': 5.7.0 - dev: true + '@graphql-mesh/cross-helpers': 0.3.4(@graphql-tools/utils@9.2.1)(graphql@16.8.1)(react-native@0.72.5) + '@graphql-mesh/runtime': 0.93.2(@graphql-mesh/cross-helpers@0.3.4)(@graphql-mesh/types@0.93.2)(@graphql-mesh/utils@0.93.2)(@graphql-tools/utils@9.2.1)(graphql@16.8.1)(tslib@2.6.2) + '@graphql-mesh/types': 0.93.2(@graphql-mesh/store@0.95.7)(@graphql-tools/utils@9.2.1)(graphql@16.8.1)(tslib@2.6.2) + '@graphql-mesh/utils': 0.93.2(@graphql-mesh/cross-helpers@0.3.4)(@graphql-mesh/types@0.93.2)(@graphql-tools/utils@9.2.1)(graphql@16.8.1)(tslib@2.6.2) + fets: 0.1.5 + graphql: 16.8.1 + graphql-yoga: 3.9.1(graphql@16.8.1) + tslib: 2.6.2 + dev: false - /@ethersproject/abi@5.7.0: - resolution: {integrity: sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==} + /@graphql-mesh/http@0.96.12(@graphql-mesh/cross-helpers@0.4.1)(@graphql-mesh/runtime@0.96.11)(@graphql-mesh/types@0.93.2)(@graphql-mesh/utils@0.95.7)(graphql@16.8.1)(tslib@2.6.2): + resolution: {integrity: sha512-XxDYGX1pWA5eCpyP3Ava+0ccSF4ZtOFoDyHqHENGJiSNjv/g32UjWDzyp+Y4En7DZivXBhT0aKHaSQRMFbHJhw==} + engines: {node: '>=16.0.0'} + peerDependencies: + '@graphql-mesh/cross-helpers': ^0.4.1 + '@graphql-mesh/runtime': ^0.96.11 + '@graphql-mesh/types': ^0.95.7 + '@graphql-mesh/utils': ^0.95.7 + graphql: '*' + tslib: ^2.4.0 dependencies: - '@ethersproject/address': 5.7.0 - '@ethersproject/bignumber': 5.7.0 - '@ethersproject/bytes': 5.7.0 - '@ethersproject/constants': 5.7.0 - '@ethersproject/hash': 5.7.0 - '@ethersproject/keccak256': 5.7.0 - '@ethersproject/logger': 5.7.0 - '@ethersproject/properties': 5.7.0 - '@ethersproject/strings': 5.7.0 - dev: true + '@graphql-mesh/cross-helpers': 0.4.1(@graphql-tools/utils@9.2.1)(graphql@16.8.1) + '@graphql-mesh/runtime': 0.96.11(@graphql-mesh/cross-helpers@0.4.1)(@graphql-mesh/types@0.93.2)(@graphql-mesh/utils@0.95.7)(@graphql-tools/utils@9.2.1)(graphql@16.8.1)(tslib@2.6.2) + '@graphql-mesh/types': 0.93.2(@graphql-mesh/store@0.95.7)(@graphql-tools/utils@9.2.1)(graphql@16.8.1)(tslib@2.6.2) + '@graphql-mesh/utils': 0.95.7(@graphql-mesh/cross-helpers@0.4.1)(@graphql-mesh/types@0.93.2)(@graphql-tools/utils@9.2.1)(graphql@16.8.1)(tslib@2.6.2) + '@whatwg-node/server': 0.9.14 + graphql: 16.8.1 + graphql-yoga: 4.0.5(graphql@16.8.1) + tslib: 2.6.2 + dev: false - /@ethersproject/abstract-provider@5.7.0: - resolution: {integrity: sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw==} + /@graphql-mesh/merger-bare@0.93.1(@graphql-mesh/store@0.93.1)(@graphql-mesh/types@0.93.2)(@graphql-mesh/utils@0.93.2)(@graphql-tools/utils@9.2.1)(graphql@16.8.1)(tslib@2.6.2): + resolution: {integrity: sha512-S/G3WSSa4+9YT320iRL/tODK4hTvepkQNUSzmddf3oz10xeyQD7hPJyOAnB6D+2dGVhaOTwmXJIueqevcAcP6Q==} + peerDependencies: + '@graphql-mesh/types': ^0.93.1 + '@graphql-mesh/utils': ^0.93.1 + '@graphql-tools/utils': ^9.2.1 + graphql: '*' + tslib: ^2.4.0 dependencies: - '@ethersproject/bignumber': 5.7.0 - '@ethersproject/bytes': 5.7.0 - '@ethersproject/logger': 5.7.0 - '@ethersproject/networks': 5.7.1 - '@ethersproject/properties': 5.7.0 - '@ethersproject/transactions': 5.7.0 - '@ethersproject/web': 5.7.1 - dev: true + '@graphql-mesh/merger-stitching': 0.93.1(@graphql-mesh/store@0.93.1)(@graphql-mesh/types@0.93.2)(@graphql-mesh/utils@0.93.2)(@graphql-tools/utils@9.2.1)(graphql@16.8.1)(tslib@2.6.2) + '@graphql-mesh/types': 0.93.2(@graphql-mesh/store@0.95.7)(@graphql-tools/utils@9.2.1)(graphql@16.8.1)(tslib@2.6.2) + '@graphql-mesh/utils': 0.93.2(@graphql-mesh/cross-helpers@0.3.4)(@graphql-mesh/types@0.93.2)(@graphql-tools/utils@9.2.1)(graphql@16.8.1)(tslib@2.6.2) + '@graphql-tools/schema': 9.0.19(graphql@16.8.1) + '@graphql-tools/utils': 9.2.1(graphql@16.8.1) + graphql: 16.8.1 + tslib: 2.6.2 + transitivePeerDependencies: + - '@graphql-mesh/store' + dev: false + + /@graphql-mesh/merger-bare@0.95.7(@graphql-mesh/store@0.95.7)(@graphql-mesh/types@0.93.2)(@graphql-mesh/utils@0.95.7)(@graphql-tools/utils@9.2.1)(graphql@16.8.1)(tslib@2.6.2): + resolution: {integrity: sha512-QNLm5otrzcpClR8Puks4Md7Mh6AON+EWK+l3NBKvEkiOINFcnDRFv4FrSEXSfrAv/vHrSBbxAEXGUWHjjbQ8Kw==} + engines: {node: '>=16.0.0'} + peerDependencies: + '@graphql-mesh/types': ^0.95.7 + '@graphql-mesh/utils': ^0.95.7 + '@graphql-tools/utils': ^9.2.1 || ^10.0.0 + graphql: '*' + tslib: ^2.4.0 + dependencies: + '@graphql-mesh/merger-stitching': 0.95.7(@graphql-mesh/store@0.95.7)(@graphql-mesh/types@0.93.2)(@graphql-mesh/utils@0.95.7)(@graphql-tools/utils@9.2.1)(graphql@16.8.1)(tslib@2.6.2) + '@graphql-mesh/types': 0.93.2(@graphql-mesh/store@0.95.7)(@graphql-tools/utils@9.2.1)(graphql@16.8.1)(tslib@2.6.2) + '@graphql-mesh/utils': 0.95.7(@graphql-mesh/cross-helpers@0.4.1)(@graphql-mesh/types@0.93.2)(@graphql-tools/utils@9.2.1)(graphql@16.8.1)(tslib@2.6.2) + '@graphql-tools/schema': 10.0.0(graphql@16.8.1) + '@graphql-tools/utils': 9.2.1(graphql@16.8.1) + graphql: 16.8.1 + tslib: 2.6.2 + transitivePeerDependencies: + - '@graphql-mesh/store' + dev: false + + /@graphql-mesh/merger-stitching@0.93.1(@graphql-mesh/store@0.93.1)(@graphql-mesh/types@0.93.2)(@graphql-mesh/utils@0.93.2)(@graphql-tools/utils@9.2.1)(graphql@16.8.1)(tslib@2.6.2): + resolution: {integrity: sha512-8km5UFhKQGd0XY8bTBpHoBhVx/7qCkflPHLoTAguIWN8nJrcXJoqPamodci/U+2hudLAtRqhWosHu/8z7ctZpg==} + peerDependencies: + '@graphql-mesh/store': ^0.93.1 + '@graphql-mesh/types': ^0.93.1 + '@graphql-mesh/utils': ^0.93.1 + '@graphql-tools/utils': ^9.2.1 + graphql: '*' + tslib: ^2.4.0 + dependencies: + '@graphql-mesh/store': 0.93.1(@graphql-mesh/cross-helpers@0.3.4)(@graphql-mesh/types@0.93.2)(@graphql-mesh/utils@0.93.2)(@graphql-tools/utils@9.2.1)(graphql@16.8.1)(tslib@2.6.2) + '@graphql-mesh/types': 0.93.2(@graphql-mesh/store@0.95.7)(@graphql-tools/utils@9.2.1)(graphql@16.8.1)(tslib@2.6.2) + '@graphql-mesh/utils': 0.93.2(@graphql-mesh/cross-helpers@0.3.4)(@graphql-mesh/types@0.93.2)(@graphql-tools/utils@9.2.1)(graphql@16.8.1)(tslib@2.6.2) + '@graphql-tools/delegate': 9.0.35(graphql@16.8.1) + '@graphql-tools/schema': 9.0.19(graphql@16.8.1) + '@graphql-tools/stitch': 8.7.50(graphql@16.8.1) + '@graphql-tools/stitching-directives': 2.3.34(graphql@16.8.1) + '@graphql-tools/utils': 9.2.1(graphql@16.8.1) + graphql: 16.8.1 + tslib: 2.6.2 + dev: false + + /@graphql-mesh/merger-stitching@0.95.7(@graphql-mesh/store@0.95.7)(@graphql-mesh/types@0.93.2)(@graphql-mesh/utils@0.95.7)(@graphql-tools/utils@9.2.1)(graphql@16.8.1)(tslib@2.6.2): + resolution: {integrity: sha512-0fooZHNseNrrVIm+OPfy7NdN1f/Cq6yhpW7d9lXjB8kPWjRGaX6gBUxpfCsRqSrfBDP1VwusZ6Z9EmW+84AtCQ==} + engines: {node: '>=16.0.0'} + peerDependencies: + '@graphql-mesh/store': ^0.95.7 + '@graphql-mesh/types': ^0.95.7 + '@graphql-mesh/utils': ^0.95.7 + '@graphql-tools/utils': ^9.2.1 || ^10.0.0 + graphql: '*' + tslib: ^2.4.0 + dependencies: + '@graphql-mesh/store': 0.95.7(@graphql-mesh/cross-helpers@0.4.1)(@graphql-mesh/types@0.93.2)(@graphql-mesh/utils@0.95.7)(@graphql-tools/utils@9.2.1)(graphql@16.8.1)(tslib@2.6.2) + '@graphql-mesh/types': 0.93.2(@graphql-mesh/store@0.95.7)(@graphql-tools/utils@9.2.1)(graphql@16.8.1)(tslib@2.6.2) + '@graphql-mesh/utils': 0.95.7(@graphql-mesh/cross-helpers@0.4.1)(@graphql-mesh/types@0.93.2)(@graphql-tools/utils@9.2.1)(graphql@16.8.1)(tslib@2.6.2) + '@graphql-tools/delegate': 10.0.3(graphql@16.8.1) + '@graphql-tools/schema': 10.0.0(graphql@16.8.1) + '@graphql-tools/stitch': 9.0.3(graphql@16.8.1) + '@graphql-tools/utils': 9.2.1(graphql@16.8.1) + graphql: 16.8.1 + tslib: 2.6.2 + dev: false + + /@graphql-mesh/runtime@0.93.2(@graphql-mesh/cross-helpers@0.3.4)(@graphql-mesh/types@0.93.2)(@graphql-mesh/utils@0.93.2)(@graphql-tools/utils@9.2.1)(graphql@16.8.1)(tslib@2.6.2): + resolution: {integrity: sha512-8z9ag3jZLmkzawMzF6+i/+P1nQai+HmSZzNeJJen6fRkwprSM1Z7B4lfYBYhdiCbK11HHubDfw4LYwRuBcISMQ==} + peerDependencies: + '@graphql-mesh/cross-helpers': ^0.3.4 + '@graphql-mesh/types': ^0.93.1 + '@graphql-mesh/utils': ^0.93.1 + '@graphql-tools/utils': ^9.2.1 + graphql: '*' + tslib: ^2.4.0 + dependencies: + '@envelop/core': 3.0.6 + '@envelop/extended-validation': 2.0.6(@envelop/core@3.0.6)(graphql@16.8.1) + '@graphql-mesh/cross-helpers': 0.3.4(@graphql-tools/utils@9.2.1)(graphql@16.8.1)(react-native@0.72.5) + '@graphql-mesh/string-interpolation': 0.4.4(graphql@16.8.1)(tslib@2.6.2) + '@graphql-mesh/types': 0.93.2(@graphql-mesh/store@0.95.7)(@graphql-tools/utils@9.2.1)(graphql@16.8.1)(tslib@2.6.2) + '@graphql-mesh/utils': 0.93.2(@graphql-mesh/cross-helpers@0.3.4)(@graphql-mesh/types@0.93.2)(@graphql-tools/utils@9.2.1)(graphql@16.8.1)(tslib@2.6.2) + '@graphql-tools/batch-delegate': 8.4.27(graphql@16.8.1) + '@graphql-tools/batch-execute': 8.5.22(graphql@16.8.1) + '@graphql-tools/delegate': 9.0.35(graphql@16.8.1) + '@graphql-tools/utils': 9.2.1(graphql@16.8.1) + '@graphql-tools/wrap': 9.4.2(graphql@16.8.1) + '@whatwg-node/fetch': 0.8.8 + graphql: 16.8.1 + tslib: 2.6.2 + dev: false + + /@graphql-mesh/runtime@0.96.11(@graphql-mesh/cross-helpers@0.4.1)(@graphql-mesh/types@0.93.2)(@graphql-mesh/utils@0.95.7)(@graphql-tools/utils@9.2.1)(graphql@16.8.1)(tslib@2.6.2): + resolution: {integrity: sha512-a4QIgO9jmyGCBXauI5bXTx94GRi2F5g/hop4EgF2e8oed7VEPGyBWzk8MtDVEa+b9TZc5qnZoctVKX2pBhYCFQ==} + engines: {node: '>=16.0.0'} + peerDependencies: + '@graphql-mesh/cross-helpers': ^0.4.1 + '@graphql-mesh/types': ^0.95.7 + '@graphql-mesh/utils': ^0.95.7 + '@graphql-tools/utils': ^9.2.1 || ^10.0.0 + graphql: '*' + tslib: ^2.4.0 + dependencies: + '@envelop/core': 4.0.3 + '@envelop/extended-validation': 3.0.3(@envelop/core@4.0.3)(graphql@16.8.1) + '@envelop/graphql-jit': 7.0.0(@envelop/core@4.0.3)(graphql@16.8.1) + '@graphql-mesh/cross-helpers': 0.4.1(@graphql-tools/utils@9.2.1)(graphql@16.8.1) + '@graphql-mesh/string-interpolation': 0.5.2(graphql@16.8.1)(tslib@2.6.2) + '@graphql-mesh/types': 0.93.2(@graphql-mesh/store@0.95.7)(@graphql-tools/utils@9.2.1)(graphql@16.8.1)(tslib@2.6.2) + '@graphql-mesh/utils': 0.95.7(@graphql-mesh/cross-helpers@0.4.1)(@graphql-mesh/types@0.93.2)(@graphql-tools/utils@9.2.1)(graphql@16.8.1)(tslib@2.6.2) + '@graphql-tools/batch-delegate': 9.0.0(graphql@16.8.1) + '@graphql-tools/delegate': 10.0.3(graphql@16.8.1) + '@graphql-tools/executor': 1.2.0(graphql@16.8.1) + '@graphql-tools/utils': 9.2.1(graphql@16.8.1) + '@graphql-tools/wrap': 10.0.1(graphql@16.8.1) + '@whatwg-node/fetch': 0.9.13 + graphql: 16.8.1 + graphql-jit: 0.8.2(graphql@16.8.1) + tslib: 2.6.2 + dev: false + + /@graphql-mesh/store@0.93.1(@graphql-mesh/cross-helpers@0.3.4)(@graphql-mesh/types@0.93.2)(@graphql-mesh/utils@0.93.2)(@graphql-tools/utils@9.2.1)(graphql@16.8.1)(tslib@2.6.2): + resolution: {integrity: sha512-OEljVuaZn2htU1rt4Yll/aJmynw3/Kvhd6eE8V0/del0u9iuLJqiKkzFJl8HUSMh0IkO10OnficJnTM0tCmxRw==} + peerDependencies: + '@graphql-mesh/cross-helpers': ^0.3.4 + '@graphql-mesh/types': ^0.93.1 + '@graphql-mesh/utils': ^0.93.1 + '@graphql-tools/utils': ^9.2.1 + graphql: '*' + tslib: ^2.4.0 + dependencies: + '@graphql-inspector/core': 3.3.0(graphql@16.8.1) + '@graphql-mesh/cross-helpers': 0.3.4(@graphql-tools/utils@9.2.1)(graphql@16.8.1)(react-native@0.72.5) + '@graphql-mesh/types': 0.93.2(@graphql-mesh/store@0.95.7)(@graphql-tools/utils@9.2.1)(graphql@16.8.1)(tslib@2.6.2) + '@graphql-mesh/utils': 0.93.2(@graphql-mesh/cross-helpers@0.3.4)(@graphql-mesh/types@0.93.2)(@graphql-tools/utils@9.2.1)(graphql@16.8.1)(tslib@2.6.2) + '@graphql-tools/utils': 9.2.1(graphql@16.8.1) + graphql: 16.8.1 + tslib: 2.6.2 + dev: false + + /@graphql-mesh/store@0.95.7(@graphql-mesh/cross-helpers@0.4.1)(@graphql-mesh/types@0.93.2)(@graphql-mesh/utils@0.95.7)(@graphql-tools/utils@9.2.1)(graphql@16.8.1)(tslib@2.6.2): + resolution: {integrity: sha512-4T5MnkdV70gPzM3Hj+Er2Qg4FTzePzbzGdHdWRSbW++4K+05Hbe1gKPix2f3s3BGkAO4Et5XkkdILL5QynhQFw==} + engines: {node: '>=16.0.0'} + peerDependencies: + '@graphql-mesh/cross-helpers': ^0.4.1 + '@graphql-mesh/types': ^0.95.7 + '@graphql-mesh/utils': ^0.95.7 + '@graphql-tools/utils': ^9.2.1 || ^10.0.0 + graphql: '*' + tslib: ^2.4.0 + dependencies: + '@graphql-inspector/core': 5.0.1(graphql@16.8.1) + '@graphql-mesh/cross-helpers': 0.4.1(@graphql-tools/utils@9.2.1)(graphql@16.8.1) + '@graphql-mesh/types': 0.93.2(@graphql-mesh/store@0.95.7)(@graphql-tools/utils@9.2.1)(graphql@16.8.1)(tslib@2.6.2) + '@graphql-mesh/utils': 0.95.7(@graphql-mesh/cross-helpers@0.4.1)(@graphql-mesh/types@0.93.2)(@graphql-tools/utils@9.2.1)(graphql@16.8.1)(tslib@2.6.2) + '@graphql-tools/utils': 9.2.1(graphql@16.8.1) + graphql: 16.8.1 + tslib: 2.6.2 + dev: false - /@ethersproject/abstract-signer@5.7.0: - resolution: {integrity: sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ==} + /@graphql-mesh/string-interpolation@0.4.4(graphql@16.8.1)(tslib@2.6.2): + resolution: {integrity: sha512-IotswBYZRaPswOebcr2wuOFuzD3dHIJxVEkPiiQubqjUIR8HhQI22XHJv0WNiQZ65z8NR9+GYWwEDIc2JRCNfQ==} + peerDependencies: + graphql: '*' + tslib: ^2.4.0 dependencies: - '@ethersproject/abstract-provider': 5.7.0 - '@ethersproject/bignumber': 5.7.0 - '@ethersproject/bytes': 5.7.0 - '@ethersproject/logger': 5.7.0 - '@ethersproject/properties': 5.7.0 - dev: true + dayjs: 1.11.7 + graphql: 16.8.1 + json-pointer: 0.6.2 + lodash.get: 4.4.2 + tslib: 2.6.2 + dev: false - /@ethersproject/address@5.7.0: - resolution: {integrity: sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==} + /@graphql-mesh/string-interpolation@0.5.2(graphql@16.8.1)(tslib@2.6.2): + resolution: {integrity: sha512-TkSAJ9pj1zesQyDlHrEUevVGOc1s/z9IQC0AONcpMHAunb8uYGO4Yryl8JIRIvDl5DlexHt3z8kLDNCInRGWNQ==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: '*' + tslib: ^2.4.0 dependencies: - '@ethersproject/bignumber': 5.7.0 - '@ethersproject/bytes': 5.7.0 - '@ethersproject/keccak256': 5.7.0 - '@ethersproject/logger': 5.7.0 - '@ethersproject/rlp': 5.7.0 - dev: true + dayjs: 1.11.10 + graphql: 16.8.1 + json-pointer: 0.6.2 + lodash.get: 4.4.2 + tslib: 2.6.2 + dev: false - /@ethersproject/base64@5.7.0: - resolution: {integrity: sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ==} + /@graphql-mesh/transform-type-merging@0.93.1(@graphql-mesh/types@0.93.2)(@graphql-mesh/utils@0.95.7)(graphql@16.8.1)(tslib@2.6.2): + resolution: {integrity: sha512-CUrqCMaEqO1LDusv59UPqmQju3f+LpEGxFu7CydMiIvbfKDDDrf8+dF3OVU7d/ZOMRxB6hR80JsQF0SVeXPCOQ==} + peerDependencies: + '@graphql-mesh/types': ^0.93.1 + '@graphql-mesh/utils': ^0.93.1 + graphql: '*' + tslib: ^2.4.0 dependencies: - '@ethersproject/bytes': 5.7.0 - dev: true + '@graphql-mesh/types': 0.93.2(@graphql-mesh/store@0.95.7)(@graphql-tools/utils@9.2.1)(graphql@16.8.1)(tslib@2.6.2) + '@graphql-mesh/utils': 0.95.7(@graphql-mesh/cross-helpers@0.4.1)(@graphql-mesh/types@0.93.2)(@graphql-tools/utils@9.2.1)(graphql@16.8.1)(tslib@2.6.2) + '@graphql-tools/delegate': 9.0.35(graphql@16.8.1) + '@graphql-tools/stitching-directives': 2.3.34(graphql@16.8.1) + graphql: 16.8.1 + tslib: 2.6.2 + dev: false - /@ethersproject/basex@5.7.0: - resolution: {integrity: sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw==} + /@graphql-mesh/types@0.93.2(@graphql-mesh/store@0.95.7)(@graphql-tools/utils@9.2.1)(graphql@16.8.1)(tslib@2.6.2): + resolution: {integrity: sha512-113DuJzmR7aj2EMnLPu33ktCe5k7+Mk0BxFfmQViUH+mkr6i4JMsWvPKs9dTODSYuSuwvAZ90Vw2l3QyMrbFVA==} + peerDependencies: + '@graphql-mesh/store': ^0.93.1 + '@graphql-tools/utils': ^9.2.1 + graphql: '*' + tslib: ^2.4.0 dependencies: - '@ethersproject/bytes': 5.7.0 - '@ethersproject/properties': 5.7.0 - dev: true + '@graphql-mesh/store': 0.95.7(@graphql-mesh/cross-helpers@0.4.1)(@graphql-mesh/types@0.93.2)(@graphql-mesh/utils@0.95.7)(@graphql-tools/utils@9.2.1)(graphql@16.8.1)(tslib@2.6.2) + '@graphql-tools/batch-delegate': 8.4.27(graphql@16.8.1) + '@graphql-tools/delegate': 9.0.35(graphql@16.8.1) + '@graphql-tools/utils': 9.2.1(graphql@16.8.1) + '@graphql-typed-document-node/core': 3.2.0(graphql@16.8.1) + graphql: 16.8.1 + tslib: 2.6.2 + dev: false - /@ethersproject/bignumber@5.7.0: - resolution: {integrity: sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==} + /@graphql-mesh/utils@0.93.2(@graphql-mesh/cross-helpers@0.3.4)(@graphql-mesh/types@0.93.2)(@graphql-tools/utils@9.2.1)(graphql@16.8.1)(tslib@2.6.2): + resolution: {integrity: sha512-U+VytfSoqPofH/pmYZHFY10SkIFtHKrvE7Isxv1d0DiweVjdH3Qtojw13DWFpu/EKtgJY5bqoVnlcsZJYlKQoA==} + peerDependencies: + '@graphql-mesh/cross-helpers': ^0.3.4 + '@graphql-mesh/types': ^0.93.2 + '@graphql-tools/utils': ^9.2.1 + graphql: '*' + tslib: ^2.4.0 + dependencies: + '@graphql-mesh/cross-helpers': 0.3.4(@graphql-tools/utils@9.2.1)(graphql@16.8.1)(react-native@0.72.5) + '@graphql-mesh/string-interpolation': 0.4.4(graphql@16.8.1)(tslib@2.6.2) + '@graphql-mesh/types': 0.93.2(@graphql-mesh/store@0.95.7)(@graphql-tools/utils@9.2.1)(graphql@16.8.1)(tslib@2.6.2) + '@graphql-tools/delegate': 9.0.35(graphql@16.8.1) + '@graphql-tools/utils': 9.2.1(graphql@16.8.1) + dset: 3.1.2 + graphql: 16.8.1 + js-yaml: 4.1.0 + lodash.get: 4.4.2 + lodash.topath: 4.5.2 + tiny-lru: 8.0.2 + tslib: 2.6.2 + dev: false + + /@graphql-mesh/utils@0.95.7(@graphql-mesh/cross-helpers@0.4.1)(@graphql-mesh/types@0.93.2)(@graphql-tools/utils@9.2.1)(graphql@16.8.1)(tslib@2.6.2): + resolution: {integrity: sha512-6YQTMTrLt6m/cAdesrBgbGVSrLd+68xTo1dRIhxUFHSgucSAqA47Q8E71Lc9cLHh80HQT+/pauKHHG40csy1Ng==} + engines: {node: '>=16.0.0'} + peerDependencies: + '@graphql-mesh/cross-helpers': ^0.4.1 + '@graphql-mesh/types': ^0.95.7 + '@graphql-tools/utils': ^9.2.1 || ^10.0.0 + graphql: '*' + tslib: ^2.4.0 + dependencies: + '@graphql-mesh/cross-helpers': 0.4.1(@graphql-tools/utils@9.2.1)(graphql@16.8.1) + '@graphql-mesh/string-interpolation': 0.5.2(graphql@16.8.1)(tslib@2.6.2) + '@graphql-mesh/types': 0.93.2(@graphql-mesh/store@0.95.7)(@graphql-tools/utils@9.2.1)(graphql@16.8.1)(tslib@2.6.2) + '@graphql-tools/delegate': 10.0.3(graphql@16.8.1) + '@graphql-tools/utils': 9.2.1(graphql@16.8.1) + '@whatwg-node/fetch': 0.9.13 + dset: 3.1.2 + graphql: 16.8.1 + js-yaml: 4.1.0 + lodash.get: 4.4.2 + lodash.topath: 4.5.2 + tiny-lru: 11.2.3 + tslib: 2.6.2 + dev: false + + /@graphql-tools/batch-delegate@8.4.27(graphql@16.8.1): + resolution: {integrity: sha512-efgDDJhljma9d3Ky/LswIu1xm/if2oS27XA1sOcxcShW+Ze+Qxi0hZZ6iyI4eQxVDX5Lyy/n+NvQEZAK1riqnQ==} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@ethersproject/bytes': 5.7.0 - '@ethersproject/logger': 5.7.0 - bn.js: 5.2.1 - dev: true + '@graphql-tools/delegate': 9.0.35(graphql@16.8.1) + '@graphql-tools/utils': 9.2.1(graphql@16.8.1) + dataloader: 2.2.2 + graphql: 16.8.1 + tslib: 2.6.2 + value-or-promise: 1.0.12 + dev: false - /@ethersproject/bytes@5.7.0: - resolution: {integrity: sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==} + /@graphql-tools/batch-delegate@9.0.0(graphql@16.8.1): + resolution: {integrity: sha512-23NmxcHQeKcfhMQyrRPTZfW4/+bSpAyR/qAhRjx+/hikDIa1Uv2XVgV9jIitSgM0OEk/KGPB4VQv+LCOWvAYiw==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@ethersproject/logger': 5.7.0 - dev: true + '@graphql-tools/delegate': 10.0.3(graphql@16.8.1) + '@graphql-tools/utils': 10.0.7(graphql@16.8.1) + dataloader: 2.2.2 + graphql: 16.8.1 + tslib: 2.6.2 + value-or-promise: 1.0.12 + dev: false - /@ethersproject/constants@5.7.0: - resolution: {integrity: sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==} + /@graphql-tools/batch-execute@8.5.22(graphql@16.8.1): + resolution: {integrity: sha512-hcV1JaY6NJQFQEwCKrYhpfLK8frSXDbtNMoTur98u10Cmecy1zrqNKSqhEyGetpgHxaJRqszGzKeI3RuroDN6A==} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@ethersproject/bignumber': 5.7.0 - dev: true + '@graphql-tools/utils': 9.2.1(graphql@16.8.1) + dataloader: 2.2.2 + graphql: 16.8.1 + tslib: 2.6.2 + value-or-promise: 1.0.12 + dev: false - /@ethersproject/contracts@5.7.0: - resolution: {integrity: sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg==} + /@graphql-tools/batch-execute@9.0.2(graphql@16.8.1): + resolution: {integrity: sha512-Y2uwdZI6ZnatopD/SYfZ1eGuQFI7OU2KGZ2/B/7G9ISmgMl5K+ZZWz/PfIEXeiHirIDhyk54s4uka5rj2xwKqQ==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@ethersproject/abi': 5.7.0 - '@ethersproject/abstract-provider': 5.7.0 - '@ethersproject/abstract-signer': 5.7.0 - '@ethersproject/address': 5.7.0 - '@ethersproject/bignumber': 5.7.0 - '@ethersproject/bytes': 5.7.0 - '@ethersproject/constants': 5.7.0 - '@ethersproject/logger': 5.7.0 - '@ethersproject/properties': 5.7.0 - '@ethersproject/transactions': 5.7.0 - dev: true + '@graphql-tools/utils': 10.0.7(graphql@16.8.1) + dataloader: 2.2.2 + graphql: 16.8.1 + tslib: 2.6.2 + value-or-promise: 1.0.12 + dev: false - /@ethersproject/hash@5.7.0: - resolution: {integrity: sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==} + /@graphql-tools/code-file-loader@7.3.23(@babel/core@7.23.0)(graphql@16.8.1): + resolution: {integrity: sha512-8Wt1rTtyTEs0p47uzsPJ1vAtfAx0jmxPifiNdmo9EOCuUPyQGEbMaik/YkqZ7QUFIEYEQu+Vgfo8tElwOPtx5Q==} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@ethersproject/abstract-signer': 5.7.0 - '@ethersproject/address': 5.7.0 - '@ethersproject/base64': 5.7.0 - '@ethersproject/bignumber': 5.7.0 - '@ethersproject/bytes': 5.7.0 - '@ethersproject/keccak256': 5.7.0 - '@ethersproject/logger': 5.7.0 - '@ethersproject/properties': 5.7.0 - '@ethersproject/strings': 5.7.0 - dev: true + '@graphql-tools/graphql-tag-pluck': 7.5.2(@babel/core@7.23.0)(graphql@16.8.1) + '@graphql-tools/utils': 9.2.1(graphql@16.8.1) + globby: 11.1.0 + graphql: 16.8.1 + tslib: 2.6.2 + unixify: 1.0.0 + transitivePeerDependencies: + - '@babel/core' + - supports-color + dev: false - /@ethersproject/hdnode@5.7.0: - resolution: {integrity: sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg==} + /@graphql-tools/delegate@10.0.3(graphql@16.8.1): + resolution: {integrity: sha512-Jor9oazZ07zuWkykD3OOhT/2XD74Zm6Ar0ENZMk75MDD51wB2UWUIMljtHxbJhV5A6UBC2v8x6iY0xdCGiIlyw==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@ethersproject/abstract-signer': 5.7.0 - '@ethersproject/basex': 5.7.0 - '@ethersproject/bignumber': 5.7.0 - '@ethersproject/bytes': 5.7.0 - '@ethersproject/logger': 5.7.0 - '@ethersproject/pbkdf2': 5.7.0 - '@ethersproject/properties': 5.7.0 - '@ethersproject/sha2': 5.7.0 - '@ethersproject/signing-key': 5.7.0 - '@ethersproject/strings': 5.7.0 - '@ethersproject/transactions': 5.7.0 - '@ethersproject/wordlists': 5.7.0 - dev: true + '@graphql-tools/batch-execute': 9.0.2(graphql@16.8.1) + '@graphql-tools/executor': 1.2.0(graphql@16.8.1) + '@graphql-tools/schema': 10.0.0(graphql@16.8.1) + '@graphql-tools/utils': 10.0.7(graphql@16.8.1) + dataloader: 2.2.2 + graphql: 16.8.1 + tslib: 2.6.2 + dev: false - /@ethersproject/json-wallets@5.7.0: - resolution: {integrity: sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g==} + /@graphql-tools/delegate@9.0.35(graphql@16.8.1): + resolution: {integrity: sha512-jwPu8NJbzRRMqi4Vp/5QX1vIUeUPpWmlQpOkXQD2r1X45YsVceyUUBnktCrlJlDB4jPRVy7JQGwmYo3KFiOBMA==} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@ethersproject/abstract-signer': 5.7.0 - '@ethersproject/address': 5.7.0 - '@ethersproject/bytes': 5.7.0 - '@ethersproject/hdnode': 5.7.0 - '@ethersproject/keccak256': 5.7.0 - '@ethersproject/logger': 5.7.0 - '@ethersproject/pbkdf2': 5.7.0 - '@ethersproject/properties': 5.7.0 - '@ethersproject/random': 5.7.0 - '@ethersproject/strings': 5.7.0 - '@ethersproject/transactions': 5.7.0 - aes-js: 3.0.0 - scrypt-js: 3.0.1 - dev: true + '@graphql-tools/batch-execute': 8.5.22(graphql@16.8.1) + '@graphql-tools/executor': 0.0.20(graphql@16.8.1) + '@graphql-tools/schema': 9.0.19(graphql@16.8.1) + '@graphql-tools/utils': 9.2.1(graphql@16.8.1) + dataloader: 2.2.2 + graphql: 16.8.1 + tslib: 2.6.2 + value-or-promise: 1.0.12 + dev: false - /@ethersproject/keccak256@5.7.0: - resolution: {integrity: sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==} + /@graphql-tools/executor-graphql-ws@0.0.14(graphql@16.8.1): + resolution: {integrity: sha512-P2nlkAsPZKLIXImFhj0YTtny5NQVGSsKnhi7PzXiaHSXc6KkzqbWZHKvikD4PObanqg+7IO58rKFpGXP7eeO+w==} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@ethersproject/bytes': 5.7.0 - js-sha3: 0.8.0 - dev: true + '@graphql-tools/utils': 9.2.1(graphql@16.8.1) + '@repeaterjs/repeater': 3.0.4 + '@types/ws': 8.5.6 + graphql: 16.8.1 + graphql-ws: 5.12.1(graphql@16.8.1) + isomorphic-ws: 5.0.0(ws@8.13.0) + tslib: 2.6.2 + ws: 8.13.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: false - /@ethersproject/logger@5.7.0: - resolution: {integrity: sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==} - dev: true + /@graphql-tools/executor-graphql-ws@1.1.0(graphql@16.8.1): + resolution: {integrity: sha512-yM67SzwE8rYRpm4z4AuGtABlOp9mXXVy6sxXnTJRoYIdZrmDbKVfIY+CpZUJCqS0FX3xf2+GoHlsj7Qswaxgcg==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + '@graphql-tools/utils': 10.0.7(graphql@16.8.1) + '@types/ws': 8.5.6 + graphql: 16.8.1 + graphql-ws: 5.14.1(graphql@16.8.1) + isomorphic-ws: 5.0.0(ws@8.13.0) + tslib: 2.6.2 + ws: 8.13.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: false - /@ethersproject/networks@5.7.1: - resolution: {integrity: sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ==} + /@graphql-tools/executor-http@0.1.10(@types/node@20.8.0)(graphql@16.8.1): + resolution: {integrity: sha512-hnAfbKv0/lb9s31LhWzawQ5hghBfHS+gYWtqxME6Rl0Aufq9GltiiLBcl7OVVOnkLF0KhwgbYP1mB5VKmgTGpg==} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@ethersproject/logger': 5.7.0 - dev: true + '@graphql-tools/utils': 9.2.1(graphql@16.8.1) + '@repeaterjs/repeater': 3.0.4 + '@whatwg-node/fetch': 0.8.8 + dset: 3.1.2 + extract-files: 11.0.0 + graphql: 16.8.1 + meros: 1.3.0(@types/node@20.8.0) + tslib: 2.6.2 + value-or-promise: 1.0.12 + transitivePeerDependencies: + - '@types/node' + dev: false - /@ethersproject/pbkdf2@5.7.0: - resolution: {integrity: sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw==} + /@graphql-tools/executor-http@1.0.3(@types/node@20.8.0)(graphql@16.8.1): + resolution: {integrity: sha512-5WZIMBevRaxMabZ8U2Ty0dTUPy/PpeYSlMNEmC/YJjKKykgSfc/AwSejx2sE4FFKZ0I2kxRKRenyoWMHRAV49Q==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@ethersproject/bytes': 5.7.0 - '@ethersproject/sha2': 5.7.0 - dev: true + '@graphql-tools/utils': 10.0.7(graphql@16.8.1) + '@repeaterjs/repeater': 3.0.4 + '@whatwg-node/fetch': 0.9.13 + extract-files: 11.0.0 + graphql: 16.8.1 + meros: 1.3.0(@types/node@20.8.0) + tslib: 2.6.2 + value-or-promise: 1.0.12 + transitivePeerDependencies: + - '@types/node' + dev: false - /@ethersproject/properties@5.7.0: - resolution: {integrity: sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==} + /@graphql-tools/executor-legacy-ws@0.0.11(graphql@16.8.1): + resolution: {integrity: sha512-4ai+NnxlNfvIQ4c70hWFvOZlSUN8lt7yc+ZsrwtNFbFPH/EroIzFMapAxM9zwyv9bH38AdO3TQxZ5zNxgBdvUw==} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@ethersproject/logger': 5.7.0 - dev: true + '@graphql-tools/utils': 9.2.1(graphql@16.8.1) + '@types/ws': 8.5.6 + graphql: 16.8.1 + isomorphic-ws: 5.0.0(ws@8.13.0) + tslib: 2.6.2 + ws: 8.13.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: false - /@ethersproject/providers@5.7.2: - resolution: {integrity: sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg==} + /@graphql-tools/executor-legacy-ws@1.0.4(graphql@16.8.1): + resolution: {integrity: sha512-b7aGuRekZDS+m3af3BIvMKxu15bmVPMt5eGQVuP2v5pxmbaPTh+iv5mx9b3Plt32z5Ke5tycBnNm5urSFtW8ng==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@ethersproject/abstract-provider': 5.7.0 - '@ethersproject/abstract-signer': 5.7.0 - '@ethersproject/address': 5.7.0 - '@ethersproject/base64': 5.7.0 - '@ethersproject/basex': 5.7.0 - '@ethersproject/bignumber': 5.7.0 - '@ethersproject/bytes': 5.7.0 - '@ethersproject/constants': 5.7.0 - '@ethersproject/hash': 5.7.0 - '@ethersproject/logger': 5.7.0 - '@ethersproject/networks': 5.7.1 - '@ethersproject/properties': 5.7.0 - '@ethersproject/random': 5.7.0 - '@ethersproject/rlp': 5.7.0 - '@ethersproject/sha2': 5.7.0 - '@ethersproject/strings': 5.7.0 - '@ethersproject/transactions': 5.7.0 - '@ethersproject/web': 5.7.1 - bech32: 1.1.4 - ws: 7.4.6 + '@graphql-tools/utils': 10.0.7(graphql@16.8.1) + '@types/ws': 8.5.6 + graphql: 16.8.1 + isomorphic-ws: 5.0.0(ws@8.14.2) + tslib: 2.6.2 + ws: 8.14.2 transitivePeerDependencies: - bufferutil - utf-8-validate - dev: true + dev: false - /@ethersproject/random@5.7.0: - resolution: {integrity: sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ==} + /@graphql-tools/executor@0.0.18(graphql@16.8.1): + resolution: {integrity: sha512-xZC0C+/npXoSHBB5bsJdwxDLgtl1Gu4fL9J2TPQmXoZC3L2N506KJoppf9LgWdHU/xK04luJrhP6WjhfkIN0pQ==} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@ethersproject/bytes': 5.7.0 - '@ethersproject/logger': 5.7.0 - dev: true + '@graphql-tools/utils': 9.2.1(graphql@16.8.1) + '@graphql-typed-document-node/core': 3.2.0(graphql@16.8.1) + '@repeaterjs/repeater': 3.0.4 + graphql: 16.8.1 + tslib: 2.6.2 + value-or-promise: 1.0.12 + dev: false - /@ethersproject/rlp@5.7.0: - resolution: {integrity: sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==} + /@graphql-tools/executor@0.0.20(graphql@16.8.1): + resolution: {integrity: sha512-GdvNc4vszmfeGvUqlcaH1FjBoguvMYzxAfT6tDd4/LgwymepHhinqLNA5otqwVLW+JETcDaK7xGENzFomuE6TA==} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@ethersproject/bytes': 5.7.0 - '@ethersproject/logger': 5.7.0 - dev: true + '@graphql-tools/utils': 9.2.1(graphql@16.8.1) + '@graphql-typed-document-node/core': 3.2.0(graphql@16.8.1) + '@repeaterjs/repeater': 3.0.4 + graphql: 16.8.1 + tslib: 2.6.2 + value-or-promise: 1.0.12 + dev: false - /@ethersproject/sha2@5.7.0: - resolution: {integrity: sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw==} + /@graphql-tools/executor@1.2.0(graphql@16.8.1): + resolution: {integrity: sha512-SKlIcMA71Dha5JnEWlw4XxcaJ+YupuXg0QCZgl2TOLFz4SkGCwU/geAsJvUJFwK2RbVLpQv/UMq67lOaBuwDtg==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@ethersproject/bytes': 5.7.0 - '@ethersproject/logger': 5.7.0 - hash.js: 1.1.7 - dev: true + '@graphql-tools/utils': 10.0.7(graphql@16.8.1) + '@graphql-typed-document-node/core': 3.2.0(graphql@16.8.1) + '@repeaterjs/repeater': 3.0.4 + graphql: 16.8.1 + tslib: 2.6.2 + value-or-promise: 1.0.12 + dev: false - /@ethersproject/signing-key@5.7.0: - resolution: {integrity: sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==} + /@graphql-tools/federation@1.1.10(@types/node@20.8.0)(graphql@16.8.1)(react@18.2.0): + resolution: {integrity: sha512-H51qTYwbtfIYBO1uHXlImRWzo9tknSoIGBgJckDh+hdxJx43sZaMjJiLHc2DjRc/A8d2Bf0bi0HbH++HqOos/w==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + '@graphql-tools/delegate': 10.0.3(graphql@16.8.1) + '@graphql-tools/executor-http': 1.0.3(@types/node@20.8.0)(graphql@16.8.1) + '@graphql-tools/merge': 9.0.0(graphql@16.8.1) + '@graphql-tools/schema': 10.0.0(graphql@16.8.1) + '@graphql-tools/stitch': 9.0.3(graphql@16.8.1) + '@graphql-tools/utils': 10.0.7(graphql@16.8.1) + '@graphql-tools/wrap': 10.0.1(graphql@16.8.1) + graphql: 16.8.1 + tslib: 2.6.2 + value-or-promise: 1.0.12 + optionalDependencies: + '@apollo/client': 3.8.5(graphql@16.8.1)(react@18.2.0) + transitivePeerDependencies: + - '@types/node' + - graphql-ws + - react + - react-dom + - subscriptions-transport-ws + dev: false + + /@graphql-tools/graphql-file-loader@7.5.17(graphql@16.8.1): + resolution: {integrity: sha512-hVwwxPf41zOYgm4gdaZILCYnKB9Zap7Ys9OhY1hbwuAuC4MMNY9GpUjoTU3CQc3zUiPoYStyRtUGkHSJZ3HxBw==} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@ethersproject/bytes': 5.7.0 - '@ethersproject/logger': 5.7.0 - '@ethersproject/properties': 5.7.0 - bn.js: 5.2.1 - elliptic: 6.5.4 - hash.js: 1.1.7 - dev: true + '@graphql-tools/import': 6.7.18(graphql@16.8.1) + '@graphql-tools/utils': 9.2.1(graphql@16.8.1) + globby: 11.1.0 + graphql: 16.8.1 + tslib: 2.6.2 + unixify: 1.0.0 + dev: false - /@ethersproject/solidity@5.7.0: - resolution: {integrity: sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA==} + /@graphql-tools/graphql-tag-pluck@7.5.2(@babel/core@7.23.0)(graphql@16.8.1): + resolution: {integrity: sha512-RW+H8FqOOLQw0BPXaahYepVSRjuOHw+7IL8Opaa5G5uYGOBxoXR7DceyQ7BcpMgktAOOmpDNQ2WtcboChOJSRA==} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@ethersproject/bignumber': 5.7.0 - '@ethersproject/bytes': 5.7.0 - '@ethersproject/keccak256': 5.7.0 - '@ethersproject/logger': 5.7.0 - '@ethersproject/sha2': 5.7.0 - '@ethersproject/strings': 5.7.0 - dev: true + '@babel/parser': 7.23.0 + '@babel/plugin-syntax-import-assertions': 7.22.5(@babel/core@7.23.0) + '@babel/traverse': 7.23.0 + '@babel/types': 7.23.0 + '@graphql-tools/utils': 9.2.1(graphql@16.8.1) + graphql: 16.8.1 + tslib: 2.6.2 + transitivePeerDependencies: + - '@babel/core' + - supports-color + dev: false - /@ethersproject/strings@5.7.0: - resolution: {integrity: sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==} + /@graphql-tools/import@6.7.18(graphql@16.8.1): + resolution: {integrity: sha512-XQDdyZTp+FYmT7as3xRWH/x8dx0QZA2WZqfMF5EWb36a0PiH7WwlRQYIdyYXj8YCLpiWkeBXgBRHmMnwEYR8iQ==} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@ethersproject/bytes': 5.7.0 - '@ethersproject/constants': 5.7.0 - '@ethersproject/logger': 5.7.0 - dev: true + '@graphql-tools/utils': 9.2.1(graphql@16.8.1) + graphql: 16.8.1 + resolve-from: 5.0.0 + tslib: 2.6.2 + dev: false - /@ethersproject/transactions@5.7.0: - resolution: {integrity: sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ==} + /@graphql-tools/load@7.8.14(graphql@16.8.1): + resolution: {integrity: sha512-ASQvP+snHMYm+FhIaLxxFgVdRaM0vrN9wW2BKInQpktwWTXVyk+yP5nQUCEGmn0RTdlPKrffBaigxepkEAJPrg==} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@ethersproject/address': 5.7.0 - '@ethersproject/bignumber': 5.7.0 - '@ethersproject/bytes': 5.7.0 - '@ethersproject/constants': 5.7.0 - '@ethersproject/keccak256': 5.7.0 - '@ethersproject/logger': 5.7.0 - '@ethersproject/properties': 5.7.0 - '@ethersproject/rlp': 5.7.0 - '@ethersproject/signing-key': 5.7.0 - dev: true + '@graphql-tools/schema': 9.0.19(graphql@16.8.1) + '@graphql-tools/utils': 9.2.1(graphql@16.8.1) + graphql: 16.8.1 + p-limit: 3.1.0 + tslib: 2.6.2 + dev: false - /@ethersproject/units@5.7.0: - resolution: {integrity: sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg==} + /@graphql-tools/merge@8.4.2(graphql@16.8.1): + resolution: {integrity: sha512-XbrHAaj8yDuINph+sAfuq3QCZ/tKblrTLOpirK0+CAgNlZUCHs0Fa+xtMUURgwCVThLle1AF7svJCxFizygLsw==} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@ethersproject/bignumber': 5.7.0 - '@ethersproject/constants': 5.7.0 - '@ethersproject/logger': 5.7.0 - dev: true + '@graphql-tools/utils': 9.2.1(graphql@16.8.1) + graphql: 16.8.1 + tslib: 2.6.2 + dev: false - /@ethersproject/wallet@5.7.0: - resolution: {integrity: sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA==} + /@graphql-tools/merge@9.0.0(graphql@16.8.1): + resolution: {integrity: sha512-J7/xqjkGTTwOJmaJQJ2C+VDBDOWJL3lKrHJN4yMaRLAJH3PosB7GiPRaSDZdErs0+F77sH2MKs2haMMkywzx7Q==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@ethersproject/abstract-provider': 5.7.0 - '@ethersproject/abstract-signer': 5.7.0 - '@ethersproject/address': 5.7.0 - '@ethersproject/bignumber': 5.7.0 - '@ethersproject/bytes': 5.7.0 - '@ethersproject/hash': 5.7.0 - '@ethersproject/hdnode': 5.7.0 - '@ethersproject/json-wallets': 5.7.0 - '@ethersproject/keccak256': 5.7.0 - '@ethersproject/logger': 5.7.0 - '@ethersproject/properties': 5.7.0 - '@ethersproject/random': 5.7.0 - '@ethersproject/signing-key': 5.7.0 - '@ethersproject/transactions': 5.7.0 - '@ethersproject/wordlists': 5.7.0 - dev: true + '@graphql-tools/utils': 10.0.7(graphql@16.8.1) + graphql: 16.8.1 + tslib: 2.6.2 + dev: false - /@ethersproject/web@5.7.1: - resolution: {integrity: sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==} + /@graphql-tools/optimize@1.4.0(graphql@16.8.1): + resolution: {integrity: sha512-dJs/2XvZp+wgHH8T5J2TqptT9/6uVzIYvA6uFACha+ufvdMBedkfR4b4GbT8jAKLRARiqRTxy3dctnwkTM2tdw==} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@ethersproject/base64': 5.7.0 - '@ethersproject/bytes': 5.7.0 - '@ethersproject/logger': 5.7.0 - '@ethersproject/properties': 5.7.0 - '@ethersproject/strings': 5.7.0 - dev: true + graphql: 16.8.1 + tslib: 2.6.2 + dev: false - /@ethersproject/wordlists@5.7.0: - resolution: {integrity: sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA==} + /@graphql-tools/relay-operation-optimizer@6.5.18(graphql@16.8.1): + resolution: {integrity: sha512-mc5VPyTeV+LwiM+DNvoDQfPqwQYhPV/cl5jOBjTgSniyaq8/86aODfMkrE2OduhQ5E00hqrkuL2Fdrgk0w1QJg==} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@ethersproject/bytes': 5.7.0 - '@ethersproject/hash': 5.7.0 - '@ethersproject/logger': 5.7.0 - '@ethersproject/properties': 5.7.0 - '@ethersproject/strings': 5.7.0 - dev: true + '@ardatan/relay-compiler': 12.0.0(graphql@16.8.1) + '@graphql-tools/utils': 9.2.1(graphql@16.8.1) + graphql: 16.8.1 + tslib: 2.6.2 + transitivePeerDependencies: + - encoding + - supports-color + dev: false - /@fastify/busboy@2.0.0: - resolution: {integrity: sha512-JUFJad5lv7jxj926GPgymrWQxxjPYuJNiNjNMzqT+HiuP6Vl3dk5xzG+8sTX96np0ZAluvaMzPsjhHZ5rNuNQQ==} - engines: {node: '>=14'} - dev: true + /@graphql-tools/schema@10.0.0(graphql@16.8.1): + resolution: {integrity: sha512-kf3qOXMFcMs2f/S8Y3A8fm/2w+GaHAkfr3Gnhh2LOug/JgpY/ywgFVxO3jOeSpSEdoYcDKLcXVjMigNbY4AdQg==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + '@graphql-tools/merge': 9.0.0(graphql@16.8.1) + '@graphql-tools/utils': 10.0.7(graphql@16.8.1) + graphql: 16.8.1 + tslib: 2.6.2 + value-or-promise: 1.0.12 + dev: false - /@float-capital/float-subgraph-uncrashable@0.0.0-internal-testing.5: - resolution: {integrity: sha512-yZ0H5e3EpAYKokX/AbtplzlvSxEJY7ZfpvQyDzyODkks0hakAAlDG6fQu1SlDJMWorY7bbq1j7fCiFeTWci6TA==} - hasBin: true + /@graphql-tools/schema@9.0.19(graphql@16.8.1): + resolution: {integrity: sha512-oBRPoNBtCkk0zbUsyP4GaIzCt8C0aCI4ycIRUL67KK5pOHljKLBBtGT+Jr6hkzA74C8Gco8bpZPe7aWFjiaK2w==} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@rescript/std': 9.0.0 + '@graphql-tools/merge': 8.4.2(graphql@16.8.1) + '@graphql-tools/utils': 9.2.1(graphql@16.8.1) graphql: 16.8.1 - graphql-import-node: 0.0.5(graphql@16.8.1) - js-yaml: 4.1.0 - dev: true + tslib: 2.6.2 + value-or-promise: 1.0.12 + dev: false - /@graphprotocol/graph-cli@0.58.0(@types/node@20.8.0)(node-fetch@3.3.2)(typescript@5.2.2): - resolution: {integrity: sha512-EbdL5LZFmIMAuItQXv7LXgd7cqYQ3BdIJR2jxNr+LRL0juBAxmEz6zVvYnIUmgXoa5SB5rxE9ZT6pfe+fhbD6Q==} - engines: {node: '>=14'} - hasBin: true + /@graphql-tools/stitch@8.7.50(graphql@16.8.1): + resolution: {integrity: sha512-VB1/uZyXjj1P5Wj0c4EKX3q8Q1Maj4dy6uNwodEPaO3EHMpaJU/DqyN0Bvnhxu0ol7RzdY3kgsvsdUjU2QMImw==} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + '@graphql-tools/batch-delegate': 8.4.27(graphql@16.8.1) + '@graphql-tools/delegate': 9.0.35(graphql@16.8.1) + '@graphql-tools/executor': 0.0.20(graphql@16.8.1) + '@graphql-tools/merge': 8.4.2(graphql@16.8.1) + '@graphql-tools/schema': 9.0.19(graphql@16.8.1) + '@graphql-tools/utils': 9.2.1(graphql@16.8.1) + '@graphql-tools/wrap': 9.4.2(graphql@16.8.1) + graphql: 16.8.1 + tslib: 2.6.2 + value-or-promise: 1.0.12 + dev: false + + /@graphql-tools/stitch@9.0.3(graphql@16.8.1): + resolution: {integrity: sha512-G03XahiHDu1pnaS8z2GNfsV/5BribMEUATT5dCHBAqj13Te5y1amZNQePrmw8DLtbf5qDbU6CO7kGHPxv0XO9A==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + '@graphql-tools/batch-delegate': 9.0.0(graphql@16.8.1) + '@graphql-tools/delegate': 10.0.3(graphql@16.8.1) + '@graphql-tools/executor': 1.2.0(graphql@16.8.1) + '@graphql-tools/merge': 9.0.0(graphql@16.8.1) + '@graphql-tools/schema': 10.0.0(graphql@16.8.1) + '@graphql-tools/utils': 10.0.7(graphql@16.8.1) + '@graphql-tools/wrap': 10.0.1(graphql@16.8.1) + graphql: 16.8.1 + tslib: 2.6.2 + value-or-promise: 1.0.12 + dev: false + + /@graphql-tools/stitching-directives@2.3.34(graphql@16.8.1): + resolution: {integrity: sha512-DVlo1/SW9jN6jN1IL279c7voEJiEHsLbYRD7tYsAW472zrHqn0rpB6jRzZDzLOlCpm7JRWPsegXVlkqf0qvqFQ==} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@float-capital/float-subgraph-uncrashable': 0.0.0-internal-testing.5 - '@oclif/core': 2.8.6(@types/node@20.8.0)(typescript@5.2.2) - '@oclif/plugin-autocomplete': 2.3.8(@types/node@20.8.0)(typescript@5.2.2) - '@oclif/plugin-not-found': 2.4.1(@types/node@20.8.0)(typescript@5.2.2) + '@graphql-tools/delegate': 9.0.35(graphql@16.8.1) + '@graphql-tools/utils': 9.2.1(graphql@16.8.1) + graphql: 16.8.1 + tslib: 2.6.2 + dev: false + + /@graphql-tools/url-loader@7.17.18(@types/node@20.8.0)(graphql@16.8.1): + resolution: {integrity: sha512-ear0CiyTj04jCVAxi7TvgbnGDIN2HgqzXzwsfcqiVg9cvjT40NcMlZ2P1lZDgqMkZ9oyLTV8Bw6j+SyG6A+xPw==} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + '@ardatan/sync-fetch': 0.0.1 + '@graphql-tools/delegate': 9.0.35(graphql@16.8.1) + '@graphql-tools/executor-graphql-ws': 0.0.14(graphql@16.8.1) + '@graphql-tools/executor-http': 0.1.10(@types/node@20.8.0)(graphql@16.8.1) + '@graphql-tools/executor-legacy-ws': 0.0.11(graphql@16.8.1) + '@graphql-tools/utils': 9.2.1(graphql@16.8.1) + '@graphql-tools/wrap': 9.4.2(graphql@16.8.1) + '@types/ws': 8.5.6 '@whatwg-node/fetch': 0.8.8 - assemblyscript: 0.19.23 - binary-install-raw: 0.0.13(debug@4.3.4) - chalk: 3.0.0 - chokidar: 3.5.3 - debug: 4.3.4(supports-color@8.1.1) - docker-compose: 0.23.19 - dockerode: 2.5.8 - fs-extra: 9.1.0 - glob: 9.3.5 - gluegun: 5.1.2(debug@4.3.4) - graphql: 15.5.0 - immutable: 4.2.1 - ipfs-http-client: 55.0.0(node-fetch@3.3.2) - jayson: 4.0.0 - js-yaml: 3.14.1 - prettier: 1.19.1 - request: 2.88.2 - semver: 7.5.4 - sync-request: 6.1.0 - tmp-promise: 3.0.3 - web3-eth-abi: 1.7.0 - which: 2.0.2 - yaml: 1.10.2 + graphql: 16.8.1 + isomorphic-ws: 5.0.0(ws@8.13.0) + tslib: 2.6.2 + value-or-promise: 1.0.12 + ws: 8.13.0 transitivePeerDependencies: - - '@swc/core' - - '@swc/wasm' - '@types/node' - bufferutil - encoding - - node-fetch - - supports-color - - typescript - utf-8-validate - dev: true + dev: false + + /@graphql-tools/url-loader@8.0.0(@types/node@20.8.0)(graphql@16.8.1): + resolution: {integrity: sha512-rPc9oDzMnycvz+X+wrN3PLrhMBQkG4+sd8EzaFN6dypcssiefgWKToXtRKI8HHK68n2xEq1PyrOpkjHFJB+GwA==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + '@ardatan/sync-fetch': 0.0.1 + '@graphql-tools/delegate': 10.0.3(graphql@16.8.1) + '@graphql-tools/executor-graphql-ws': 1.1.0(graphql@16.8.1) + '@graphql-tools/executor-http': 1.0.3(@types/node@20.8.0)(graphql@16.8.1) + '@graphql-tools/executor-legacy-ws': 1.0.4(graphql@16.8.1) + '@graphql-tools/utils': 10.0.7(graphql@16.8.1) + '@graphql-tools/wrap': 10.0.1(graphql@16.8.1) + '@types/ws': 8.5.6 + '@whatwg-node/fetch': 0.9.13 + graphql: 16.8.1 + isomorphic-ws: 5.0.0(ws@8.13.0) + tslib: 2.6.2 + value-or-promise: 1.0.12 + ws: 8.13.0 + transitivePeerDependencies: + - '@types/node' + - bufferutil + - encoding + - utf-8-validate + dev: false + + /@graphql-tools/utils@10.0.7(graphql@16.8.1): + resolution: {integrity: sha512-KOdeMj6Hd/MENDaqPbws3YJl3wVy0DeYnL7PyUms5Skyf7uzI9INynDwPMhLXfSb0/ph6BXTwMd5zBtWbF8tBQ==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + '@graphql-typed-document-node/core': 3.2.0(graphql@16.8.1) + dset: 3.1.2 + graphql: 16.8.1 + tslib: 2.6.2 + dev: false + + /@graphql-tools/utils@8.13.1(graphql@16.8.1): + resolution: {integrity: sha512-qIh9yYpdUFmctVqovwMdheVNJqFh+DQNWIhX87FJStfXYnmweBUDATok9fWPleKeFwxnW8IapKmY8m8toJEkAw==} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + graphql: 16.8.1 + tslib: 2.6.2 + dev: false - /@graphprotocol/graph-ts@0.31.0: - resolution: {integrity: sha512-xreRVM6ho2BtolyOh2flDkNoGZximybnzUnF53zJVp0+Ed0KnAlO1/KOCUYw06euVI9tk0c9nA2Z/D5SIQV2Rg==} + /@graphql-tools/utils@9.2.1(graphql@16.8.1): + resolution: {integrity: sha512-WUw506Ql6xzmOORlriNrD6Ugx+HjVgYxt9KCXD9mHAak+eaXSwuGGPyE60hy9xaDEoXKBsG7SkG69ybitaVl6A==} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - assemblyscript: 0.19.10 - dev: true + '@graphql-typed-document-node/core': 3.2.0(graphql@16.8.1) + graphql: 16.8.1 + tslib: 2.6.2 + dev: false + + /@graphql-tools/wrap@10.0.1(graphql@16.8.1): + resolution: {integrity: sha512-Cw6hVrKGM2OKBXeuAGltgy4tzuqQE0Nt7t/uAqnuokSXZhMHXJUb124Bnvxc2gPZn5chfJSDafDe4Cp8ZAVJgg==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + '@graphql-tools/delegate': 10.0.3(graphql@16.8.1) + '@graphql-tools/schema': 10.0.0(graphql@16.8.1) + '@graphql-tools/utils': 10.0.7(graphql@16.8.1) + graphql: 16.8.1 + tslib: 2.6.2 + value-or-promise: 1.0.12 + dev: false + + /@graphql-tools/wrap@9.4.2(graphql@16.8.1): + resolution: {integrity: sha512-DFcd9r51lmcEKn0JW43CWkkI2D6T9XI1juW/Yo86i04v43O9w2/k4/nx2XTJv4Yv+iXwUw7Ok81PGltwGJSDSA==} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + '@graphql-tools/delegate': 9.0.35(graphql@16.8.1) + '@graphql-tools/schema': 9.0.19(graphql@16.8.1) + '@graphql-tools/utils': 9.2.1(graphql@16.8.1) + graphql: 16.8.1 + tslib: 2.6.2 + value-or-promise: 1.0.12 + dev: false /@graphql-typed-document-node/core@3.2.0(graphql@16.8.1): resolution: {integrity: sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==} @@ -1216,6 +3617,63 @@ packages: graphql: 16.8.1 dev: false + /@graphql-yoga/logger@0.0.1: + resolution: {integrity: sha512-6npFz7eZz33mXgSm1waBLMjUNG0D5hTc/p5Hcs1mojkT3KsLpCOFokzTEKboNsBhKevYcaVa/xeA7WBj4UYMLg==} + dependencies: + tslib: 2.6.2 + dev: false + + /@graphql-yoga/logger@1.0.0: + resolution: {integrity: sha512-JYoxwnPggH2BfO+dWlWZkDeFhyFZqaTRGLvFhy+Pjp2UxitEW6nDrw+pEDw/K9tJwMjIFMmTT9VfTqrnESmBHg==} + engines: {node: '>=16.0.0'} + dependencies: + tslib: 2.6.2 + dev: false + + /@graphql-yoga/subscription@3.1.0: + resolution: {integrity: sha512-Vc9lh8KzIHyS3n4jBlCbz7zCjcbtQnOBpsymcRvHhFr2cuH+knmRn0EmzimMQ58jQ8kxoRXXC3KJS3RIxSdPIg==} + dependencies: + '@graphql-yoga/typed-event-target': 1.0.0 + '@repeaterjs/repeater': 3.0.4 + '@whatwg-node/events': 0.0.2 + tslib: 2.6.2 + dev: false + + /@graphql-yoga/subscription@4.0.0: + resolution: {integrity: sha512-0qsN/BPPZNMoC2CZ8i+P6PgiJyHh1H35aKDt37qARBDaIOKDQuvEOq7+4txUKElcmXi7DYFo109FkhSQoEajrg==} + engines: {node: '>=16.0.0'} + dependencies: + '@graphql-yoga/typed-event-target': 2.0.0 + '@repeaterjs/repeater': 3.0.4 + '@whatwg-node/events': 0.1.1 + tslib: 2.6.2 + dev: false + + /@graphql-yoga/typed-event-target@1.0.0: + resolution: {integrity: sha512-Mqni6AEvl3VbpMtKw+TIjc9qS9a8hKhiAjFtqX488yq5oJtj9TkNlFTIacAVS3vnPiswNsmDiQqvwUOcJgi1DA==} + dependencies: + '@repeaterjs/repeater': 3.0.4 + tslib: 2.6.2 + dev: false + + /@graphql-yoga/typed-event-target@2.0.0: + resolution: {integrity: sha512-oA/VGxGmaSDym1glOHrltw43qZsFwLLjBwvh57B79UKX/vo3+UQcRgOyE44c5RP7DCYjkrC2tuArZmb6jCzysw==} + engines: {node: '>=16.0.0'} + dependencies: + '@repeaterjs/repeater': 3.0.4 + tslib: 2.6.2 + dev: false + + /@hapi/hoek@9.3.0: + resolution: {integrity: sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==} + dev: false + + /@hapi/topo@5.1.0: + resolution: {integrity: sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==} + dependencies: + '@hapi/hoek': 9.3.0 + dev: false + /@humanwhocodes/config-array@0.11.11: resolution: {integrity: sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==} engines: {node: '>=10.10.0'} @@ -1256,6 +3714,18 @@ packages: multiformats: 9.9.0 dev: true + /@isaacs/cliui@8.0.2: + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} + dependencies: + string-width: 5.1.2 + string-width-cjs: /string-width@4.2.3 + strip-ansi: 7.1.0 + strip-ansi-cjs: /strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: /wrap-ansi@7.0.0 + dev: false + /@istanbuljs/load-nyc-config@1.1.0: resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} engines: {node: '>=8'} @@ -1327,6 +3797,13 @@ packages: - ts-node dev: true + /@jest/create-cache-key-function@29.7.0: + resolution: {integrity: sha512-4QqS3LY5PBmTRHj9sAg1HLoPzqAI0uOX6wI/TRqHIcOxlFidy6YEmCQJk6FSZjNLGCeubDMfmkWL+qaLKhSGQA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/types': 29.6.3 + dev: false + /@jest/environment@29.7.0: resolution: {integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -1335,7 +3812,6 @@ packages: '@jest/types': 29.6.3 '@types/node': 20.8.0 jest-mock: 29.7.0 - dev: true /@jest/expect-utils@29.7.0: resolution: {integrity: sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==} @@ -1364,7 +3840,6 @@ packages: jest-message-util: 29.7.0 jest-mock: 29.7.0 jest-util: 29.7.0 - dev: true /@jest/globals@29.7.0: resolution: {integrity: sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==} @@ -1420,7 +3895,6 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@sinclair/typebox': 0.27.8 - dev: true /@jest/source-map@29.6.3: resolution: {integrity: sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==} @@ -1474,6 +3948,28 @@ packages: - supports-color dev: true + /@jest/types@26.6.2: + resolution: {integrity: sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==} + engines: {node: '>= 10.14.2'} + dependencies: + '@types/istanbul-lib-coverage': 2.0.4 + '@types/istanbul-reports': 3.0.2 + '@types/node': 20.8.0 + '@types/yargs': 15.0.16 + chalk: 4.1.2 + dev: false + + /@jest/types@27.5.1: + resolution: {integrity: sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@types/istanbul-lib-coverage': 2.0.4 + '@types/istanbul-reports': 3.0.2 + '@types/node': 20.8.0 + '@types/yargs': 16.0.6 + chalk: 4.1.2 + dev: false + /@jest/types@29.6.3: resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -1484,7 +3980,6 @@ packages: '@types/node': 20.8.0 '@types/yargs': 17.0.26 chalk: 4.1.2 - dev: true /@jridgewell/gen-mapping@0.3.3: resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} @@ -1493,35 +3988,36 @@ packages: '@jridgewell/set-array': 1.1.2 '@jridgewell/sourcemap-codec': 1.4.15 '@jridgewell/trace-mapping': 0.3.19 - dev: true /@jridgewell/resolve-uri@3.1.1: resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} engines: {node: '>=6.0.0'} - dev: true /@jridgewell/set-array@1.1.2: resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} engines: {node: '>=6.0.0'} - dev: true + + /@jridgewell/source-map@0.3.5: + resolution: {integrity: sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==} + dependencies: + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.19 + dev: false /@jridgewell/sourcemap-codec@1.4.15: resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} - dev: true /@jridgewell/trace-mapping@0.3.19: resolution: {integrity: sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==} dependencies: '@jridgewell/resolve-uri': 3.1.1 '@jridgewell/sourcemap-codec': 1.4.15 - dev: true /@jridgewell/trace-mapping@0.3.9: resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} dependencies: '@jridgewell/resolve-uri': 3.1.1 '@jridgewell/sourcemap-codec': 1.4.15 - dev: true /@metamask/eth-sig-util@4.0.1: resolution: {integrity: sha512-tghyZKLHZjcdlDqCA3gNZmLeR0XvOE9U1qoQO9ohyAZT6Pya+H9vkBPcsyXytmYLNgVoin7CKCmweo/R43V+tQ==} @@ -1573,12 +4069,10 @@ packages: dependencies: '@nodelib/fs.stat': 2.0.5 run-parallel: 1.2.0 - dev: true /@nodelib/fs.stat@2.0.5: resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} engines: {node: '>= 8'} - dev: true /@nodelib/fs.walk@1.2.8: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} @@ -1586,7 +4080,6 @@ packages: dependencies: '@nodelib/fs.scandir': 2.1.5 fastq: 1.15.0 - dev: true /@nomicfoundation/ethereumjs-block@5.0.2: resolution: {integrity: sha512-hSe6CuHI4SsSiWWjHDIzWhSiAVpzMUcDRpWYzN0T9l8/Rz7xNn3elwVOJ/tAyS0LqL6vitUD78Uk7lQDXZun7Q==} @@ -2073,7 +4566,7 @@ packages: resolution: {integrity: sha512-MN29JD6jA3PgOxF2tG0aZbMIwOCieYWkK9UbHCq1UzGPrMgGV9NVMUyVdqpv7Ynplwsjp5ZTBDOyttwvTlchHg==} dependencies: '@openzeppelin/defender-base-client': 1.48.0(debug@4.3.4) - axios: 1.5.0(debug@4.3.4) + axios: 1.5.1(debug@4.3.4) ethers: 5.7.2 lodash: 4.17.21 node-fetch: 2.7.0 @@ -2089,7 +4582,7 @@ packages: dependencies: amazon-cognito-identity-js: 6.3.5 async-retry: 1.3.3 - axios: 1.5.0(debug@4.3.4) + axios: 1.5.1(debug@4.3.4) lodash: 4.17.21 node-fetch: 2.7.0 transitivePeerDependencies: @@ -2127,106 +4620,341 @@ packages: - encoding - supports-color - utf-8-validate - dev: true + dev: true + + /@openzeppelin/platform-deploy-client@0.10.0(debug@4.3.4): + resolution: {integrity: sha512-jayQPeXqw4LnWIrNhNqgikJSre+n2NRrnEu76niSdVXc/faQkG3PmaHtRPJMFgsYxjjAiAfcMYyV95YBDuLexA==} + deprecated: '@openzeppelin/platform-deploy-client is deprecated. Please use @openzeppelin/defender-sdk-deploy-client' + dependencies: + '@ethersproject/abi': 5.7.0 + '@openzeppelin/defender-base-client': 1.48.0(debug@4.3.4) + axios: 1.5.1(debug@4.3.4) + lodash: 4.17.21 + node-fetch: 2.7.0 + transitivePeerDependencies: + - debug + - encoding + dev: true + + /@openzeppelin/upgrades-core@1.30.0: + resolution: {integrity: sha512-guW3EaTp/cet/O1uAmEcupHhtEGMzzYGsru2LMllFL5INWmRfeCHSVQu4TjkCLpoYHJoOIGSvosjoCyJL4oEaQ==} + hasBin: true + dependencies: + cbor: 9.0.1 + chalk: 4.1.2 + compare-versions: 6.1.0 + debug: 4.3.4(supports-color@8.1.1) + ethereumjs-util: 7.1.5 + minimist: 1.2.8 + proper-lockfile: 4.1.2 + solidity-ast: 0.4.52 + transitivePeerDependencies: + - supports-color + dev: true + + /@peculiar/asn1-schema@2.3.6: + resolution: {integrity: sha512-izNRxPoaeJeg/AyH8hER6s+H7p4itk+03QCa4sbxI3lNdseQYCuxzgsuNK8bTXChtLTjpJz6NmXKA73qLa3rCA==} + dependencies: + asn1js: 3.0.5 + pvtsutils: 1.3.5 + tslib: 2.6.2 + + /@peculiar/json-schema@1.1.12: + resolution: {integrity: sha512-coUfuoMeIB7B8/NMekxaDzLhaYmp0HZNPEjYRm9goRou8UZIC3z21s0sL9AWoCw4EG876QyO3kYrc61WNF9B/w==} + engines: {node: '>=8.0.0'} + dependencies: + tslib: 2.6.2 + + /@peculiar/webcrypto@1.4.3: + resolution: {integrity: sha512-VtaY4spKTdN5LjJ04im/d/joXuvLbQdgy5Z4DXF4MFZhQ+MTrejbNMkfZBp1Bs3O5+bFqnJgyGdPuZQflvIa5A==} + engines: {node: '>=10.12.0'} + dependencies: + '@peculiar/asn1-schema': 2.3.6 + '@peculiar/json-schema': 1.1.12 + pvtsutils: 1.3.5 + tslib: 2.6.2 + webcrypto-core: 1.7.7 + + /@pkgjs/parseargs@0.11.0: + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} + requiresBuild: true + dev: false + optional: true + + /@protobufjs/aspromise@1.1.2: + resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==} + dev: true + + /@protobufjs/base64@1.1.2: + resolution: {integrity: sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==} + dev: true + + /@protobufjs/codegen@2.0.4: + resolution: {integrity: sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==} + dev: true + + /@protobufjs/eventemitter@1.1.0: + resolution: {integrity: sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==} + dev: true + + /@protobufjs/fetch@1.1.0: + resolution: {integrity: sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==} + dependencies: + '@protobufjs/aspromise': 1.1.2 + '@protobufjs/inquire': 1.1.0 + dev: true + + /@protobufjs/float@1.0.2: + resolution: {integrity: sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==} + dev: true + + /@protobufjs/inquire@1.1.0: + resolution: {integrity: sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==} + dev: true + + /@protobufjs/path@1.1.2: + resolution: {integrity: sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==} + dev: true + + /@protobufjs/pool@1.1.0: + resolution: {integrity: sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==} + dev: true + + /@protobufjs/utf8@1.1.0: + resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==} + dev: true + + /@react-native-community/cli-clean@11.3.7: + resolution: {integrity: sha512-twtsv54ohcRyWVzPXL3F9VHGb4Qhn3slqqRs3wEuRzjR7cTmV2TIO2b1VhaqF4HlCgNd+cGuirvLtK2JJyaxMg==} + dependencies: + '@react-native-community/cli-tools': 11.3.7 + chalk: 4.1.2 + execa: 5.1.1 + prompts: 2.4.2 + transitivePeerDependencies: + - encoding + dev: false + + /@react-native-community/cli-config@11.3.7: + resolution: {integrity: sha512-FDBLku9xskS+bx0YFJFLCmUJhEZ4/MMSC9qPYOGBollWYdgE7k/TWI0IeYFmMALAnbCdKQAYP5N29N55Tad8lg==} + dependencies: + '@react-native-community/cli-tools': 11.3.7 + chalk: 4.1.2 + cosmiconfig: 5.2.1 + deepmerge: 4.3.1 + glob: 7.2.3 + joi: 17.11.0 + transitivePeerDependencies: + - encoding + dev: false + + /@react-native-community/cli-debugger-ui@11.3.7: + resolution: {integrity: sha512-aVmKuPKHZENR8SrflkMurZqeyLwbKieHdOvaZCh1Nn/0UC5CxWcyST2DB2XQboZwsvr3/WXKJkSUO+SZ1J9qTQ==} + dependencies: + serve-static: 1.15.0 + transitivePeerDependencies: + - supports-color + dev: false + + /@react-native-community/cli-doctor@11.3.7: + resolution: {integrity: sha512-YEHUqWISOHnsl5+NM14KHelKh68Sr5/HeEZvvNdIcvcKtZic3FU7Xd1WcbNdo3gCq5JvzGFfufx02Tabh5zmrg==} + dependencies: + '@react-native-community/cli-config': 11.3.7 + '@react-native-community/cli-platform-android': 11.3.7 + '@react-native-community/cli-platform-ios': 11.3.7 + '@react-native-community/cli-tools': 11.3.7 + chalk: 4.1.2 + command-exists: 1.2.9 + envinfo: 7.10.0 + execa: 5.1.1 + hermes-profile-transformer: 0.0.6 + ip: 1.1.8 + node-stream-zip: 1.15.0 + ora: 5.4.1 + prompts: 2.4.2 + semver: 7.5.4 + strip-ansi: 5.2.0 + sudo-prompt: 9.2.1 + wcwidth: 1.0.1 + yaml: 2.3.2 + transitivePeerDependencies: + - encoding + dev: false + + /@react-native-community/cli-hermes@11.3.7: + resolution: {integrity: sha512-chkKd8n/xeZkinRvtH6QcYA8rjNOKU3S3Lw/3Psxgx+hAYV0Gyk95qJHTalx7iu+PwjOOqqvCkJo5jCkYLkoqw==} + dependencies: + '@react-native-community/cli-platform-android': 11.3.7 + '@react-native-community/cli-tools': 11.3.7 + chalk: 4.1.2 + hermes-profile-transformer: 0.0.6 + ip: 1.1.8 + transitivePeerDependencies: + - encoding + dev: false + + /@react-native-community/cli-platform-android@11.3.7: + resolution: {integrity: sha512-WGtXI/Rm178UQb8bu1TAeFC/RJvYGnbHpULXvE20GkmeJ1HIrMjkagyk6kkY3Ej25JAP2R878gv+TJ/XiRhaEg==} + dependencies: + '@react-native-community/cli-tools': 11.3.7 + chalk: 4.1.2 + execa: 5.1.1 + glob: 7.2.3 + logkitty: 0.7.1 + transitivePeerDependencies: + - encoding + dev: false + + /@react-native-community/cli-platform-ios@11.3.7: + resolution: {integrity: sha512-Z/8rseBput49EldX7MogvN6zJlWzZ/4M97s2P+zjS09ZoBU7I0eOKLi0N9wx+95FNBvGQQ/0P62bB9UaFQH2jw==} + dependencies: + '@react-native-community/cli-tools': 11.3.7 + chalk: 4.1.2 + execa: 5.1.1 + fast-xml-parser: 4.3.2 + glob: 7.2.3 + ora: 5.4.1 + transitivePeerDependencies: + - encoding + dev: false + + /@react-native-community/cli-plugin-metro@11.3.7(@babel/core@7.23.0): + resolution: {integrity: sha512-0WhgoBVGF1f9jXcuagQmtxpwpfP+2LbLZH4qMyo6OtYLWLG13n2uRep+8tdGzfNzl1bIuUTeE9yZSAdnf9LfYQ==} + dependencies: + '@react-native-community/cli-server-api': 11.3.7 + '@react-native-community/cli-tools': 11.3.7 + chalk: 4.1.2 + execa: 5.1.1 + metro: 0.76.8 + metro-config: 0.76.8 + metro-core: 0.76.8 + metro-react-native-babel-transformer: 0.76.8(@babel/core@7.23.0) + metro-resolver: 0.76.8 + metro-runtime: 0.76.8 + readline: 1.3.0 + transitivePeerDependencies: + - '@babel/core' + - bufferutil + - encoding + - supports-color + - utf-8-validate + dev: false - /@openzeppelin/platform-deploy-client@0.10.0(debug@4.3.4): - resolution: {integrity: sha512-jayQPeXqw4LnWIrNhNqgikJSre+n2NRrnEu76niSdVXc/faQkG3PmaHtRPJMFgsYxjjAiAfcMYyV95YBDuLexA==} - deprecated: '@openzeppelin/platform-deploy-client is deprecated. Please use @openzeppelin/defender-sdk-deploy-client' + /@react-native-community/cli-server-api@11.3.7: + resolution: {integrity: sha512-yoFyGdvR3HxCnU6i9vFqKmmSqFzCbnFSnJ29a+5dppgPRetN+d//O8ard/YHqHzToFnXutAFf2neONn23qcJAg==} + dependencies: + '@react-native-community/cli-debugger-ui': 11.3.7 + '@react-native-community/cli-tools': 11.3.7 + compression: 1.7.4 + connect: 3.7.0 + errorhandler: 1.5.1 + nocache: 3.0.4 + pretty-format: 26.6.2 + serve-static: 1.15.0 + ws: 7.5.9 + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + dev: false + + /@react-native-community/cli-tools@11.3.7: + resolution: {integrity: sha512-peyhP4TV6Ps1hk+MBHTFaIR1eI3u+OfGBvr5r0wPwo3FAJvldRinMgcB/TcCcOBXVORu7ba1XYjkubPeYcqAyA==} dependencies: - '@ethersproject/abi': 5.7.0 - '@openzeppelin/defender-base-client': 1.48.0(debug@4.3.4) - axios: 1.5.0(debug@4.3.4) - lodash: 4.17.21 + appdirsjs: 1.2.7 + chalk: 4.1.2 + find-up: 5.0.0 + mime: 2.6.0 node-fetch: 2.7.0 + open: 6.4.0 + ora: 5.4.1 + semver: 7.5.4 + shell-quote: 1.8.1 transitivePeerDependencies: - - debug - encoding - dev: true + dev: false - /@openzeppelin/upgrades-core@1.30.0: - resolution: {integrity: sha512-guW3EaTp/cet/O1uAmEcupHhtEGMzzYGsru2LMllFL5INWmRfeCHSVQu4TjkCLpoYHJoOIGSvosjoCyJL4oEaQ==} + /@react-native-community/cli-types@11.3.7: + resolution: {integrity: sha512-OhSr/TiDQkXjL5YOs8+hvGSB+HltLn5ZI0+A3DCiMsjUgTTsYh+Z63OtyMpNjrdCEFcg0MpfdU2uxstCS6Dc5g==} + dependencies: + joi: 17.11.0 + dev: false + + /@react-native-community/cli@11.3.7(@babel/core@7.23.0): + resolution: {integrity: sha512-Ou8eDlF+yh2rzXeCTpMPYJ2fuqsusNOhmpYPYNQJQ2h6PvaF30kPomflgRILems+EBBuggRtcT+I+1YH4o/q6w==} + engines: {node: '>=16'} hasBin: true dependencies: - cbor: 9.0.1 + '@react-native-community/cli-clean': 11.3.7 + '@react-native-community/cli-config': 11.3.7 + '@react-native-community/cli-debugger-ui': 11.3.7 + '@react-native-community/cli-doctor': 11.3.7 + '@react-native-community/cli-hermes': 11.3.7 + '@react-native-community/cli-plugin-metro': 11.3.7(@babel/core@7.23.0) + '@react-native-community/cli-server-api': 11.3.7 + '@react-native-community/cli-tools': 11.3.7 + '@react-native-community/cli-types': 11.3.7 chalk: 4.1.2 - compare-versions: 6.1.0 - debug: 4.3.4(supports-color@8.1.1) - ethereumjs-util: 7.1.5 - minimist: 1.2.8 - proper-lockfile: 4.1.2 - solidity-ast: 0.4.52 + commander: 9.5.0 + execa: 5.1.1 + find-up: 4.1.0 + fs-extra: 8.1.0 + graceful-fs: 4.2.11 + prompts: 2.4.2 + semver: 7.5.4 transitivePeerDependencies: + - '@babel/core' + - bufferutil + - encoding - supports-color - dev: true - - /@peculiar/asn1-schema@2.3.6: - resolution: {integrity: sha512-izNRxPoaeJeg/AyH8hER6s+H7p4itk+03QCa4sbxI3lNdseQYCuxzgsuNK8bTXChtLTjpJz6NmXKA73qLa3rCA==} - dependencies: - asn1js: 3.0.5 - pvtsutils: 1.3.5 - tslib: 2.6.2 - dev: true + - utf-8-validate + dev: false - /@peculiar/json-schema@1.1.12: - resolution: {integrity: sha512-coUfuoMeIB7B8/NMekxaDzLhaYmp0HZNPEjYRm9goRou8UZIC3z21s0sL9AWoCw4EG876QyO3kYrc61WNF9B/w==} - engines: {node: '>=8.0.0'} - dependencies: - tslib: 2.6.2 - dev: true + /@react-native/assets-registry@0.72.0: + resolution: {integrity: sha512-Im93xRJuHHxb1wniGhBMsxLwcfzdYreSZVQGDoMJgkd6+Iky61LInGEHnQCTN0fKNYF1Dvcofb4uMmE1RQHXHQ==} + dev: false - /@peculiar/webcrypto@1.4.3: - resolution: {integrity: sha512-VtaY4spKTdN5LjJ04im/d/joXuvLbQdgy5Z4DXF4MFZhQ+MTrejbNMkfZBp1Bs3O5+bFqnJgyGdPuZQflvIa5A==} - engines: {node: '>=10.12.0'} + /@react-native/codegen@0.72.7(@babel/preset-env@7.23.2): + resolution: {integrity: sha512-O7xNcGeXGbY+VoqBGNlZ3O05gxfATlwE1Q1qQf5E38dK+tXn5BY4u0jaQ9DPjfE8pBba8g/BYI1N44lynidMtg==} + peerDependencies: + '@babel/preset-env': ^7.1.6 dependencies: - '@peculiar/asn1-schema': 2.3.6 - '@peculiar/json-schema': 1.1.12 - pvtsutils: 1.3.5 - tslib: 2.6.2 - webcrypto-core: 1.7.7 - dev: true - - /@protobufjs/aspromise@1.1.2: - resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==} - dev: true + '@babel/parser': 7.23.0 + '@babel/preset-env': 7.23.2(@babel/core@7.23.0) + flow-parser: 0.206.0 + jscodeshift: 0.14.0(@babel/preset-env@7.23.2) + nullthrows: 1.1.1 + transitivePeerDependencies: + - supports-color + dev: false - /@protobufjs/base64@1.1.2: - resolution: {integrity: sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==} - dev: true + /@react-native/gradle-plugin@0.72.11: + resolution: {integrity: sha512-P9iRnxiR2w7EHcZ0mJ+fmbPzMby77ZzV6y9sJI3lVLJzF7TLSdbwcQyD3lwMsiL+q5lKUHoZJS4sYmih+P2HXw==} + dev: false - /@protobufjs/codegen@2.0.4: - resolution: {integrity: sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==} - dev: true + /@react-native/js-polyfills@0.72.1: + resolution: {integrity: sha512-cRPZh2rBswFnGt5X5EUEPs0r+pAsXxYsifv/fgy9ZLQokuT52bPH+9xjDR+7TafRua5CttGW83wP4TntRcWNDA==} + dev: false - /@protobufjs/eventemitter@1.1.0: - resolution: {integrity: sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==} - dev: true + /@react-native/normalize-colors@0.72.0: + resolution: {integrity: sha512-285lfdqSXaqKuBbbtP9qL2tDrfxdOFtIMvkKadtleRQkdOxx+uzGvFr82KHmc/sSiMtfXGp7JnFYWVh4sFl7Yw==} + dev: false - /@protobufjs/fetch@1.1.0: - resolution: {integrity: sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==} + /@react-native/virtualized-lists@0.72.8(react-native@0.72.5): + resolution: {integrity: sha512-J3Q4Bkuo99k7mu+jPS9gSUSgq+lLRSI/+ahXNwV92XgJ/8UgOTxu2LPwhJnBk/sQKxq7E8WkZBnBiozukQMqrw==} + peerDependencies: + react-native: '*' dependencies: - '@protobufjs/aspromise': 1.1.2 - '@protobufjs/inquire': 1.1.0 - dev: true - - /@protobufjs/float@1.0.2: - resolution: {integrity: sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==} - dev: true - - /@protobufjs/inquire@1.1.0: - resolution: {integrity: sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==} - dev: true - - /@protobufjs/path@1.1.2: - resolution: {integrity: sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==} - dev: true - - /@protobufjs/pool@1.1.0: - resolution: {integrity: sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==} - dev: true + invariant: 2.2.4 + nullthrows: 1.1.1 + react-native: 0.72.5(@babel/core@7.23.0)(@babel/preset-env@7.23.2)(react@18.2.0) + dev: false - /@protobufjs/utf8@1.1.0: - resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==} - dev: true + /@repeaterjs/repeater@3.0.4: + resolution: {integrity: sha512-AW8PKd6iX3vAZ0vA43nOUOnbq/X5ihgU+mSXXqunMkeQADGiqw/PY0JNeYtD5sr0PAy51YPgAPbDoeapv9r8WA==} + dev: false /@rescript/std@9.0.0: resolution: {integrity: sha512-zGzFsgtZ44mgL4Xef2gOy1hrRVdrs9mcxCOOKZrIPsmbZW14yTkaF591GXxpQvjXiHtgZ/iA9qLyWH6oSReIxQ==} @@ -2342,21 +5070,32 @@ packages: tslib: 1.14.1 dev: true + /@sideway/address@4.1.4: + resolution: {integrity: sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==} + dependencies: + '@hapi/hoek': 9.3.0 + dev: false + + /@sideway/formula@3.0.1: + resolution: {integrity: sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==} + dev: false + + /@sideway/pinpoint@2.0.0: + resolution: {integrity: sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==} + dev: false + /@sinclair/typebox@0.27.8: resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} - dev: true /@sinonjs/commons@3.0.0: resolution: {integrity: sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==} dependencies: type-detect: 4.0.8 - dev: true /@sinonjs/fake-timers@10.3.0: resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} dependencies: '@sinonjs/commons': 3.0.0 - dev: true /@smithy/types@2.2.2: resolution: {integrity: sha512-4PS0y1VxDnELGHGgBWlDksB2LJK8TG8lcvlWxIsgR+8vROI7Ms8h1P4FQUx+ftAX2QZv5g1CJCdhdRmQKyonyw==} @@ -2379,19 +5118,15 @@ packages: /@tsconfig/node10@1.0.9: resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==} - dev: true /@tsconfig/node12@1.0.11: resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} - dev: true /@tsconfig/node14@1.0.3: resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} - dev: true /@tsconfig/node16@1.0.4: resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} - dev: true /@typechain/ethers-v6@0.4.3(ethers@6.7.1)(typechain@8.3.1)(typescript@5.2.2): resolution: {integrity: sha512-TrxBsyb4ryhaY9keP6RzhFCviWYApcLCIRMPyWaKp2cZZrfaM3QBoxXTnw/eO4+DAY3l+8O0brNW0WgeQeOiDA==} @@ -2512,19 +5247,16 @@ packages: /@types/istanbul-lib-coverage@2.0.4: resolution: {integrity: sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==} - dev: true /@types/istanbul-lib-report@3.0.1: resolution: {integrity: sha512-gPQuzaPR5h/djlAv2apEG1HVOyj1IUs7GpfMZixU0/0KXT3pm64ylHuMUI1/Akh+sq/iikxg6Z2j+fcMDXaaTQ==} dependencies: '@types/istanbul-lib-coverage': 2.0.4 - dev: true /@types/istanbul-reports@3.0.2: resolution: {integrity: sha512-kv43F9eb3Lhj+lr/Hn6OcLCs/sSM8bt+fIaP11rCYngfV6NVjzWXJ17owQtDQTL9tQ8WSLUrGsSJ6rJz0F1w1A==} dependencies: '@types/istanbul-lib-report': 3.0.1 - dev: true /@types/jest@29.5.5: resolution: {integrity: sha512-ebylz2hnsWR9mYvmBFbXJXr+33UPc4+ZdxyDXh5w0FlPBTfCVN3wPL+kuOiQt3xvrK419v7XWeAs+AeOksafXg==} @@ -2535,7 +5267,6 @@ packages: /@types/json-schema@7.0.13: resolution: {integrity: sha512-RbSSoHliUbnXj3ny0CNFOoxrIDV6SUGyStHsvDqosw6CkdPV8TtWGlfecuK4ToyMEAql6pzNxgCFKanovUzlgQ==} - dev: true /@types/long@4.0.2: resolution: {integrity: sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==} @@ -2617,7 +5348,6 @@ packages: /@types/stack-utils@2.0.1: resolution: {integrity: sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==} - dev: true /@types/ws@7.4.7: resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==} @@ -2633,13 +5363,23 @@ packages: /@types/yargs-parser@21.0.1: resolution: {integrity: sha512-axdPBuLuEJt0c4yI5OZssC19K2Mq1uKdrfZBzuxLvaztgqUtFYZUNw7lETExPYJR9jdEoIg4mb7RQKRQzOkeGQ==} - dev: true + + /@types/yargs@15.0.16: + resolution: {integrity: sha512-2FeD5qezW3FvLpZ0JpfuaEWepgNLl9b2gQYiz/ce0NhoB1W/D+VZu98phITXkADYerfr/jb7JcDcVhITsc9bwg==} + dependencies: + '@types/yargs-parser': 21.0.1 + dev: false + + /@types/yargs@16.0.6: + resolution: {integrity: sha512-oTP7/Q13GSPrgcwEwdlnkoZSQ1Hg9THe644qq8PG6hhJzjZ3qj1JjEFPIwWV/IXVs5XGIVqtkNOS9kh63WIJ+A==} + dependencies: + '@types/yargs-parser': 21.0.1 + dev: false /@types/yargs@17.0.26: resolution: {integrity: sha512-Y3vDy2X6zw/ZCumcwLpdhM5L7jmyGpmBCTYMHDLqT2IKVMYRRLdv6ZakA+wxhra6Z/3bwhNbNl9bDGXaFU+6rw==} dependencies: '@types/yargs-parser': 21.0.1 - dev: true /@typescript-eslint/eslint-plugin@6.7.3(@typescript-eslint/parser@6.7.3)(eslint@8.50.0)(typescript@5.2.2): resolution: {integrity: sha512-vntq452UHNltxsaaN+L9WyuMch8bMd9CqJ3zhzTPXXidwbf5mqqKCVXEuvRZUqLJSTLeWE65lQwyXsRGnXkCTA==} @@ -2772,9 +5512,24 @@ packages: eslint-visitor-keys: 3.4.3 dev: true + /@whatwg-node/cookie-store@0.0.1: + resolution: {integrity: sha512-uoti8QU5xd+X+9PULOGpPpOqPDdwkz+ukMc4kyQG1GwXeKVGktr4FSllr6dBotjOjNVPSBPpmj5V6zrUdDcLaw==} + dependencies: + '@whatwg-node/events': 0.0.3 + tslib: 2.6.2 + dev: false + + /@whatwg-node/events@0.0.2: + resolution: {integrity: sha512-WKj/lI4QjnLuPrim0cfO7i+HsDSXHxNv1y0CrJhdntuO3hxWZmnXCwNDnwOvry11OjRin6cgWNF+j/9Pn8TN4w==} + dev: false + /@whatwg-node/events@0.0.3: resolution: {integrity: sha512-IqnKIDWfXBJkvy/k6tzskWTc2NK3LcqHlb+KHGCrjOCH4jfQckRX0NAiIcC/vIqQkzLYw2r2CTSwAxcrtcD6lA==} - dev: true + + /@whatwg-node/events@0.1.1: + resolution: {integrity: sha512-AyQEn5hIPV7Ze+xFoXVU3QTHXVbWPrzaOkxtENMPMuNL6VVHrp4hHfDt9nrQpjO7BgvuM95dMtkycX5M/DZR3w==} + engines: {node: '>=16.0.0'} + dev: false /@whatwg-node/fetch@0.8.8: resolution: {integrity: sha512-CdcjGC2vdKhc13KKxgsc6/616BQ7ooDIgPeTuAiE8qfCnS0mGzcfCOoZXypQSz73nxI+GWc7ZReIAVhxoE1KCg==} @@ -2784,7 +5539,14 @@ packages: busboy: 1.6.0 urlpattern-polyfill: 8.0.2 web-streams-polyfill: 3.2.1 - dev: true + + /@whatwg-node/fetch@0.9.13: + resolution: {integrity: sha512-PPtMwhjtS96XROnSpowCQM85gCUG2m7AXZFw0PZlGbhzx2GK7f2iOXilfgIJ0uSlCuuGbOIzfouISkA7C4FJOw==} + engines: {node: '>=16.0.0'} + dependencies: + '@whatwg-node/node-fetch': 0.4.19 + urlpattern-polyfill: 9.0.0 + dev: false /@whatwg-node/node-fetch@0.3.6: resolution: {integrity: sha512-w9wKgDO4C95qnXZRwZTfCmLWqyRnooGjcIwG0wADWjw9/HN0p7dtvtgSvItZtUyNteEvgTrd8QojNEqV6DAGTA==} @@ -2794,28 +5556,59 @@ packages: fast-querystring: 1.1.2 fast-url-parser: 1.1.3 tslib: 2.6.2 - dev: true + + /@whatwg-node/node-fetch@0.4.19: + resolution: {integrity: sha512-AW7/m2AuweAoSXmESrYQr/KBafueScNbn2iNO0u6xFr2JZdPmYsSm5yvAXYk6yDLv+eDmSSKrf7JnFZ0CsJIdA==} + engines: {node: '>=16.0.0'} + dependencies: + '@whatwg-node/events': 0.1.1 + busboy: 1.6.0 + fast-querystring: 1.1.2 + fast-url-parser: 1.1.3 + tslib: 2.6.2 + dev: false + + /@whatwg-node/server@0.7.7: + resolution: {integrity: sha512-aHURgNDFm/48WVV3vhTMfnEKCYwYgdaRdRhZsQZx4UVFjGGkGay7Ys0+AYu9QT/jpoImv2oONkstoTMUprDofg==} + dependencies: + '@whatwg-node/fetch': 0.8.8 + tslib: 2.6.2 + dev: false + + /@whatwg-node/server@0.9.14: + resolution: {integrity: sha512-I8TT0NoCP+xThLBuGlU6dgq5wpExkphNMo2geZwQW0vAmEPtc3MNMZMIYqg5GyNmpv5Nf7fnxb8tVOIHbDvuDA==} + engines: {node: '>=16.0.0'} + dependencies: + '@whatwg-node/fetch': 0.9.13 + tslib: 2.6.2 + dev: false /@wry/context@0.7.3: resolution: {integrity: sha512-Nl8WTesHp89RF803Se9X3IiHjdmLBrIvPMaJkl+rKVJAYyPsz1TEUbu89943HpvujtSJgDUx9W4vZw3K1Mr3sA==} engines: {node: '>=8'} + requiresBuild: true dependencies: tslib: 2.6.2 dev: false + optional: true /@wry/equality@0.5.6: resolution: {integrity: sha512-D46sfMTngaYlrH+OspKf8mIJETntFnf6Hsjb0V41jAXJ7Bx2kB8Rv8RCUujuVWYttFtHkUNp7g+FwxNQAr6mXA==} engines: {node: '>=8'} + requiresBuild: true dependencies: tslib: 2.6.2 dev: false + optional: true /@wry/trie@0.4.3: resolution: {integrity: sha512-I6bHwH0fSf6RqQcnnXLJKhkSXG45MFral3GxPaY4uAl0LYDZM+YDVDAiU9bYwjTuysy1S0IeecWtmq1SZA3M1w==} engines: {node: '>=8'} + requiresBuild: true dependencies: tslib: 2.6.2 dev: false + optional: true /JSONStream@1.3.2: resolution: {integrity: sha512-mn0KSip7N4e0UDPZHnqDsHECo5uGQrixQKnAskOM1BIB8hd7QKbd6il8IPRPudPHOeHiECoCFqhyMaRO9+nWyA==} @@ -2837,7 +5630,7 @@ packages: resolution: {integrity: sha512-LEyx4aLEC3x6T0UguF6YILf+ntvmOaWsVfENmIW0E9H09vKlLDGelMjjSm0jkDHALj8A8quZ/HapKNigzwge+Q==} dev: true - /abitype@0.9.8(typescript@5.2.2): + /abitype@0.9.8(typescript@5.2.2)(zod@3.22.4): resolution: {integrity: sha512-puLifILdm+8sjyss4S+fsUN09obiT1g2YW6CtcQF+QDzxR0euzgEB29MZujC6zMk2a6SVmtttq1fc6+YFA7WYQ==} peerDependencies: typescript: '>=5.0.4' @@ -2849,6 +5642,7 @@ packages: optional: true dependencies: typescript: 5.2.2 + zod: 3.22.4 dev: false /abort-controller@3.0.0: @@ -2856,7 +5650,6 @@ packages: engines: {node: '>=6.5'} dependencies: event-target-shim: 5.0.1 - dev: true /abstract-level@1.0.3: resolution: {integrity: sha512-t6jv+xHy+VYwc4xqZMn2Pa9DjcdzvzZmQGRjTFc8spIbRGHgBrEKbPq+rYXc7CCo0lxgYvSgKVg9qZAhpVQSjA==} @@ -2871,6 +5664,14 @@ packages: queue-microtask: 1.2.3 dev: true + /accepts@1.3.8: + resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} + engines: {node: '>= 0.6'} + dependencies: + mime-types: 2.1.35 + negotiator: 0.6.3 + dev: false + /acorn-jsx@5.3.2(acorn@8.10.0): resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: @@ -2882,13 +5683,11 @@ packages: /acorn-walk@8.2.0: resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} engines: {node: '>=0.4.0'} - dev: true /acorn@8.10.0: resolution: {integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==} engines: {node: '>=0.4.0'} hasBin: true - dev: true /address@1.2.2: resolution: {integrity: sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==} @@ -2925,6 +5724,17 @@ packages: indent-string: 4.0.0 dev: true + /ajv-formats@2.1.1(ajv@8.12.0): + resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + dependencies: + ajv: 8.12.0 + dev: false + /ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} dependencies: @@ -2932,7 +5742,6 @@ packages: fast-json-stable-stringify: 2.1.0 json-schema-traverse: 0.4.1 uri-js: 4.4.1 - dev: true /ajv@8.12.0: resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} @@ -2941,7 +5750,6 @@ packages: json-schema-traverse: 1.0.0 require-from-string: 2.0.2 uri-js: 4.4.1 - dev: true /amazon-cognito-identity-js@6.3.5: resolution: {integrity: sha512-bRAiw6uQuttufRD0TFcrWvA5hxAgPIwNzM0crmWniPdkmCxRoa68yxRaViZUbwAcGu9YPLCLqM87b1060BRddw==} @@ -2962,6 +5770,10 @@ packages: dev: true optional: true + /anser@1.4.10: + resolution: {integrity: sha512-hCv9AqTQ8ycjpSd3upOJd7vFwW1JaoYQ7tpham03GJ1ca8/65rqn0RpaWpItOAd6ylW9wAw6luXYPJIyPFVOww==} + dev: false + /ansi-colors@4.1.1: resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==} engines: {node: '>=6'} @@ -2979,6 +5791,14 @@ packages: type-fest: 0.21.3 dev: true + /ansi-fragments@0.2.1: + resolution: {integrity: sha512-DykbNHxuXQwUDRv5ibc2b0x7uw7wmwOGLBUd5RmaQ5z8Lhx19vwvKV+FAsM5rEA6dEcHxX+/Ad5s9eF2k2bB+w==} + dependencies: + colorette: 1.4.0 + slice-ansi: 2.1.0 + strip-ansi: 5.2.0 + dev: false + /ansi-regex@3.0.1: resolution: {integrity: sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==} engines: {node: '>=4'} @@ -2987,31 +5807,36 @@ packages: /ansi-regex@4.1.1: resolution: {integrity: sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==} engines: {node: '>=6'} - dev: true /ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} - dev: true + + /ansi-regex@6.0.1: + resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} + engines: {node: '>=12'} + dev: false /ansi-styles@3.2.1: resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} engines: {node: '>=4'} dependencies: color-convert: 1.9.3 - dev: true /ansi-styles@4.3.0: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} dependencies: color-convert: 2.0.1 - dev: true /ansi-styles@5.2.0: resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} engines: {node: '>=10'} - dev: true + + /ansi-styles@6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + engines: {node: '>=12'} + dev: false /ansicolors@0.3.2: resolution: {integrity: sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg==} @@ -3043,7 +5868,6 @@ packages: dependencies: normalize-path: 3.0.0 picomatch: 2.3.1 - dev: true /apisauce@2.1.6(debug@4.3.4): resolution: {integrity: sha512-MdxR391op/FucS2YQRfB/NMRyCnHEPDd4h17LRIuVYi0BpGmMhpxc0shbOpfs5ahABuBEffNCGal5EcsydbBWg==} @@ -3057,19 +5881,20 @@ packages: resolution: {integrity: sha512-gkco+qxENJV+8vFcDiiFhuoSvRXb2a/QPqpSoWhVz829VNJfOTnELbBmPmNKFxf3xdNnw4DWCkzkDaavcX/1YQ==} dev: true + /appdirsjs@1.2.7: + resolution: {integrity: sha512-Quji6+8kLBC3NnBeo14nPDq0+2jUs5s3/xEye+udFHumHhRk4M7aAMXp/PBJqkKYGuuyR9M/6Dq7d2AViiGmhw==} + dev: false + /arg@4.1.3: resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} - dev: true /argparse@1.0.10: resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} dependencies: sprintf-js: 1.0.3 - dev: true /argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - dev: true /array-back@3.1.0: resolution: {integrity: sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==} @@ -3091,7 +5916,6 @@ packages: /array-union@2.1.0: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} engines: {node: '>=8'} - dev: true /array-uniq@1.0.3: resolution: {integrity: sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==} @@ -3123,7 +5947,6 @@ packages: /asap@2.0.6: resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} - dev: true /asn1@0.2.6: resolution: {integrity: sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==} @@ -3138,7 +5961,6 @@ packages: pvtsutils: 1.3.5 pvutils: 1.1.3 tslib: 2.6.2 - dev: true /assemblyscript@0.19.10: resolution: {integrity: sha512-HavcUBXB3mBTRGJcpvaQjmnmaqKHBGREjSPNsIvnAk2f9dj78y4BkMaSSdvBQYWcDDzsHQjyUC8stICFkD1Odg==} @@ -3170,11 +5992,27 @@ packages: resolution: {integrity: sha512-XHusKxKz3zoYk1ic8Un640joHbFMhbqneyoZfoKnEGtf2ey9Uh/IdpcQplODdO/kENaMIWsD0nJm4+wX3UNLHA==} dev: true + /ast-types@0.15.2: + resolution: {integrity: sha512-c27loCv9QkZinsa5ProX751khO9DJl/AcB5c2KNtA6NRvHKS0PgLfcftz72KVq504vB0Gku5s2kUZzDBvQWvHg==} + engines: {node: '>=4'} + dependencies: + tslib: 2.6.2 + dev: false + + /astral-regex@1.0.0: + resolution: {integrity: sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==} + engines: {node: '>=4'} + dev: false + /astral-regex@2.0.0: resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} engines: {node: '>=8'} dev: true + /async-limiter@1.0.1: + resolution: {integrity: sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==} + dev: false + /async-retry@1.3.3: resolution: {integrity: sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==} dependencies: @@ -3187,17 +6025,20 @@ packages: /async@3.2.4: resolution: {integrity: sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==} - dev: true /asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} - dev: true /at-least-node@1.0.0: resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} engines: {node: '>= 4.0.0'} dev: true + /auto-bind@4.0.0: + resolution: {integrity: sha512-Hdw8qdNiqdJ8LqT0iK0sVzkFbzg6fhnQqqfWhBDxcHZvU75+B+ayzTy8x+k5Ix0Y92XOhOUlx74ps+bA6BeYMQ==} + engines: {node: '>=8'} + dev: false + /available-typed-arrays@1.0.5: resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} engines: {node: '>= 0.4'} @@ -3214,30 +6055,27 @@ packages: /axios@0.21.4(debug@4.3.4): resolution: {integrity: sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==} dependencies: - follow-redirects: 1.15.2(debug@4.3.4) - transitivePeerDependencies: - - debug - dev: true - - /axios@1.5.0(debug@4.3.4): - resolution: {integrity: sha512-D4DdjDo5CY50Qms0qGQTTw6Q44jl7zRwY7bthds06pUGfChBCTcQs+N743eFWGEd6pRTMd6A+I87aWyFV5wiZQ==} - dependencies: - follow-redirects: 1.15.2(debug@4.3.4) - form-data: 4.0.0 - proxy-from-env: 1.1.0 + follow-redirects: 1.15.3(debug@4.3.4) transitivePeerDependencies: - debug dev: true - /axios@1.5.1: + /axios@1.5.1(debug@4.3.4): resolution: {integrity: sha512-Q28iYCWzNHjAm+yEAot5QaAMxhMghWLFVf7rRdwhUI+c2jix2DUXjAHXVi+s1ibs3mjPO/cCgbA++3BjD0vP/A==} dependencies: - follow-redirects: 1.15.3 + follow-redirects: 1.15.3(debug@4.3.4) form-data: 4.0.0 proxy-from-env: 1.1.0 transitivePeerDependencies: - debug - dev: true + + /babel-core@7.0.0-bridge.0(@babel/core@7.23.0): + resolution: {integrity: sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.0 + dev: false /babel-jest@29.7.0(@babel/core@7.23.0): resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} @@ -3280,6 +6118,61 @@ packages: '@types/babel__traverse': 7.20.2 dev: true + /babel-plugin-polyfill-corejs2@0.4.6(@babel/core@7.23.0): + resolution: {integrity: sha512-jhHiWVZIlnPbEUKSSNb9YoWcQGdlTLq7z1GHL4AjFxaoOUMuuEVJ+Y4pAaQUGOGk93YsVCKPbqbfw3m0SM6H8Q==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + dependencies: + '@babel/compat-data': 7.23.2 + '@babel/core': 7.23.0 + '@babel/helper-define-polyfill-provider': 0.4.3(@babel/core@7.23.0) + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + /babel-plugin-polyfill-corejs3@0.8.5(@babel/core@7.23.0): + resolution: {integrity: sha512-Q6CdATeAvbScWPNLB8lzSO7fgUVBkQt6zLgNlfyeCr/EQaEQR+bWiBYYPYAFyE528BMjRhL+1QBMOI4jc/c5TA==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + dependencies: + '@babel/core': 7.23.0 + '@babel/helper-define-polyfill-provider': 0.4.3(@babel/core@7.23.0) + core-js-compat: 3.33.0 + transitivePeerDependencies: + - supports-color + + /babel-plugin-polyfill-regenerator@0.5.3(@babel/core@7.23.0): + resolution: {integrity: sha512-8sHeDOmXC8csczMrYEOf0UTNa4yE2SxV5JGeT/LP1n0OYVDUUFPxG9vdk2AlDlIit4t+Kf0xCtpgXPBwnn/9pw==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + dependencies: + '@babel/core': 7.23.0 + '@babel/helper-define-polyfill-provider': 0.4.3(@babel/core@7.23.0) + transitivePeerDependencies: + - supports-color + + /babel-plugin-syntax-trailing-function-commas@7.0.0-beta.0: + resolution: {integrity: sha512-Xj9XuRuz3nTSbaTXWv3itLOcxyF4oPD8douBBmj7U9BBC6nEBYfyOJYQMf/8PJAFotC62UY5dFfIGEPr7WswzQ==} + dev: false + + /babel-plugin-transform-flow-enums@0.0.2(@babel/core@7.23.0): + resolution: {integrity: sha512-g4aaCrDDOsWjbm0PUUeVnkcVd6AKJsVc/MbnPhEotEpkeJQP6b8nzewohQi7+QS8UyPehOhGWn0nOwjvWpmMvQ==} + dependencies: + '@babel/plugin-syntax-flow': 7.22.5(@babel/core@7.23.0) + transitivePeerDependencies: + - '@babel/core' + dev: false + + /babel-plugin-transform-import-meta@2.2.1(@babel/core@7.23.0): + resolution: {integrity: sha512-AxNh27Pcg8Kt112RGa3Vod2QS2YXKKJ6+nSvRtv7qQTJAdx0MZa4UHZ4lnxHUWA2MNbLuZQv5FVab4P1CoLOWw==} + peerDependencies: + '@babel/core': ^7.10.0 + dependencies: + '@babel/core': 7.23.0 + '@babel/template': 7.22.15 + tslib: 2.6.2 + dev: true + /babel-preset-current-node-syntax@1.0.1(@babel/core@7.23.0): resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} peerDependencies: @@ -3300,6 +6193,41 @@ packages: '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.23.0) dev: true + /babel-preset-fbjs@3.4.0(@babel/core@7.23.0): + resolution: {integrity: sha512-9ywCsCvo1ojrw0b+XYk7aFvTH6D9064t0RIL1rtMf3nsa02Xw41MS7sZw216Im35xj/UY0PDBQsa1brUDDF1Ow==} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.0 + '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.23.0) + '@babel/plugin-proposal-object-rest-spread': 7.20.7(@babel/core@7.23.0) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.23.0) + '@babel/plugin-syntax-flow': 7.22.5(@babel/core@7.23.0) + '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.23.0) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.0) + '@babel/plugin-transform-arrow-functions': 7.22.5(@babel/core@7.23.0) + '@babel/plugin-transform-block-scoped-functions': 7.22.5(@babel/core@7.23.0) + '@babel/plugin-transform-block-scoping': 7.23.0(@babel/core@7.23.0) + '@babel/plugin-transform-classes': 7.22.15(@babel/core@7.23.0) + '@babel/plugin-transform-computed-properties': 7.22.5(@babel/core@7.23.0) + '@babel/plugin-transform-destructuring': 7.23.0(@babel/core@7.23.0) + '@babel/plugin-transform-flow-strip-types': 7.22.5(@babel/core@7.23.0) + '@babel/plugin-transform-for-of': 7.22.15(@babel/core@7.23.0) + '@babel/plugin-transform-function-name': 7.22.5(@babel/core@7.23.0) + '@babel/plugin-transform-literals': 7.22.5(@babel/core@7.23.0) + '@babel/plugin-transform-member-expression-literals': 7.22.5(@babel/core@7.23.0) + '@babel/plugin-transform-modules-commonjs': 7.23.0(@babel/core@7.23.0) + '@babel/plugin-transform-object-super': 7.22.5(@babel/core@7.23.0) + '@babel/plugin-transform-parameters': 7.22.15(@babel/core@7.23.0) + '@babel/plugin-transform-property-literals': 7.22.5(@babel/core@7.23.0) + '@babel/plugin-transform-react-display-name': 7.22.5(@babel/core@7.23.0) + '@babel/plugin-transform-react-jsx': 7.22.15(@babel/core@7.23.0) + '@babel/plugin-transform-shorthand-properties': 7.22.5(@babel/core@7.23.0) + '@babel/plugin-transform-spread': 7.22.5(@babel/core@7.23.0) + '@babel/plugin-transform-template-literals': 7.22.5(@babel/core@7.23.0) + babel-plugin-syntax-trailing-function-commas: 7.0.0-beta.0 + dev: false + /babel-preset-jest@29.6.3(@babel/core@7.23.0): resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -3313,7 +6241,10 @@ packages: /balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - dev: true + + /base-64@0.1.0: + resolution: {integrity: sha512-Y5gU45svrR5tI2Vt/X9GPd3L0HNIKzGu202EjxrXMpuc2V2CiKgemAbUUsqYmZJvPtCXoUKjNZwBJzsNScUbXA==} + dev: false /base-x@3.0.9: resolution: {integrity: sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==} @@ -3323,7 +6254,6 @@ packages: /base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - dev: true /bcrypt-pbkdf@1.0.2: resolution: {integrity: sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==} @@ -3373,6 +6303,14 @@ packages: safe-buffer: 5.2.1 dev: true + /bl@4.1.0: + resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + dependencies: + buffer: 5.7.1 + inherits: 2.0.4 + readable-stream: 3.6.2 + dev: false + /blakejs@1.2.1: resolution: {integrity: sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==} dev: true @@ -3400,20 +6338,17 @@ packages: dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 - dev: true /brace-expansion@2.0.1: resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} dependencies: balanced-match: 1.0.2 - dev: true /braces@3.0.2: resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} engines: {node: '>=8'} dependencies: fill-range: 7.0.1 - dev: true /brorand@1.1.0: resolution: {integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==} @@ -3456,7 +6391,6 @@ packages: electron-to-chromium: 1.4.543 node-releases: 2.0.13 update-browserslist-db: 1.0.13(browserslist@4.22.1) - dev: true /bs-logger@0.2.6: resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==} @@ -3483,7 +6417,6 @@ packages: resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} dependencies: node-int64: 0.4.0 - dev: true /buffer-alloc-unsafe@1.1.0: resolution: {integrity: sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==} @@ -3502,7 +6435,6 @@ packages: /buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - dev: true /buffer-xor@1.0.3: resolution: {integrity: sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==} @@ -3516,6 +6448,13 @@ packages: isarray: 1.0.0 dev: true + /buffer@5.7.1: + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + dev: false + /buffer@6.0.3: resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} dependencies: @@ -3528,7 +6467,11 @@ packages: engines: {node: '>=10.16.0'} dependencies: streamsearch: 1.1.0 - dev: true + + /bytes@3.0.0: + resolution: {integrity: sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==} + engines: {node: '>= 0.8'} + dev: false /bytes@3.1.2: resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} @@ -3542,24 +6485,54 @@ packages: get-intrinsic: 1.2.1 dev: true + /caller-callsite@2.0.0: + resolution: {integrity: sha512-JuG3qI4QOftFsZyOn1qq87fq5grLIyk1JYd5lJmdA+fG7aQ9pA/i3JIJGcO3q0MrRcHlOt1U+ZeHW8Dq9axALQ==} + engines: {node: '>=4'} + dependencies: + callsites: 2.0.0 + dev: false + + /caller-path@2.0.0: + resolution: {integrity: sha512-MCL3sf6nCSXOwCTzvPKhN18TU7AHTvdtam8DAogxcrJ8Rjfbbg7Lgng64H9Iy+vUV6VGFClN/TyxBkAebLRR4A==} + engines: {node: '>=4'} + dependencies: + caller-callsite: 2.0.0 + dev: false + + /callsites@2.0.0: + resolution: {integrity: sha512-ksWePWBloaWPxJYQ8TL0JHvtci6G5QTKwQ95RcWAa/lzoAKuAOflGdAK92hpHXjkwb8zLxoLNUoNYZgVsaJzvQ==} + engines: {node: '>=4'} + dev: false + /callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} - dev: true + + /camel-case@4.1.2: + resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} + dependencies: + pascal-case: 3.1.2 + tslib: 2.6.2 + dev: false /camelcase@5.3.1: resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} engines: {node: '>=6'} - dev: true /camelcase@6.3.0: resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} engines: {node: '>=10'} - dev: true /caniuse-lite@1.0.30001546: resolution: {integrity: sha512-zvtSJwuQFpewSyRrI3AsftF6rM0X80mZkChIt1spBGEvRglCrjTniXvinc8JKRoqTwXAgvqTImaN9igfSMtUBw==} - dev: true + + /capital-case@1.0.4: + resolution: {integrity: sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==} + dependencies: + no-case: 3.0.4 + tslib: 2.6.2 + upper-case-first: 2.0.2 + dev: false /cardinal@2.1.1: resolution: {integrity: sha512-JSr5eOgoEymtYHBjNWyjrMqet9Am2miJhlfKNdqLp6zoeAh0KN5dRAcxlecj5mAJrmQomgiOBj35xHLrFjqBpw==} @@ -3631,7 +6604,6 @@ packages: ansi-styles: 3.2.1 escape-string-regexp: 1.0.5 supports-color: 5.5.0 - dev: true /chalk@3.0.0: resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==} @@ -3647,7 +6619,53 @@ packages: dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 - dev: true + + /change-case-all@1.0.14: + resolution: {integrity: sha512-CWVm2uT7dmSHdO/z1CXT/n47mWonyypzBbuCy5tN7uMg22BsfkhwT6oHmFCAk+gL1LOOxhdbB9SZz3J1KTY3gA==} + dependencies: + change-case: 4.1.2 + is-lower-case: 2.0.2 + is-upper-case: 2.0.2 + lower-case: 2.0.2 + lower-case-first: 2.0.2 + sponge-case: 1.0.1 + swap-case: 2.0.2 + title-case: 3.0.3 + upper-case: 2.0.2 + upper-case-first: 2.0.2 + dev: false + + /change-case-all@1.0.15: + resolution: {integrity: sha512-3+GIFhk3sNuvFAJKU46o26OdzudQlPNBCu1ZQi3cMeMHhty1bhDxu2WrEilVNYaGvqUtR1VSigFcJOiS13dRhQ==} + dependencies: + change-case: 4.1.2 + is-lower-case: 2.0.2 + is-upper-case: 2.0.2 + lower-case: 2.0.2 + lower-case-first: 2.0.2 + sponge-case: 1.0.1 + swap-case: 2.0.2 + title-case: 3.0.3 + upper-case: 2.0.2 + upper-case-first: 2.0.2 + dev: false + + /change-case@4.1.2: + resolution: {integrity: sha512-bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A==} + dependencies: + camel-case: 4.1.2 + capital-case: 1.0.4 + constant-case: 3.0.4 + dot-case: 3.0.4 + header-case: 2.0.4 + no-case: 3.0.4 + param-case: 3.0.4 + pascal-case: 3.1.2 + path-case: 3.0.4 + sentence-case: 3.0.4 + snake-case: 3.0.4 + tslib: 2.6.2 + dev: false /char-regex@1.0.2: resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} @@ -3690,12 +6708,10 @@ packages: /ci-info@2.0.0: resolution: {integrity: sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==} - dev: true /ci-info@3.9.0: resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} engines: {node: '>=8'} - dev: true /cipher-base@1.0.4: resolution: {integrity: sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==} @@ -3737,7 +6753,6 @@ packages: engines: {node: '>=8'} dependencies: restore-cursor: 3.1.0 - dev: true /cli-progress@3.12.0: resolution: {integrity: sha512-tRkV3HJ1ASwm19THiiLIXLO7Im7wlTuKnvkYaTkyoAPefqjNg7W7DHKUlGRxy9vxDvbyCYQkQozvptuMkGCg8A==} @@ -3749,7 +6764,6 @@ packages: /cli-spinners@2.9.1: resolution: {integrity: sha512-jHgecW0pxkonBJdrKsqxgRX9AcG+u/5k0Q7WPDfi8AogLAdwxEkyYYNWwZ5GvVFoFx2uiY1eNcSK00fh+1+FyQ==} engines: {node: '>=6'} - dev: true /cli-table3@0.5.1: resolution: {integrity: sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw==} @@ -3771,6 +6785,14 @@ packages: colors: 1.4.0 dev: true + /cliui@6.0.0: + resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 6.2.0 + dev: false + /cliui@7.0.4: resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} dependencies: @@ -3786,12 +6808,19 @@ packages: string-width: 4.2.3 strip-ansi: 6.0.1 wrap-ansi: 7.0.0 - dev: true + + /clone-deep@4.0.1: + resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==} + engines: {node: '>=6'} + dependencies: + is-plain-object: 2.0.4 + kind-of: 6.0.3 + shallow-clone: 3.0.1 + dev: false /clone@1.0.4: resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} engines: {node: '>=0.8'} - dev: true /co@4.6.0: resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} @@ -3806,22 +6835,22 @@ packages: resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} dependencies: color-name: 1.1.3 - dev: true /color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} dependencies: color-name: 1.1.4 - dev: true /color-name@1.1.3: resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} - dev: true /color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - dev: true + + /colorette@1.4.0: + resolution: {integrity: sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==} + dev: false /colors@1.4.0: resolution: {integrity: sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==} @@ -3833,11 +6862,9 @@ packages: engines: {node: '>= 0.8'} dependencies: delayed-stream: 1.0.0 - dev: true /command-exists@1.2.9: resolution: {integrity: sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==} - dev: true /command-line-args@5.2.1: resolution: {integrity: sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==} @@ -3864,21 +6891,59 @@ packages: engines: {node: '>=14'} dev: true + /commander@2.13.0: + resolution: {integrity: sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==} + dev: false + /commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} - dev: true /commander@3.0.2: resolution: {integrity: sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==} dev: true + /commander@9.5.0: + resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==} + engines: {node: ^12.20.0 || >=14} + dev: false + + /common-tags@1.8.2: + resolution: {integrity: sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==} + engines: {node: '>=4.0.0'} + dev: false + + /commondir@1.0.1: + resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} + dev: false + /compare-versions@6.1.0: resolution: {integrity: sha512-LNZQXhqUvqUTotpZ00qLSaify3b4VFD588aRr8MKFw4CMUr98ytzCW5wDH5qx/DEY5kCDXcbcRuCqL0szEf2tg==} dev: true + /compressible@2.0.18: + resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} + engines: {node: '>= 0.6'} + dependencies: + mime-db: 1.52.0 + dev: false + + /compression@1.7.4: + resolution: {integrity: sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==} + engines: {node: '>= 0.8.0'} + dependencies: + accepts: 1.3.8 + bytes: 3.0.0 + compressible: 2.0.18 + debug: 2.6.9 + on-headers: 1.0.2 + safe-buffer: 5.1.2 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + dev: false + /concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - dev: true /concat-stream@1.6.2: resolution: {integrity: sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==} @@ -3890,22 +6955,55 @@ packages: typedarray: 0.0.6 dev: true + /connect@3.7.0: + resolution: {integrity: sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==} + engines: {node: '>= 0.10.0'} + dependencies: + debug: 2.6.9 + finalhandler: 1.1.2 + parseurl: 1.3.3 + utils-merge: 1.0.1 + transitivePeerDependencies: + - supports-color + dev: false + + /constant-case@3.0.4: + resolution: {integrity: sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ==} + dependencies: + no-case: 3.0.4 + tslib: 2.6.2 + upper-case: 2.0.2 + dev: false + /convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - dev: true /cookie@0.4.2: resolution: {integrity: sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==} engines: {node: '>= 0.6'} dev: true + /core-js-compat@3.33.0: + resolution: {integrity: sha512-0w4LcLXsVEuNkIqwjjf9rjCoPhK8uqA4tMRh4Ge26vfLtUutshn+aRJU21I9LCJlh2QQHfisNToLjw1XEJLTWw==} + dependencies: + browserslist: 4.22.1 + /core-util-is@1.0.2: resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==} dev: true /core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} - dev: true + + /cosmiconfig@5.2.1: + resolution: {integrity: sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==} + engines: {node: '>=4'} + dependencies: + import-fresh: 2.0.0 + is-directory: 0.3.1 + js-yaml: 3.14.1 + parse-json: 4.0.0 + dev: false /cosmiconfig@7.0.1: resolution: {integrity: sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==} @@ -3926,7 +7024,6 @@ packages: js-yaml: 4.1.0 parse-json: 5.2.0 path-type: 4.0.0 - dev: true /crc-32@1.2.2: resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} @@ -3976,7 +7073,14 @@ packages: /create-require@1.1.1: resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} - dev: true + + /cross-fetch@3.1.8: + resolution: {integrity: sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==} + dependencies: + node-fetch: 2.7.0 + transitivePeerDependencies: + - encoding + dev: false /cross-spawn@7.0.3: resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} @@ -3985,7 +7089,6 @@ packages: path-key: 3.1.1 shebang-command: 2.0.0 which: 2.0.2 - dev: true /crypt@0.0.2: resolution: {integrity: sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==} @@ -4003,10 +7106,33 @@ packages: engines: {node: '>= 12'} dev: true + /dataloader@2.2.2: + resolution: {integrity: sha512-8YnDaaf7N3k/q5HnTJVuzSyLETjoZjVmHc4AeKAzOvKHEFQKcn64OKBfzHYtE9zGjctNM7V9I0MfnUVLpi7M5g==} + dev: false + + /dayjs@1.11.10: + resolution: {integrity: sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==} + dev: false + + /dayjs@1.11.7: + resolution: {integrity: sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ==} + dev: false + /death@1.1.0: resolution: {integrity: sha512-vsV6S4KVHvTGxbEcij7hkWRv0It+sGGWVOM67dQde/o5Xjnr+KmLjxWJii2uEObIrt1CcM9w0Yaovx+iOlIL+w==} dev: true + /debug@2.6.9: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.0.0 + dev: false + /debug@3.2.6: resolution: {integrity: sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==} deprecated: Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797) @@ -4030,7 +7156,11 @@ packages: dependencies: ms: 2.1.2 supports-color: 8.1.1 - dev: true + + /decamelize@1.2.0: + resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} + engines: {node: '>=0.10.0'} + dev: false /decamelize@4.0.0: resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==} @@ -4065,13 +7195,11 @@ packages: /deepmerge@4.3.1: resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} engines: {node: '>=0.10.0'} - dev: true /defaults@1.0.4: resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} dependencies: clone: 1.0.4 - dev: true /define-properties@1.2.0: resolution: {integrity: sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==} @@ -4089,12 +7217,32 @@ packages: /delayed-stream@1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} - dev: true + + /denodeify@1.2.1: + resolution: {integrity: sha512-KNTihKNmQENUZeKu5fzfpzRqR5S2VMp4gl9RFHiWzj9DfvYQPMJ6XHKNaQxaGCXwPk6y9yme3aUoaiAe+KX+vg==} + dev: false /depd@2.0.0: resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} engines: {node: '>= 0.8'} - dev: true + + /dependency-graph@0.11.0: + resolution: {integrity: sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==} + engines: {node: '>= 0.6.0'} + dev: false + + /deprecated-react-native-prop-types@4.1.0: + resolution: {integrity: sha512-WfepZHmRbbdTvhcolb8aOKEvQdcmTMn5tKLbqbXmkBvjFjRVWAYqsXk/DBsV8TZxws8SdGHLuHaJrHSQUPRdfw==} + dependencies: + '@react-native/normalize-colors': 0.72.0 + invariant: 2.2.4 + prop-types: 15.8.1 + dev: false + + /destroy@1.2.0: + resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + dev: false /detect-newline@3.1.0: resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} @@ -4119,7 +7267,6 @@ packages: /diff@4.0.2: resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} engines: {node: '>=0.3.1'} - dev: true /diff@5.0.0: resolution: {integrity: sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==} @@ -4137,7 +7284,6 @@ packages: engines: {node: '>=8'} dependencies: path-type: 4.0.0 - dev: true /dns-over-http-resolver@1.2.3(node-fetch@3.3.2): resolution: {integrity: sha512-miDiVSI6KSNbi4SVifzO/reD8rMnxgrlnkrlkugOLQpWQTe2qMdHsZp5DmfKjxNE+/T3VAAYLQUZMv9SMr6+AA==} @@ -4150,6 +7296,13 @@ packages: - supports-color dev: true + /dnscache@1.0.2: + resolution: {integrity: sha512-2FFKzmLGOnD+Y378bRKH+gTjRMuSpH7OKgPy31KjjfCoKZx7tU8Dmqfd/3fhG2d/4bppuN8/KtWMUZBAcUCRnQ==} + dependencies: + asap: 2.0.6 + lodash.clone: 4.5.0 + dev: false + /docker-compose@0.23.19: resolution: {integrity: sha512-v5vNLIdUqwj4my80wxFDkNH+4S85zsRuH29SO7dCWVWPCMt/ohZBsGN6g6KXWifT0pzQ7uOxqEKCYCDPJ8Vz4g==} engines: {node: '>= 6.0.0'} @@ -4187,10 +7340,26 @@ packages: esutils: 2.0.3 dev: true + /dot-case@3.0.4: + resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} + dependencies: + no-case: 3.0.4 + tslib: 2.6.2 + dev: false + /dotenv@16.3.1: resolution: {integrity: sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==} engines: {node: '>=12'} + /dset@3.1.2: + resolution: {integrity: sha512-g/M9sqy3oHe477Ar4voQxWtaPIFw1jTdKZuomOjhCcBx9nHUNn0pu6NopuFFrTh/TRZIKEj+76vLWFu9BNKk+Q==} + engines: {node: '>=4'} + dev: false + + /eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + dev: false + /ecc-jsbn@0.1.2: resolution: {integrity: sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==} dependencies: @@ -4198,6 +7367,10 @@ packages: safer-buffer: 2.1.2 dev: true + /ee-first@1.1.1: + resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} + dev: false + /ejs@3.1.9: resolution: {integrity: sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==} engines: {node: '>=0.10.0'} @@ -4215,7 +7388,6 @@ packages: /electron-to-chromium@1.4.543: resolution: {integrity: sha512-t2ZP4AcGE0iKCCQCBx/K2426crYdxD3YU6l0uK2EO3FZH0pbC4pFz/sZm2ruZsND6hQBTcDWWlo/MLpiOdif5g==} - dev: true /elliptic@6.5.4: resolution: {integrity: sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==} @@ -4236,7 +7408,15 @@ packages: /emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - dev: true + + /emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + dev: false + + /encodeurl@1.0.2: + resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} + engines: {node: '>= 0.8'} + dev: false /encoding@0.1.13: resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==} @@ -4270,6 +7450,12 @@ packages: engines: {node: '>=6'} dev: true + /envinfo@7.10.0: + resolution: {integrity: sha512-ZtUjZO6l5mwTHvc1L9+1q5p/R3wTopcfqMW8r5t8SJSKqeVI/LtajORwRFEKpEFuekjD0VBjwu1HMxL4UalIRw==} + engines: {node: '>=4'} + hasBin: true + dev: false + /err-code@3.0.1: resolution: {integrity: sha512-GiaH0KJUewYok+eeY05IIgjtAe4Yltygk9Wqp1V5yVWLdhf0hYZchRjNIT9bb0mSwRcIusT3cx7PJUf3zEIfUA==} dev: true @@ -4278,7 +7464,20 @@ packages: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} dependencies: is-arrayish: 0.2.1 - dev: true + + /error-stack-parser@2.1.4: + resolution: {integrity: sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==} + dependencies: + stackframe: 1.3.4 + dev: false + + /errorhandler@1.5.1: + resolution: {integrity: sha512-rcOwbfvP1WTViVoUjcfZicVzjhjTuhSMntHh6mW3IrEiyE6mJyXvsToJUJGlGlw/2xU9P5whlWNGlIDVeCiT4A==} + engines: {node: '>= 0.8'} + dependencies: + accepts: 1.3.8 + escape-html: 1.0.3 + dev: false /es-abstract@1.22.1: resolution: {integrity: sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==} @@ -4359,50 +7558,21 @@ packages: es6-promise: 4.2.8 dev: true - /esbuild@0.18.20: - resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} - engines: {node: '>=12'} - hasBin: true - requiresBuild: true - optionalDependencies: - '@esbuild/android-arm': 0.18.20 - '@esbuild/android-arm64': 0.18.20 - '@esbuild/android-x64': 0.18.20 - '@esbuild/darwin-arm64': 0.18.20 - '@esbuild/darwin-x64': 0.18.20 - '@esbuild/freebsd-arm64': 0.18.20 - '@esbuild/freebsd-x64': 0.18.20 - '@esbuild/linux-arm': 0.18.20 - '@esbuild/linux-arm64': 0.18.20 - '@esbuild/linux-ia32': 0.18.20 - '@esbuild/linux-loong64': 0.18.20 - '@esbuild/linux-mips64el': 0.18.20 - '@esbuild/linux-ppc64': 0.18.20 - '@esbuild/linux-riscv64': 0.18.20 - '@esbuild/linux-s390x': 0.18.20 - '@esbuild/linux-x64': 0.18.20 - '@esbuild/netbsd-x64': 0.18.20 - '@esbuild/openbsd-x64': 0.18.20 - '@esbuild/sunos-x64': 0.18.20 - '@esbuild/win32-arm64': 0.18.20 - '@esbuild/win32-ia32': 0.18.20 - '@esbuild/win32-x64': 0.18.20 - dev: true - /escalade@3.1.1: resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} engines: {node: '>=6'} - dev: true + + /escape-html@1.0.3: + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + dev: false /escape-string-regexp@1.0.5: resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} engines: {node: '>=0.8.0'} - dev: true /escape-string-regexp@2.0.0: resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} engines: {node: '>=8'} - dev: true /escape-string-regexp@4.0.0: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} @@ -4500,7 +7670,6 @@ packages: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} engines: {node: '>=4'} hasBin: true - dev: true /esquery@1.5.0: resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} @@ -4529,7 +7698,11 @@ packages: /esutils@2.0.3: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} - dev: true + + /etag@1.8.1: + resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} + engines: {node: '>= 0.6'} + dev: false /eth-gas-reporter@0.2.27: resolution: {integrity: sha512-femhvoAM7wL0GcI8ozTdxfuBtBFJ9qsyIAsmKVjlWAHUbdnnXHt+lKzz/kmldM5lA9jLuNHGwuIxorNpLbR1Zw==} @@ -4540,7 +7713,7 @@ packages: optional: true dependencies: '@solidity-parser/parser': 0.14.5 - axios: 1.5.1 + axios: 1.5.1(debug@4.3.4) cli-table3: 0.5.1 colors: 1.4.0 ethereum-cryptography: 1.2.0 @@ -4705,7 +7878,6 @@ packages: /event-target-shim@5.0.1: resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} engines: {node: '>=6'} - dev: true /evp_bytestokey@1.0.3: resolution: {integrity: sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==} @@ -4727,7 +7899,6 @@ packages: onetime: 5.1.2 signal-exit: 3.0.7 strip-final-newline: 2.0.0 - dev: true /exit@0.1.2: resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} @@ -4749,6 +7920,11 @@ packages: resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} dev: true + /extract-files@11.0.0: + resolution: {integrity: sha512-FuoE1qtbJ4bBVvv94CC7s0oTnKUGvQs+Rjf1L2SJFfS+HTVVjhPFtehPdQ0JiGPqVNfSSZvL5yzHHQq2Z4WNhQ==} + engines: {node: ^12.20 || >= 14.13} + dev: false + /extsprintf@1.3.0: resolution: {integrity: sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==} engines: {'0': node >=0.6.0} @@ -4765,11 +7941,9 @@ packages: /fast-decode-uri-component@1.0.1: resolution: {integrity: sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==} - dev: true /fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - dev: true /fast-diff@1.3.0: resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} @@ -4788,11 +7962,17 @@ packages: glob-parent: 5.1.2 merge2: 1.4.1 micromatch: 4.0.5 - dev: true /fast-json-stable-stringify@2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - dev: true + + /fast-json-stringify@1.21.0: + resolution: {integrity: sha512-xY6gyjmHN3AK1Y15BCbMpeO9+dea5ePVsp3BouHCdukcx0hOHbXwFhRodhcI0NpZIgDChSeAKkHW9YjKvhwKBA==} + dependencies: + ajv: 6.12.6 + deepmerge: 4.3.1 + string-similarity: 4.0.4 + dev: false /fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} @@ -4808,13 +7988,18 @@ packages: resolution: {integrity: sha512-g6KuKWmFXc0fID8WWH0jit4g0AGBoJhCkJMb1RmbsSEUNvQ+ZC8D6CUZ+GtF8nMzSPXnhiePyyqqipzNNEnHjg==} dependencies: fast-decode-uri-component: 1.0.1 - dev: true /fast-url-parser@1.1.3: resolution: {integrity: sha512-5jOCVXADYNuRkKFzNJ0dCCewsZiYo0dz8QNYljkOpFC6r2U4OBmKtvm/Tsuh4w1YYdDqDb31a8TVhBJ2OJKdqQ==} dependencies: punycode: 1.4.1 - dev: true + + /fast-xml-parser@4.3.2: + resolution: {integrity: sha512-rmrXUXwbJedoXkStenj1kkljNF7ugn5ZjR9FJcwmCfcCbtOMDghPajbc+Tck6vE6F5XsDmx+Pr2le9fw8+pXBg==} + hasBin: true + dependencies: + strnum: 1.0.5 + dev: false /fastest-levenshtein@1.0.16: resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==} @@ -4825,13 +8010,29 @@ packages: resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} dependencies: reusify: 1.0.4 - dev: true /fb-watchman@2.0.2: resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} dependencies: bser: 2.1.1 - dev: true + + /fbjs-css-vars@1.0.2: + resolution: {integrity: sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==} + dev: false + + /fbjs@3.0.5: + resolution: {integrity: sha512-ztsSx77JBtkuMrEypfhgc3cI0+0h+svqeie7xHbh1k/IKdcydnvadp/mUaGgjAOXQmQSxsqgaRhS3q9fy+1kxg==} + dependencies: + cross-fetch: 3.1.8 + fbjs-css-vars: 1.0.2 + loose-envify: 1.4.0 + object-assign: 4.1.1 + promise: 7.3.1 + setimmediate: 1.0.5 + ua-parser-js: 1.0.36 + transitivePeerDependencies: + - encoding + dev: false /fetch-blob@3.2.0: resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} @@ -4841,6 +8042,23 @@ packages: web-streams-polyfill: 3.2.1 dev: true + /fets@0.1.5: + resolution: {integrity: sha512-mL/ya591WOgCP1yBBPbp8E37nynj8QQF6iQCUVl0aHDL80BZ9SOL4BcKBy0dnKdC+clnnAkMm05KB9hsj4m4jQ==} + dependencies: + '@ardatan/fast-json-stringify': 0.0.6(ajv-formats@2.1.1)(ajv@8.12.0) + '@whatwg-node/cookie-store': 0.0.1 + '@whatwg-node/fetch': 0.8.8 + '@whatwg-node/server': 0.7.7 + ajv: 8.12.0 + ajv-formats: 2.1.1(ajv@8.12.0) + hotscript: 1.0.13 + json-schema-to-ts: 2.9.2 + openapi-types: 12.1.3 + tslib: 2.6.2 + zod: 3.22.4 + zod-to-json-schema: 3.21.4(zod@3.22.4) + dev: false + /file-entry-cache@6.0.1: resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} engines: {node: ^10.12.0 || >=12.0.0} @@ -4859,7 +8077,30 @@ packages: engines: {node: '>=8'} dependencies: to-regex-range: 5.0.1 - dev: true + + /finalhandler@1.1.2: + resolution: {integrity: sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==} + engines: {node: '>= 0.8'} + dependencies: + debug: 2.6.9 + encodeurl: 1.0.2 + escape-html: 1.0.3 + on-finished: 2.3.0 + parseurl: 1.3.3 + statuses: 1.5.0 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + dev: false + + /find-cache-dir@2.1.0: + resolution: {integrity: sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==} + engines: {node: '>=6'} + dependencies: + commondir: 1.0.1 + make-dir: 2.1.0 + pkg-dir: 3.0.0 + dev: false /find-replace@3.0.0: resolution: {integrity: sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==} @@ -4875,13 +8116,19 @@ packages: locate-path: 2.0.0 dev: true + /find-up@3.0.0: + resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==} + engines: {node: '>=6'} + dependencies: + locate-path: 3.0.0 + dev: false + /find-up@4.1.0: resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} engines: {node: '>=8'} dependencies: locate-path: 5.0.0 path-exists: 4.0.0 - dev: true /find-up@5.0.0: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} @@ -4889,7 +8136,6 @@ packages: dependencies: locate-path: 6.0.0 path-exists: 4.0.0 - dev: true /flat-cache@3.1.0: resolution: {integrity: sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew==} @@ -4909,19 +8155,16 @@ packages: resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} dev: true - /follow-redirects@1.15.2(debug@4.3.4): - resolution: {integrity: sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==} - engines: {node: '>=4.0'} - peerDependencies: - debug: '*' - peerDependenciesMeta: - debug: - optional: true - dependencies: - debug: 4.3.4(supports-color@8.1.1) - dev: true + /flow-enums-runtime@0.0.5: + resolution: {integrity: sha512-PSZF9ZuaZD03sT9YaIs0FrGJ7lSUw7rHZIex+73UYVXg46eL/wxN5PaVcPJFudE2cJu5f0fezitV5aBkLHPUOQ==} + dev: false + + /flow-parser@0.206.0: + resolution: {integrity: sha512-HVzoK3r6Vsg+lKvlIZzaWNBVai+FXTX1wdYhz/wVlH13tb/gOdLXmlTqy6odmTBhT5UoWUbq0k8263Qhr9d88w==} + engines: {node: '>=0.4.0'} + dev: false - /follow-redirects@1.15.3: + /follow-redirects@1.15.3(debug@4.3.4): resolution: {integrity: sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==} engines: {node: '>=4.0'} peerDependencies: @@ -4929,7 +8172,8 @@ packages: peerDependenciesMeta: debug: optional: true - dev: true + dependencies: + debug: 4.3.4(supports-color@8.1.1) /for-each@0.3.3: resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} @@ -4937,6 +8181,18 @@ packages: is-callable: 1.2.7 dev: true + /foreach@2.0.6: + resolution: {integrity: sha512-k6GAGDyqLe9JaebCsFCoudPPWfihKu8pylYXRlqP1J7ms39iPoTtk2fviNglIeQEwdh0bQeKJ01ZPyuyQvKzwg==} + dev: false + + /foreground-child@3.1.1: + resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} + engines: {node: '>=14'} + dependencies: + cross-spawn: 7.0.3 + signal-exit: 4.1.0 + dev: false + /forever-agent@0.6.1: resolution: {integrity: sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==} dev: true @@ -4966,7 +8222,6 @@ packages: asynckit: 0.4.0 combined-stream: 1.0.8 mime-types: 2.1.35 - dev: true /formdata-polyfill@4.0.10: resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} @@ -4979,6 +8234,11 @@ packages: resolution: {integrity: sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==} dev: true + /fresh@0.5.2: + resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} + engines: {node: '>= 0.6'} + dev: false + /fs-constants@1.0.0: resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} dev: true @@ -5009,7 +8269,6 @@ packages: graceful-fs: 4.2.11 jsonfile: 4.0.0 universalify: 0.1.2 - dev: true /fs-extra@9.1.0: resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} @@ -5041,19 +8300,16 @@ packages: /fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - dev: true /fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] requiresBuild: true - dev: true optional: true /function-bind@1.1.1: resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} - dev: true /function.prototype.name@1.1.6: resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} @@ -5073,15 +8329,19 @@ packages: resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} dev: true + /generate-function@2.3.1: + resolution: {integrity: sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==} + dependencies: + is-property: 1.0.2 + dev: false + /gensync@1.0.0-beta.2: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} - dev: true /get-caller-file@2.0.5: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} - dev: true /get-func-name@2.0.2: resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} @@ -5113,7 +8373,6 @@ packages: /get-stream@6.0.1: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} - dev: true /get-symbol-description@1.0.0: resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} @@ -5142,7 +8401,6 @@ packages: engines: {node: '>= 6'} dependencies: is-glob: 4.0.3 - dev: true /glob-parent@6.0.2: resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} @@ -5151,12 +8409,24 @@ packages: is-glob: 4.0.3 dev: true + /glob@10.3.10: + resolution: {integrity: sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==} + engines: {node: '>=16 || 14 >=14.17'} + hasBin: true + dependencies: + foreground-child: 3.1.1 + jackspeak: 2.3.6 + minimatch: 9.0.3 + minipass: 7.0.3 + path-scurry: 1.10.1 + dev: false + /glob@5.0.15: resolution: {integrity: sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA==} dependencies: inflight: 1.0.6 inherits: 2.0.4 - minimatch: 8.0.4 + minimatch: 9.0.3 once: 1.4.0 path-is-absolute: 1.0.1 dev: true @@ -5167,7 +8437,7 @@ packages: fs.realpath: 1.0.0 inflight: 1.0.6 inherits: 2.0.4 - minimatch: 8.0.4 + minimatch: 9.0.3 once: 1.4.0 path-is-absolute: 1.0.1 dev: true @@ -5192,7 +8462,6 @@ packages: minimatch: 3.1.2 once: 1.4.0 path-is-absolute: 1.0.1 - dev: true /glob@8.1.0: resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} @@ -5234,7 +8503,6 @@ packages: /globals@11.12.0: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} - dev: true /globals@13.22.0: resolution: {integrity: sha512-H1Ddc/PbZHTDVJSnj8kWptIRSD6AM3pK+mKytuIVF4uoBV7rshFlhhvA58ceJ5wp3Er58w6zj7bykMpYXt3ETw==} @@ -5274,7 +8542,6 @@ packages: ignore: 5.2.4 merge2: 1.4.1 slash: 3.0.0 - dev: true /gluegun@5.1.2(debug@4.3.4): resolution: {integrity: sha512-Cwx/8S8Z4YQg07a6AFsaGnnnmd8mN17414NcPS3OoDtZRwxgsvwRNJNg69niD6fDa8oNwslCG0xH7rEpRNNE/g==} @@ -5322,7 +8589,6 @@ packages: /graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - dev: true /graphemer@1.4.0: resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} @@ -5334,7 +8600,21 @@ packages: graphql: '*' dependencies: graphql: 16.8.1 - dev: true + + /graphql-jit@0.8.2(graphql@16.8.1): + resolution: {integrity: sha512-P9KtM/UY4JTtHVRqRlZzFXPmDEtps1Bd27Mvj/naQIa5d0j83zPxAx4jewq1wueF3UEZu1JFZwX1XVBBkoo1Mg==} + peerDependencies: + graphql: '>=15' + dependencies: + '@graphql-typed-document-node/core': 3.2.0(graphql@16.8.1) + fast-json-stringify: 1.21.0 + generate-function: 2.3.1 + graphql: 16.8.1 + json-schema: 0.4.0 + lodash.memoize: 4.1.2 + lodash.merge: 4.6.2 + lodash.mergewith: 4.6.2 + dev: false /graphql-tag@2.12.6(graphql@16.8.1): resolution: {integrity: sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg==} @@ -5346,6 +8626,64 @@ packages: tslib: 2.6.2 dev: false + /graphql-ws@5.12.1(graphql@16.8.1): + resolution: {integrity: sha512-umt4f5NnMK46ChM2coO36PTFhHouBrK9stWWBczERguwYrGnPNxJ9dimU6IyOBfOkC6Izhkg4H8+F51W/8CYDg==} + engines: {node: '>=10'} + peerDependencies: + graphql: '>=0.11 <=16' + dependencies: + graphql: 16.8.1 + dev: false + + /graphql-ws@5.14.1(graphql@16.8.1): + resolution: {integrity: sha512-aqkls1espsygP1PfkAuuLIV96IbztQ6EaADse97pw8wRIMT3+AL/OYfS8V2iCRkc0gzckitoDRGCQEdnySggiA==} + engines: {node: '>=10'} + peerDependencies: + graphql: '>=0.11 <=16' + dependencies: + graphql: 16.8.1 + dev: false + + /graphql-yoga@3.9.1(graphql@16.8.1): + resolution: {integrity: sha512-BB6EkN64VBTXWmf9Kym2OsVZFzBC0mAsQNo9eNB5xIr3t+x7qepQ34xW5A353NWol3Js3xpzxwIKFVF6l9VsPg==} + peerDependencies: + graphql: ^15.2.0 || ^16.0.0 + dependencies: + '@envelop/core': 3.0.6 + '@envelop/validation-cache': 5.1.3(@envelop/core@3.0.6)(graphql@16.8.1) + '@graphql-tools/executor': 0.0.18(graphql@16.8.1) + '@graphql-tools/schema': 9.0.19(graphql@16.8.1) + '@graphql-tools/utils': 9.2.1(graphql@16.8.1) + '@graphql-yoga/logger': 0.0.1 + '@graphql-yoga/subscription': 3.1.0 + '@whatwg-node/fetch': 0.8.8 + '@whatwg-node/server': 0.7.7 + dset: 3.1.2 + graphql: 16.8.1 + lru-cache: 7.18.3 + tslib: 2.6.2 + dev: false + + /graphql-yoga@4.0.5(graphql@16.8.1): + resolution: {integrity: sha512-vIbJU9QX5RP4PoxbMCHcfOlt/3EsC/0uLdAOlKaiUvlwJDTFCaIHo2X10vL4i/27Gw8g90ECIwm2YbmeLDwcqg==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^15.2.0 || ^16.0.0 + dependencies: + '@envelop/core': 4.0.3 + '@graphql-tools/executor': 1.2.0(graphql@16.8.1) + '@graphql-tools/schema': 10.0.0(graphql@16.8.1) + '@graphql-tools/utils': 10.0.7(graphql@16.8.1) + '@graphql-yoga/logger': 1.0.0 + '@graphql-yoga/subscription': 4.0.0 + '@whatwg-node/fetch': 0.9.13 + '@whatwg-node/server': 0.9.14 + dset: 3.1.2 + graphql: 16.8.1 + lru-cache: 10.0.1 + tslib: 2.6.2 + dev: false + /graphql@15.5.0: resolution: {integrity: sha512-OmaM7y0kaK31NKG31q4YbD2beNYa6jBBKtMFT6gLYJljHLJr42IqJ8KX08u3Li/0ifzTU5HjmoOOrwa5BRLeDA==} engines: {node: '>= 10.x'} @@ -5478,12 +8816,10 @@ packages: /has-flag@3.0.0: resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} engines: {node: '>=4'} - dev: true /has-flag@4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} - dev: true /has-property-descriptors@1.0.0: resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} @@ -5513,7 +8849,6 @@ packages: engines: {node: '>= 0.4.0'} dependencies: function-bind: 1.1.1 - dev: true /hash-base@3.1.0: resolution: {integrity: sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==} @@ -5524,6 +8859,10 @@ packages: safe-buffer: 5.2.1 dev: true + /hash-it@6.0.0: + resolution: {integrity: sha512-KHzmSFx1KwyMPw0kXeeUD752q/Kfbzhy6dAZrjXV9kAIXGqzGvv8vhkUqj+2MGZldTo0IBpw6v7iWE7uxsvH0w==} + dev: false + /hash.js@1.1.7: resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==} dependencies: @@ -5536,10 +8875,34 @@ packages: hasBin: true dev: true + /header-case@2.0.4: + resolution: {integrity: sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q==} + dependencies: + capital-case: 1.0.4 + tslib: 2.6.2 + dev: false + /heap@0.2.7: resolution: {integrity: sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==} dev: true + /hermes-estree@0.12.0: + resolution: {integrity: sha512-+e8xR6SCen0wyAKrMT3UD0ZCCLymKhRgjEB5sS28rKiFir/fXgLoeRilRUssFCILmGHb+OvHDUlhxs0+IEyvQw==} + dev: false + + /hermes-parser@0.12.0: + resolution: {integrity: sha512-d4PHnwq6SnDLhYl3LHNHvOg7nQ6rcI7QVil418REYksv0Mh3cEkHDcuhGxNQ3vgnLSLl4QSvDrFCwQNYdpWlzw==} + dependencies: + hermes-estree: 0.12.0 + dev: false + + /hermes-profile-transformer@0.0.6: + resolution: {integrity: sha512-cnN7bQUm65UWOy6cbGcCcZ3rpwW8Q/j4OP5aWRhEry4Z2t2aR1cjrbp0BS+KiBN0smvP1caBgAuxutvyvJILzQ==} + engines: {node: '>=8'} + dependencies: + source-map: 0.7.4 + dev: false + /hmac-drbg@1.0.1: resolution: {integrity: sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==} dependencies: @@ -5550,9 +8913,15 @@ packages: /hoist-non-react-statics@3.3.2: resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} + requiresBuild: true dependencies: react-is: 16.13.1 dev: false + optional: true + + /hotscript@1.0.13: + resolution: {integrity: sha512-C++tTF1GqkGYecL+2S1wJTfoH6APGAsbb7PAWQ3iVIwgG/EFseAfEVOKFgAFq4yK3+6j1EjUD4UQ9dRJHX/sSQ==} + dev: false /html-escaper@2.0.2: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} @@ -5577,7 +8946,6 @@ packages: setprototypeof: 1.2.0 statuses: 2.0.1 toidentifier: 1.0.1 - dev: true /http-response-object@3.0.2: resolution: {integrity: sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==} @@ -5607,7 +8975,6 @@ packages: /human-signals@2.1.0: resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} engines: {node: '>=10.17.0'} - dev: true /husky@8.0.3: resolution: {integrity: sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==} @@ -5636,12 +9003,27 @@ packages: /ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - dev: true /ignore@5.2.4: resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} engines: {node: '>= 4'} - dev: true + + /image-size@1.0.2: + resolution: {integrity: sha512-xfOoWjceHntRb3qFCrh5ZFORYH8XCdYpASltMhZ/Q0KZiOwjdE/Yl2QCiWdwD+lygV5bMCvauzgu5PxBX/Yerg==} + engines: {node: '>=14.0.0'} + hasBin: true + dependencies: + queue: 6.0.2 + dev: false + + /immediate@3.0.6: + resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==} + dev: false + + /immutable@3.7.6: + resolution: {integrity: sha512-AizQPcaofEtO11RZhPPHBOJRdo/20MKQF9mBLnVkBoyHi1/zXK8fzVdnEpSV9gxqtnh6Qomfp3F0xT5qP/vThw==} + engines: {node: '>=0.8.0'} + dev: false /immutable@4.2.1: resolution: {integrity: sha512-7WYV7Q5BTs0nlQm7tl92rDYYoyELLKHoDMBKhrxEoiV4mrfVdRz8hzPiYOzH7yWjzoVEamxRuAqhxL2PLRwZYQ==} @@ -5651,13 +9033,25 @@ packages: resolution: {integrity: sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA==} dev: true + /import-fresh@2.0.0: + resolution: {integrity: sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg==} + engines: {node: '>=4'} + dependencies: + caller-path: 2.0.0 + resolve-from: 3.0.0 + dev: false + /import-fresh@3.3.0: resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} engines: {node: '>=6'} dependencies: parent-module: 1.0.1 resolve-from: 4.0.0 - dev: true + + /import-from@4.0.0: + resolution: {integrity: sha512-P9J71vT5nLlDeV8FHs5nNxaLbrpfAV5cF5srvbZfpwpcJoM/xZR3hiv+q+SAnuSmuGbXMWud063iIMx/V/EWZQ==} + engines: {node: '>=12.2'} + dev: false /import-local@3.1.0: resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==} @@ -5671,7 +9065,6 @@ packages: /imurmurhash@0.1.4: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} - dev: true /indent-string@4.0.0: resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} @@ -5683,11 +9076,9 @@ packages: dependencies: once: 1.4.0 wrappy: 1.0.2 - dev: true /inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - dev: true /ini@1.3.8: resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} @@ -5719,6 +9110,12 @@ packages: engines: {node: '>= 0.10'} dev: true + /invariant@2.2.4: + resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} + dependencies: + loose-envify: 1.4.0 + dev: false + /io-ts@1.10.4: resolution: {integrity: sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g==} dependencies: @@ -5730,6 +9127,10 @@ packages: engines: {node: '>=8'} dev: true + /ip@1.1.8: + resolution: {integrity: sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==} + dev: false + /ipfs-core-types@0.9.0(node-fetch@3.3.2): resolution: {integrity: sha512-VJ8vJSHvI1Zm7/SxsZo03T+zzpsg8pkgiIi5hfwSJlsrJ1E2v68QPlnLshGHUSYw89Oxq0IbETYl2pGTFHTWfg==} deprecated: js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details @@ -5834,6 +9235,14 @@ packages: - encoding dev: true + /is-absolute@1.0.0: + resolution: {integrity: sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==} + engines: {node: '>=0.10.0'} + dependencies: + is-relative: 1.0.0 + is-windows: 1.0.2 + dev: false + /is-array-buffer@3.0.2: resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} dependencies: @@ -5844,7 +9253,6 @@ packages: /is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - dev: true /is-bigint@1.0.4: resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} @@ -5881,7 +9289,6 @@ packages: resolution: {integrity: sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==} dependencies: has: 1.0.3 - dev: true /is-date-object@1.0.5: resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} @@ -5890,11 +9297,15 @@ packages: has-tostringtag: 1.0.0 dev: true + /is-directory@0.3.1: + resolution: {integrity: sha512-yVChGzahRFvbkscn2MlwGismPO12i9+znNruC5gVEntG3qu0xQMzsGg/JFbrsqDOHtHFPci+V5aP5T9I+yeKqw==} + engines: {node: '>=0.10.0'} + dev: false + /is-docker@2.2.1: resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} engines: {node: '>=8'} hasBin: true - dev: true /is-electron@2.2.2: resolution: {integrity: sha512-FO/Rhvz5tuw4MCWkpMzHFKWD2LsfHzIb7i6MdPYZ/KW7AlxawyLkqdy+jPZP1WubqEADE3O4FUENlJHDfQASRg==} @@ -5903,17 +9314,14 @@ packages: /is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} - dev: true /is-fullwidth-code-point@2.0.0: resolution: {integrity: sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==} engines: {node: '>=4'} - dev: true /is-fullwidth-code-point@3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} - dev: true /is-generator-fn@2.1.0: resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} @@ -5925,7 +9333,6 @@ packages: engines: {node: '>=0.10.0'} dependencies: is-extglob: 2.1.1 - dev: true /is-hex-prefixed@1.0.0: resolution: {integrity: sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==} @@ -5935,7 +9342,6 @@ packages: /is-interactive@1.0.0: resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} engines: {node: '>=8'} - dev: true /is-ip@3.1.0: resolution: {integrity: sha512-35vd5necO7IitFPjd/YBeqwWnyDWbuLH9ZXQdMfDA8TEo7pv5X8yfrvVO3xbJbLUlERCMvf6X0hTUamQxCYJ9Q==} @@ -5944,6 +9350,12 @@ packages: ip-regex: 4.3.0 dev: true + /is-lower-case@2.0.2: + resolution: {integrity: sha512-bVcMJy4X5Og6VZfdOZstSexlEy20Sr0k/p/b2IlQJlfdKAQuMpiv5w2Ccxb8sKdRUNAG1PnHVHjFSdRDVS6NlQ==} + dependencies: + tslib: 2.6.2 + dev: false + /is-negative-zero@2.0.2: resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} engines: {node: '>= 0.4'} @@ -5959,7 +9371,6 @@ packages: /is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} - dev: true /is-path-inside@3.0.3: resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} @@ -5971,6 +9382,17 @@ packages: engines: {node: '>=8'} dev: true + /is-plain-object@2.0.4: + resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} + engines: {node: '>=0.10.0'} + dependencies: + isobject: 3.0.1 + dev: false + + /is-property@1.0.2: + resolution: {integrity: sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==} + dev: false + /is-regex@1.1.4: resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} engines: {node: '>= 0.4'} @@ -5979,6 +9401,13 @@ packages: has-tostringtag: 1.0.0 dev: true + /is-relative@1.0.0: + resolution: {integrity: sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==} + engines: {node: '>=0.10.0'} + dependencies: + is-unc-path: 1.0.0 + dev: false + /is-shared-array-buffer@1.0.2: resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} dependencies: @@ -5988,7 +9417,6 @@ packages: /is-stream@2.0.1: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} - dev: true /is-string@1.0.7: resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} @@ -6015,10 +9443,22 @@ packages: resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} dev: true + /is-unc-path@1.0.0: + resolution: {integrity: sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==} + engines: {node: '>=0.10.0'} + dependencies: + unc-path-regex: 0.1.2 + dev: false + /is-unicode-supported@0.1.0: resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} engines: {node: '>=10'} - dev: true + + /is-upper-case@2.0.2: + resolution: {integrity: sha512-44pxmxAvnnAOwBg4tHPnkfvgjPwbc5QIsSstNU+YcJ1ovxVzCWpSGosPJOZh/a1tdl81fbgnLc9LLv+x2ywbPQ==} + dependencies: + tslib: 2.6.2 + dev: false /is-weakref@1.0.2: resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} @@ -6026,12 +9466,21 @@ packages: call-bind: 1.0.2 dev: true + /is-windows@1.0.2: + resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} + engines: {node: '>=0.10.0'} + dev: false + + /is-wsl@1.1.0: + resolution: {integrity: sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==} + engines: {node: '>=4'} + dev: false + /is-wsl@2.2.0: resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} engines: {node: '>=8'} dependencies: is-docker: 2.2.1 - dev: true /isarray@0.0.1: resolution: {integrity: sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==} @@ -6039,7 +9488,6 @@ packages: /isarray@1.0.0: resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} - dev: true /isarray@2.0.5: resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} @@ -6047,13 +9495,17 @@ packages: /isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - dev: true /iso-url@1.2.1: resolution: {integrity: sha512-9JPDgCN4B7QPkLtYAAOrEuAWvP9rWvR5offAr0/SeF046wIkglqH3VXgYYP6NcsKslH80UIVgmPqNe3j7tG2ng==} engines: {node: '>=12'} dev: true + /isobject@3.0.1: + resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} + engines: {node: '>=0.10.0'} + dev: false + /isomorphic-unfetch@3.1.0: resolution: {integrity: sha512-geDJjpoZ8N0kWexiwkX8F9NkTsXhetLPVbZFQ+JTW239QNOwvB0gniuR1Wc6f0AMTn7/mFGyXvHTifrCp/GH8Q==} dependencies: @@ -6071,12 +9523,20 @@ packages: ws: 7.5.9 dev: true - /isomorphic-ws@5.0.0(ws@8.13.0): + /isomorphic-ws@5.0.0(ws@8.13.0): + resolution: {integrity: sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==} + peerDependencies: + ws: '*' + dependencies: + ws: 8.13.0 + dev: false + + /isomorphic-ws@5.0.0(ws@8.14.2): resolution: {integrity: sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==} peerDependencies: ws: '*' dependencies: - ws: 8.13.0 + ws: 8.14.2 dev: false /isstream@0.1.2: @@ -6180,6 +9640,15 @@ packages: readable-stream: 3.6.2 dev: true + /jackspeak@2.3.6: + resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==} + engines: {node: '>=14'} + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + dev: false + /jake@10.8.7: resolution: {integrity: sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==} engines: {node: '>=10'} @@ -6358,12 +9827,10 @@ packages: '@types/node': 20.8.0 jest-mock: 29.7.0 jest-util: 29.7.0 - dev: true /jest-get-type@29.6.3: resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dev: true /jest-haste-map@29.7.0: resolution: {integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==} @@ -6415,7 +9882,6 @@ packages: pretty-format: 29.7.0 slash: 3.0.0 stack-utils: 2.0.6 - dev: true /jest-mock@29.7.0: resolution: {integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==} @@ -6424,7 +9890,6 @@ packages: '@jest/types': 29.6.3 '@types/node': 20.8.0 jest-util: 29.7.0 - dev: true /jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} @@ -6438,6 +9903,11 @@ packages: jest-resolve: 29.7.0 dev: true + /jest-regex-util@27.5.1: + resolution: {integrity: sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dev: false + /jest-regex-util@29.6.3: resolution: {integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -6555,6 +10025,18 @@ packages: - supports-color dev: true + /jest-util@27.5.1: + resolution: {integrity: sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/types': 27.5.1 + '@types/node': 20.8.0 + chalk: 4.1.2 + ci-info: 3.9.0 + graceful-fs: 4.2.11 + picomatch: 2.3.1 + dev: false + /jest-util@29.7.0: resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -6565,7 +10047,6 @@ packages: ci-info: 3.9.0 graceful-fs: 4.2.11 picomatch: 2.3.1 - dev: true /jest-validate@29.7.0: resolution: {integrity: sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==} @@ -6577,7 +10058,6 @@ packages: jest-get-type: 29.6.3 leven: 3.1.0 pretty-format: 29.7.0 - dev: true /jest-watcher@29.7.0: resolution: {integrity: sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==} @@ -6593,6 +10073,15 @@ packages: string-length: 4.0.2 dev: true + /jest-worker@27.5.1: + resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} + engines: {node: '>= 10.13.0'} + dependencies: + '@types/node': 20.8.0 + merge-stream: 2.0.0 + supports-color: 8.1.1 + dev: false + /jest-worker@29.7.0: resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -6624,6 +10113,16 @@ packages: - ts-node dev: true + /joi@17.11.0: + resolution: {integrity: sha512-NgB+lZLNoqISVy1rZocE9PZI36bL/77ie924Ri43yEvi9GUUMPeyVIr8KdFTMUlby1p0PBYMk9spIxEUQYqrJQ==} + dependencies: + '@hapi/hoek': 9.3.0 + '@hapi/topo': 5.1.0 + '@sideway/address': 4.1.4 + '@sideway/formula': 3.0.1 + '@sideway/pinpoint': 2.0.0 + dev: false + /js-cookie@2.2.1: resolution: {integrity: sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ==} dev: true @@ -6645,44 +10144,102 @@ packages: dependencies: argparse: 1.0.10 esprima: 4.0.1 - dev: true /js-yaml@4.1.0: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true dependencies: argparse: 2.0.1 - dev: true /jsbn@0.1.1: resolution: {integrity: sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==} dev: true + /jsc-android@250231.0.0: + resolution: {integrity: sha512-rS46PvsjYmdmuz1OAWXY/1kCYG7pnf1TBqeTiOJr1iDz7s5DLxxC9n/ZMknLDxzYzNVfI7R95MH10emSSG1Wuw==} + dev: false + + /jsc-safe-url@0.2.4: + resolution: {integrity: sha512-0wM3YBWtYePOjfyXQH5MWQ8H7sdk5EXSwZvmSLKk2RboVQ2Bu239jycHDz5J/8Blf3K0Qnoy2b6xD+z10MFB+Q==} + dev: false + + /jscodeshift@0.14.0(@babel/preset-env@7.23.2): + resolution: {integrity: sha512-7eCC1knD7bLUPuSCwXsMZUH51O8jIcoVyKtI6P0XM0IVzlGjckPy3FIwQlorzbN0Sg79oK+RlohN32Mqf/lrYA==} + hasBin: true + peerDependencies: + '@babel/preset-env': ^7.1.6 + dependencies: + '@babel/core': 7.23.0 + '@babel/parser': 7.23.0 + '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.23.0) + '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.23.0) + '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.23.0) + '@babel/plugin-transform-modules-commonjs': 7.23.0(@babel/core@7.23.0) + '@babel/preset-env': 7.23.2(@babel/core@7.23.0) + '@babel/preset-flow': 7.22.15(@babel/core@7.23.0) + '@babel/preset-typescript': 7.23.2(@babel/core@7.23.0) + '@babel/register': 7.22.15(@babel/core@7.23.0) + babel-core: 7.0.0-bridge.0(@babel/core@7.23.0) + chalk: 4.1.2 + flow-parser: 0.206.0 + graceful-fs: 4.2.11 + micromatch: 4.0.5 + neo-async: 2.6.2 + node-dir: 0.1.17 + recast: 0.21.5 + temp: 0.8.4 + write-file-atomic: 2.4.3 + transitivePeerDependencies: + - supports-color + dev: false + + /jsesc@0.5.0: + resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} + hasBin: true + /jsesc@2.5.2: resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} engines: {node: '>=4'} hasBin: true - dev: true + + /json-bigint-patch@0.0.8: + resolution: {integrity: sha512-xa0LTQsyaq8awYyZyuUsporWisZFiyqzxGW8CKM3t7oouf0GFAKYJnqAm6e9NLNBQOCtOLvy614DEiRX/rPbnA==} + dev: false /json-buffer@3.0.1: resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} dev: true + /json-parse-better-errors@1.0.2: + resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==} + dev: false + /json-parse-even-better-errors@2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} - dev: true + + /json-pointer@0.6.2: + resolution: {integrity: sha512-vLWcKbOaXlO+jvRy4qNd+TI1QUPZzfJj1tpJ3vAXDych5XJf93ftpUKe5pKCrzyIIwgBJcOcCVRUfqQP25afBw==} + dependencies: + foreach: 2.0.6 + dev: false + + /json-schema-to-ts@2.9.2: + resolution: {integrity: sha512-h9WqLkTVpBbiaPb5OmeUpz/FBLS/kvIJw4oRCPiEisIu2WjMh+aai0QIY2LoOhRFx5r92taGLcerIrzxKBAP6g==} + engines: {node: '>=16'} + dependencies: + '@babel/runtime': 7.23.2 + '@types/json-schema': 7.0.13 + ts-algebra: 1.2.2 + dev: false /json-schema-traverse@0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} - dev: true /json-schema-traverse@1.0.0: resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} - dev: true /json-schema@0.4.0: resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==} - dev: true /json-stable-stringify-without-jsonify@1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} @@ -6696,7 +10253,6 @@ packages: resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} engines: {node: '>=6'} hasBin: true - dev: true /jsonfile@2.4.0: resolution: {integrity: sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==} @@ -6708,7 +10264,6 @@ packages: resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} optionalDependencies: graceful-fs: 4.2.11 - dev: true /jsonfile@6.1.0: resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} @@ -6756,7 +10311,6 @@ packages: /kind-of@6.0.3: resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} engines: {node: '>=0.10.0'} - dev: true /klaw@1.3.1: resolution: {integrity: sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw==} @@ -6767,7 +10321,6 @@ packages: /kleur@3.0.3: resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} engines: {node: '>=6'} - dev: true /level-supports@4.0.1: resolution: {integrity: sha512-PbXpve8rKeNcZ9C1mUicC9auIYFyGpkV9/i6g76tLgANwWhtG2v7I4xNBUlkn3lE2/dZF3Pi0ygYGtLc4RXXdA==} @@ -6793,7 +10346,6 @@ packages: /leven@3.1.0: resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} engines: {node: '>=6'} - dev: true /levn@0.3.0: resolution: {integrity: sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==} @@ -6811,9 +10363,20 @@ packages: type-check: 0.4.0 dev: true + /lie@3.1.1: + resolution: {integrity: sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw==} + dependencies: + immediate: 3.0.6 + dev: false + /lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - dev: true + + /localforage@1.10.0: + resolution: {integrity: sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg==} + dependencies: + lie: 3.1.1 + dev: false /locate-path@2.0.0: resolution: {integrity: sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==} @@ -6823,28 +10386,45 @@ packages: path-exists: 3.0.0 dev: true + /locate-path@3.0.0: + resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==} + engines: {node: '>=6'} + dependencies: + p-locate: 3.0.0 + path-exists: 3.0.0 + dev: false + /locate-path@5.0.0: resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} engines: {node: '>=8'} dependencies: p-locate: 4.1.0 - dev: true /locate-path@6.0.0: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} dependencies: p-locate: 5.0.0 - dev: true /lodash.camelcase@4.3.0: resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} dev: true + /lodash.clone@4.5.0: + resolution: {integrity: sha512-GhrVeweiTD6uTmmn5hV/lzgCQhccwReIVRLHp7LT4SopOjqEZ5BbX8b5WWEtAKasjmy8hR7ZPwsYlxRCku5odg==} + dev: false + /lodash.clonedeep@4.5.0: resolution: {integrity: sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==} dev: true + /lodash.debounce@4.0.8: + resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} + + /lodash.get@4.4.2: + resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==} + dev: false + /lodash.isequal@4.5.0: resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} dev: true @@ -6863,11 +10443,13 @@ packages: /lodash.memoize@4.1.2: resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} - dev: true /lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - dev: true + + /lodash.mergewith@4.6.2: + resolution: {integrity: sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==} + dev: false /lodash.pad@4.5.1: resolution: {integrity: sha512-mvUHifnLqM+03YNzeTBS1/Gr6JRFjd3rRx88FHWUvamVaT9k2O/kXha3yBSOwB9/DTQrSTLJNHvLBBt2FdX7Mg==} @@ -6893,6 +10475,14 @@ packages: resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} dev: true + /lodash.throttle@4.1.1: + resolution: {integrity: sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==} + dev: false + + /lodash.topath@4.5.2: + resolution: {integrity: sha512-1/W4dM+35DwvE/iEd1M9ekewOSTlpFekhw9mhAtrwjVqUr83/ilQiyAvmg4tVX7Unkcfl1KC+i9WdaT4B6aQcg==} + dev: false + /lodash.trim@4.5.1: resolution: {integrity: sha512-nJAlRl/K+eiOehWKDzoBVrSMhK0K3A3YQsUNXHQa5yIrKBAhsZgSu3KoAFoFT+mEgiyBHddZ0pRk1ITpIp90Wg==} dev: true @@ -6919,7 +10509,6 @@ packages: /lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - dev: true /log-symbols@3.0.0: resolution: {integrity: sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==} @@ -6934,7 +10523,15 @@ packages: dependencies: chalk: 4.1.2 is-unicode-supported: 0.1.0 - dev: true + + /logkitty@0.7.1: + resolution: {integrity: sha512-/3ER20CTTbahrCrpYfPn7Xavv9diBROZpoXGVZDWMw4b/X4uuUwAC0ki85tgsdMRONURyIJbcOvS94QsUBYPbQ==} + hasBin: true + dependencies: + ansi-fragments: 0.2.1 + dayjs: 1.11.10 + yargs: 15.4.1 + dev: false /long@4.0.0: resolution: {integrity: sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==} @@ -6957,28 +10554,50 @@ packages: get-func-name: 2.0.2 dev: true + /lower-case-first@2.0.2: + resolution: {integrity: sha512-EVm/rR94FJTZi3zefZ82fLWab+GX14LJN4HrWBcuo6Evmsl9hEfnqxgcHCKb9q+mNf6EVdsjx/qucYFIIB84pg==} + dependencies: + tslib: 2.6.2 + dev: false + + /lower-case@2.0.2: + resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} + dependencies: + tslib: 2.6.2 + dev: false + /lru-cache@10.0.1: resolution: {integrity: sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==} engines: {node: 14 || >=16.14} - dev: true /lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} dependencies: yallist: 3.1.1 - dev: true /lru-cache@6.0.0: resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} engines: {node: '>=10'} dependencies: yallist: 4.0.0 - dev: true + + /lru-cache@7.18.3: + resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} + engines: {node: '>=12'} + dev: false /lru_map@0.3.3: resolution: {integrity: sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==} dev: true + /make-dir@2.1.0: + resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==} + engines: {node: '>=6'} + dependencies: + pify: 4.0.1 + semver: 5.7.2 + dev: false + /make-dir@4.0.0: resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} engines: {node: '>=10'} @@ -6988,60 +10607,384 @@ packages: /make-error@1.3.6: resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + + /makeerror@1.0.12: + resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} + dependencies: + tmpl: 1.0.5 + + /map-cache@0.2.2: + resolution: {integrity: sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==} + engines: {node: '>=0.10.0'} + dev: false + + /markdown-table@1.1.3: + resolution: {integrity: sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q==} + dev: true + + /mcl-wasm@0.7.9: + resolution: {integrity: sha512-iJIUcQWA88IJB/5L15GnJVnSQJmf/YaxxV6zRavv83HILHaJQb6y0iFyDMdDO0gN8X37tdxmAOrH/P8B6RB8sQ==} + engines: {node: '>=8.9.0'} + dev: true + + /md5.js@1.3.5: + resolution: {integrity: sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==} + dependencies: + hash-base: 3.1.0 + inherits: 2.0.4 + safe-buffer: 5.2.1 + dev: true + + /memoize-one@5.2.1: + resolution: {integrity: sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==} + dev: false + + /memory-level@1.0.0: + resolution: {integrity: sha512-UXzwewuWeHBz5krr7EvehKcmLFNoXxGcvuYhC41tRnkrTbJohtS7kVn9akmgirtRygg+f7Yjsfi8Uu5SGSQ4Og==} + engines: {node: '>=12'} + dependencies: + abstract-level: 1.0.3 + functional-red-black-tree: 1.0.1 + module-error: 1.0.2 + dev: true + + /memorystream@0.3.1: + resolution: {integrity: sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==} + engines: {node: '>= 0.10.0'} + dev: true + + /merge-options@3.0.4: + resolution: {integrity: sha512-2Sug1+knBjkaMsMgf1ctR1Ujx+Ayku4EdJN4Z+C2+JzoeF7A3OZ9KM2GY0CpQS51NR61LTurMJrRKPhSs3ZRTQ==} + engines: {node: '>=10'} + dependencies: + is-plain-obj: 2.1.0 dev: true - /makeerror@1.0.12: - resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} + /merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + + /merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + /meros@1.3.0(@types/node@20.8.0): + resolution: {integrity: sha512-2BNGOimxEz5hmjUG2FwoxCt5HN7BXdaWyFqEwxPTrJzVdABtrL4TiHTcsWSFAxPQ/tOnEaQEJh3qWq71QRMY+w==} + engines: {node: '>=13'} + peerDependencies: + '@types/node': '>=13' + peerDependenciesMeta: + '@types/node': + optional: true + dependencies: + '@types/node': 20.8.0 + dev: false + + /metro-babel-transformer@0.76.8: + resolution: {integrity: sha512-Hh6PW34Ug/nShlBGxkwQJSgPGAzSJ9FwQXhUImkzdsDgVu6zj5bx258J8cJVSandjNoQ8nbaHK6CaHlnbZKbyA==} + engines: {node: '>=16'} + dependencies: + '@babel/core': 7.23.0 + hermes-parser: 0.12.0 + nullthrows: 1.1.1 + transitivePeerDependencies: + - supports-color + dev: false + + /metro-cache-key@0.76.8: + resolution: {integrity: sha512-buKQ5xentPig9G6T37Ww/R/bC+/V1MA5xU/D8zjnhlelsrPG6w6LtHUS61ID3zZcMZqYaELWk5UIadIdDsaaLw==} + engines: {node: '>=16'} + dev: false + + /metro-cache@0.76.8: + resolution: {integrity: sha512-QBJSJIVNH7Hc/Yo6br/U/qQDUpiUdRgZ2ZBJmvAbmAKp2XDzsapnMwK/3BGj8JNWJF7OLrqrYHsRsukSbUBpvQ==} + engines: {node: '>=16'} + dependencies: + metro-core: 0.76.8 + rimraf: 3.0.2 + dev: false + + /metro-config@0.76.8: + resolution: {integrity: sha512-SL1lfKB0qGHALcAk2zBqVgQZpazDYvYFGwCK1ikz0S6Y/CM2i2/HwuZN31kpX6z3mqjv/6KvlzaKoTb1otuSAA==} + engines: {node: '>=16'} + dependencies: + connect: 3.7.0 + cosmiconfig: 5.2.1 + jest-validate: 29.7.0 + metro: 0.76.8 + metro-cache: 0.76.8 + metro-core: 0.76.8 + metro-runtime: 0.76.8 + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + dev: false + + /metro-core@0.76.8: + resolution: {integrity: sha512-sl2QLFI3d1b1XUUGxwzw/KbaXXU/bvFYrSKz6Sg19AdYGWFyzsgZ1VISRIDf+HWm4R/TJXluhWMEkEtZuqi3qA==} + engines: {node: '>=16'} + dependencies: + lodash.throttle: 4.1.1 + metro-resolver: 0.76.8 + dev: false + + /metro-file-map@0.76.8: + resolution: {integrity: sha512-A/xP1YNEVwO1SUV9/YYo6/Y1MmzhL4ZnVgcJC3VmHp/BYVOXVStzgVbWv2wILe56IIMkfXU+jpXrGKKYhFyHVw==} + engines: {node: '>=16'} + dependencies: + anymatch: 3.1.3 + debug: 2.6.9 + fb-watchman: 2.0.2 + graceful-fs: 4.2.11 + invariant: 2.2.4 + jest-regex-util: 27.5.1 + jest-util: 27.5.1 + jest-worker: 27.5.1 + micromatch: 4.0.5 + node-abort-controller: 3.1.1 + nullthrows: 1.1.1 + walker: 1.0.8 + optionalDependencies: + fsevents: 2.3.3 + transitivePeerDependencies: + - supports-color + dev: false + + /metro-inspector-proxy@0.76.8: + resolution: {integrity: sha512-Us5o5UEd4Smgn1+TfHX4LvVPoWVo9VsVMn4Ldbk0g5CQx3Gu0ygc/ei2AKPGTwsOZmKxJeACj7yMH2kgxQP/iw==} + engines: {node: '>=16'} + hasBin: true + dependencies: + connect: 3.7.0 + debug: 2.6.9 + node-fetch: 2.7.0 + ws: 7.5.9 + yargs: 17.7.2 + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + dev: false + + /metro-minify-terser@0.76.8: + resolution: {integrity: sha512-Orbvg18qXHCrSj1KbaeSDVYRy/gkro2PC7Fy2tDSH1c9RB4aH8tuMOIXnKJE+1SXxBtjWmQ5Yirwkth2DyyEZA==} + engines: {node: '>=16'} + dependencies: + terser: 5.21.0 + dev: false + + /metro-minify-uglify@0.76.8: + resolution: {integrity: sha512-6l8/bEvtVaTSuhG1FqS0+Mc8lZ3Bl4RI8SeRIifVLC21eeSDp4CEBUWSGjpFyUDfi6R5dXzYaFnSgMNyfxADiQ==} + engines: {node: '>=16'} + dependencies: + uglify-es: 3.3.9 + dev: false + + /metro-react-native-babel-preset@0.76.8(@babel/core@7.23.0): + resolution: {integrity: sha512-Ptza08GgqzxEdK8apYsjTx2S8WDUlS2ilBlu9DR1CUcHmg4g3kOkFylZroogVAUKtpYQNYwAvdsjmrSdDNtiAg==} + engines: {node: '>=16'} + peerDependencies: + '@babel/core': '*' dependencies: - tmpl: 1.0.5 - dev: true + '@babel/core': 7.23.0 + '@babel/plugin-proposal-async-generator-functions': 7.20.7(@babel/core@7.23.0) + '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.23.0) + '@babel/plugin-proposal-export-default-from': 7.22.17(@babel/core@7.23.0) + '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.23.0) + '@babel/plugin-proposal-numeric-separator': 7.18.6(@babel/core@7.23.0) + '@babel/plugin-proposal-object-rest-spread': 7.20.7(@babel/core@7.23.0) + '@babel/plugin-proposal-optional-catch-binding': 7.18.6(@babel/core@7.23.0) + '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.23.0) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.0) + '@babel/plugin-syntax-export-default-from': 7.22.5(@babel/core@7.23.0) + '@babel/plugin-syntax-flow': 7.22.5(@babel/core@7.23.0) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.0) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.0) + '@babel/plugin-transform-arrow-functions': 7.22.5(@babel/core@7.23.0) + '@babel/plugin-transform-async-to-generator': 7.22.5(@babel/core@7.23.0) + '@babel/plugin-transform-block-scoping': 7.23.0(@babel/core@7.23.0) + '@babel/plugin-transform-classes': 7.22.15(@babel/core@7.23.0) + '@babel/plugin-transform-computed-properties': 7.22.5(@babel/core@7.23.0) + '@babel/plugin-transform-destructuring': 7.23.0(@babel/core@7.23.0) + '@babel/plugin-transform-flow-strip-types': 7.22.5(@babel/core@7.23.0) + '@babel/plugin-transform-function-name': 7.22.5(@babel/core@7.23.0) + '@babel/plugin-transform-literals': 7.22.5(@babel/core@7.23.0) + '@babel/plugin-transform-modules-commonjs': 7.23.0(@babel/core@7.23.0) + '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.23.0) + '@babel/plugin-transform-parameters': 7.22.15(@babel/core@7.23.0) + '@babel/plugin-transform-react-display-name': 7.22.5(@babel/core@7.23.0) + '@babel/plugin-transform-react-jsx': 7.22.15(@babel/core@7.23.0) + '@babel/plugin-transform-react-jsx-self': 7.22.5(@babel/core@7.23.0) + '@babel/plugin-transform-react-jsx-source': 7.22.5(@babel/core@7.23.0) + '@babel/plugin-transform-runtime': 7.23.2(@babel/core@7.23.0) + '@babel/plugin-transform-shorthand-properties': 7.22.5(@babel/core@7.23.0) + '@babel/plugin-transform-spread': 7.22.5(@babel/core@7.23.0) + '@babel/plugin-transform-sticky-regex': 7.22.5(@babel/core@7.23.0) + '@babel/plugin-transform-typescript': 7.22.15(@babel/core@7.23.0) + '@babel/plugin-transform-unicode-regex': 7.22.5(@babel/core@7.23.0) + '@babel/template': 7.22.15 + babel-plugin-transform-flow-enums: 0.0.2(@babel/core@7.23.0) + react-refresh: 0.4.3 + transitivePeerDependencies: + - supports-color + dev: false - /markdown-table@1.1.3: - resolution: {integrity: sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q==} - dev: true + /metro-react-native-babel-transformer@0.76.8(@babel/core@7.23.0): + resolution: {integrity: sha512-3h+LfS1WG1PAzhq8QF0kfXjxuXetbY/lgz8vYMQhgrMMp17WM1DNJD0gjx8tOGYbpbBC1qesJ45KMS4o5TA73A==} + engines: {node: '>=16'} + peerDependencies: + '@babel/core': '*' + dependencies: + '@babel/core': 7.23.0 + babel-preset-fbjs: 3.4.0(@babel/core@7.23.0) + hermes-parser: 0.12.0 + metro-react-native-babel-preset: 0.76.8(@babel/core@7.23.0) + nullthrows: 1.1.1 + transitivePeerDependencies: + - supports-color + dev: false - /mcl-wasm@0.7.9: - resolution: {integrity: sha512-iJIUcQWA88IJB/5L15GnJVnSQJmf/YaxxV6zRavv83HILHaJQb6y0iFyDMdDO0gN8X37tdxmAOrH/P8B6RB8sQ==} - engines: {node: '>=8.9.0'} - dev: true + /metro-resolver@0.76.8: + resolution: {integrity: sha512-KccOqc10vrzS7ZhG2NSnL2dh3uVydarB7nOhjreQ7C4zyWuiW9XpLC4h47KtGQv3Rnv/NDLJYeDqaJ4/+140HQ==} + engines: {node: '>=16'} + dev: false - /md5.js@1.3.5: - resolution: {integrity: sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==} + /metro-runtime@0.76.8: + resolution: {integrity: sha512-XKahvB+iuYJSCr3QqCpROli4B4zASAYpkK+j3a0CJmokxCDNbgyI4Fp88uIL6rNaZfN0Mv35S0b99SdFXIfHjg==} + engines: {node: '>=16'} dependencies: - hash-base: 3.1.0 - inherits: 2.0.4 - safe-buffer: 5.2.1 - dev: true + '@babel/runtime': 7.23.2 + react-refresh: 0.4.3 + dev: false - /memory-level@1.0.0: - resolution: {integrity: sha512-UXzwewuWeHBz5krr7EvehKcmLFNoXxGcvuYhC41tRnkrTbJohtS7kVn9akmgirtRygg+f7Yjsfi8Uu5SGSQ4Og==} - engines: {node: '>=12'} + /metro-source-map@0.76.8: + resolution: {integrity: sha512-Hh0ncPsHPVf6wXQSqJqB3K9Zbudht4aUtNpNXYXSxH+pteWqGAXnjtPsRAnCsCWl38wL0jYF0rJDdMajUI3BDw==} + engines: {node: '>=16'} dependencies: - abstract-level: 1.0.3 - functional-red-black-tree: 1.0.1 - module-error: 1.0.2 - dev: true + '@babel/traverse': 7.23.0 + '@babel/types': 7.23.0 + invariant: 2.2.4 + metro-symbolicate: 0.76.8 + nullthrows: 1.1.1 + ob1: 0.76.8 + source-map: 0.5.7 + vlq: 1.0.1 + transitivePeerDependencies: + - supports-color + dev: false - /memorystream@0.3.1: - resolution: {integrity: sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==} - engines: {node: '>= 0.10.0'} - dev: true + /metro-symbolicate@0.76.8: + resolution: {integrity: sha512-LrRL3uy2VkzrIXVlxoPtqb40J6Bf1mlPNmUQewipc3qfKKFgtPHBackqDy1YL0njDsWopCKcfGtFYLn0PTUn3w==} + engines: {node: '>=16'} + hasBin: true + dependencies: + invariant: 2.2.4 + metro-source-map: 0.76.8 + nullthrows: 1.1.1 + source-map: 0.5.7 + through2: 2.0.5 + vlq: 1.0.1 + transitivePeerDependencies: + - supports-color + dev: false - /merge-options@3.0.4: - resolution: {integrity: sha512-2Sug1+knBjkaMsMgf1ctR1Ujx+Ayku4EdJN4Z+C2+JzoeF7A3OZ9KM2GY0CpQS51NR61LTurMJrRKPhSs3ZRTQ==} - engines: {node: '>=10'} + /metro-transform-plugins@0.76.8: + resolution: {integrity: sha512-PlkGTQNqS51Bx4vuufSQCdSn2R2rt7korzngo+b5GCkeX5pjinPjnO2kNhQ8l+5bO0iUD/WZ9nsM2PGGKIkWFA==} + engines: {node: '>=16'} dependencies: - is-plain-obj: 2.1.0 - dev: true + '@babel/core': 7.23.0 + '@babel/generator': 7.23.0 + '@babel/template': 7.22.15 + '@babel/traverse': 7.23.0 + nullthrows: 1.1.1 + transitivePeerDependencies: + - supports-color + dev: false - /merge-stream@2.0.0: - resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} - dev: true + /metro-transform-worker@0.76.8: + resolution: {integrity: sha512-mE1fxVAnJKmwwJyDtThildxxos9+DGs9+vTrx2ktSFMEVTtXS/bIv2W6hux1pqivqAfyJpTeACXHk5u2DgGvIQ==} + engines: {node: '>=16'} + dependencies: + '@babel/core': 7.23.0 + '@babel/generator': 7.23.0 + '@babel/parser': 7.23.0 + '@babel/types': 7.23.0 + babel-preset-fbjs: 3.4.0(@babel/core@7.23.0) + metro: 0.76.8 + metro-babel-transformer: 0.76.8 + metro-cache: 0.76.8 + metro-cache-key: 0.76.8 + metro-source-map: 0.76.8 + metro-transform-plugins: 0.76.8 + nullthrows: 1.1.1 + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + dev: false - /merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} - dev: true + /metro@0.76.8: + resolution: {integrity: sha512-oQA3gLzrrYv3qKtuWArMgHPbHu8odZOD9AoavrqSFllkPgOtmkBvNNDLCELqv5SjBfqjISNffypg+5UGG3y0pg==} + engines: {node: '>=16'} + hasBin: true + dependencies: + '@babel/code-frame': 7.22.13 + '@babel/core': 7.23.0 + '@babel/generator': 7.23.0 + '@babel/parser': 7.23.0 + '@babel/template': 7.22.15 + '@babel/traverse': 7.23.0 + '@babel/types': 7.23.0 + accepts: 1.3.8 + async: 3.2.4 + chalk: 4.1.2 + ci-info: 2.0.0 + connect: 3.7.0 + debug: 2.6.9 + denodeify: 1.2.1 + error-stack-parser: 2.1.4 + graceful-fs: 4.2.11 + hermes-parser: 0.12.0 + image-size: 1.0.2 + invariant: 2.2.4 + jest-worker: 27.5.1 + jsc-safe-url: 0.2.4 + lodash.throttle: 4.1.1 + metro-babel-transformer: 0.76.8 + metro-cache: 0.76.8 + metro-cache-key: 0.76.8 + metro-config: 0.76.8 + metro-core: 0.76.8 + metro-file-map: 0.76.8 + metro-inspector-proxy: 0.76.8 + metro-minify-terser: 0.76.8 + metro-minify-uglify: 0.76.8 + metro-react-native-babel-preset: 0.76.8(@babel/core@7.23.0) + metro-resolver: 0.76.8 + metro-runtime: 0.76.8 + metro-source-map: 0.76.8 + metro-symbolicate: 0.76.8 + metro-transform-plugins: 0.76.8 + metro-transform-worker: 0.76.8 + mime-types: 2.1.35 + node-fetch: 2.7.0 + nullthrows: 1.1.1 + rimraf: 3.0.2 + serialize-error: 2.1.0 + source-map: 0.5.7 + strip-ansi: 6.0.1 + throat: 5.0.0 + ws: 7.5.9 + yargs: 17.7.2 + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + dev: false /micro-ftch@0.3.1: resolution: {integrity: sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg==} @@ -7053,24 +10996,32 @@ packages: dependencies: braces: 3.0.2 picomatch: 2.3.1 - dev: true /mime-db@1.52.0: resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} engines: {node: '>= 0.6'} - dev: true /mime-types@2.1.35: resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} engines: {node: '>= 0.6'} dependencies: mime-db: 1.52.0 - dev: true + + /mime@1.6.0: + resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} + engines: {node: '>=4'} + hasBin: true + dev: false + + /mime@2.6.0: + resolution: {integrity: sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==} + engines: {node: '>=4.0.0'} + hasBin: true + dev: false /mimic-fn@2.1.0: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} engines: {node: '>=6'} - dev: true /minimalistic-assert@1.0.1: resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} @@ -7084,7 +11035,6 @@ packages: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} dependencies: brace-expansion: 1.1.11 - dev: true /minimatch@5.0.1: resolution: {integrity: sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==} @@ -7107,9 +11057,14 @@ packages: brace-expansion: 2.0.1 dev: true + /minimatch@9.0.3: + resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} + engines: {node: '>=16 || 14 >=14.17'} + dependencies: + brace-expansion: 2.0.1 + /minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - dev: true /minipass@3.3.6: resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} @@ -7131,7 +11086,6 @@ packages: /minipass@7.0.3: resolution: {integrity: sha512-LhbbwCfz3vsb12j/WkWQPZfKTsgqIe1Nf/ti1pKjYESGLHIVjWU96G9/ljLH4F9mWNVhlQOm0VySdAWzf05dpg==} engines: {node: '>=16 || 14 >=14.17'} - dev: true /minizlib@2.1.2: resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} @@ -7146,7 +11100,6 @@ packages: hasBin: true dependencies: minimist: 1.2.8 - dev: true /mkdirp@1.0.4: resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} @@ -7154,6 +11107,12 @@ packages: hasBin: true dev: true + /mkdirp@3.0.1: + resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==} + engines: {node: '>=10'} + hasBin: true + dev: false + /mnemonist@0.38.5: resolution: {integrity: sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg==} dependencies: @@ -7193,13 +11152,15 @@ packages: engines: {node: '>=10'} dev: true + /ms@2.0.0: + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} + dev: false + /ms@2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - dev: true /ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - dev: true /multiaddr-to-uri@8.0.0(node-fetch@3.3.2): resolution: {integrity: sha512-dq4p/vsOOUdVEd1J1gl+R2GFrXJQH8yjLtz4hodqdVbieg39LvBOdMQRdQnfbg5LSM/q1BYNVf5CBbwZFFqBgA==} @@ -7236,12 +11197,6 @@ packages: hasBin: true dev: true - /nanoid@3.3.6: - resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - dev: true - /napi-macros@2.2.2: resolution: {integrity: sha512-hmEVtAGYzVQpCKdbQea4skABsdXW4RUh5t5mJ2zzqowJS2OyXZTU1KhDVFhx+NlWZ4ap9mqR9TcDO3LTTttd+g==} dev: true @@ -7278,14 +11233,41 @@ packages: resolution: {integrity: sha512-p7KTHxU0CUrcOXe62Zfrb5Z13nLvPhSWR/so3kFulUQU0sgUll2Z0LwpsLN351eOOD+hRGu/F1g+6xDfPeD++Q==} dev: true + /negotiator@0.6.3: + resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} + engines: {node: '>= 0.6'} + dev: false + /neo-async@2.6.2: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} - dev: true + + /no-case@3.0.4: + resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} + dependencies: + lower-case: 2.0.2 + tslib: 2.6.2 + dev: false + + /nocache@3.0.4: + resolution: {integrity: sha512-WDD0bdg9mbq6F4mRxEYcPWwfA1vxd0mrvKOyxI7Xj/atfRHVeutzuWByG//jfm4uPzp0y4Kj051EORCBSQMycw==} + engines: {node: '>=12.0.0'} + dev: false + + /node-abort-controller@3.1.1: + resolution: {integrity: sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==} + dev: false /node-addon-api@2.0.2: resolution: {integrity: sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==} dev: true + /node-dir@0.1.17: + resolution: {integrity: sha512-tmPX422rYgofd4epzrNoOXiE8XFZYOcCq1vD7MAXCDO+O+zndlA2ztdKKMa+EeuBG5tHETpr4ml4RGgpqDCCAg==} + engines: {node: '>= 0.10.5'} + dependencies: + minimatch: 9.0.3 + dev: false + /node-domexception@1.0.0: resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} engines: {node: '>=10.5.0'} @@ -7307,7 +11289,6 @@ packages: optional: true dependencies: whatwg-url: 5.0.0 - dev: true /node-fetch@3.3.2: resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} @@ -7325,11 +11306,14 @@ packages: /node-int64@0.4.0: resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} - dev: true /node-releases@2.0.13: resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==} - dev: true + + /node-stream-zip@1.15.0: + resolution: {integrity: sha512-LN4fydt9TqhZhThkZIVQnF9cwjU3qmUH9h78Mx/K7d3VvfRqqwthLwJEUOEL0QPZ0XQmNN7be5Ggit5+4dq3Bw==} + engines: {node: '>=0.12.0'} + dev: false /nofilter@3.1.0: resolution: {integrity: sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g==} @@ -7343,17 +11327,26 @@ packages: abbrev: 1.0.9 dev: true + /normalize-path@2.1.1: + resolution: {integrity: sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==} + engines: {node: '>=0.10.0'} + dependencies: + remove-trailing-separator: 1.1.0 + dev: false + /normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} - dev: true /npm-run-path@4.0.1: resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} engines: {node: '>=8'} dependencies: path-key: 3.1.1 - dev: true + + /nullthrows@1.1.1: + resolution: {integrity: sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==} + dev: false /number-to-bn@1.7.0: resolution: {integrity: sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig==} @@ -7367,13 +11360,21 @@ packages: resolution: {integrity: sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==} dev: true + /ob1@0.76.8: + resolution: {integrity: sha512-dlBkJJV5M/msj9KYA9upc+nUWVwuOFFTbu28X6kZeGwcuW+JxaHSBZ70SYQnk5M+j5JbNLR6yKHmgW4M5E7X5g==} + engines: {node: '>=16'} + dev: false + /object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} + /object-inspect@1.10.3: + resolution: {integrity: sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==} + dev: false + /object-inspect@1.12.3: resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==} - dev: true /object-keys@1.1.1: resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} @@ -7399,26 +11400,64 @@ packages: resolution: {integrity: sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==} dev: true + /on-finished@2.3.0: + resolution: {integrity: sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==} + engines: {node: '>= 0.8'} + dependencies: + ee-first: 1.1.1 + dev: false + + /on-finished@2.4.1: + resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} + engines: {node: '>= 0.8'} + dependencies: + ee-first: 1.1.1 + dev: false + + /on-headers@1.0.2: + resolution: {integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==} + engines: {node: '>= 0.8'} + dev: false + /once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} dependencies: wrappy: 1.0.2 - dev: true /onetime@5.1.2: resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} engines: {node: '>=6'} dependencies: mimic-fn: 2.1.0 - dev: true + + /open@6.4.0: + resolution: {integrity: sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==} + engines: {node: '>=8'} + dependencies: + is-wsl: 1.1.0 + dev: false + + /open@7.4.2: + resolution: {integrity: sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==} + engines: {node: '>=8'} + dependencies: + is-docker: 2.2.1 + is-wsl: 2.2.0 + dev: false + + /openapi-types@12.1.3: + resolution: {integrity: sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw==} + dev: false /optimism@0.17.5: resolution: {integrity: sha512-TEcp8ZwK1RczmvMnvktxHSF2tKgMWjJ71xEFGX5ApLh67VsMSTy1ZUlipJw8W+KaqgOmQ+4pqwkeivY89j+4Vw==} + requiresBuild: true dependencies: '@wry/context': 0.7.3 '@wry/trie': 0.4.3 tslib: 2.6.2 dev: false + optional: true /optionator@0.8.3: resolution: {integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==} @@ -7457,6 +11496,21 @@ packages: wcwidth: 1.0.1 dev: true + /ora@5.4.1: + resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} + engines: {node: '>=10'} + dependencies: + bl: 4.1.0 + chalk: 4.1.2 + cli-cursor: 3.1.0 + cli-spinners: 2.9.1 + is-interactive: 1.0.0 + is-unicode-supported: 0.1.0 + log-symbols: 4.1.0 + strip-ansi: 6.0.1 + wcwidth: 1.0.1 + dev: false + /ordinal@1.0.3: resolution: {integrity: sha512-cMddMgb2QElm8G7vdaa02jhUNbTSrhsgAGUz1OokD83uJTwSUn+nKoNoKVVaRa08yF6sgfO7Maou1+bgLd9rdQ==} dev: true @@ -7490,14 +11544,12 @@ packages: engines: {node: '>=6'} dependencies: p-try: 2.2.0 - dev: true /p-limit@3.1.0: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} dependencies: yocto-queue: 0.1.0 - dev: true /p-locate@2.0.0: resolution: {integrity: sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==} @@ -7506,19 +11558,24 @@ packages: p-limit: 1.3.0 dev: true + /p-locate@3.0.0: + resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==} + engines: {node: '>=6'} + dependencies: + p-limit: 2.3.0 + dev: false + /p-locate@4.1.0: resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} engines: {node: '>=8'} dependencies: p-limit: 2.3.0 - dev: true /p-locate@5.0.0: resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} engines: {node: '>=10'} dependencies: p-limit: 3.1.0 - dev: true /p-map@4.0.0: resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} @@ -7535,14 +11592,19 @@ packages: /p-try@2.2.0: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} - dev: true + + /param-case@3.0.4: + resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==} + dependencies: + dot-case: 3.0.4 + tslib: 2.6.2 + dev: false /parent-module@1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} dependencies: callsites: 3.1.0 - dev: true /parse-cache-control@1.0.1: resolution: {integrity: sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg==} @@ -7552,6 +11614,23 @@ packages: resolution: {integrity: sha512-z6t9dvSJYaPoQq7quMzdEagSFtpGu+utzHqqxmpVWNNZRIXnvqyCvn9XsTdh7c/w0Bqmdz3RB3YnRaKtpRtEXQ==} dev: true + /parse-filepath@1.0.2: + resolution: {integrity: sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q==} + engines: {node: '>=0.8'} + dependencies: + is-absolute: 1.0.0 + map-cache: 0.2.2 + path-root: 0.1.1 + dev: false + + /parse-json@4.0.0: + resolution: {integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==} + engines: {node: '>=4'} + dependencies: + error-ex: 1.3.2 + json-parse-better-errors: 1.0.2 + dev: false + /parse-json@5.2.0: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} @@ -7560,7 +11639,18 @@ packages: error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 - dev: true + + /parseurl@1.3.3: + resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} + engines: {node: '>= 0.8'} + dev: false + + /pascal-case@3.1.2: + resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} + dependencies: + no-case: 3.0.4 + tslib: 2.6.2 + dev: false /password-prompt@1.1.3: resolution: {integrity: sha512-HkrjG2aJlvF0t2BMH0e2LB/EHf3Lcq3fNMzy4GYHcQblAvOl+QQji1Lx7WRBMqpVK8p+KR7bCg7oqAMXtdgqyw==} @@ -7569,29 +11659,47 @@ packages: cross-spawn: 7.0.3 dev: true + /path-browserify@1.0.1: + resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} + dev: false + + /path-case@3.0.4: + resolution: {integrity: sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg==} + dependencies: + dot-case: 3.0.4 + tslib: 2.6.2 + dev: false + /path-exists@3.0.0: resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==} engines: {node: '>=4'} - dev: true /path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} - dev: true /path-is-absolute@1.0.1: resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} engines: {node: '>=0.10.0'} - dev: true /path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} - dev: true /path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - dev: true + + /path-root-regex@0.1.2: + resolution: {integrity: sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ==} + engines: {node: '>=0.10.0'} + dev: false + + /path-root@0.1.1: + resolution: {integrity: sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg==} + engines: {node: '>=0.10.0'} + dependencies: + path-root-regex: 0.1.2 + dev: false /path-scurry@1.10.1: resolution: {integrity: sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==} @@ -7599,12 +11707,10 @@ packages: dependencies: lru-cache: 10.0.1 minipass: 7.0.3 - dev: true /path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} - dev: true /pathval@1.1.1: resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} @@ -7627,22 +11733,25 @@ packages: /picocolors@1.0.0: resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} - dev: true /picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} - dev: true /pify@4.0.1: resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} engines: {node: '>=6'} - dev: true /pirates@4.0.6: resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} engines: {node: '>= 6'} - dev: true + + /pkg-dir@3.0.0: + resolution: {integrity: sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==} + engines: {node: '>=6'} + dependencies: + find-up: 3.0.0 + dev: false /pkg-dir@4.2.0: resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} @@ -7656,15 +11765,6 @@ packages: engines: {node: '>=4'} dev: true - /postcss@8.4.31: - resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} - engines: {node: ^10 || ^12 || >=14} - dependencies: - nanoid: 3.3.6 - picocolors: 1.0.0 - source-map-js: 1.0.2 - dev: true - /prelude-ls@1.1.2: resolution: {integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==} engines: {node: '>= 0.8.0'} @@ -7707,6 +11807,16 @@ packages: requiresBuild: true dev: true + /pretty-format@26.6.2: + resolution: {integrity: sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==} + engines: {node: '>= 10'} + dependencies: + '@jest/types': 26.6.2 + ansi-regex: 5.0.1 + ansi-styles: 4.3.0 + react-is: 17.0.2 + dev: false + /pretty-format@29.7.0: resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -7714,17 +11824,20 @@ packages: '@jest/schemas': 29.6.3 ansi-styles: 5.2.0 react-is: 18.2.0 - dev: true /process-nextick-args@2.0.1: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} - dev: true + + /promise@7.3.1: + resolution: {integrity: sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==} + dependencies: + asap: 2.0.6 + dev: false /promise@8.3.0: resolution: {integrity: sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==} dependencies: asap: 2.0.6 - dev: true /prompts@2.4.2: resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} @@ -7732,7 +11845,6 @@ packages: dependencies: kleur: 3.0.3 sisteransi: 1.0.5 - dev: true /prop-types@15.8.1: resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} @@ -7772,7 +11884,6 @@ packages: /proxy-from-env@1.1.0: resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} - dev: true /psl@1.9.0: resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} @@ -7787,12 +11898,10 @@ packages: /punycode@1.4.1: resolution: {integrity: sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==} - dev: true /punycode@2.3.0: resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} engines: {node: '>=6'} - dev: true /pure-rand@6.0.4: resolution: {integrity: sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA==} @@ -7802,12 +11911,10 @@ packages: resolution: {integrity: sha512-ARvb14YB9Nm2Xi6nBq1ZX6dAM0FsJnuk+31aUp4TrcZEdKUlSqOqsxJHUPJDNE3qiIp+iUPEIeR6Je/tgV7zsA==} dependencies: tslib: 2.6.2 - dev: true /pvutils@1.1.3: resolution: {integrity: sha512-pMpnA0qRdFp32b1sJl1wOJNxZLQ2cbQx+k6tjNtZ8CpvVhNqEPRgivZ2WOUev2YMajecdH7ctUPDvEe87nariQ==} engines: {node: '>=6.0.0'} - dev: true /qs@6.11.2: resolution: {integrity: sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==} @@ -7827,7 +11934,12 @@ packages: /queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - dev: true + + /queue@6.0.2: + resolution: {integrity: sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==} + dependencies: + inherits: 2.0.4 + dev: false /randombytes@2.1.0: resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} @@ -7835,6 +11947,11 @@ packages: safe-buffer: 5.2.1 dev: true + /range-parser@1.2.1: + resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} + engines: {node: '>= 0.6'} + dev: false + /raw-body@2.5.2: resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} engines: {node: '>= 0.8'} @@ -7845,13 +11962,27 @@ packages: unpipe: 1.0.0 dev: true + /react-devtools-core@4.28.4: + resolution: {integrity: sha512-IUZKLv3CimeM07G3vX4H4loxVpByrzq3HvfTX7v9migalwvLs9ZY5D3S3pKR33U+GguYfBBdMMZyToFhsSE/iQ==} + dependencies: + shell-quote: 1.8.1 + ws: 7.5.9 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: false + /react-is@16.13.1: resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + requiresBuild: true + dev: false + + /react-is@17.0.2: + resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} dev: false /react-is@18.2.0: resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} - dev: true /react-native-fetch-api@3.0.0: resolution: {integrity: sha512-g2rtqPjdroaboDKTsJCTlcmtw54E25OjyaunUP0anOZn4Fuo2IKs8BVfe02zVggA/UysbmfSnRJIqtNkAgggNA==} @@ -7859,6 +11990,99 @@ packages: p-defer: 3.0.0 dev: true + /react-native-fs@2.20.0(react-native@0.72.5): + resolution: {integrity: sha512-VkTBzs7fIDUiy/XajOSNk0XazFE9l+QlMAce7lGuebZcag5CnjszB+u4BdqzwaQOdcYb5wsJIsqq4kxInIRpJQ==} + peerDependencies: + react-native: '*' + react-native-windows: '*' + peerDependenciesMeta: + react-native-windows: + optional: true + dependencies: + base-64: 0.1.0 + react-native: 0.72.5(@babel/core@7.23.0)(@babel/preset-env@7.23.2)(react@18.2.0) + utf8: 3.0.0 + dev: false + + /react-native-path@0.0.5: + resolution: {integrity: sha512-WJr256xBquk7X2O83QYWKqgLg43Zg3SrgjPc/kr0gCD2LoXA+2L72BW4cmstH12GbGeutqs/eXk3jgDQ2iCSvQ==} + dev: false + + /react-native@0.72.5(@babel/core@7.23.0)(@babel/preset-env@7.23.2)(react@18.2.0): + resolution: {integrity: sha512-oIewslu5DBwOmo7x5rdzZlZXCqDIna0R4dUwVpfmVteORYLr4yaZo5wQnMeR+H7x54GaMhmgeqp0ZpULtulJFg==} + engines: {node: '>=16'} + hasBin: true + peerDependencies: + react: 18.2.0 + dependencies: + '@jest/create-cache-key-function': 29.7.0 + '@react-native-community/cli': 11.3.7(@babel/core@7.23.0) + '@react-native-community/cli-platform-android': 11.3.7 + '@react-native-community/cli-platform-ios': 11.3.7 + '@react-native/assets-registry': 0.72.0 + '@react-native/codegen': 0.72.7(@babel/preset-env@7.23.2) + '@react-native/gradle-plugin': 0.72.11 + '@react-native/js-polyfills': 0.72.1 + '@react-native/normalize-colors': 0.72.0 + '@react-native/virtualized-lists': 0.72.8(react-native@0.72.5) + abort-controller: 3.0.0 + anser: 1.4.10 + base64-js: 1.5.1 + deprecated-react-native-prop-types: 4.1.0 + event-target-shim: 5.0.1 + flow-enums-runtime: 0.0.5 + invariant: 2.2.4 + jest-environment-node: 29.7.0 + jsc-android: 250231.0.0 + memoize-one: 5.2.1 + metro-runtime: 0.76.8 + metro-source-map: 0.76.8 + mkdirp: 0.5.6 + nullthrows: 1.1.1 + pretty-format: 26.6.2 + promise: 8.3.0 + react: 18.2.0 + react-devtools-core: 4.28.4 + react-refresh: 0.4.3 + react-shallow-renderer: 16.15.0(react@18.2.0) + regenerator-runtime: 0.13.11 + scheduler: 0.24.0-canary-efb381bbf-20230505 + stacktrace-parser: 0.1.10 + use-sync-external-store: 1.2.0(react@18.2.0) + whatwg-fetch: 3.6.19 + ws: 6.2.2 + yargs: 17.7.2 + transitivePeerDependencies: + - '@babel/core' + - '@babel/preset-env' + - bufferutil + - encoding + - supports-color + - utf-8-validate + dev: false + + /react-refresh@0.4.3: + resolution: {integrity: sha512-Hwln1VNuGl/6bVwnd0Xdn1e84gT/8T9aYNL+HAKDArLCS7LWjwr7StE30IEYbIkx0Vi3vs+coQxe+SQDbGbbpA==} + engines: {node: '>=0.10.0'} + dev: false + + /react-shallow-renderer@16.15.0(react@18.2.0): + resolution: {integrity: sha512-oScf2FqQ9LFVQgA73vr86xl2NaOIX73rh+YFqcOp68CWj56tSfgtGKrEbyhCj0rSijyG9M1CYprTh39fBi5hzA==} + peerDependencies: + react: ^16.0.0 || ^17.0.0 || ^18.0.0 + dependencies: + object-assign: 4.1.1 + react: 18.2.0 + react-is: 18.2.0 + dev: false + + /react@18.2.0: + resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} + engines: {node: '>=0.10.0'} + dependencies: + loose-envify: 1.4.0 + dev: false + /readable-stream@1.0.34: resolution: {integrity: sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==} dependencies: @@ -7878,7 +12102,6 @@ packages: safe-buffer: 5.1.2 string_decoder: 1.1.1 util-deprecate: 1.0.2 - dev: true /readable-stream@3.6.2: resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} @@ -7887,7 +12110,6 @@ packages: inherits: 2.0.4 string_decoder: 1.3.0 util-deprecate: 1.0.2 - dev: true /readdirp@3.6.0: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} @@ -7896,6 +12118,20 @@ packages: picomatch: 2.3.1 dev: true + /readline@1.3.0: + resolution: {integrity: sha512-k2d6ACCkiNYz222Fs/iNze30rRJ1iIicW7JuX/7/cozvih6YCkFZH+J6mAFDVgv0dRBaAyr4jDqC95R2y4IADg==} + dev: false + + /recast@0.21.5: + resolution: {integrity: sha512-hjMmLaUXAm1hIuTqOdeYObMslq/q+Xff6QE3Y2P+uoHAg2nmVlLBps2hzh1UJDdMtDTMXOFewK6ky51JQIeECg==} + engines: {node: '>= 4'} + dependencies: + ast-types: 0.15.2 + esprima: 4.0.1 + source-map: 0.6.1 + tslib: 2.6.2 + dev: false + /receptacle@1.3.2: resolution: {integrity: sha512-HrsFvqZZheusncQRiEE7GatOAETrARKV/lnfYicIm8lbvp/JQOdADOfhjBd2DajvoszEyxSM6RlAAIZgEoeu/A==} dependencies: @@ -7927,6 +12163,27 @@ packages: engines: {node: '>=6'} dev: true + /regenerate-unicode-properties@10.1.1: + resolution: {integrity: sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==} + engines: {node: '>=4'} + dependencies: + regenerate: 1.4.2 + + /regenerate@1.4.2: + resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} + + /regenerator-runtime@0.13.11: + resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} + dev: false + + /regenerator-runtime@0.14.0: + resolution: {integrity: sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==} + + /regenerator-transform@0.15.2: + resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==} + dependencies: + '@babel/runtime': 7.23.2 + /regexp.prototype.flags@1.5.0: resolution: {integrity: sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==} engines: {node: '>= 0.4'} @@ -7936,6 +12193,37 @@ packages: functions-have-names: 1.2.3 dev: true + /regexpu-core@5.3.2: + resolution: {integrity: sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==} + engines: {node: '>=4'} + dependencies: + '@babel/regjsgen': 0.8.0 + regenerate: 1.4.2 + regenerate-unicode-properties: 10.1.1 + regjsparser: 0.9.1 + unicode-match-property-ecmascript: 2.0.0 + unicode-match-property-value-ecmascript: 2.1.0 + + /regjsparser@0.9.1: + resolution: {integrity: sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==} + hasBin: true + dependencies: + jsesc: 0.5.0 + + /relay-runtime@12.0.0: + resolution: {integrity: sha512-QU6JKr1tMsry22DXNy9Whsq5rmvwr3LSZiiWV/9+DFpuTWvp+WFhobWMc8TC4OjKFfNhEZy7mOiqUAn5atQtug==} + dependencies: + '@babel/runtime': 7.23.2 + fbjs: 3.0.5 + invariant: 2.2.4 + transitivePeerDependencies: + - encoding + dev: false + + /remove-trailing-separator@1.1.0: + resolution: {integrity: sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==} + dev: false + /req-cwd@2.0.0: resolution: {integrity: sha512-ueoIoLo1OfB6b05COxAA9UpeoscNpYyM+BqYlA7H6LVF4hKGPXQQSSaD2YmvDVJMkk4UDpAHIeU1zG53IqjvlQ==} engines: {node: '>=4'} @@ -7980,12 +12268,14 @@ packages: /require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} - dev: true /require-from-string@2.0.2: resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} engines: {node: '>=0.10.0'} - dev: true + + /require-main-filename@2.0.0: + resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} + dev: false /requires-port@1.0.0: resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} @@ -8001,17 +12291,14 @@ packages: /resolve-from@3.0.0: resolution: {integrity: sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==} engines: {node: '>=4'} - dev: true /resolve-from@4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} - dev: true /resolve-from@5.0.0: resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} engines: {node: '>=8'} - dev: true /resolve.exports@2.0.2: resolution: {integrity: sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==} @@ -8035,12 +12322,13 @@ packages: is-core-module: 2.13.0 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - dev: true /response-iterator@0.2.6: resolution: {integrity: sha512-pVzEEzrsg23Sh053rmDUvLSkGXluZio0qu8VT6ukrYuvtjVfCbDZH9d6PGXb8HZfzdNZt8feXv/jvUzlhRgLnw==} engines: {node: '>=0.8'} + requiresBuild: true dev: false + optional: true /restore-cursor@3.1.0: resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} @@ -8048,7 +12336,6 @@ packages: dependencies: onetime: 5.1.2 signal-exit: 3.0.7 - dev: true /retimer@3.0.0: resolution: {integrity: sha512-WKE0j11Pa0ZJI5YIk0nflGI7SQsfl2ljihVy7ogh7DeQSeYAUi0ubZ/yEueGtDfUPk6GH5LRw1hBdLq4IwUBWA==} @@ -8067,7 +12354,17 @@ packages: /reusify@1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - dev: true + + /rfdc@1.3.0: + resolution: {integrity: sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==} + dev: false + + /rimraf@2.6.3: + resolution: {integrity: sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==} + hasBin: true + dependencies: + glob: 7.2.3 + dev: false /rimraf@2.7.1: resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} @@ -8081,7 +12378,14 @@ packages: hasBin: true dependencies: glob: 7.2.3 - dev: true + + /rimraf@5.0.5: + resolution: {integrity: sha512-CqDakW+hMe/Bz202FPEymy68P+G50RfMQK+Qo5YUqc9SPipvbGjCGKd0RSKEelbsfQuw3g5NZDSrlZZAJurH1A==} + engines: {node: '>=14'} + hasBin: true + dependencies: + glob: 10.3.10 + dev: false /ripemd160@2.0.2: resolution: {integrity: sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==} @@ -8097,14 +12401,6 @@ packages: bn.js: 5.2.1 dev: true - /rollup@3.29.4: - resolution: {integrity: sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==} - engines: {node: '>=14.18.0', npm: '>=8.0.0'} - hasBin: true - optionalDependencies: - fsevents: 2.3.3 - dev: true - /run-parallel-limit@1.1.0: resolution: {integrity: sha512-jJA7irRNM91jaKc3Hcl1npHsFLOXOoTkPCUL1JEa1R82O2miplXXRaGdjW/KM/98YQWDhJLiSs793CnXfblJUw==} dependencies: @@ -8115,7 +12411,6 @@ packages: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} dependencies: queue-microtask: 1.2.3 - dev: true /rustbn.js@0.2.0: resolution: {integrity: sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA==} @@ -8133,11 +12428,9 @@ packages: /safe-buffer@5.1.2: resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} - dev: true /safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - dev: true /safe-regex-test@1.0.0: resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} @@ -8171,6 +12464,12 @@ packages: wordwrap: 1.0.0 dev: true + /scheduler@0.24.0-canary-efb381bbf-20230505: + resolution: {integrity: sha512-ABvovCDe/k9IluqSh4/ISoq8tIJnW8euVAWYt5j/bg6dRnqwQwiGO1F/V4AyK96NGF/FB04FhOUDuWj8IKfABA==} + dependencies: + loose-envify: 1.4.0 + dev: false + /scrypt-js@3.0.1: resolution: {integrity: sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==} dev: true @@ -8188,12 +12487,10 @@ packages: /semver@5.7.2: resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} hasBin: true - dev: true /semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true - dev: true /semver@7.5.4: resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} @@ -8201,7 +12498,40 @@ packages: hasBin: true dependencies: lru-cache: 6.0.0 - dev: true + + /send@0.18.0: + resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} + engines: {node: '>= 0.8.0'} + dependencies: + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + encodeurl: 1.0.2 + escape-html: 1.0.3 + etag: 1.8.1 + fresh: 0.5.2 + http-errors: 2.0.0 + mime: 1.6.0 + ms: 2.1.3 + on-finished: 2.4.1 + range-parser: 1.2.1 + statuses: 2.0.1 + transitivePeerDependencies: + - supports-color + dev: false + + /sentence-case@3.0.4: + resolution: {integrity: sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg==} + dependencies: + no-case: 3.0.4 + tslib: 2.6.2 + upper-case-first: 2.0.2 + dev: false + + /serialize-error@2.1.0: + resolution: {integrity: sha512-ghgmKt5o4Tly5yEG/UJp8qTd0AN7Xalw4XBtDEKP655B699qMEtra1WlXeE6WIvdEG481JvRxULKsInq/iNysw==} + engines: {node: '>=0.10.0'} + dev: false /serialize-javascript@6.0.0: resolution: {integrity: sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==} @@ -8209,13 +12539,27 @@ packages: randombytes: 2.1.0 dev: true + /serve-static@1.15.0: + resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==} + engines: {node: '>= 0.8.0'} + dependencies: + encodeurl: 1.0.2 + escape-html: 1.0.3 + parseurl: 1.3.3 + send: 0.18.0 + transitivePeerDependencies: + - supports-color + dev: false + + /set-blocking@2.0.0: + resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} + dev: false + /setimmediate@1.0.5: resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} - dev: true /setprototypeof@1.2.0: resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} - dev: true /sha.js@2.4.11: resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==} @@ -8232,17 +12576,26 @@ packages: crypt: 0.0.2 dev: true + /shallow-clone@3.0.1: + resolution: {integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==} + engines: {node: '>=8'} + dependencies: + kind-of: 6.0.3 + dev: false + /shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} dependencies: shebang-regex: 3.0.0 - dev: true /shebang-regex@3.0.0: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} - dev: true + + /shell-quote@1.8.1: + resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==} + dev: false /shelljs@0.8.5: resolution: {integrity: sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==} @@ -8264,16 +12617,31 @@ packages: /signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - dev: true + + /signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + dev: false + + /signedsource@1.0.0: + resolution: {integrity: sha512-6+eerH9fEnNmi/hyM1DXcRK3pWdoMQtlkQ+ns0ntzunjKqp5i3sKCc80ym8Fib3iaYhdJUOPdhlJWj1tvge2Ww==} + dev: false /sisteransi@1.0.5: resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} - dev: true /slash@3.0.0: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} - dev: true + + /slice-ansi@2.1.0: + resolution: {integrity: sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==} + engines: {node: '>=6'} + dependencies: + ansi-styles: 3.2.1 + astral-regex: 1.0.0 + is-fullwidth-code-point: 2.0.0 + dev: false /slice-ansi@4.0.0: resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} @@ -8284,6 +12652,13 @@ packages: is-fullwidth-code-point: 3.0.0 dev: true + /snake-case@3.0.4: + resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} + dependencies: + dot-case: 3.0.4 + tslib: 2.6.2 + dev: false + /solc@0.7.3(debug@4.3.4): resolution: {integrity: sha512-GAsWNAjGzIDg7VxzP6mPjdurby3IkGCjQcM8GFYZT6RyaoUZKmMU6Y7YwG+tFGhv7dwZ8rmR4iwFDrrD99JwqA==} engines: {node: '>=8.0.0'} @@ -8291,7 +12666,7 @@ packages: dependencies: command-exists: 1.2.9 commander: 3.0.2 - follow-redirects: 1.15.2(debug@4.3.4) + follow-redirects: 1.15.3(debug@4.3.4) fs-extra: 0.30.0 js-sha3: 0.8.0 memorystream: 0.3.1 @@ -8379,11 +12754,6 @@ packages: - supports-color dev: true - /source-map-js@1.0.2: - resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} - engines: {node: '>=0.10.0'} - dev: true - /source-map-support@0.5.13: resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} dependencies: @@ -8396,7 +12766,6 @@ packages: dependencies: buffer-from: 1.1.2 source-map: 0.6.1 - dev: true /source-map@0.2.0: resolution: {integrity: sha512-CBdZ2oa/BHhS4xj5DlhjWNHcan57/5YuvfdLf17iVmIpd9KRm+DFLmC6nBNj+6Ua7Kt3TmOjDpQT1aTYOQtoUA==} @@ -8407,18 +12776,32 @@ packages: dev: true optional: true + /source-map@0.5.7: + resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} + engines: {node: '>=0.10.0'} + dev: false + /source-map@0.6.1: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} - dev: true + + /source-map@0.7.4: + resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} + engines: {node: '>= 8'} + dev: false /split-ca@1.0.1: resolution: {integrity: sha512-Q5thBSxp5t8WPTTJQS59LrGqOZqOsrhDGDVm8azCqIBjSBd7nd9o2PM+mDulQQkh8h//4U6hFZnc/mul8t5pWQ==} dev: true + /sponge-case@1.0.1: + resolution: {integrity: sha512-dblb9Et4DAtiZ5YSUZHLl4XhH4uK80GhAZrVXdN4O2P4gQ40Wa5UIOPUHlA/nFd2PLblBZWUioLMMAVrgpoYcA==} + dependencies: + tslib: 2.6.2 + dev: false + /sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} - dev: true /sshpk@1.17.0: resolution: {integrity: sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==} @@ -8441,19 +12824,25 @@ packages: engines: {node: '>=10'} dependencies: escape-string-regexp: 2.0.0 - dev: true + + /stackframe@1.3.4: + resolution: {integrity: sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==} + dev: false /stacktrace-parser@0.1.10: resolution: {integrity: sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==} engines: {node: '>=6'} dependencies: type-fest: 0.7.1 - dev: true + + /statuses@1.5.0: + resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==} + engines: {node: '>= 0.6'} + dev: false /statuses@2.0.1: resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} engines: {node: '>= 0.8'} - dev: true /stream-to-it@0.2.4: resolution: {integrity: sha512-4vEbkSs83OahpmBybNJXlJd7d6/RxzkkSdT3I0mnGt79Xd2Kk+e1JqbvAvsQfCeKj3aKb0QIWkyK3/n0j506vQ==} @@ -8464,7 +12853,6 @@ packages: /streamsearch@1.1.0: resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} engines: {node: '>=10.0.0'} - dev: true /string-format@2.0.0: resolution: {integrity: sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA==} @@ -8478,6 +12866,11 @@ packages: strip-ansi: 6.0.1 dev: true + /string-similarity@4.0.4: + resolution: {integrity: sha512-/q/8Q4Bl4ZKAPjj8WerIBJWALKkaPRfrvhfF8k/B23i4nzrlRj2/go1m90In7nG/3XDSbOo0+pu6RvCTM9RGMQ==} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. + dev: false + /string-width@2.1.1: resolution: {integrity: sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==} engines: {node: '>=4'} @@ -8493,7 +12886,15 @@ packages: emoji-regex: 8.0.0 is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 - dev: true + + /string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.1.0 + dev: false /string.prototype.trim@1.2.7: resolution: {integrity: sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==} @@ -8528,13 +12929,11 @@ packages: resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} dependencies: safe-buffer: 5.1.2 - dev: true /string_decoder@1.3.0: resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} dependencies: safe-buffer: 5.2.1 - dev: true /strip-ansi@4.0.0: resolution: {integrity: sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==} @@ -8548,14 +12947,24 @@ packages: engines: {node: '>=6'} dependencies: ansi-regex: 4.1.1 - dev: true /strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} dependencies: ansi-regex: 5.0.1 - dev: true + + /strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} + dependencies: + ansi-regex: 6.0.1 + dev: false + + /strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + dev: false /strip-bom@4.0.0: resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} @@ -8565,7 +12974,6 @@ packages: /strip-final-newline@2.0.0: resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} engines: {node: '>=6'} - dev: true /strip-hex-prefix@1.0.0: resolution: {integrity: sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==} @@ -8579,6 +12987,14 @@ packages: engines: {node: '>=8'} dev: true + /strnum@1.0.5: + resolution: {integrity: sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==} + dev: false + + /sudo-prompt@9.2.1: + resolution: {integrity: sha512-Mu7R0g4ig9TUuGSxJavny5Rv0egCEtpZRNMrZaYS1vxkiIxGiGUwoezU3LazIQ+KE04hTrTfNPgxU5gzi7F5Pw==} + dev: false + /supports-color@3.2.3: resolution: {integrity: sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==} engines: {node: '>=0.8.0'} @@ -8591,21 +13007,18 @@ packages: engines: {node: '>=4'} dependencies: has-flag: 3.0.0 - dev: true /supports-color@7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} dependencies: has-flag: 4.0.0 - dev: true /supports-color@8.1.1: resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} engines: {node: '>=10'} dependencies: has-flag: 4.0.0 - dev: true /supports-hyperlinks@2.3.0: resolution: {integrity: sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==} @@ -8618,12 +13031,19 @@ packages: /supports-preserve-symlinks-flag@1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - dev: true + + /swap-case@2.0.2: + resolution: {integrity: sha512-kc6S2YS/2yXbtkSMunBtKdah4VFETZ8Oh6ONSmSd9bRxhqTrtARUCBUiWXH3xVPpvR7tz2CSnkuXVE42EcGnMw==} + dependencies: + tslib: 2.6.2 + dev: false /symbol-observable@4.0.0: resolution: {integrity: sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==} engines: {node: '>=0.10'} + requiresBuild: true dev: false + optional: true /sync-request@6.1.0: resolution: {integrity: sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==} @@ -8695,13 +13115,31 @@ packages: yallist: 4.0.0 dev: true + /temp@0.8.4: + resolution: {integrity: sha512-s0ZZzd0BzYv5tLSptZooSjK8oj6C+c19p7Vqta9+6NPOf7r+fxq0cJe6/oN4LTC79sy5NY8ucOJNgwsKCSbfqg==} + engines: {node: '>=6.0.0'} + dependencies: + rimraf: 2.6.3 + dev: false + + /terser@5.21.0: + resolution: {integrity: sha512-WtnFKrxu9kaoXuiZFSGrcAvvBqAdmKx0SFNmVNYdJamMu9yyN3I/QF0FbH4QcqJQ+y1CJnzxGIKH0cSj+FGYRw==} + engines: {node: '>=10'} + hasBin: true + dependencies: + '@jridgewell/source-map': 0.3.5 + acorn: 8.10.0 + commander: 2.20.3 + source-map-support: 0.5.21 + dev: false + /test-exclude@6.0.0: resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} engines: {node: '>=8'} dependencies: '@istanbuljs/schema': 0.1.3 glob: 7.2.3 - minimatch: 3.1.2 + minimatch: 9.0.3 dev: true /text-table@0.2.0: @@ -8725,6 +13163,17 @@ packages: qs: 6.11.2 dev: true + /throat@5.0.0: + resolution: {integrity: sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==} + dev: false + + /through2@2.0.5: + resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==} + dependencies: + readable-stream: 2.3.8 + xtend: 4.0.2 + dev: false + /through@2.3.8: resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} dev: true @@ -8737,6 +13186,22 @@ packages: retimer: 3.0.0 dev: true + /tiny-lru@11.2.3: + resolution: {integrity: sha512-mF9jPTrvN7UHk0bekOk3RlFdFwfyS4CJYVsGc7nInL3pVgUCYj5r9X6GpZBFQgLr0TKJo8Dp+F3oRvYzxU9xiA==} + engines: {node: '>=12'} + dev: false + + /tiny-lru@8.0.2: + resolution: {integrity: sha512-ApGvZ6vVvTNdsmt676grvCkUCGwzG9IqXma5Z07xJgiC5L7akUMof5U8G2JTI9Rz/ovtVhJBlY6mNhEvtjzOIg==} + engines: {node: '>=6'} + dev: false + + /title-case@3.0.3: + resolution: {integrity: sha512-e1zGYRvbffpcHIrnuqT0Dh+gEJtDaxDSoG4JAIpq4oDFyooziLBIiYQv0GBT4FUAnUop5uZ1hiIAj7oAF6sOCA==} + dependencies: + tslib: 2.6.2 + dev: false + /tmp-promise@3.0.3: resolution: {integrity: sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==} dependencies: @@ -8759,7 +13224,6 @@ packages: /tmpl@1.0.5: resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} - dev: true /to-buffer@1.1.1: resolution: {integrity: sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==} @@ -8768,19 +13232,16 @@ packages: /to-fast-properties@2.0.0: resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} engines: {node: '>=4'} - dev: true /to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} dependencies: is-number: 7.0.0 - dev: true /toidentifier@1.0.1: resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} engines: {node: '>=0.6'} - dev: true /tough-cookie@4.1.3: resolution: {integrity: sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==} @@ -8794,7 +13255,10 @@ packages: /tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} - dev: true + + /ts-algebra@1.2.2: + resolution: {integrity: sha512-kloPhf1hq3JbCPOTYoOWDKxebWjNb2o/LKnNfkWhxVVisFFmMJPPdJeGoGmM+iRLyoXAR61e08Pb+vUXINg8aA==} + dev: false /ts-api-utils@1.0.3(typescript@5.2.2): resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==} @@ -8826,11 +13290,13 @@ packages: /ts-invariant@0.10.3: resolution: {integrity: sha512-uivwYcQaxAucv1CzRp2n/QdYPo4ILf9VXgH19zEIjFx2EJufV16P0JtJVpYHy89DItG6Kwj2oIUjrcK5au+4tQ==} engines: {node: '>=8'} + requiresBuild: true dependencies: tslib: 2.6.2 dev: false + optional: true - /ts-jest@29.1.1(@babel/core@7.23.0)(jest@29.7.0)(typescript@5.2.2): + /ts-jest@29.1.1(@babel/core@7.23.0)(babel-jest@29.7.0)(jest@29.7.0)(typescript@5.2.2): resolution: {integrity: sha512-D6xjnnbP17cC85nliwGiL+tpoKN0StpgE0TeOjXQTU6MVCfsB4v7aW05CgQ/1OywGb0x/oy9hHFnN+sczTiRaA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -8852,6 +13318,7 @@ packages: optional: true dependencies: '@babel/core': 7.23.0 + babel-jest: 29.7.0(@babel/core@7.23.0) bs-logger: 0.2.6 fast-json-stable-stringify: 2.1.0 jest: 29.7.0(@types/node@20.8.0)(ts-node@10.9.1) @@ -8893,7 +13360,15 @@ packages: typescript: 5.2.2 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 - dev: true + + /tsconfig-paths@4.2.0: + resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==} + engines: {node: '>=6'} + dependencies: + json5: 2.2.3 + minimist: 1.2.8 + strip-bom: 3.0.0 + dev: false /tslib@1.14.1: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} @@ -8901,7 +13376,14 @@ packages: /tslib@2.4.0: resolution: {integrity: sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==} - dev: true + + /tslib@2.5.3: + resolution: {integrity: sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==} + dev: false + + /tslib@2.6.0: + resolution: {integrity: sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA==} + dev: false /tslib@2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} @@ -8945,7 +13427,6 @@ packages: /type-detect@4.0.8: resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} engines: {node: '>=4'} - dev: true /type-fest@0.20.2: resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} @@ -8960,7 +13441,6 @@ packages: /type-fest@0.7.1: resolution: {integrity: sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==} engines: {node: '>=8'} - dev: true /typechain@8.3.1(typescript@5.2.2): resolution: {integrity: sha512-fA7clol2IP/56yq6vkMTR+4URF1nGjV82Wx6Rf09EsqD4tkzMAvEaqYxVFCavJm/1xaRga/oD55K+4FtuXwQOQ==} @@ -9040,6 +13520,20 @@ packages: engines: {node: '>=8'} dev: true + /ua-parser-js@1.0.36: + resolution: {integrity: sha512-znuyCIXzl8ciS3+y3fHJI/2OhQIXbXw9MWC/o3qwyR+RGppjZHrM27CGFSKCJXi2Kctiz537iOu2KnXs1lMQhw==} + dev: false + + /uglify-es@3.3.9: + resolution: {integrity: sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ==} + engines: {node: '>=0.8.0'} + deprecated: support for ECMAScript is superseded by `uglify-js` as of v3.13.0 + hasBin: true + dependencies: + commander: 2.13.0 + source-map: 0.6.1 + dev: false + /uglify-js@3.17.4: resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} engines: {node: '>=0.8.0'} @@ -9063,6 +13557,11 @@ packages: which-boxed-primitive: 1.0.2 dev: true + /unc-path-regex@0.1.2: + resolution: {integrity: sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==} + engines: {node: '>=0.10.0'} + dev: false + /undici@5.23.0: resolution: {integrity: sha512-1D7w+fvRsqlQ9GscLBwcAJinqcZGHUKjbOmXdlE/v8BvEGXjeWAax+341q44EuTcHXXnfyKNbKRq4Lg7OzhMmg==} engines: {node: '>=14.0'} @@ -9081,10 +13580,28 @@ packages: resolution: {integrity: sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA==} dev: true + /unicode-canonical-property-names-ecmascript@2.0.0: + resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==} + engines: {node: '>=4'} + + /unicode-match-property-ecmascript@2.0.0: + resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} + engines: {node: '>=4'} + dependencies: + unicode-canonical-property-names-ecmascript: 2.0.0 + unicode-property-aliases-ecmascript: 2.1.0 + + /unicode-match-property-value-ecmascript@2.1.0: + resolution: {integrity: sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==} + engines: {node: '>=4'} + + /unicode-property-aliases-ecmascript@2.1.0: + resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==} + engines: {node: '>=4'} + /universalify@0.1.2: resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} engines: {node: '>= 4.0.0'} - dev: true /universalify@0.2.0: resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} @@ -9096,10 +13613,16 @@ packages: engines: {node: '>= 10.0.0'} dev: true + /unixify@1.0.0: + resolution: {integrity: sha512-6bc58dPYhCMHHuwxldQxO3RRNZ4eCogZ/st++0+fcC1nr0jiGUtAdBJ2qzmLQWSxbtz42pWt4QQMiZ9HvZf5cg==} + engines: {node: '>=0.10.0'} + dependencies: + normalize-path: 2.1.1 + dev: false + /unpipe@1.0.0: resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} engines: {node: '>= 0.8'} - dev: true /update-browserslist-db@1.0.13(browserslist@4.22.1): resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} @@ -9110,13 +13633,23 @@ packages: browserslist: 4.22.1 escalade: 3.1.1 picocolors: 1.0.0 - dev: true + + /upper-case-first@2.0.2: + resolution: {integrity: sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==} + dependencies: + tslib: 2.6.2 + dev: false + + /upper-case@2.0.2: + resolution: {integrity: sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg==} + dependencies: + tslib: 2.6.2 + dev: false /uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} dependencies: punycode: 2.3.0 - dev: true /url-parse@1.5.10: resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} @@ -9127,15 +13660,29 @@ packages: /urlpattern-polyfill@8.0.2: resolution: {integrity: sha512-Qp95D4TPJl1kC9SKigDcqgyM2VDVO4RiJc2d4qe5GrYm+zbIQCWWKAFaJNQ4BhdFeDGwBmAxqJBwWSJDb9T3BQ==} - dev: true + + /urlpattern-polyfill@9.0.0: + resolution: {integrity: sha512-WHN8KDQblxd32odxeIgo83rdVDE2bvdkb86it7bMhYZwWKJz0+O0RK/eZiHYnM+zgt/U7hAHOlCQGfjjvSkw2g==} + dev: false + + /use-sync-external-store@1.2.0(react@18.2.0): + resolution: {integrity: sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + dependencies: + react: 18.2.0 + dev: false /utf8@3.0.0: resolution: {integrity: sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==} - dev: true /util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - dev: true + + /utils-merge@1.0.1: + resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} + engines: {node: '>= 0.4.0'} + dev: false /uuid@3.4.0: resolution: {integrity: sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==} @@ -9150,7 +13697,6 @@ packages: /v8-compile-cache-lib@3.0.1: resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} - dev: true /v8-to-istanbul@9.1.3: resolution: {integrity: sha512-9lDD+EVI2fjFsMWXc6dy5JJzBsVTcQ2fVkfBvncZ6xJWG9wtBhOldG+mHkSL0+V1K/xgZz0JDO5UT5hFwHUghg==} @@ -9161,10 +13707,20 @@ packages: convert-source-map: 2.0.0 dev: true + /value-or-promise@1.0.12: + resolution: {integrity: sha512-Z6Uz+TYwEqE7ZN50gwn+1LCVo9ZVrpxRPOhOLnncYkY1ZzOYtrX8Fwf/rFktZ8R5mJms6EZf5TqNOMeZmnPq9Q==} + engines: {node: '>=12'} + dev: false + /varint@6.0.0: resolution: {integrity: sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==} dev: true + /vary@1.1.2: + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} + engines: {node: '>= 0.8'} + dev: false + /verror@1.10.0: resolution: {integrity: sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==} engines: {'0': node >=0.6.0} @@ -9174,7 +13730,7 @@ packages: extsprintf: 1.3.0 dev: true - /viem@1.15.1(typescript@5.2.2): + /viem@1.15.1(typescript@5.2.2)(zod@3.22.4): resolution: {integrity: sha512-lxk8wwUK7ZivYAUZ6pH+9Y6jjrfXXjafCOoASa4lw3ULUCT2BajU4SELarlxJQimpsFd7OZD4m4iEXYLF/bt6w==} peerDependencies: typescript: '>=5.0.4' @@ -9188,7 +13744,7 @@ packages: '@scure/bip32': 1.3.2 '@scure/bip39': 1.2.1 '@types/ws': 8.5.6 - abitype: 0.9.8(typescript@5.2.2) + abitype: 0.9.8(typescript@5.2.2)(zod@3.22.4) isomorphic-ws: 5.0.0(ws@8.13.0) typescript: 5.2.2 ws: 8.13.0 @@ -9198,58 +13754,23 @@ packages: - zod dev: false - /vite@4.4.10(@types/node@20.8.0): - resolution: {integrity: sha512-TzIjiqx9BEXF8yzYdF2NTf1kFFbjMjUSV0LFZ3HyHoI3SGSPLnnFUKiIQtL3gl2AjHvMrprOvQ3amzaHgQlAxw==} - engines: {node: ^14.18.0 || >=16.0.0} - hasBin: true - peerDependencies: - '@types/node': '>= 14' - less: '*' - lightningcss: ^1.21.0 - sass: '*' - stylus: '*' - sugarss: '*' - terser: ^5.4.0 - peerDependenciesMeta: - '@types/node': - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - dependencies: - '@types/node': 20.8.0 - esbuild: 0.18.20 - postcss: 8.4.31 - rollup: 3.29.4 - optionalDependencies: - fsevents: 2.3.3 - dev: true + /vlq@1.0.1: + resolution: {integrity: sha512-gQpnTgkubC6hQgdIcRdYGDSDc+SaujOdyesZQMv6JlfQee/9Mp0Qhnys6WxDWvQnL5WZdT7o2Ul187aSt0Rq+w==} + dev: false /walker@1.0.8: resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} dependencies: makeerror: 1.0.12 - dev: true /wcwidth@1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} dependencies: defaults: 1.0.4 - dev: true /web-streams-polyfill@3.2.1: resolution: {integrity: sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==} engines: {node: '>= 8'} - dev: true /web3-eth-abi@1.7.0: resolution: {integrity: sha512-heqR0bWxgCJwjWIhq2sGyNj9bwun5+Xox/LdZKe+WMyTSy0cXDXEAgv3XKNkXC4JqdDt/ZlbTEx4TWak4TRMSg==} @@ -9294,18 +13815,19 @@ packages: asn1js: 3.0.5 pvtsutils: 1.3.5 tslib: 2.6.2 - dev: true /webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} - dev: true + + /whatwg-fetch@3.6.19: + resolution: {integrity: sha512-d67JP4dHSbm2TrpFj8AbO8DnL1JXL5J9u0Kq2xW6d0TFDbCA3Muhdt8orXC22utleTVj7Prqt82baN6RBvnEgw==} + dev: false /whatwg-url@5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} dependencies: tr46: 0.0.3 webidl-conversions: 3.0.1 - dev: true /which-boxed-primitive@1.0.2: resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} @@ -9317,6 +13839,10 @@ packages: is-symbol: 1.0.4 dev: true + /which-module@2.0.1: + resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} + dev: false + /which-typed-array@1.1.11: resolution: {integrity: sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==} engines: {node: '>= 0.4'} @@ -9341,7 +13867,6 @@ packages: hasBin: true dependencies: isexe: 2.0.0 - dev: true /widest-line@3.1.0: resolution: {integrity: sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==} @@ -9371,6 +13896,15 @@ packages: resolution: {integrity: sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==} dev: true + /wrap-ansi@6.2.0: + resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} + engines: {node: '>=8'} + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + dev: false + /wrap-ansi@7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} @@ -9378,11 +13912,26 @@ packages: ansi-styles: 4.3.0 string-width: 4.2.3 strip-ansi: 6.0.1 - dev: true + + /wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + dependencies: + ansi-styles: 6.2.1 + string-width: 5.1.2 + strip-ansi: 7.1.0 + dev: false /wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - dev: true + + /write-file-atomic@2.4.3: + resolution: {integrity: sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==} + dependencies: + graceful-fs: 4.2.11 + imurmurhash: 0.1.4 + signal-exit: 3.0.7 + dev: false /write-file-atomic@4.0.2: resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} @@ -9392,6 +13941,20 @@ packages: signal-exit: 3.0.7 dev: true + /ws@6.2.2: + resolution: {integrity: sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dependencies: + async-limiter: 1.0.1 + dev: false + /ws@7.4.6: resolution: {integrity: sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==} engines: {node: '>=8.3.0'} @@ -9416,7 +13979,6 @@ packages: optional: true utf-8-validate: optional: true - dev: true /ws@8.13.0: resolution: {integrity: sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==} @@ -9431,6 +13993,19 @@ packages: optional: true dev: false + /ws@8.14.2: + resolution: {integrity: sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dev: false + /ws@8.5.0: resolution: {integrity: sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==} engines: {node: '>=10.0.0'} @@ -9447,26 +14022,39 @@ packages: /xtend@4.0.2: resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} engines: {node: '>=0.4'} - dev: true + + /y18n@4.0.3: + resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} + dev: false /y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} - dev: true /yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} - dev: true /yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - dev: true /yaml@1.10.2: resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} engines: {node: '>= 6'} dev: true + /yaml@2.3.2: + resolution: {integrity: sha512-N/lyzTPaJasoDmfV7YTrYCI0G/3ivm/9wdG0aHuheKowWQwGTsK0Eoiw6utmzAnI6pkJa0DUVygvp3spqqEKXg==} + engines: {node: '>= 14'} + dev: false + + /yargs-parser@18.1.3: + resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} + engines: {node: '>=6'} + dependencies: + camelcase: 5.3.1 + decamelize: 1.2.0 + dev: false + /yargs-parser@20.2.4: resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==} engines: {node: '>=10'} @@ -9475,7 +14063,6 @@ packages: /yargs-parser@21.1.1: resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} engines: {node: '>=12'} - dev: true /yargs-unparser@2.0.0: resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==} @@ -9487,6 +14074,23 @@ packages: is-plain-obj: 2.1.0 dev: true + /yargs@15.4.1: + resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} + engines: {node: '>=8'} + dependencies: + cliui: 6.0.0 + decamelize: 1.2.0 + find-up: 4.1.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + require-main-filename: 2.0.0 + set-blocking: 2.0.0 + string-width: 4.2.3 + which-module: 2.0.1 + y18n: 4.0.3 + yargs-parser: 18.1.3 + dev: false + /yargs@16.2.0: resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} engines: {node: '>=10'} @@ -9511,24 +14115,37 @@ packages: string-width: 4.2.3 y18n: 5.0.8 yargs-parser: 21.1.1 - dev: true /yn@3.1.1: resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} engines: {node: '>=6'} - dev: true /yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} - dev: true /zen-observable-ts@1.2.5: resolution: {integrity: sha512-QZWQekv6iB72Naeake9hS1KxHlotfRpe+WGNbNx5/ta+R3DNjVO2bswf63gXlWDcs+EMd7XY8HfVQyP1X6T4Zg==} + requiresBuild: true dependencies: zen-observable: 0.8.15 dev: false + optional: true /zen-observable@0.8.15: resolution: {integrity: sha512-PQ2PC7R9rslx84ndNBZB/Dkv8V8fZEpk83RLgXtYd0fwUgEjseMn1Dgajh2x6S8QbZAFa9p2qVCEuYZNgve0dQ==} + requiresBuild: true + dev: false + optional: true + + /zod-to-json-schema@3.21.4(zod@3.22.4): + resolution: {integrity: sha512-fjUZh4nQ1s6HMccgIeE0VP4QG/YRGPmyjO9sAh890aQKPEk3nqbfUXhMFaC+Dr5KvYBm8BCyvfpZf2jY9aGSsw==} + peerDependencies: + zod: ^3.21.4 + dependencies: + zod: 3.22.4 + dev: false + + /zod@3.22.4: + resolution: {integrity: sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==} dev: false diff --git a/sdk/.graphclient/index.ts b/sdk/.graphclient/index.ts new file mode 100644 index 00000000..9111f27b --- /dev/null +++ b/sdk/.graphclient/index.ts @@ -0,0 +1,1205 @@ +// @ts-nocheck +import { GraphQLResolveInfo, SelectionSetNode, FieldNode, GraphQLScalarType, GraphQLScalarTypeConfig } from 'graphql'; +import type { GetMeshOptions } from '@graphql-mesh/runtime'; +import type { YamlConfig } from '@graphql-mesh/types'; +import { PubSub } from '@graphql-mesh/utils'; +import { DefaultLogger } from '@graphql-mesh/utils'; +import MeshCache from "@graphql-mesh/cache-localforage"; +import { fetch as fetchFn } from '@whatwg-node/fetch'; + +import { MeshResolvedSource } from '@graphql-mesh/runtime'; +import { MeshTransform, MeshPlugin } from '@graphql-mesh/types'; +import GraphqlHandler from "@graphql-mesh/graphql" +import BareMerger from "@graphql-mesh/merger-bare"; +import { createMeshHTTPHandler, MeshHTTPHandler } from '@graphql-mesh/http'; +import { getMesh, ExecuteMeshFn, SubscribeMeshFn, MeshContext as BaseMeshContext, MeshInstance } from '@graphql-mesh/runtime'; +import { MeshStore, FsStoreStorageAdapter } from '@graphql-mesh/store'; +import { path as pathModule } from '@graphql-mesh/cross-helpers'; +import { ImportFn } from '@graphql-mesh/types'; +import type { LineaAttestationRegistryTypes } from './sources/linea-attestation-registry/types'; +import * as importedModule$0 from "./sources/linea-attestation-registry/introspectionSchema"; +export type Maybe = T | null; +export type InputMaybe = Maybe; +export type Exact = { [K in keyof T]: T[K] }; +export type MakeOptional = Omit & { [SubKey in K]?: Maybe }; +export type MakeMaybe = Omit & { [SubKey in K]: Maybe }; +export type RequireFields = Omit & { [P in K]-?: NonNullable }; + + + +/** All built-in and custom scalars, mapped to their actual values */ +export type Scalars = { + ID: string; + String: string; + Boolean: boolean; + Int: number; + Float: number; + BigDecimal: any; + BigInt: any; + Bytes: any; +}; + +export type Attestation = { + id: Scalars['ID']; + schemaId: Scalars['Bytes']; + replacedBy: Scalars['Bytes']; + attester: Scalars['Bytes']; + portal: Scalars['Bytes']; + attestedDate: Scalars['BigInt']; + expirationDate: Scalars['BigInt']; + revocationDate: Scalars['BigInt']; + version: Scalars['BigInt']; + revoked: Scalars['Boolean']; + subject: Scalars['Bytes']; + attestationData: Scalars['Bytes']; + schemaString?: Maybe; + decodedData?: Maybe>; +}; + +export type Attestation_filter = { + id?: InputMaybe; + id_not?: InputMaybe; + id_gt?: InputMaybe; + id_lt?: InputMaybe; + id_gte?: InputMaybe; + id_lte?: InputMaybe; + id_in?: InputMaybe>; + id_not_in?: InputMaybe>; + schemaId?: InputMaybe; + schemaId_not?: InputMaybe; + schemaId_in?: InputMaybe>; + schemaId_not_in?: InputMaybe>; + schemaId_contains?: InputMaybe; + schemaId_not_contains?: InputMaybe; + replacedBy?: InputMaybe; + replacedBy_not?: InputMaybe; + replacedBy_in?: InputMaybe>; + replacedBy_not_in?: InputMaybe>; + replacedBy_contains?: InputMaybe; + replacedBy_not_contains?: InputMaybe; + attester?: InputMaybe; + attester_not?: InputMaybe; + attester_in?: InputMaybe>; + attester_not_in?: InputMaybe>; + attester_contains?: InputMaybe; + attester_not_contains?: InputMaybe; + portal?: InputMaybe; + portal_not?: InputMaybe; + portal_in?: InputMaybe>; + portal_not_in?: InputMaybe>; + portal_contains?: InputMaybe; + portal_not_contains?: InputMaybe; + attestedDate?: InputMaybe; + attestedDate_not?: InputMaybe; + attestedDate_gt?: InputMaybe; + attestedDate_lt?: InputMaybe; + attestedDate_gte?: InputMaybe; + attestedDate_lte?: InputMaybe; + attestedDate_in?: InputMaybe>; + attestedDate_not_in?: InputMaybe>; + expirationDate?: InputMaybe; + expirationDate_not?: InputMaybe; + expirationDate_gt?: InputMaybe; + expirationDate_lt?: InputMaybe; + expirationDate_gte?: InputMaybe; + expirationDate_lte?: InputMaybe; + expirationDate_in?: InputMaybe>; + expirationDate_not_in?: InputMaybe>; + revocationDate?: InputMaybe; + revocationDate_not?: InputMaybe; + revocationDate_gt?: InputMaybe; + revocationDate_lt?: InputMaybe; + revocationDate_gte?: InputMaybe; + revocationDate_lte?: InputMaybe; + revocationDate_in?: InputMaybe>; + revocationDate_not_in?: InputMaybe>; + version?: InputMaybe; + version_not?: InputMaybe; + version_gt?: InputMaybe; + version_lt?: InputMaybe; + version_gte?: InputMaybe; + version_lte?: InputMaybe; + version_in?: InputMaybe>; + version_not_in?: InputMaybe>; + revoked?: InputMaybe; + revoked_not?: InputMaybe; + revoked_in?: InputMaybe>; + revoked_not_in?: InputMaybe>; + subject?: InputMaybe; + subject_not?: InputMaybe; + subject_in?: InputMaybe>; + subject_not_in?: InputMaybe>; + subject_contains?: InputMaybe; + subject_not_contains?: InputMaybe; + attestationData?: InputMaybe; + attestationData_not?: InputMaybe; + attestationData_in?: InputMaybe>; + attestationData_not_in?: InputMaybe>; + attestationData_contains?: InputMaybe; + attestationData_not_contains?: InputMaybe; + schemaString?: InputMaybe; + schemaString_not?: InputMaybe; + schemaString_gt?: InputMaybe; + schemaString_lt?: InputMaybe; + schemaString_gte?: InputMaybe; + schemaString_lte?: InputMaybe; + schemaString_in?: InputMaybe>; + schemaString_not_in?: InputMaybe>; + schemaString_contains?: InputMaybe; + schemaString_contains_nocase?: InputMaybe; + schemaString_not_contains?: InputMaybe; + schemaString_not_contains_nocase?: InputMaybe; + schemaString_starts_with?: InputMaybe; + schemaString_starts_with_nocase?: InputMaybe; + schemaString_not_starts_with?: InputMaybe; + schemaString_not_starts_with_nocase?: InputMaybe; + schemaString_ends_with?: InputMaybe; + schemaString_ends_with_nocase?: InputMaybe; + schemaString_not_ends_with?: InputMaybe; + schemaString_not_ends_with_nocase?: InputMaybe; + decodedData?: InputMaybe>; + decodedData_not?: InputMaybe>; + decodedData_contains?: InputMaybe>; + decodedData_contains_nocase?: InputMaybe>; + decodedData_not_contains?: InputMaybe>; + decodedData_not_contains_nocase?: InputMaybe>; + /** Filter for the block changed event. */ + _change_block?: InputMaybe; +}; + +export type Attestation_orderBy = + | 'id' + | 'schemaId' + | 'replacedBy' + | 'attester' + | 'portal' + | 'attestedDate' + | 'expirationDate' + | 'revocationDate' + | 'version' + | 'revoked' + | 'subject' + | 'attestationData' + | 'schemaString' + | 'decodedData'; + +export type BlockChangedFilter = { + number_gte: Scalars['Int']; +}; + +export type Block_height = { + hash?: InputMaybe; + number?: InputMaybe; + number_gte?: InputMaybe; +}; + +export type Counter = { + id: Scalars['ID']; + attestations?: Maybe; + modules?: Maybe; + portals?: Maybe; + schemas?: Maybe; +}; + +export type Counter_filter = { + id?: InputMaybe; + id_not?: InputMaybe; + id_gt?: InputMaybe; + id_lt?: InputMaybe; + id_gte?: InputMaybe; + id_lte?: InputMaybe; + id_in?: InputMaybe>; + id_not_in?: InputMaybe>; + attestations?: InputMaybe; + attestations_not?: InputMaybe; + attestations_gt?: InputMaybe; + attestations_lt?: InputMaybe; + attestations_gte?: InputMaybe; + attestations_lte?: InputMaybe; + attestations_in?: InputMaybe>; + attestations_not_in?: InputMaybe>; + modules?: InputMaybe; + modules_not?: InputMaybe; + modules_gt?: InputMaybe; + modules_lt?: InputMaybe; + modules_gte?: InputMaybe; + modules_lte?: InputMaybe; + modules_in?: InputMaybe>; + modules_not_in?: InputMaybe>; + portals?: InputMaybe; + portals_not?: InputMaybe; + portals_gt?: InputMaybe; + portals_lt?: InputMaybe; + portals_gte?: InputMaybe; + portals_lte?: InputMaybe; + portals_in?: InputMaybe>; + portals_not_in?: InputMaybe>; + schemas?: InputMaybe; + schemas_not?: InputMaybe; + schemas_gt?: InputMaybe; + schemas_lt?: InputMaybe; + schemas_gte?: InputMaybe; + schemas_lte?: InputMaybe; + schemas_in?: InputMaybe>; + schemas_not_in?: InputMaybe>; + /** Filter for the block changed event. */ + _change_block?: InputMaybe; +}; + +export type Counter_orderBy = + | 'id' + | 'attestations' + | 'modules' + | 'portals' + | 'schemas'; + +export type Module = { + id: Scalars['ID']; + moduleAddress: Scalars['Bytes']; + name: Scalars['String']; + description: Scalars['String']; +}; + +export type Module_filter = { + id?: InputMaybe; + id_not?: InputMaybe; + id_gt?: InputMaybe; + id_lt?: InputMaybe; + id_gte?: InputMaybe; + id_lte?: InputMaybe; + id_in?: InputMaybe>; + id_not_in?: InputMaybe>; + moduleAddress?: InputMaybe; + moduleAddress_not?: InputMaybe; + moduleAddress_in?: InputMaybe>; + moduleAddress_not_in?: InputMaybe>; + moduleAddress_contains?: InputMaybe; + moduleAddress_not_contains?: InputMaybe; + name?: InputMaybe; + name_not?: InputMaybe; + name_gt?: InputMaybe; + name_lt?: InputMaybe; + name_gte?: InputMaybe; + name_lte?: InputMaybe; + name_in?: InputMaybe>; + name_not_in?: InputMaybe>; + name_contains?: InputMaybe; + name_contains_nocase?: InputMaybe; + name_not_contains?: InputMaybe; + name_not_contains_nocase?: InputMaybe; + name_starts_with?: InputMaybe; + name_starts_with_nocase?: InputMaybe; + name_not_starts_with?: InputMaybe; + name_not_starts_with_nocase?: InputMaybe; + name_ends_with?: InputMaybe; + name_ends_with_nocase?: InputMaybe; + name_not_ends_with?: InputMaybe; + name_not_ends_with_nocase?: InputMaybe; + description?: InputMaybe; + description_not?: InputMaybe; + description_gt?: InputMaybe; + description_lt?: InputMaybe; + description_gte?: InputMaybe; + description_lte?: InputMaybe; + description_in?: InputMaybe>; + description_not_in?: InputMaybe>; + description_contains?: InputMaybe; + description_contains_nocase?: InputMaybe; + description_not_contains?: InputMaybe; + description_not_contains_nocase?: InputMaybe; + description_starts_with?: InputMaybe; + description_starts_with_nocase?: InputMaybe; + description_not_starts_with?: InputMaybe; + description_not_starts_with_nocase?: InputMaybe; + description_ends_with?: InputMaybe; + description_ends_with_nocase?: InputMaybe; + description_not_ends_with?: InputMaybe; + description_not_ends_with_nocase?: InputMaybe; + /** Filter for the block changed event. */ + _change_block?: InputMaybe; +}; + +export type Module_orderBy = + | 'id' + | 'moduleAddress' + | 'name' + | 'description'; + +/** Defines the order direction, either ascending or descending */ +export type OrderDirection = + | 'asc' + | 'desc'; + +export type Portal = { + id: Scalars['ID']; + ownerAddress: Scalars['Bytes']; + modules?: Maybe>; + isRevocable: Scalars['Boolean']; + name: Scalars['String']; + description: Scalars['String']; + ownerName: Scalars['String']; +}; + +export type Portal_filter = { + id?: InputMaybe; + id_not?: InputMaybe; + id_gt?: InputMaybe; + id_lt?: InputMaybe; + id_gte?: InputMaybe; + id_lte?: InputMaybe; + id_in?: InputMaybe>; + id_not_in?: InputMaybe>; + ownerAddress?: InputMaybe; + ownerAddress_not?: InputMaybe; + ownerAddress_in?: InputMaybe>; + ownerAddress_not_in?: InputMaybe>; + ownerAddress_contains?: InputMaybe; + ownerAddress_not_contains?: InputMaybe; + modules?: InputMaybe>; + modules_not?: InputMaybe>; + modules_contains?: InputMaybe>; + modules_contains_nocase?: InputMaybe>; + modules_not_contains?: InputMaybe>; + modules_not_contains_nocase?: InputMaybe>; + isRevocable?: InputMaybe; + isRevocable_not?: InputMaybe; + isRevocable_in?: InputMaybe>; + isRevocable_not_in?: InputMaybe>; + name?: InputMaybe; + name_not?: InputMaybe; + name_gt?: InputMaybe; + name_lt?: InputMaybe; + name_gte?: InputMaybe; + name_lte?: InputMaybe; + name_in?: InputMaybe>; + name_not_in?: InputMaybe>; + name_contains?: InputMaybe; + name_contains_nocase?: InputMaybe; + name_not_contains?: InputMaybe; + name_not_contains_nocase?: InputMaybe; + name_starts_with?: InputMaybe; + name_starts_with_nocase?: InputMaybe; + name_not_starts_with?: InputMaybe; + name_not_starts_with_nocase?: InputMaybe; + name_ends_with?: InputMaybe; + name_ends_with_nocase?: InputMaybe; + name_not_ends_with?: InputMaybe; + name_not_ends_with_nocase?: InputMaybe; + description?: InputMaybe; + description_not?: InputMaybe; + description_gt?: InputMaybe; + description_lt?: InputMaybe; + description_gte?: InputMaybe; + description_lte?: InputMaybe; + description_in?: InputMaybe>; + description_not_in?: InputMaybe>; + description_contains?: InputMaybe; + description_contains_nocase?: InputMaybe; + description_not_contains?: InputMaybe; + description_not_contains_nocase?: InputMaybe; + description_starts_with?: InputMaybe; + description_starts_with_nocase?: InputMaybe; + description_not_starts_with?: InputMaybe; + description_not_starts_with_nocase?: InputMaybe; + description_ends_with?: InputMaybe; + description_ends_with_nocase?: InputMaybe; + description_not_ends_with?: InputMaybe; + description_not_ends_with_nocase?: InputMaybe; + ownerName?: InputMaybe; + ownerName_not?: InputMaybe; + ownerName_gt?: InputMaybe; + ownerName_lt?: InputMaybe; + ownerName_gte?: InputMaybe; + ownerName_lte?: InputMaybe; + ownerName_in?: InputMaybe>; + ownerName_not_in?: InputMaybe>; + ownerName_contains?: InputMaybe; + ownerName_contains_nocase?: InputMaybe; + ownerName_not_contains?: InputMaybe; + ownerName_not_contains_nocase?: InputMaybe; + ownerName_starts_with?: InputMaybe; + ownerName_starts_with_nocase?: InputMaybe; + ownerName_not_starts_with?: InputMaybe; + ownerName_not_starts_with_nocase?: InputMaybe; + ownerName_ends_with?: InputMaybe; + ownerName_ends_with_nocase?: InputMaybe; + ownerName_not_ends_with?: InputMaybe; + ownerName_not_ends_with_nocase?: InputMaybe; + /** Filter for the block changed event. */ + _change_block?: InputMaybe; +}; + +export type Portal_orderBy = + | 'id' + | 'ownerAddress' + | 'modules' + | 'isRevocable' + | 'name' + | 'description' + | 'ownerName'; + +export type Query = { + attestation?: Maybe; + attestations: Array; + module?: Maybe; + modules: Array; + portal?: Maybe; + portals: Array; + schema?: Maybe; + schemas: Array; + counter?: Maybe; + counters: Array; + /** Access to subgraph metadata */ + _meta?: Maybe<_Meta_>; +}; + + +export type QueryattestationArgs = { + id: Scalars['ID']; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; +}; + + +export type QueryattestationsArgs = { + skip?: InputMaybe; + first?: InputMaybe; + orderBy?: InputMaybe; + orderDirection?: InputMaybe; + where?: InputMaybe; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; +}; + + +export type QuerymoduleArgs = { + id: Scalars['ID']; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; +}; + + +export type QuerymodulesArgs = { + skip?: InputMaybe; + first?: InputMaybe; + orderBy?: InputMaybe; + orderDirection?: InputMaybe; + where?: InputMaybe; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; +}; + + +export type QueryportalArgs = { + id: Scalars['ID']; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; +}; + + +export type QueryportalsArgs = { + skip?: InputMaybe; + first?: InputMaybe; + orderBy?: InputMaybe; + orderDirection?: InputMaybe; + where?: InputMaybe; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; +}; + + +export type QueryschemaArgs = { + id: Scalars['ID']; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; +}; + + +export type QueryschemasArgs = { + skip?: InputMaybe; + first?: InputMaybe; + orderBy?: InputMaybe; + orderDirection?: InputMaybe; + where?: InputMaybe; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; +}; + + +export type QuerycounterArgs = { + id: Scalars['ID']; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; +}; + + +export type QuerycountersArgs = { + skip?: InputMaybe; + first?: InputMaybe; + orderBy?: InputMaybe; + orderDirection?: InputMaybe; + where?: InputMaybe; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; +}; + + +export type Query_metaArgs = { + block?: InputMaybe; +}; + +export type Schema = { + id: Scalars['ID']; + name: Scalars['String']; + description: Scalars['String']; + context: Scalars['String']; + schema: Scalars['String']; +}; + +export type Schema_filter = { + id?: InputMaybe; + id_not?: InputMaybe; + id_gt?: InputMaybe; + id_lt?: InputMaybe; + id_gte?: InputMaybe; + id_lte?: InputMaybe; + id_in?: InputMaybe>; + id_not_in?: InputMaybe>; + name?: InputMaybe; + name_not?: InputMaybe; + name_gt?: InputMaybe; + name_lt?: InputMaybe; + name_gte?: InputMaybe; + name_lte?: InputMaybe; + name_in?: InputMaybe>; + name_not_in?: InputMaybe>; + name_contains?: InputMaybe; + name_contains_nocase?: InputMaybe; + name_not_contains?: InputMaybe; + name_not_contains_nocase?: InputMaybe; + name_starts_with?: InputMaybe; + name_starts_with_nocase?: InputMaybe; + name_not_starts_with?: InputMaybe; + name_not_starts_with_nocase?: InputMaybe; + name_ends_with?: InputMaybe; + name_ends_with_nocase?: InputMaybe; + name_not_ends_with?: InputMaybe; + name_not_ends_with_nocase?: InputMaybe; + description?: InputMaybe; + description_not?: InputMaybe; + description_gt?: InputMaybe; + description_lt?: InputMaybe; + description_gte?: InputMaybe; + description_lte?: InputMaybe; + description_in?: InputMaybe>; + description_not_in?: InputMaybe>; + description_contains?: InputMaybe; + description_contains_nocase?: InputMaybe; + description_not_contains?: InputMaybe; + description_not_contains_nocase?: InputMaybe; + description_starts_with?: InputMaybe; + description_starts_with_nocase?: InputMaybe; + description_not_starts_with?: InputMaybe; + description_not_starts_with_nocase?: InputMaybe; + description_ends_with?: InputMaybe; + description_ends_with_nocase?: InputMaybe; + description_not_ends_with?: InputMaybe; + description_not_ends_with_nocase?: InputMaybe; + context?: InputMaybe; + context_not?: InputMaybe; + context_gt?: InputMaybe; + context_lt?: InputMaybe; + context_gte?: InputMaybe; + context_lte?: InputMaybe; + context_in?: InputMaybe>; + context_not_in?: InputMaybe>; + context_contains?: InputMaybe; + context_contains_nocase?: InputMaybe; + context_not_contains?: InputMaybe; + context_not_contains_nocase?: InputMaybe; + context_starts_with?: InputMaybe; + context_starts_with_nocase?: InputMaybe; + context_not_starts_with?: InputMaybe; + context_not_starts_with_nocase?: InputMaybe; + context_ends_with?: InputMaybe; + context_ends_with_nocase?: InputMaybe; + context_not_ends_with?: InputMaybe; + context_not_ends_with_nocase?: InputMaybe; + schema?: InputMaybe; + schema_not?: InputMaybe; + schema_gt?: InputMaybe; + schema_lt?: InputMaybe; + schema_gte?: InputMaybe; + schema_lte?: InputMaybe; + schema_in?: InputMaybe>; + schema_not_in?: InputMaybe>; + schema_contains?: InputMaybe; + schema_contains_nocase?: InputMaybe; + schema_not_contains?: InputMaybe; + schema_not_contains_nocase?: InputMaybe; + schema_starts_with?: InputMaybe; + schema_starts_with_nocase?: InputMaybe; + schema_not_starts_with?: InputMaybe; + schema_not_starts_with_nocase?: InputMaybe; + schema_ends_with?: InputMaybe; + schema_ends_with_nocase?: InputMaybe; + schema_not_ends_with?: InputMaybe; + schema_not_ends_with_nocase?: InputMaybe; + /** Filter for the block changed event. */ + _change_block?: InputMaybe; +}; + +export type Schema_orderBy = + | 'id' + | 'name' + | 'description' + | 'context' + | 'schema'; + +export type Subscription = { + attestation?: Maybe; + attestations: Array; + module?: Maybe; + modules: Array; + portal?: Maybe; + portals: Array; + schema?: Maybe; + schemas: Array; + counter?: Maybe; + counters: Array; + /** Access to subgraph metadata */ + _meta?: Maybe<_Meta_>; +}; + + +export type SubscriptionattestationArgs = { + id: Scalars['ID']; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; +}; + + +export type SubscriptionattestationsArgs = { + skip?: InputMaybe; + first?: InputMaybe; + orderBy?: InputMaybe; + orderDirection?: InputMaybe; + where?: InputMaybe; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; +}; + + +export type SubscriptionmoduleArgs = { + id: Scalars['ID']; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; +}; + + +export type SubscriptionmodulesArgs = { + skip?: InputMaybe; + first?: InputMaybe; + orderBy?: InputMaybe; + orderDirection?: InputMaybe; + where?: InputMaybe; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; +}; + + +export type SubscriptionportalArgs = { + id: Scalars['ID']; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; +}; + + +export type SubscriptionportalsArgs = { + skip?: InputMaybe; + first?: InputMaybe; + orderBy?: InputMaybe; + orderDirection?: InputMaybe; + where?: InputMaybe; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; +}; + + +export type SubscriptionschemaArgs = { + id: Scalars['ID']; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; +}; + + +export type SubscriptionschemasArgs = { + skip?: InputMaybe; + first?: InputMaybe; + orderBy?: InputMaybe; + orderDirection?: InputMaybe; + where?: InputMaybe; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; +}; + + +export type SubscriptioncounterArgs = { + id: Scalars['ID']; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; +}; + + +export type SubscriptioncountersArgs = { + skip?: InputMaybe; + first?: InputMaybe; + orderBy?: InputMaybe; + orderDirection?: InputMaybe; + where?: InputMaybe; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; +}; + + +export type Subscription_metaArgs = { + block?: InputMaybe; +}; + +export type _Block_ = { + /** The hash of the block */ + hash?: Maybe; + /** The block number */ + number: Scalars['Int']; + /** Integer representation of the timestamp stored in blocks for the chain */ + timestamp?: Maybe; +}; + +/** The type for the top-level _meta field */ +export type _Meta_ = { + /** + * Information about a specific subgraph block. The hash of the block + * will be null if the _meta field has a block constraint that asks for + * a block number. It will be filled if the _meta field has no block constraint + * and therefore asks for the latest block + * + */ + block: _Block_; + /** The deployment ID */ + deployment: Scalars['String']; + /** If `true`, the subgraph encountered indexing errors at some past block */ + hasIndexingErrors: Scalars['Boolean']; +}; + +export type _SubgraphErrorPolicy_ = + /** Data will be returned even if the subgraph has indexing errors */ + | 'allow' + /** If the subgraph has indexing errors, data will be omitted. The default. */ + | 'deny'; + +export type WithIndex = TObject & Record; +export type ResolversObject = WithIndex; + +export type ResolverTypeWrapper = Promise | T; + + +export type ResolverWithResolve = { + resolve: ResolverFn; +}; + +export type LegacyStitchingResolver = { + fragment: string; + resolve: ResolverFn; +}; + +export type NewStitchingResolver = { + selectionSet: string | ((fieldNode: FieldNode) => SelectionSetNode); + resolve: ResolverFn; +}; +export type StitchingResolver = LegacyStitchingResolver | NewStitchingResolver; +export type Resolver = + | ResolverFn + | ResolverWithResolve + | StitchingResolver; + +export type ResolverFn = ( + parent: TParent, + args: TArgs, + context: TContext, + info: GraphQLResolveInfo +) => Promise | TResult; + +export type SubscriptionSubscribeFn = ( + parent: TParent, + args: TArgs, + context: TContext, + info: GraphQLResolveInfo +) => AsyncIterable | Promise>; + +export type SubscriptionResolveFn = ( + parent: TParent, + args: TArgs, + context: TContext, + info: GraphQLResolveInfo +) => TResult | Promise; + +export interface SubscriptionSubscriberObject { + subscribe: SubscriptionSubscribeFn<{ [key in TKey]: TResult }, TParent, TContext, TArgs>; + resolve?: SubscriptionResolveFn; +} + +export interface SubscriptionResolverObject { + subscribe: SubscriptionSubscribeFn; + resolve: SubscriptionResolveFn; +} + +export type SubscriptionObject = + | SubscriptionSubscriberObject + | SubscriptionResolverObject; + +export type SubscriptionResolver = + | ((...args: any[]) => SubscriptionObject) + | SubscriptionObject; + +export type TypeResolveFn = ( + parent: TParent, + context: TContext, + info: GraphQLResolveInfo +) => Maybe | Promise>; + +export type IsTypeOfResolverFn = (obj: T, context: TContext, info: GraphQLResolveInfo) => boolean | Promise; + +export type NextResolverFn = () => Promise; + +export type DirectiveResolverFn = ( + next: NextResolverFn, + parent: TParent, + args: TArgs, + context: TContext, + info: GraphQLResolveInfo +) => TResult | Promise; + + + +/** Mapping between all available schema types and the resolvers types */ +export type ResolversTypes = ResolversObject<{ + Attestation: ResolverTypeWrapper; + Attestation_filter: Attestation_filter; + Attestation_orderBy: Attestation_orderBy; + BigDecimal: ResolverTypeWrapper; + BigInt: ResolverTypeWrapper; + BlockChangedFilter: BlockChangedFilter; + Block_height: Block_height; + Boolean: ResolverTypeWrapper; + Bytes: ResolverTypeWrapper; + Counter: ResolverTypeWrapper; + Counter_filter: Counter_filter; + Counter_orderBy: Counter_orderBy; + Float: ResolverTypeWrapper; + ID: ResolverTypeWrapper; + Int: ResolverTypeWrapper; + Module: ResolverTypeWrapper; + Module_filter: Module_filter; + Module_orderBy: Module_orderBy; + OrderDirection: OrderDirection; + Portal: ResolverTypeWrapper; + Portal_filter: Portal_filter; + Portal_orderBy: Portal_orderBy; + Query: ResolverTypeWrapper<{}>; + Schema: ResolverTypeWrapper; + Schema_filter: Schema_filter; + Schema_orderBy: Schema_orderBy; + String: ResolverTypeWrapper; + Subscription: ResolverTypeWrapper<{}>; + _Block_: ResolverTypeWrapper<_Block_>; + _Meta_: ResolverTypeWrapper<_Meta_>; + _SubgraphErrorPolicy_: _SubgraphErrorPolicy_; +}>; + +/** Mapping between all available schema types and the resolvers parents */ +export type ResolversParentTypes = ResolversObject<{ + Attestation: Attestation; + Attestation_filter: Attestation_filter; + BigDecimal: Scalars['BigDecimal']; + BigInt: Scalars['BigInt']; + BlockChangedFilter: BlockChangedFilter; + Block_height: Block_height; + Boolean: Scalars['Boolean']; + Bytes: Scalars['Bytes']; + Counter: Counter; + Counter_filter: Counter_filter; + Float: Scalars['Float']; + ID: Scalars['ID']; + Int: Scalars['Int']; + Module: Module; + Module_filter: Module_filter; + Portal: Portal; + Portal_filter: Portal_filter; + Query: {}; + Schema: Schema; + Schema_filter: Schema_filter; + String: Scalars['String']; + Subscription: {}; + _Block_: _Block_; + _Meta_: _Meta_; +}>; + +export type entityDirectiveArgs = { }; + +export type entityDirectiveResolver = DirectiveResolverFn; + +export type subgraphIdDirectiveArgs = { + id: Scalars['String']; +}; + +export type subgraphIdDirectiveResolver = DirectiveResolverFn; + +export type derivedFromDirectiveArgs = { + field: Scalars['String']; +}; + +export type derivedFromDirectiveResolver = DirectiveResolverFn; + +export type AttestationResolvers = ResolversObject<{ + id?: Resolver; + schemaId?: Resolver; + replacedBy?: Resolver; + attester?: Resolver; + portal?: Resolver; + attestedDate?: Resolver; + expirationDate?: Resolver; + revocationDate?: Resolver; + version?: Resolver; + revoked?: Resolver; + subject?: Resolver; + attestationData?: Resolver; + schemaString?: Resolver, ParentType, ContextType>; + decodedData?: Resolver>, ParentType, ContextType>; + __isTypeOf?: IsTypeOfResolverFn; +}>; + +export interface BigDecimalScalarConfig extends GraphQLScalarTypeConfig { + name: 'BigDecimal'; +} + +export interface BigIntScalarConfig extends GraphQLScalarTypeConfig { + name: 'BigInt'; +} + +export interface BytesScalarConfig extends GraphQLScalarTypeConfig { + name: 'Bytes'; +} + +export type CounterResolvers = ResolversObject<{ + id?: Resolver; + attestations?: Resolver, ParentType, ContextType>; + modules?: Resolver, ParentType, ContextType>; + portals?: Resolver, ParentType, ContextType>; + schemas?: Resolver, ParentType, ContextType>; + __isTypeOf?: IsTypeOfResolverFn; +}>; + +export type ModuleResolvers = ResolversObject<{ + id?: Resolver; + moduleAddress?: Resolver; + name?: Resolver; + description?: Resolver; + __isTypeOf?: IsTypeOfResolverFn; +}>; + +export type PortalResolvers = ResolversObject<{ + id?: Resolver; + ownerAddress?: Resolver; + modules?: Resolver>, ParentType, ContextType>; + isRevocable?: Resolver; + name?: Resolver; + description?: Resolver; + ownerName?: Resolver; + __isTypeOf?: IsTypeOfResolverFn; +}>; + +export type QueryResolvers = ResolversObject<{ + attestation?: Resolver, ParentType, ContextType, RequireFields>; + attestations?: Resolver, ParentType, ContextType, RequireFields>; + module?: Resolver, ParentType, ContextType, RequireFields>; + modules?: Resolver, ParentType, ContextType, RequireFields>; + portal?: Resolver, ParentType, ContextType, RequireFields>; + portals?: Resolver, ParentType, ContextType, RequireFields>; + schema?: Resolver, ParentType, ContextType, RequireFields>; + schemas?: Resolver, ParentType, ContextType, RequireFields>; + counter?: Resolver, ParentType, ContextType, RequireFields>; + counters?: Resolver, ParentType, ContextType, RequireFields>; + _meta?: Resolver, ParentType, ContextType, Partial>; +}>; + +export type SchemaResolvers = ResolversObject<{ + id?: Resolver; + name?: Resolver; + description?: Resolver; + context?: Resolver; + schema?: Resolver; + __isTypeOf?: IsTypeOfResolverFn; +}>; + +export type SubscriptionResolvers = ResolversObject<{ + attestation?: SubscriptionResolver, "attestation", ParentType, ContextType, RequireFields>; + attestations?: SubscriptionResolver, "attestations", ParentType, ContextType, RequireFields>; + module?: SubscriptionResolver, "module", ParentType, ContextType, RequireFields>; + modules?: SubscriptionResolver, "modules", ParentType, ContextType, RequireFields>; + portal?: SubscriptionResolver, "portal", ParentType, ContextType, RequireFields>; + portals?: SubscriptionResolver, "portals", ParentType, ContextType, RequireFields>; + schema?: SubscriptionResolver, "schema", ParentType, ContextType, RequireFields>; + schemas?: SubscriptionResolver, "schemas", ParentType, ContextType, RequireFields>; + counter?: SubscriptionResolver, "counter", ParentType, ContextType, RequireFields>; + counters?: SubscriptionResolver, "counters", ParentType, ContextType, RequireFields>; + _meta?: SubscriptionResolver, "_meta", ParentType, ContextType, Partial>; +}>; + +export type _Block_Resolvers = ResolversObject<{ + hash?: Resolver, ParentType, ContextType>; + number?: Resolver; + timestamp?: Resolver, ParentType, ContextType>; + __isTypeOf?: IsTypeOfResolverFn; +}>; + +export type _Meta_Resolvers = ResolversObject<{ + block?: Resolver; + deployment?: Resolver; + hasIndexingErrors?: Resolver; + __isTypeOf?: IsTypeOfResolverFn; +}>; + +export type Resolvers = ResolversObject<{ + Attestation?: AttestationResolvers; + BigDecimal?: GraphQLScalarType; + BigInt?: GraphQLScalarType; + Bytes?: GraphQLScalarType; + Counter?: CounterResolvers; + Module?: ModuleResolvers; + Portal?: PortalResolvers; + Query?: QueryResolvers; + Schema?: SchemaResolvers; + Subscription?: SubscriptionResolvers; + _Block_?: _Block_Resolvers; + _Meta_?: _Meta_Resolvers; +}>; + +export type DirectiveResolvers = ResolversObject<{ + entity?: entityDirectiveResolver; + subgraphId?: subgraphIdDirectiveResolver; + derivedFrom?: derivedFromDirectiveResolver; +}>; + +export type MeshContext = LineaAttestationRegistryTypes.Context & BaseMeshContext; + + +import { fileURLToPath } from '@graphql-mesh/utils'; +const baseDir = pathModule.join(pathModule.dirname(fileURLToPath(import.meta.url)), '..'); + +const importFn: ImportFn = (moduleId: string) => { + const relativeModuleId = (pathModule.isAbsolute(moduleId) ? pathModule.relative(baseDir, moduleId) : moduleId).split('\\').join('/').replace(baseDir + '/', ''); + switch(relativeModuleId) { + case ".graphclient/sources/linea-attestation-registry/introspectionSchema": + return Promise.resolve(importedModule$0) as T; + + default: + return Promise.reject(new Error(`Cannot find module '${relativeModuleId}'.`)); + } +}; + +const rootStore = new MeshStore('.graphclient', new FsStoreStorageAdapter({ + cwd: baseDir, + importFn, + fileType: "ts", +}), { + readonly: true, + validate: false +}); + +export const rawServeConfig: YamlConfig.Config['serve'] = undefined as any +export async function getMeshOptions(): Promise { +const pubsub = new PubSub(); +const sourcesStore = rootStore.child('sources'); +const logger = new DefaultLogger("GraphClient"); +const cache = new (MeshCache as any)({ + ...({} as any), + importFn, + store: rootStore.child('cache'), + pubsub, + logger, + } as any) + +const sources: MeshResolvedSource[] = []; +const transforms: MeshTransform[] = []; +const additionalEnvelopPlugins: MeshPlugin[] = []; +const lineaAttestationRegistryTransforms = []; +const additionalTypeDefs = [] as any[]; +const lineaAttestationRegistryHandler = new GraphqlHandler({ + name: "linea-attestation-registry", + config: {"endpoint":"https://graph-query.linea.build/subgraphs/name/Consensys/linea-attestation-registry"}, + baseDir, + cache, + pubsub, + store: sourcesStore.child("linea-attestation-registry"), + logger: logger.child("linea-attestation-registry"), + importFn, + }); +sources[0] = { + name: 'linea-attestation-registry', + handler: lineaAttestationRegistryHandler, + transforms: lineaAttestationRegistryTransforms + } +const additionalResolvers = [] as any[] +const merger = new(BareMerger as any)({ + cache, + pubsub, + logger: logger.child('bareMerger'), + store: rootStore.child('bareMerger') + }) + + return { + sources, + transforms, + additionalTypeDefs, + additionalResolvers, + cache, + pubsub, + merger, + logger, + additionalEnvelopPlugins, + get documents() { + return [ + + ]; + }, + fetchFn, + }; +} + +export function createBuiltMeshHTTPHandler(): MeshHTTPHandler { + return createMeshHTTPHandler({ + baseDir, + getBuiltMesh: getBuiltGraphClient, + rawServeConfig: undefined, + }) +} + + +let meshInstance$: Promise | undefined; + +export function getBuiltGraphClient(): Promise { + if (meshInstance$ == null) { + meshInstance$ = getMeshOptions().then(meshOptions => getMesh(meshOptions)).then(mesh => { + const id = mesh.pubsub.subscribe('destroy', () => { + meshInstance$ = undefined; + mesh.pubsub.unsubscribe(id); + }); + return mesh; + }); + } + return meshInstance$; +} + +export const execute: ExecuteMeshFn = (...args) => getBuiltGraphClient().then(({ execute }) => execute(...args)); + +export const subscribe: SubscribeMeshFn = (...args) => getBuiltGraphClient().then(({ subscribe }) => subscribe(...args)); \ No newline at end of file diff --git a/sdk/.graphclient/schema.graphql b/sdk/.graphclient/schema.graphql new file mode 100644 index 00000000..dfa1db65 --- /dev/null +++ b/sdk/.graphclient/schema.graphql @@ -0,0 +1,836 @@ +schema { + query: Query + subscription: Subscription +} + +"Marks the GraphQL type as indexable entity. Each type that should be an entity is required to be annotated with this directive." +directive @entity on OBJECT + +"Defined a Subgraph ID for an object type" +directive @subgraphId(id: String!) on OBJECT + +"creates a virtual field on the entity that may be queried but cannot be set manually through the mappings API." +directive @derivedFrom(field: String!) on FIELD_DEFINITION + +type Attestation { + id: ID! + schemaId: Bytes! + replacedBy: Bytes! + attester: Bytes! + portal: Bytes! + attestedDate: BigInt! + expirationDate: BigInt! + revocationDate: BigInt! + version: BigInt! + revoked: Boolean! + subject: Bytes! + attestationData: Bytes! + schemaString: String + decodedData: [String!] +} + +input Attestation_filter { + id: ID + id_not: ID + id_gt: ID + id_lt: ID + id_gte: ID + id_lte: ID + id_in: [ID!] + id_not_in: [ID!] + schemaId: Bytes + schemaId_not: Bytes + schemaId_in: [Bytes!] + schemaId_not_in: [Bytes!] + schemaId_contains: Bytes + schemaId_not_contains: Bytes + replacedBy: Bytes + replacedBy_not: Bytes + replacedBy_in: [Bytes!] + replacedBy_not_in: [Bytes!] + replacedBy_contains: Bytes + replacedBy_not_contains: Bytes + attester: Bytes + attester_not: Bytes + attester_in: [Bytes!] + attester_not_in: [Bytes!] + attester_contains: Bytes + attester_not_contains: Bytes + portal: Bytes + portal_not: Bytes + portal_in: [Bytes!] + portal_not_in: [Bytes!] + portal_contains: Bytes + portal_not_contains: Bytes + attestedDate: BigInt + attestedDate_not: BigInt + attestedDate_gt: BigInt + attestedDate_lt: BigInt + attestedDate_gte: BigInt + attestedDate_lte: BigInt + attestedDate_in: [BigInt!] + attestedDate_not_in: [BigInt!] + expirationDate: BigInt + expirationDate_not: BigInt + expirationDate_gt: BigInt + expirationDate_lt: BigInt + expirationDate_gte: BigInt + expirationDate_lte: BigInt + expirationDate_in: [BigInt!] + expirationDate_not_in: [BigInt!] + revocationDate: BigInt + revocationDate_not: BigInt + revocationDate_gt: BigInt + revocationDate_lt: BigInt + revocationDate_gte: BigInt + revocationDate_lte: BigInt + revocationDate_in: [BigInt!] + revocationDate_not_in: [BigInt!] + version: BigInt + version_not: BigInt + version_gt: BigInt + version_lt: BigInt + version_gte: BigInt + version_lte: BigInt + version_in: [BigInt!] + version_not_in: [BigInt!] + revoked: Boolean + revoked_not: Boolean + revoked_in: [Boolean!] + revoked_not_in: [Boolean!] + subject: Bytes + subject_not: Bytes + subject_in: [Bytes!] + subject_not_in: [Bytes!] + subject_contains: Bytes + subject_not_contains: Bytes + attestationData: Bytes + attestationData_not: Bytes + attestationData_in: [Bytes!] + attestationData_not_in: [Bytes!] + attestationData_contains: Bytes + attestationData_not_contains: Bytes + schemaString: String + schemaString_not: String + schemaString_gt: String + schemaString_lt: String + schemaString_gte: String + schemaString_lte: String + schemaString_in: [String!] + schemaString_not_in: [String!] + schemaString_contains: String + schemaString_contains_nocase: String + schemaString_not_contains: String + schemaString_not_contains_nocase: String + schemaString_starts_with: String + schemaString_starts_with_nocase: String + schemaString_not_starts_with: String + schemaString_not_starts_with_nocase: String + schemaString_ends_with: String + schemaString_ends_with_nocase: String + schemaString_not_ends_with: String + schemaString_not_ends_with_nocase: String + decodedData: [String!] + decodedData_not: [String!] + decodedData_contains: [String!] + decodedData_contains_nocase: [String!] + decodedData_not_contains: [String!] + decodedData_not_contains_nocase: [String!] + """Filter for the block changed event.""" + _change_block: BlockChangedFilter +} + +enum Attestation_orderBy { + id + schemaId + replacedBy + attester + portal + attestedDate + expirationDate + revocationDate + version + revoked + subject + attestationData + schemaString + decodedData +} + +scalar BigDecimal + +scalar BigInt + +input BlockChangedFilter { + number_gte: Int! +} + +input Block_height { + hash: Bytes + number: Int + number_gte: Int +} + +scalar Bytes + +type Counter { + id: ID! + attestations: Int + modules: Int + portals: Int + schemas: Int +} + +input Counter_filter { + id: ID + id_not: ID + id_gt: ID + id_lt: ID + id_gte: ID + id_lte: ID + id_in: [ID!] + id_not_in: [ID!] + attestations: Int + attestations_not: Int + attestations_gt: Int + attestations_lt: Int + attestations_gte: Int + attestations_lte: Int + attestations_in: [Int!] + attestations_not_in: [Int!] + modules: Int + modules_not: Int + modules_gt: Int + modules_lt: Int + modules_gte: Int + modules_lte: Int + modules_in: [Int!] + modules_not_in: [Int!] + portals: Int + portals_not: Int + portals_gt: Int + portals_lt: Int + portals_gte: Int + portals_lte: Int + portals_in: [Int!] + portals_not_in: [Int!] + schemas: Int + schemas_not: Int + schemas_gt: Int + schemas_lt: Int + schemas_gte: Int + schemas_lte: Int + schemas_in: [Int!] + schemas_not_in: [Int!] + """Filter for the block changed event.""" + _change_block: BlockChangedFilter +} + +enum Counter_orderBy { + id + attestations + modules + portals + schemas +} + +type Module { + id: ID! + moduleAddress: Bytes! + name: String! + description: String! +} + +input Module_filter { + id: ID + id_not: ID + id_gt: ID + id_lt: ID + id_gte: ID + id_lte: ID + id_in: [ID!] + id_not_in: [ID!] + moduleAddress: Bytes + moduleAddress_not: Bytes + moduleAddress_in: [Bytes!] + moduleAddress_not_in: [Bytes!] + moduleAddress_contains: Bytes + moduleAddress_not_contains: Bytes + name: String + name_not: String + name_gt: String + name_lt: String + name_gte: String + name_lte: String + name_in: [String!] + name_not_in: [String!] + name_contains: String + name_contains_nocase: String + name_not_contains: String + name_not_contains_nocase: String + name_starts_with: String + name_starts_with_nocase: String + name_not_starts_with: String + name_not_starts_with_nocase: String + name_ends_with: String + name_ends_with_nocase: String + name_not_ends_with: String + name_not_ends_with_nocase: String + description: String + description_not: String + description_gt: String + description_lt: String + description_gte: String + description_lte: String + description_in: [String!] + description_not_in: [String!] + description_contains: String + description_contains_nocase: String + description_not_contains: String + description_not_contains_nocase: String + description_starts_with: String + description_starts_with_nocase: String + description_not_starts_with: String + description_not_starts_with_nocase: String + description_ends_with: String + description_ends_with_nocase: String + description_not_ends_with: String + description_not_ends_with_nocase: String + """Filter for the block changed event.""" + _change_block: BlockChangedFilter +} + +enum Module_orderBy { + id + moduleAddress + name + description +} + +"""Defines the order direction, either ascending or descending""" +enum OrderDirection { + asc + desc +} + +type Portal { + id: ID! + ownerAddress: Bytes! + modules: [Bytes!] + isRevocable: Boolean! + name: String! + description: String! + ownerName: String! +} + +input Portal_filter { + id: ID + id_not: ID + id_gt: ID + id_lt: ID + id_gte: ID + id_lte: ID + id_in: [ID!] + id_not_in: [ID!] + ownerAddress: Bytes + ownerAddress_not: Bytes + ownerAddress_in: [Bytes!] + ownerAddress_not_in: [Bytes!] + ownerAddress_contains: Bytes + ownerAddress_not_contains: Bytes + modules: [Bytes!] + modules_not: [Bytes!] + modules_contains: [Bytes!] + modules_contains_nocase: [Bytes!] + modules_not_contains: [Bytes!] + modules_not_contains_nocase: [Bytes!] + isRevocable: Boolean + isRevocable_not: Boolean + isRevocable_in: [Boolean!] + isRevocable_not_in: [Boolean!] + name: String + name_not: String + name_gt: String + name_lt: String + name_gte: String + name_lte: String + name_in: [String!] + name_not_in: [String!] + name_contains: String + name_contains_nocase: String + name_not_contains: String + name_not_contains_nocase: String + name_starts_with: String + name_starts_with_nocase: String + name_not_starts_with: String + name_not_starts_with_nocase: String + name_ends_with: String + name_ends_with_nocase: String + name_not_ends_with: String + name_not_ends_with_nocase: String + description: String + description_not: String + description_gt: String + description_lt: String + description_gte: String + description_lte: String + description_in: [String!] + description_not_in: [String!] + description_contains: String + description_contains_nocase: String + description_not_contains: String + description_not_contains_nocase: String + description_starts_with: String + description_starts_with_nocase: String + description_not_starts_with: String + description_not_starts_with_nocase: String + description_ends_with: String + description_ends_with_nocase: String + description_not_ends_with: String + description_not_ends_with_nocase: String + ownerName: String + ownerName_not: String + ownerName_gt: String + ownerName_lt: String + ownerName_gte: String + ownerName_lte: String + ownerName_in: [String!] + ownerName_not_in: [String!] + ownerName_contains: String + ownerName_contains_nocase: String + ownerName_not_contains: String + ownerName_not_contains_nocase: String + ownerName_starts_with: String + ownerName_starts_with_nocase: String + ownerName_not_starts_with: String + ownerName_not_starts_with_nocase: String + ownerName_ends_with: String + ownerName_ends_with_nocase: String + ownerName_not_ends_with: String + ownerName_not_ends_with_nocase: String + """Filter for the block changed event.""" + _change_block: BlockChangedFilter +} + +enum Portal_orderBy { + id + ownerAddress + modules + isRevocable + name + description + ownerName +} + +type Query { + attestation( + id: ID! + """ + The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted. + """ + block: Block_height + """ + Set to `allow` to receive data even if the subgraph has skipped over errors while syncing. + """ + subgraphError: _SubgraphErrorPolicy_! = deny + ): Attestation + attestations( + skip: Int = 0 + first: Int = 100 + orderBy: Attestation_orderBy + orderDirection: OrderDirection + where: Attestation_filter + """ + The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted. + """ + block: Block_height + """ + Set to `allow` to receive data even if the subgraph has skipped over errors while syncing. + """ + subgraphError: _SubgraphErrorPolicy_! = deny + ): [Attestation!]! + module( + id: ID! + """ + The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted. + """ + block: Block_height + """ + Set to `allow` to receive data even if the subgraph has skipped over errors while syncing. + """ + subgraphError: _SubgraphErrorPolicy_! = deny + ): Module + modules( + skip: Int = 0 + first: Int = 100 + orderBy: Module_orderBy + orderDirection: OrderDirection + where: Module_filter + """ + The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted. + """ + block: Block_height + """ + Set to `allow` to receive data even if the subgraph has skipped over errors while syncing. + """ + subgraphError: _SubgraphErrorPolicy_! = deny + ): [Module!]! + portal( + id: ID! + """ + The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted. + """ + block: Block_height + """ + Set to `allow` to receive data even if the subgraph has skipped over errors while syncing. + """ + subgraphError: _SubgraphErrorPolicy_! = deny + ): Portal + portals( + skip: Int = 0 + first: Int = 100 + orderBy: Portal_orderBy + orderDirection: OrderDirection + where: Portal_filter + """ + The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted. + """ + block: Block_height + """ + Set to `allow` to receive data even if the subgraph has skipped over errors while syncing. + """ + subgraphError: _SubgraphErrorPolicy_! = deny + ): [Portal!]! + schema( + id: ID! + """ + The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted. + """ + block: Block_height + """ + Set to `allow` to receive data even if the subgraph has skipped over errors while syncing. + """ + subgraphError: _SubgraphErrorPolicy_! = deny + ): Schema + schemas( + skip: Int = 0 + first: Int = 100 + orderBy: Schema_orderBy + orderDirection: OrderDirection + where: Schema_filter + """ + The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted. + """ + block: Block_height + """ + Set to `allow` to receive data even if the subgraph has skipped over errors while syncing. + """ + subgraphError: _SubgraphErrorPolicy_! = deny + ): [Schema!]! + counter( + id: ID! + """ + The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted. + """ + block: Block_height + """ + Set to `allow` to receive data even if the subgraph has skipped over errors while syncing. + """ + subgraphError: _SubgraphErrorPolicy_! = deny + ): Counter + counters( + skip: Int = 0 + first: Int = 100 + orderBy: Counter_orderBy + orderDirection: OrderDirection + where: Counter_filter + """ + The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted. + """ + block: Block_height + """ + Set to `allow` to receive data even if the subgraph has skipped over errors while syncing. + """ + subgraphError: _SubgraphErrorPolicy_! = deny + ): [Counter!]! + """Access to subgraph metadata""" + _meta(block: Block_height): _Meta_ +} + +type Schema { + id: ID! + name: String! + description: String! + context: String! + schema: String! +} + +input Schema_filter { + id: ID + id_not: ID + id_gt: ID + id_lt: ID + id_gte: ID + id_lte: ID + id_in: [ID!] + id_not_in: [ID!] + name: String + name_not: String + name_gt: String + name_lt: String + name_gte: String + name_lte: String + name_in: [String!] + name_not_in: [String!] + name_contains: String + name_contains_nocase: String + name_not_contains: String + name_not_contains_nocase: String + name_starts_with: String + name_starts_with_nocase: String + name_not_starts_with: String + name_not_starts_with_nocase: String + name_ends_with: String + name_ends_with_nocase: String + name_not_ends_with: String + name_not_ends_with_nocase: String + description: String + description_not: String + description_gt: String + description_lt: String + description_gte: String + description_lte: String + description_in: [String!] + description_not_in: [String!] + description_contains: String + description_contains_nocase: String + description_not_contains: String + description_not_contains_nocase: String + description_starts_with: String + description_starts_with_nocase: String + description_not_starts_with: String + description_not_starts_with_nocase: String + description_ends_with: String + description_ends_with_nocase: String + description_not_ends_with: String + description_not_ends_with_nocase: String + context: String + context_not: String + context_gt: String + context_lt: String + context_gte: String + context_lte: String + context_in: [String!] + context_not_in: [String!] + context_contains: String + context_contains_nocase: String + context_not_contains: String + context_not_contains_nocase: String + context_starts_with: String + context_starts_with_nocase: String + context_not_starts_with: String + context_not_starts_with_nocase: String + context_ends_with: String + context_ends_with_nocase: String + context_not_ends_with: String + context_not_ends_with_nocase: String + schema: String + schema_not: String + schema_gt: String + schema_lt: String + schema_gte: String + schema_lte: String + schema_in: [String!] + schema_not_in: [String!] + schema_contains: String + schema_contains_nocase: String + schema_not_contains: String + schema_not_contains_nocase: String + schema_starts_with: String + schema_starts_with_nocase: String + schema_not_starts_with: String + schema_not_starts_with_nocase: String + schema_ends_with: String + schema_ends_with_nocase: String + schema_not_ends_with: String + schema_not_ends_with_nocase: String + """Filter for the block changed event.""" + _change_block: BlockChangedFilter +} + +enum Schema_orderBy { + id + name + description + context + schema +} + +type Subscription { + attestation( + id: ID! + """ + The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted. + """ + block: Block_height + """ + Set to `allow` to receive data even if the subgraph has skipped over errors while syncing. + """ + subgraphError: _SubgraphErrorPolicy_! = deny + ): Attestation + attestations( + skip: Int = 0 + first: Int = 100 + orderBy: Attestation_orderBy + orderDirection: OrderDirection + where: Attestation_filter + """ + The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted. + """ + block: Block_height + """ + Set to `allow` to receive data even if the subgraph has skipped over errors while syncing. + """ + subgraphError: _SubgraphErrorPolicy_! = deny + ): [Attestation!]! + module( + id: ID! + """ + The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted. + """ + block: Block_height + """ + Set to `allow` to receive data even if the subgraph has skipped over errors while syncing. + """ + subgraphError: _SubgraphErrorPolicy_! = deny + ): Module + modules( + skip: Int = 0 + first: Int = 100 + orderBy: Module_orderBy + orderDirection: OrderDirection + where: Module_filter + """ + The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted. + """ + block: Block_height + """ + Set to `allow` to receive data even if the subgraph has skipped over errors while syncing. + """ + subgraphError: _SubgraphErrorPolicy_! = deny + ): [Module!]! + portal( + id: ID! + """ + The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted. + """ + block: Block_height + """ + Set to `allow` to receive data even if the subgraph has skipped over errors while syncing. + """ + subgraphError: _SubgraphErrorPolicy_! = deny + ): Portal + portals( + skip: Int = 0 + first: Int = 100 + orderBy: Portal_orderBy + orderDirection: OrderDirection + where: Portal_filter + """ + The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted. + """ + block: Block_height + """ + Set to `allow` to receive data even if the subgraph has skipped over errors while syncing. + """ + subgraphError: _SubgraphErrorPolicy_! = deny + ): [Portal!]! + schema( + id: ID! + """ + The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted. + """ + block: Block_height + """ + Set to `allow` to receive data even if the subgraph has skipped over errors while syncing. + """ + subgraphError: _SubgraphErrorPolicy_! = deny + ): Schema + schemas( + skip: Int = 0 + first: Int = 100 + orderBy: Schema_orderBy + orderDirection: OrderDirection + where: Schema_filter + """ + The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted. + """ + block: Block_height + """ + Set to `allow` to receive data even if the subgraph has skipped over errors while syncing. + """ + subgraphError: _SubgraphErrorPolicy_! = deny + ): [Schema!]! + counter( + id: ID! + """ + The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted. + """ + block: Block_height + """ + Set to `allow` to receive data even if the subgraph has skipped over errors while syncing. + """ + subgraphError: _SubgraphErrorPolicy_! = deny + ): Counter + counters( + skip: Int = 0 + first: Int = 100 + orderBy: Counter_orderBy + orderDirection: OrderDirection + where: Counter_filter + """ + The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted. + """ + block: Block_height + """ + Set to `allow` to receive data even if the subgraph has skipped over errors while syncing. + """ + subgraphError: _SubgraphErrorPolicy_! = deny + ): [Counter!]! + """Access to subgraph metadata""" + _meta(block: Block_height): _Meta_ +} + +type _Block_ { + """The hash of the block""" + hash: Bytes + """The block number""" + number: Int! + """Integer representation of the timestamp stored in blocks for the chain""" + timestamp: Int +} + +"""The type for the top-level _meta field""" +type _Meta_ { + """ + Information about a specific subgraph block. The hash of the block + will be null if the _meta field has a block constraint that asks for + a block number. It will be filled if the _meta field has no block constraint + and therefore asks for the latest block + + """ + block: _Block_! + """The deployment ID""" + deployment: String! + """If `true`, the subgraph encountered indexing errors at some past block""" + hasIndexingErrors: Boolean! +} + +enum _SubgraphErrorPolicy_ { + """Data will be returned even if the subgraph has indexing errors""" + allow + """ + If the subgraph has indexing errors, data will be omitted. The default. + """ + deny +} \ No newline at end of file diff --git a/sdk/.graphclient/sources/linea-attestation-registry/introspectionSchema.ts b/sdk/.graphclient/sources/linea-attestation-registry/introspectionSchema.ts new file mode 100644 index 00000000..9c52dafa --- /dev/null +++ b/sdk/.graphclient/sources/linea-attestation-registry/introspectionSchema.ts @@ -0,0 +1,10190 @@ +// @ts-nocheck +import { buildASTSchema } from 'graphql'; + +const schemaAST = { + "kind": "Document", + "definitions": [ + { + "kind": "SchemaDefinition", + "operationTypes": [ + { + "kind": "OperationTypeDefinition", + "operation": "query", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Query" + } + } + }, + { + "kind": "OperationTypeDefinition", + "operation": "subscription", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Subscription" + } + } + } + ], + "directives": [] + }, + { + "kind": "DirectiveDefinition", + "description": { + "kind": "StringValue", + "value": "Marks the GraphQL type as indexable entity. Each type that should be an entity is required to be annotated with this directive." + }, + "name": { + "kind": "Name", + "value": "entity" + }, + "arguments": [], + "repeatable": false, + "locations": [ + { + "kind": "Name", + "value": "OBJECT" + } + ] + }, + { + "kind": "DirectiveDefinition", + "description": { + "kind": "StringValue", + "value": "Defined a Subgraph ID for an object type" + }, + "name": { + "kind": "Name", + "value": "subgraphId" + }, + "arguments": [ + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "id" + }, + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + } + }, + "directives": [] + } + ], + "repeatable": false, + "locations": [ + { + "kind": "Name", + "value": "OBJECT" + } + ] + }, + { + "kind": "DirectiveDefinition", + "description": { + "kind": "StringValue", + "value": "creates a virtual field on the entity that may be queried but cannot be set manually through the mappings API." + }, + "name": { + "kind": "Name", + "value": "derivedFrom" + }, + "arguments": [ + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "field" + }, + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + } + }, + "directives": [] + } + ], + "repeatable": false, + "locations": [ + { + "kind": "Name", + "value": "FIELD_DEFINITION" + } + ] + }, + { + "kind": "ObjectTypeDefinition", + "name": { + "kind": "Name", + "value": "Attestation" + }, + "fields": [ + { + "kind": "FieldDefinition", + "name": { + "kind": "Name", + "value": "id" + }, + "arguments": [], + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "ID" + } + } + }, + "directives": [] + }, + { + "kind": "FieldDefinition", + "name": { + "kind": "Name", + "value": "schemaId" + }, + "arguments": [], + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Bytes" + } + } + }, + "directives": [] + }, + { + "kind": "FieldDefinition", + "name": { + "kind": "Name", + "value": "replacedBy" + }, + "arguments": [], + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Bytes" + } + } + }, + "directives": [] + }, + { + "kind": "FieldDefinition", + "name": { + "kind": "Name", + "value": "attester" + }, + "arguments": [], + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Bytes" + } + } + }, + "directives": [] + }, + { + "kind": "FieldDefinition", + "name": { + "kind": "Name", + "value": "portal" + }, + "arguments": [], + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Bytes" + } + } + }, + "directives": [] + }, + { + "kind": "FieldDefinition", + "name": { + "kind": "Name", + "value": "attestedDate" + }, + "arguments": [], + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "BigInt" + } + } + }, + "directives": [] + }, + { + "kind": "FieldDefinition", + "name": { + "kind": "Name", + "value": "expirationDate" + }, + "arguments": [], + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "BigInt" + } + } + }, + "directives": [] + }, + { + "kind": "FieldDefinition", + "name": { + "kind": "Name", + "value": "revocationDate" + }, + "arguments": [], + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "BigInt" + } + } + }, + "directives": [] + }, + { + "kind": "FieldDefinition", + "name": { + "kind": "Name", + "value": "version" + }, + "arguments": [], + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "BigInt" + } + } + }, + "directives": [] + }, + { + "kind": "FieldDefinition", + "name": { + "kind": "Name", + "value": "revoked" + }, + "arguments": [], + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Boolean" + } + } + }, + "directives": [] + }, + { + "kind": "FieldDefinition", + "name": { + "kind": "Name", + "value": "subject" + }, + "arguments": [], + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Bytes" + } + } + }, + "directives": [] + }, + { + "kind": "FieldDefinition", + "name": { + "kind": "Name", + "value": "attestationData" + }, + "arguments": [], + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Bytes" + } + } + }, + "directives": [] + }, + { + "kind": "FieldDefinition", + "name": { + "kind": "Name", + "value": "schemaString" + }, + "arguments": [], + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "FieldDefinition", + "name": { + "kind": "Name", + "value": "decodedData" + }, + "arguments": [], + "type": { + "kind": "ListType", + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + } + } + }, + "directives": [] + } + ], + "interfaces": [], + "directives": [] + }, + { + "kind": "InputObjectTypeDefinition", + "name": { + "kind": "Name", + "value": "Attestation_filter" + }, + "fields": [ + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "id" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "ID" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "id_not" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "ID" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "id_gt" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "ID" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "id_lt" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "ID" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "id_gte" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "ID" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "id_lte" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "ID" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "id_in" + }, + "type": { + "kind": "ListType", + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "ID" + } + } + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "id_not_in" + }, + "type": { + "kind": "ListType", + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "ID" + } + } + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "schemaId" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Bytes" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "schemaId_not" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Bytes" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "schemaId_in" + }, + "type": { + "kind": "ListType", + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Bytes" + } + } + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "schemaId_not_in" + }, + "type": { + "kind": "ListType", + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Bytes" + } + } + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "schemaId_contains" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Bytes" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "schemaId_not_contains" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Bytes" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "replacedBy" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Bytes" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "replacedBy_not" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Bytes" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "replacedBy_in" + }, + "type": { + "kind": "ListType", + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Bytes" + } + } + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "replacedBy_not_in" + }, + "type": { + "kind": "ListType", + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Bytes" + } + } + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "replacedBy_contains" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Bytes" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "replacedBy_not_contains" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Bytes" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "attester" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Bytes" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "attester_not" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Bytes" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "attester_in" + }, + "type": { + "kind": "ListType", + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Bytes" + } + } + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "attester_not_in" + }, + "type": { + "kind": "ListType", + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Bytes" + } + } + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "attester_contains" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Bytes" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "attester_not_contains" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Bytes" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "portal" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Bytes" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "portal_not" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Bytes" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "portal_in" + }, + "type": { + "kind": "ListType", + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Bytes" + } + } + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "portal_not_in" + }, + "type": { + "kind": "ListType", + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Bytes" + } + } + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "portal_contains" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Bytes" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "portal_not_contains" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Bytes" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "attestedDate" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "BigInt" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "attestedDate_not" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "BigInt" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "attestedDate_gt" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "BigInt" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "attestedDate_lt" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "BigInt" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "attestedDate_gte" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "BigInt" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "attestedDate_lte" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "BigInt" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "attestedDate_in" + }, + "type": { + "kind": "ListType", + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "BigInt" + } + } + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "attestedDate_not_in" + }, + "type": { + "kind": "ListType", + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "BigInt" + } + } + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "expirationDate" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "BigInt" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "expirationDate_not" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "BigInt" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "expirationDate_gt" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "BigInt" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "expirationDate_lt" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "BigInt" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "expirationDate_gte" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "BigInt" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "expirationDate_lte" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "BigInt" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "expirationDate_in" + }, + "type": { + "kind": "ListType", + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "BigInt" + } + } + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "expirationDate_not_in" + }, + "type": { + "kind": "ListType", + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "BigInt" + } + } + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "revocationDate" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "BigInt" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "revocationDate_not" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "BigInt" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "revocationDate_gt" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "BigInt" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "revocationDate_lt" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "BigInt" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "revocationDate_gte" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "BigInt" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "revocationDate_lte" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "BigInt" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "revocationDate_in" + }, + "type": { + "kind": "ListType", + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "BigInt" + } + } + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "revocationDate_not_in" + }, + "type": { + "kind": "ListType", + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "BigInt" + } + } + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "version" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "BigInt" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "version_not" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "BigInt" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "version_gt" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "BigInt" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "version_lt" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "BigInt" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "version_gte" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "BigInt" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "version_lte" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "BigInt" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "version_in" + }, + "type": { + "kind": "ListType", + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "BigInt" + } + } + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "version_not_in" + }, + "type": { + "kind": "ListType", + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "BigInt" + } + } + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "revoked" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Boolean" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "revoked_not" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Boolean" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "revoked_in" + }, + "type": { + "kind": "ListType", + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Boolean" + } + } + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "revoked_not_in" + }, + "type": { + "kind": "ListType", + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Boolean" + } + } + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "subject" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Bytes" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "subject_not" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Bytes" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "subject_in" + }, + "type": { + "kind": "ListType", + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Bytes" + } + } + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "subject_not_in" + }, + "type": { + "kind": "ListType", + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Bytes" + } + } + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "subject_contains" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Bytes" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "subject_not_contains" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Bytes" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "attestationData" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Bytes" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "attestationData_not" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Bytes" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "attestationData_in" + }, + "type": { + "kind": "ListType", + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Bytes" + } + } + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "attestationData_not_in" + }, + "type": { + "kind": "ListType", + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Bytes" + } + } + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "attestationData_contains" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Bytes" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "attestationData_not_contains" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Bytes" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "schemaString" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "schemaString_not" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "schemaString_gt" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "schemaString_lt" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "schemaString_gte" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "schemaString_lte" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "schemaString_in" + }, + "type": { + "kind": "ListType", + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + } + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "schemaString_not_in" + }, + "type": { + "kind": "ListType", + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + } + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "schemaString_contains" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "schemaString_contains_nocase" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "schemaString_not_contains" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "schemaString_not_contains_nocase" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "schemaString_starts_with" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "schemaString_starts_with_nocase" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "schemaString_not_starts_with" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "schemaString_not_starts_with_nocase" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "schemaString_ends_with" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "schemaString_ends_with_nocase" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "schemaString_not_ends_with" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "schemaString_not_ends_with_nocase" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "decodedData" + }, + "type": { + "kind": "ListType", + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + } + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "decodedData_not" + }, + "type": { + "kind": "ListType", + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + } + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "decodedData_contains" + }, + "type": { + "kind": "ListType", + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + } + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "decodedData_contains_nocase" + }, + "type": { + "kind": "ListType", + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + } + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "decodedData_not_contains" + }, + "type": { + "kind": "ListType", + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + } + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "decodedData_not_contains_nocase" + }, + "type": { + "kind": "ListType", + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + } + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "description": { + "kind": "StringValue", + "value": "Filter for the block changed event.", + "block": true + }, + "name": { + "kind": "Name", + "value": "_change_block" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "BlockChangedFilter" + } + }, + "directives": [] + } + ], + "directives": [] + }, + { + "kind": "EnumTypeDefinition", + "name": { + "kind": "Name", + "value": "Attestation_orderBy" + }, + "values": [ + { + "kind": "EnumValueDefinition", + "name": { + "kind": "Name", + "value": "id" + }, + "directives": [] + }, + { + "kind": "EnumValueDefinition", + "name": { + "kind": "Name", + "value": "schemaId" + }, + "directives": [] + }, + { + "kind": "EnumValueDefinition", + "name": { + "kind": "Name", + "value": "replacedBy" + }, + "directives": [] + }, + { + "kind": "EnumValueDefinition", + "name": { + "kind": "Name", + "value": "attester" + }, + "directives": [] + }, + { + "kind": "EnumValueDefinition", + "name": { + "kind": "Name", + "value": "portal" + }, + "directives": [] + }, + { + "kind": "EnumValueDefinition", + "name": { + "kind": "Name", + "value": "attestedDate" + }, + "directives": [] + }, + { + "kind": "EnumValueDefinition", + "name": { + "kind": "Name", + "value": "expirationDate" + }, + "directives": [] + }, + { + "kind": "EnumValueDefinition", + "name": { + "kind": "Name", + "value": "revocationDate" + }, + "directives": [] + }, + { + "kind": "EnumValueDefinition", + "name": { + "kind": "Name", + "value": "version" + }, + "directives": [] + }, + { + "kind": "EnumValueDefinition", + "name": { + "kind": "Name", + "value": "revoked" + }, + "directives": [] + }, + { + "kind": "EnumValueDefinition", + "name": { + "kind": "Name", + "value": "subject" + }, + "directives": [] + }, + { + "kind": "EnumValueDefinition", + "name": { + "kind": "Name", + "value": "attestationData" + }, + "directives": [] + }, + { + "kind": "EnumValueDefinition", + "name": { + "kind": "Name", + "value": "schemaString" + }, + "directives": [] + }, + { + "kind": "EnumValueDefinition", + "name": { + "kind": "Name", + "value": "decodedData" + }, + "directives": [] + } + ], + "directives": [] + }, + { + "kind": "ScalarTypeDefinition", + "name": { + "kind": "Name", + "value": "BigDecimal" + }, + "directives": [] + }, + { + "kind": "ScalarTypeDefinition", + "name": { + "kind": "Name", + "value": "BigInt" + }, + "directives": [] + }, + { + "kind": "InputObjectTypeDefinition", + "name": { + "kind": "Name", + "value": "BlockChangedFilter" + }, + "fields": [ + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "number_gte" + }, + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Int" + } + } + }, + "directives": [] + } + ], + "directives": [] + }, + { + "kind": "InputObjectTypeDefinition", + "name": { + "kind": "Name", + "value": "Block_height" + }, + "fields": [ + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "hash" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Bytes" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "number" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Int" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "number_gte" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Int" + } + }, + "directives": [] + } + ], + "directives": [] + }, + { + "kind": "ScalarTypeDefinition", + "name": { + "kind": "Name", + "value": "Bytes" + }, + "directives": [] + }, + { + "kind": "ObjectTypeDefinition", + "name": { + "kind": "Name", + "value": "Counter" + }, + "fields": [ + { + "kind": "FieldDefinition", + "name": { + "kind": "Name", + "value": "id" + }, + "arguments": [], + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "ID" + } + } + }, + "directives": [] + }, + { + "kind": "FieldDefinition", + "name": { + "kind": "Name", + "value": "attestations" + }, + "arguments": [], + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Int" + } + }, + "directives": [] + }, + { + "kind": "FieldDefinition", + "name": { + "kind": "Name", + "value": "modules" + }, + "arguments": [], + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Int" + } + }, + "directives": [] + }, + { + "kind": "FieldDefinition", + "name": { + "kind": "Name", + "value": "portals" + }, + "arguments": [], + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Int" + } + }, + "directives": [] + }, + { + "kind": "FieldDefinition", + "name": { + "kind": "Name", + "value": "schemas" + }, + "arguments": [], + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Int" + } + }, + "directives": [] + } + ], + "interfaces": [], + "directives": [] + }, + { + "kind": "InputObjectTypeDefinition", + "name": { + "kind": "Name", + "value": "Counter_filter" + }, + "fields": [ + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "id" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "ID" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "id_not" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "ID" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "id_gt" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "ID" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "id_lt" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "ID" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "id_gte" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "ID" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "id_lte" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "ID" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "id_in" + }, + "type": { + "kind": "ListType", + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "ID" + } + } + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "id_not_in" + }, + "type": { + "kind": "ListType", + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "ID" + } + } + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "attestations" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Int" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "attestations_not" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Int" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "attestations_gt" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Int" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "attestations_lt" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Int" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "attestations_gte" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Int" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "attestations_lte" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Int" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "attestations_in" + }, + "type": { + "kind": "ListType", + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Int" + } + } + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "attestations_not_in" + }, + "type": { + "kind": "ListType", + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Int" + } + } + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "modules" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Int" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "modules_not" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Int" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "modules_gt" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Int" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "modules_lt" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Int" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "modules_gte" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Int" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "modules_lte" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Int" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "modules_in" + }, + "type": { + "kind": "ListType", + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Int" + } + } + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "modules_not_in" + }, + "type": { + "kind": "ListType", + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Int" + } + } + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "portals" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Int" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "portals_not" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Int" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "portals_gt" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Int" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "portals_lt" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Int" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "portals_gte" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Int" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "portals_lte" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Int" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "portals_in" + }, + "type": { + "kind": "ListType", + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Int" + } + } + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "portals_not_in" + }, + "type": { + "kind": "ListType", + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Int" + } + } + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "schemas" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Int" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "schemas_not" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Int" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "schemas_gt" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Int" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "schemas_lt" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Int" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "schemas_gte" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Int" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "schemas_lte" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Int" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "schemas_in" + }, + "type": { + "kind": "ListType", + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Int" + } + } + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "schemas_not_in" + }, + "type": { + "kind": "ListType", + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Int" + } + } + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "description": { + "kind": "StringValue", + "value": "Filter for the block changed event.", + "block": true + }, + "name": { + "kind": "Name", + "value": "_change_block" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "BlockChangedFilter" + } + }, + "directives": [] + } + ], + "directives": [] + }, + { + "kind": "EnumTypeDefinition", + "name": { + "kind": "Name", + "value": "Counter_orderBy" + }, + "values": [ + { + "kind": "EnumValueDefinition", + "name": { + "kind": "Name", + "value": "id" + }, + "directives": [] + }, + { + "kind": "EnumValueDefinition", + "name": { + "kind": "Name", + "value": "attestations" + }, + "directives": [] + }, + { + "kind": "EnumValueDefinition", + "name": { + "kind": "Name", + "value": "modules" + }, + "directives": [] + }, + { + "kind": "EnumValueDefinition", + "name": { + "kind": "Name", + "value": "portals" + }, + "directives": [] + }, + { + "kind": "EnumValueDefinition", + "name": { + "kind": "Name", + "value": "schemas" + }, + "directives": [] + } + ], + "directives": [] + }, + { + "kind": "ObjectTypeDefinition", + "name": { + "kind": "Name", + "value": "Module" + }, + "fields": [ + { + "kind": "FieldDefinition", + "name": { + "kind": "Name", + "value": "id" + }, + "arguments": [], + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "ID" + } + } + }, + "directives": [] + }, + { + "kind": "FieldDefinition", + "name": { + "kind": "Name", + "value": "moduleAddress" + }, + "arguments": [], + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Bytes" + } + } + }, + "directives": [] + }, + { + "kind": "FieldDefinition", + "name": { + "kind": "Name", + "value": "name" + }, + "arguments": [], + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + } + }, + "directives": [] + }, + { + "kind": "FieldDefinition", + "name": { + "kind": "Name", + "value": "description" + }, + "arguments": [], + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + } + }, + "directives": [] + } + ], + "interfaces": [], + "directives": [] + }, + { + "kind": "InputObjectTypeDefinition", + "name": { + "kind": "Name", + "value": "Module_filter" + }, + "fields": [ + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "id" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "ID" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "id_not" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "ID" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "id_gt" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "ID" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "id_lt" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "ID" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "id_gte" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "ID" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "id_lte" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "ID" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "id_in" + }, + "type": { + "kind": "ListType", + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "ID" + } + } + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "id_not_in" + }, + "type": { + "kind": "ListType", + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "ID" + } + } + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "moduleAddress" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Bytes" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "moduleAddress_not" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Bytes" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "moduleAddress_in" + }, + "type": { + "kind": "ListType", + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Bytes" + } + } + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "moduleAddress_not_in" + }, + "type": { + "kind": "ListType", + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Bytes" + } + } + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "moduleAddress_contains" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Bytes" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "moduleAddress_not_contains" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Bytes" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "name" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "name_not" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "name_gt" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "name_lt" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "name_gte" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "name_lte" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "name_in" + }, + "type": { + "kind": "ListType", + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + } + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "name_not_in" + }, + "type": { + "kind": "ListType", + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + } + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "name_contains" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "name_contains_nocase" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "name_not_contains" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "name_not_contains_nocase" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "name_starts_with" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "name_starts_with_nocase" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "name_not_starts_with" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "name_not_starts_with_nocase" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "name_ends_with" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "name_ends_with_nocase" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "name_not_ends_with" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "name_not_ends_with_nocase" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "description" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "description_not" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "description_gt" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "description_lt" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "description_gte" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "description_lte" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "description_in" + }, + "type": { + "kind": "ListType", + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + } + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "description_not_in" + }, + "type": { + "kind": "ListType", + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + } + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "description_contains" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "description_contains_nocase" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "description_not_contains" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "description_not_contains_nocase" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "description_starts_with" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "description_starts_with_nocase" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "description_not_starts_with" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "description_not_starts_with_nocase" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "description_ends_with" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "description_ends_with_nocase" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "description_not_ends_with" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "description_not_ends_with_nocase" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "description": { + "kind": "StringValue", + "value": "Filter for the block changed event.", + "block": true + }, + "name": { + "kind": "Name", + "value": "_change_block" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "BlockChangedFilter" + } + }, + "directives": [] + } + ], + "directives": [] + }, + { + "kind": "EnumTypeDefinition", + "name": { + "kind": "Name", + "value": "Module_orderBy" + }, + "values": [ + { + "kind": "EnumValueDefinition", + "name": { + "kind": "Name", + "value": "id" + }, + "directives": [] + }, + { + "kind": "EnumValueDefinition", + "name": { + "kind": "Name", + "value": "moduleAddress" + }, + "directives": [] + }, + { + "kind": "EnumValueDefinition", + "name": { + "kind": "Name", + "value": "name" + }, + "directives": [] + }, + { + "kind": "EnumValueDefinition", + "name": { + "kind": "Name", + "value": "description" + }, + "directives": [] + } + ], + "directives": [] + }, + { + "kind": "EnumTypeDefinition", + "description": { + "kind": "StringValue", + "value": "Defines the order direction, either ascending or descending", + "block": true + }, + "name": { + "kind": "Name", + "value": "OrderDirection" + }, + "values": [ + { + "kind": "EnumValueDefinition", + "name": { + "kind": "Name", + "value": "asc" + }, + "directives": [] + }, + { + "kind": "EnumValueDefinition", + "name": { + "kind": "Name", + "value": "desc" + }, + "directives": [] + } + ], + "directives": [] + }, + { + "kind": "ObjectTypeDefinition", + "name": { + "kind": "Name", + "value": "Portal" + }, + "fields": [ + { + "kind": "FieldDefinition", + "name": { + "kind": "Name", + "value": "id" + }, + "arguments": [], + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "ID" + } + } + }, + "directives": [] + }, + { + "kind": "FieldDefinition", + "name": { + "kind": "Name", + "value": "ownerAddress" + }, + "arguments": [], + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Bytes" + } + } + }, + "directives": [] + }, + { + "kind": "FieldDefinition", + "name": { + "kind": "Name", + "value": "modules" + }, + "arguments": [], + "type": { + "kind": "ListType", + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Bytes" + } + } + } + }, + "directives": [] + }, + { + "kind": "FieldDefinition", + "name": { + "kind": "Name", + "value": "isRevocable" + }, + "arguments": [], + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Boolean" + } + } + }, + "directives": [] + }, + { + "kind": "FieldDefinition", + "name": { + "kind": "Name", + "value": "name" + }, + "arguments": [], + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + } + }, + "directives": [] + }, + { + "kind": "FieldDefinition", + "name": { + "kind": "Name", + "value": "description" + }, + "arguments": [], + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + } + }, + "directives": [] + }, + { + "kind": "FieldDefinition", + "name": { + "kind": "Name", + "value": "ownerName" + }, + "arguments": [], + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + } + }, + "directives": [] + } + ], + "interfaces": [], + "directives": [] + }, + { + "kind": "InputObjectTypeDefinition", + "name": { + "kind": "Name", + "value": "Portal_filter" + }, + "fields": [ + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "id" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "ID" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "id_not" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "ID" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "id_gt" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "ID" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "id_lt" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "ID" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "id_gte" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "ID" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "id_lte" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "ID" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "id_in" + }, + "type": { + "kind": "ListType", + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "ID" + } + } + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "id_not_in" + }, + "type": { + "kind": "ListType", + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "ID" + } + } + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "ownerAddress" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Bytes" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "ownerAddress_not" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Bytes" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "ownerAddress_in" + }, + "type": { + "kind": "ListType", + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Bytes" + } + } + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "ownerAddress_not_in" + }, + "type": { + "kind": "ListType", + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Bytes" + } + } + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "ownerAddress_contains" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Bytes" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "ownerAddress_not_contains" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Bytes" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "modules" + }, + "type": { + "kind": "ListType", + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Bytes" + } + } + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "modules_not" + }, + "type": { + "kind": "ListType", + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Bytes" + } + } + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "modules_contains" + }, + "type": { + "kind": "ListType", + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Bytes" + } + } + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "modules_contains_nocase" + }, + "type": { + "kind": "ListType", + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Bytes" + } + } + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "modules_not_contains" + }, + "type": { + "kind": "ListType", + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Bytes" + } + } + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "modules_not_contains_nocase" + }, + "type": { + "kind": "ListType", + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Bytes" + } + } + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "isRevocable" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Boolean" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "isRevocable_not" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Boolean" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "isRevocable_in" + }, + "type": { + "kind": "ListType", + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Boolean" + } + } + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "isRevocable_not_in" + }, + "type": { + "kind": "ListType", + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Boolean" + } + } + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "name" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "name_not" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "name_gt" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "name_lt" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "name_gte" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "name_lte" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "name_in" + }, + "type": { + "kind": "ListType", + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + } + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "name_not_in" + }, + "type": { + "kind": "ListType", + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + } + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "name_contains" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "name_contains_nocase" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "name_not_contains" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "name_not_contains_nocase" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "name_starts_with" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "name_starts_with_nocase" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "name_not_starts_with" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "name_not_starts_with_nocase" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "name_ends_with" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "name_ends_with_nocase" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "name_not_ends_with" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "name_not_ends_with_nocase" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "description" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "description_not" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "description_gt" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "description_lt" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "description_gte" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "description_lte" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "description_in" + }, + "type": { + "kind": "ListType", + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + } + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "description_not_in" + }, + "type": { + "kind": "ListType", + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + } + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "description_contains" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "description_contains_nocase" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "description_not_contains" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "description_not_contains_nocase" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "description_starts_with" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "description_starts_with_nocase" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "description_not_starts_with" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "description_not_starts_with_nocase" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "description_ends_with" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "description_ends_with_nocase" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "description_not_ends_with" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "description_not_ends_with_nocase" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "ownerName" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "ownerName_not" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "ownerName_gt" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "ownerName_lt" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "ownerName_gte" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "ownerName_lte" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "ownerName_in" + }, + "type": { + "kind": "ListType", + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + } + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "ownerName_not_in" + }, + "type": { + "kind": "ListType", + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + } + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "ownerName_contains" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "ownerName_contains_nocase" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "ownerName_not_contains" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "ownerName_not_contains_nocase" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "ownerName_starts_with" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "ownerName_starts_with_nocase" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "ownerName_not_starts_with" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "ownerName_not_starts_with_nocase" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "ownerName_ends_with" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "ownerName_ends_with_nocase" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "ownerName_not_ends_with" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "ownerName_not_ends_with_nocase" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "description": { + "kind": "StringValue", + "value": "Filter for the block changed event.", + "block": true + }, + "name": { + "kind": "Name", + "value": "_change_block" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "BlockChangedFilter" + } + }, + "directives": [] + } + ], + "directives": [] + }, + { + "kind": "EnumTypeDefinition", + "name": { + "kind": "Name", + "value": "Portal_orderBy" + }, + "values": [ + { + "kind": "EnumValueDefinition", + "name": { + "kind": "Name", + "value": "id" + }, + "directives": [] + }, + { + "kind": "EnumValueDefinition", + "name": { + "kind": "Name", + "value": "ownerAddress" + }, + "directives": [] + }, + { + "kind": "EnumValueDefinition", + "name": { + "kind": "Name", + "value": "modules" + }, + "directives": [] + }, + { + "kind": "EnumValueDefinition", + "name": { + "kind": "Name", + "value": "isRevocable" + }, + "directives": [] + }, + { + "kind": "EnumValueDefinition", + "name": { + "kind": "Name", + "value": "name" + }, + "directives": [] + }, + { + "kind": "EnumValueDefinition", + "name": { + "kind": "Name", + "value": "description" + }, + "directives": [] + }, + { + "kind": "EnumValueDefinition", + "name": { + "kind": "Name", + "value": "ownerName" + }, + "directives": [] + } + ], + "directives": [] + }, + { + "kind": "ObjectTypeDefinition", + "name": { + "kind": "Name", + "value": "Query" + }, + "fields": [ + { + "kind": "FieldDefinition", + "name": { + "kind": "Name", + "value": "attestation" + }, + "arguments": [ + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "id" + }, + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "ID" + } + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "description": { + "kind": "StringValue", + "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", + "block": true + }, + "name": { + "kind": "Name", + "value": "block" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Block_height" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "description": { + "kind": "StringValue", + "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", + "block": true + }, + "name": { + "kind": "Name", + "value": "subgraphError" + }, + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "_SubgraphErrorPolicy_" + } + } + }, + "defaultValue": { + "kind": "EnumValue", + "value": "deny" + }, + "directives": [] + } + ], + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Attestation" + } + }, + "directives": [] + }, + { + "kind": "FieldDefinition", + "name": { + "kind": "Name", + "value": "attestations" + }, + "arguments": [ + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "skip" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Int" + } + }, + "defaultValue": { + "kind": "IntValue", + "value": "0" + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "first" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Int" + } + }, + "defaultValue": { + "kind": "IntValue", + "value": "100" + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "orderBy" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Attestation_orderBy" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "orderDirection" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "OrderDirection" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "where" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Attestation_filter" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "description": { + "kind": "StringValue", + "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", + "block": true + }, + "name": { + "kind": "Name", + "value": "block" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Block_height" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "description": { + "kind": "StringValue", + "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", + "block": true + }, + "name": { + "kind": "Name", + "value": "subgraphError" + }, + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "_SubgraphErrorPolicy_" + } + } + }, + "defaultValue": { + "kind": "EnumValue", + "value": "deny" + }, + "directives": [] + } + ], + "type": { + "kind": "NonNullType", + "type": { + "kind": "ListType", + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Attestation" + } + } + } + } + }, + "directives": [] + }, + { + "kind": "FieldDefinition", + "name": { + "kind": "Name", + "value": "module" + }, + "arguments": [ + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "id" + }, + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "ID" + } + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "description": { + "kind": "StringValue", + "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", + "block": true + }, + "name": { + "kind": "Name", + "value": "block" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Block_height" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "description": { + "kind": "StringValue", + "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", + "block": true + }, + "name": { + "kind": "Name", + "value": "subgraphError" + }, + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "_SubgraphErrorPolicy_" + } + } + }, + "defaultValue": { + "kind": "EnumValue", + "value": "deny" + }, + "directives": [] + } + ], + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Module" + } + }, + "directives": [] + }, + { + "kind": "FieldDefinition", + "name": { + "kind": "Name", + "value": "modules" + }, + "arguments": [ + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "skip" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Int" + } + }, + "defaultValue": { + "kind": "IntValue", + "value": "0" + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "first" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Int" + } + }, + "defaultValue": { + "kind": "IntValue", + "value": "100" + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "orderBy" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Module_orderBy" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "orderDirection" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "OrderDirection" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "where" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Module_filter" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "description": { + "kind": "StringValue", + "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", + "block": true + }, + "name": { + "kind": "Name", + "value": "block" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Block_height" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "description": { + "kind": "StringValue", + "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", + "block": true + }, + "name": { + "kind": "Name", + "value": "subgraphError" + }, + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "_SubgraphErrorPolicy_" + } + } + }, + "defaultValue": { + "kind": "EnumValue", + "value": "deny" + }, + "directives": [] + } + ], + "type": { + "kind": "NonNullType", + "type": { + "kind": "ListType", + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Module" + } + } + } + } + }, + "directives": [] + }, + { + "kind": "FieldDefinition", + "name": { + "kind": "Name", + "value": "portal" + }, + "arguments": [ + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "id" + }, + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "ID" + } + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "description": { + "kind": "StringValue", + "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", + "block": true + }, + "name": { + "kind": "Name", + "value": "block" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Block_height" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "description": { + "kind": "StringValue", + "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", + "block": true + }, + "name": { + "kind": "Name", + "value": "subgraphError" + }, + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "_SubgraphErrorPolicy_" + } + } + }, + "defaultValue": { + "kind": "EnumValue", + "value": "deny" + }, + "directives": [] + } + ], + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Portal" + } + }, + "directives": [] + }, + { + "kind": "FieldDefinition", + "name": { + "kind": "Name", + "value": "portals" + }, + "arguments": [ + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "skip" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Int" + } + }, + "defaultValue": { + "kind": "IntValue", + "value": "0" + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "first" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Int" + } + }, + "defaultValue": { + "kind": "IntValue", + "value": "100" + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "orderBy" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Portal_orderBy" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "orderDirection" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "OrderDirection" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "where" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Portal_filter" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "description": { + "kind": "StringValue", + "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", + "block": true + }, + "name": { + "kind": "Name", + "value": "block" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Block_height" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "description": { + "kind": "StringValue", + "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", + "block": true + }, + "name": { + "kind": "Name", + "value": "subgraphError" + }, + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "_SubgraphErrorPolicy_" + } + } + }, + "defaultValue": { + "kind": "EnumValue", + "value": "deny" + }, + "directives": [] + } + ], + "type": { + "kind": "NonNullType", + "type": { + "kind": "ListType", + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Portal" + } + } + } + } + }, + "directives": [] + }, + { + "kind": "FieldDefinition", + "name": { + "kind": "Name", + "value": "schema" + }, + "arguments": [ + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "id" + }, + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "ID" + } + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "description": { + "kind": "StringValue", + "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", + "block": true + }, + "name": { + "kind": "Name", + "value": "block" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Block_height" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "description": { + "kind": "StringValue", + "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", + "block": true + }, + "name": { + "kind": "Name", + "value": "subgraphError" + }, + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "_SubgraphErrorPolicy_" + } + } + }, + "defaultValue": { + "kind": "EnumValue", + "value": "deny" + }, + "directives": [] + } + ], + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Schema" + } + }, + "directives": [] + }, + { + "kind": "FieldDefinition", + "name": { + "kind": "Name", + "value": "schemas" + }, + "arguments": [ + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "skip" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Int" + } + }, + "defaultValue": { + "kind": "IntValue", + "value": "0" + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "first" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Int" + } + }, + "defaultValue": { + "kind": "IntValue", + "value": "100" + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "orderBy" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Schema_orderBy" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "orderDirection" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "OrderDirection" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "where" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Schema_filter" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "description": { + "kind": "StringValue", + "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", + "block": true + }, + "name": { + "kind": "Name", + "value": "block" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Block_height" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "description": { + "kind": "StringValue", + "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", + "block": true + }, + "name": { + "kind": "Name", + "value": "subgraphError" + }, + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "_SubgraphErrorPolicy_" + } + } + }, + "defaultValue": { + "kind": "EnumValue", + "value": "deny" + }, + "directives": [] + } + ], + "type": { + "kind": "NonNullType", + "type": { + "kind": "ListType", + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Schema" + } + } + } + } + }, + "directives": [] + }, + { + "kind": "FieldDefinition", + "name": { + "kind": "Name", + "value": "counter" + }, + "arguments": [ + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "id" + }, + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "ID" + } + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "description": { + "kind": "StringValue", + "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", + "block": true + }, + "name": { + "kind": "Name", + "value": "block" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Block_height" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "description": { + "kind": "StringValue", + "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", + "block": true + }, + "name": { + "kind": "Name", + "value": "subgraphError" + }, + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "_SubgraphErrorPolicy_" + } + } + }, + "defaultValue": { + "kind": "EnumValue", + "value": "deny" + }, + "directives": [] + } + ], + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Counter" + } + }, + "directives": [] + }, + { + "kind": "FieldDefinition", + "name": { + "kind": "Name", + "value": "counters" + }, + "arguments": [ + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "skip" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Int" + } + }, + "defaultValue": { + "kind": "IntValue", + "value": "0" + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "first" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Int" + } + }, + "defaultValue": { + "kind": "IntValue", + "value": "100" + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "orderBy" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Counter_orderBy" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "orderDirection" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "OrderDirection" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "where" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Counter_filter" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "description": { + "kind": "StringValue", + "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", + "block": true + }, + "name": { + "kind": "Name", + "value": "block" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Block_height" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "description": { + "kind": "StringValue", + "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", + "block": true + }, + "name": { + "kind": "Name", + "value": "subgraphError" + }, + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "_SubgraphErrorPolicy_" + } + } + }, + "defaultValue": { + "kind": "EnumValue", + "value": "deny" + }, + "directives": [] + } + ], + "type": { + "kind": "NonNullType", + "type": { + "kind": "ListType", + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Counter" + } + } + } + } + }, + "directives": [] + }, + { + "kind": "FieldDefinition", + "description": { + "kind": "StringValue", + "value": "Access to subgraph metadata", + "block": true + }, + "name": { + "kind": "Name", + "value": "_meta" + }, + "arguments": [ + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "block" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Block_height" + } + }, + "directives": [] + } + ], + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "_Meta_" + } + }, + "directives": [] + } + ], + "interfaces": [], + "directives": [] + }, + { + "kind": "ObjectTypeDefinition", + "name": { + "kind": "Name", + "value": "Schema" + }, + "fields": [ + { + "kind": "FieldDefinition", + "name": { + "kind": "Name", + "value": "id" + }, + "arguments": [], + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "ID" + } + } + }, + "directives": [] + }, + { + "kind": "FieldDefinition", + "name": { + "kind": "Name", + "value": "name" + }, + "arguments": [], + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + } + }, + "directives": [] + }, + { + "kind": "FieldDefinition", + "name": { + "kind": "Name", + "value": "description" + }, + "arguments": [], + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + } + }, + "directives": [] + }, + { + "kind": "FieldDefinition", + "name": { + "kind": "Name", + "value": "context" + }, + "arguments": [], + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + } + }, + "directives": [] + }, + { + "kind": "FieldDefinition", + "name": { + "kind": "Name", + "value": "schema" + }, + "arguments": [], + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + } + }, + "directives": [] + } + ], + "interfaces": [], + "directives": [] + }, + { + "kind": "InputObjectTypeDefinition", + "name": { + "kind": "Name", + "value": "Schema_filter" + }, + "fields": [ + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "id" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "ID" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "id_not" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "ID" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "id_gt" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "ID" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "id_lt" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "ID" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "id_gte" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "ID" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "id_lte" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "ID" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "id_in" + }, + "type": { + "kind": "ListType", + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "ID" + } + } + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "id_not_in" + }, + "type": { + "kind": "ListType", + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "ID" + } + } + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "name" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "name_not" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "name_gt" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "name_lt" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "name_gte" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "name_lte" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "name_in" + }, + "type": { + "kind": "ListType", + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + } + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "name_not_in" + }, + "type": { + "kind": "ListType", + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + } + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "name_contains" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "name_contains_nocase" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "name_not_contains" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "name_not_contains_nocase" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "name_starts_with" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "name_starts_with_nocase" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "name_not_starts_with" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "name_not_starts_with_nocase" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "name_ends_with" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "name_ends_with_nocase" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "name_not_ends_with" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "name_not_ends_with_nocase" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "description" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "description_not" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "description_gt" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "description_lt" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "description_gte" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "description_lte" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "description_in" + }, + "type": { + "kind": "ListType", + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + } + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "description_not_in" + }, + "type": { + "kind": "ListType", + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + } + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "description_contains" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "description_contains_nocase" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "description_not_contains" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "description_not_contains_nocase" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "description_starts_with" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "description_starts_with_nocase" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "description_not_starts_with" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "description_not_starts_with_nocase" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "description_ends_with" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "description_ends_with_nocase" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "description_not_ends_with" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "description_not_ends_with_nocase" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "context" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "context_not" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "context_gt" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "context_lt" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "context_gte" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "context_lte" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "context_in" + }, + "type": { + "kind": "ListType", + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + } + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "context_not_in" + }, + "type": { + "kind": "ListType", + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + } + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "context_contains" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "context_contains_nocase" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "context_not_contains" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "context_not_contains_nocase" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "context_starts_with" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "context_starts_with_nocase" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "context_not_starts_with" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "context_not_starts_with_nocase" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "context_ends_with" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "context_ends_with_nocase" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "context_not_ends_with" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "context_not_ends_with_nocase" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "schema" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "schema_not" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "schema_gt" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "schema_lt" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "schema_gte" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "schema_lte" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "schema_in" + }, + "type": { + "kind": "ListType", + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + } + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "schema_not_in" + }, + "type": { + "kind": "ListType", + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + } + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "schema_contains" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "schema_contains_nocase" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "schema_not_contains" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "schema_not_contains_nocase" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "schema_starts_with" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "schema_starts_with_nocase" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "schema_not_starts_with" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "schema_not_starts_with_nocase" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "schema_ends_with" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "schema_ends_with_nocase" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "schema_not_ends_with" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "schema_not_ends_with_nocase" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "description": { + "kind": "StringValue", + "value": "Filter for the block changed event.", + "block": true + }, + "name": { + "kind": "Name", + "value": "_change_block" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "BlockChangedFilter" + } + }, + "directives": [] + } + ], + "directives": [] + }, + { + "kind": "EnumTypeDefinition", + "name": { + "kind": "Name", + "value": "Schema_orderBy" + }, + "values": [ + { + "kind": "EnumValueDefinition", + "name": { + "kind": "Name", + "value": "id" + }, + "directives": [] + }, + { + "kind": "EnumValueDefinition", + "name": { + "kind": "Name", + "value": "name" + }, + "directives": [] + }, + { + "kind": "EnumValueDefinition", + "name": { + "kind": "Name", + "value": "description" + }, + "directives": [] + }, + { + "kind": "EnumValueDefinition", + "name": { + "kind": "Name", + "value": "context" + }, + "directives": [] + }, + { + "kind": "EnumValueDefinition", + "name": { + "kind": "Name", + "value": "schema" + }, + "directives": [] + } + ], + "directives": [] + }, + { + "kind": "ObjectTypeDefinition", + "name": { + "kind": "Name", + "value": "Subscription" + }, + "fields": [ + { + "kind": "FieldDefinition", + "name": { + "kind": "Name", + "value": "attestation" + }, + "arguments": [ + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "id" + }, + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "ID" + } + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "description": { + "kind": "StringValue", + "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", + "block": true + }, + "name": { + "kind": "Name", + "value": "block" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Block_height" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "description": { + "kind": "StringValue", + "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", + "block": true + }, + "name": { + "kind": "Name", + "value": "subgraphError" + }, + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "_SubgraphErrorPolicy_" + } + } + }, + "defaultValue": { + "kind": "EnumValue", + "value": "deny" + }, + "directives": [] + } + ], + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Attestation" + } + }, + "directives": [] + }, + { + "kind": "FieldDefinition", + "name": { + "kind": "Name", + "value": "attestations" + }, + "arguments": [ + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "skip" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Int" + } + }, + "defaultValue": { + "kind": "IntValue", + "value": "0" + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "first" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Int" + } + }, + "defaultValue": { + "kind": "IntValue", + "value": "100" + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "orderBy" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Attestation_orderBy" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "orderDirection" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "OrderDirection" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "where" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Attestation_filter" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "description": { + "kind": "StringValue", + "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", + "block": true + }, + "name": { + "kind": "Name", + "value": "block" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Block_height" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "description": { + "kind": "StringValue", + "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", + "block": true + }, + "name": { + "kind": "Name", + "value": "subgraphError" + }, + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "_SubgraphErrorPolicy_" + } + } + }, + "defaultValue": { + "kind": "EnumValue", + "value": "deny" + }, + "directives": [] + } + ], + "type": { + "kind": "NonNullType", + "type": { + "kind": "ListType", + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Attestation" + } + } + } + } + }, + "directives": [] + }, + { + "kind": "FieldDefinition", + "name": { + "kind": "Name", + "value": "module" + }, + "arguments": [ + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "id" + }, + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "ID" + } + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "description": { + "kind": "StringValue", + "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", + "block": true + }, + "name": { + "kind": "Name", + "value": "block" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Block_height" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "description": { + "kind": "StringValue", + "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", + "block": true + }, + "name": { + "kind": "Name", + "value": "subgraphError" + }, + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "_SubgraphErrorPolicy_" + } + } + }, + "defaultValue": { + "kind": "EnumValue", + "value": "deny" + }, + "directives": [] + } + ], + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Module" + } + }, + "directives": [] + }, + { + "kind": "FieldDefinition", + "name": { + "kind": "Name", + "value": "modules" + }, + "arguments": [ + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "skip" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Int" + } + }, + "defaultValue": { + "kind": "IntValue", + "value": "0" + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "first" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Int" + } + }, + "defaultValue": { + "kind": "IntValue", + "value": "100" + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "orderBy" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Module_orderBy" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "orderDirection" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "OrderDirection" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "where" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Module_filter" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "description": { + "kind": "StringValue", + "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", + "block": true + }, + "name": { + "kind": "Name", + "value": "block" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Block_height" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "description": { + "kind": "StringValue", + "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", + "block": true + }, + "name": { + "kind": "Name", + "value": "subgraphError" + }, + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "_SubgraphErrorPolicy_" + } + } + }, + "defaultValue": { + "kind": "EnumValue", + "value": "deny" + }, + "directives": [] + } + ], + "type": { + "kind": "NonNullType", + "type": { + "kind": "ListType", + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Module" + } + } + } + } + }, + "directives": [] + }, + { + "kind": "FieldDefinition", + "name": { + "kind": "Name", + "value": "portal" + }, + "arguments": [ + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "id" + }, + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "ID" + } + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "description": { + "kind": "StringValue", + "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", + "block": true + }, + "name": { + "kind": "Name", + "value": "block" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Block_height" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "description": { + "kind": "StringValue", + "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", + "block": true + }, + "name": { + "kind": "Name", + "value": "subgraphError" + }, + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "_SubgraphErrorPolicy_" + } + } + }, + "defaultValue": { + "kind": "EnumValue", + "value": "deny" + }, + "directives": [] + } + ], + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Portal" + } + }, + "directives": [] + }, + { + "kind": "FieldDefinition", + "name": { + "kind": "Name", + "value": "portals" + }, + "arguments": [ + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "skip" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Int" + } + }, + "defaultValue": { + "kind": "IntValue", + "value": "0" + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "first" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Int" + } + }, + "defaultValue": { + "kind": "IntValue", + "value": "100" + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "orderBy" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Portal_orderBy" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "orderDirection" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "OrderDirection" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "where" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Portal_filter" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "description": { + "kind": "StringValue", + "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", + "block": true + }, + "name": { + "kind": "Name", + "value": "block" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Block_height" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "description": { + "kind": "StringValue", + "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", + "block": true + }, + "name": { + "kind": "Name", + "value": "subgraphError" + }, + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "_SubgraphErrorPolicy_" + } + } + }, + "defaultValue": { + "kind": "EnumValue", + "value": "deny" + }, + "directives": [] + } + ], + "type": { + "kind": "NonNullType", + "type": { + "kind": "ListType", + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Portal" + } + } + } + } + }, + "directives": [] + }, + { + "kind": "FieldDefinition", + "name": { + "kind": "Name", + "value": "schema" + }, + "arguments": [ + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "id" + }, + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "ID" + } + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "description": { + "kind": "StringValue", + "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", + "block": true + }, + "name": { + "kind": "Name", + "value": "block" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Block_height" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "description": { + "kind": "StringValue", + "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", + "block": true + }, + "name": { + "kind": "Name", + "value": "subgraphError" + }, + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "_SubgraphErrorPolicy_" + } + } + }, + "defaultValue": { + "kind": "EnumValue", + "value": "deny" + }, + "directives": [] + } + ], + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Schema" + } + }, + "directives": [] + }, + { + "kind": "FieldDefinition", + "name": { + "kind": "Name", + "value": "schemas" + }, + "arguments": [ + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "skip" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Int" + } + }, + "defaultValue": { + "kind": "IntValue", + "value": "0" + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "first" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Int" + } + }, + "defaultValue": { + "kind": "IntValue", + "value": "100" + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "orderBy" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Schema_orderBy" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "orderDirection" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "OrderDirection" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "where" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Schema_filter" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "description": { + "kind": "StringValue", + "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", + "block": true + }, + "name": { + "kind": "Name", + "value": "block" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Block_height" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "description": { + "kind": "StringValue", + "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", + "block": true + }, + "name": { + "kind": "Name", + "value": "subgraphError" + }, + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "_SubgraphErrorPolicy_" + } + } + }, + "defaultValue": { + "kind": "EnumValue", + "value": "deny" + }, + "directives": [] + } + ], + "type": { + "kind": "NonNullType", + "type": { + "kind": "ListType", + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Schema" + } + } + } + } + }, + "directives": [] + }, + { + "kind": "FieldDefinition", + "name": { + "kind": "Name", + "value": "counter" + }, + "arguments": [ + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "id" + }, + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "ID" + } + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "description": { + "kind": "StringValue", + "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", + "block": true + }, + "name": { + "kind": "Name", + "value": "block" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Block_height" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "description": { + "kind": "StringValue", + "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", + "block": true + }, + "name": { + "kind": "Name", + "value": "subgraphError" + }, + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "_SubgraphErrorPolicy_" + } + } + }, + "defaultValue": { + "kind": "EnumValue", + "value": "deny" + }, + "directives": [] + } + ], + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Counter" + } + }, + "directives": [] + }, + { + "kind": "FieldDefinition", + "name": { + "kind": "Name", + "value": "counters" + }, + "arguments": [ + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "skip" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Int" + } + }, + "defaultValue": { + "kind": "IntValue", + "value": "0" + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "first" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Int" + } + }, + "defaultValue": { + "kind": "IntValue", + "value": "100" + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "orderBy" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Counter_orderBy" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "orderDirection" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "OrderDirection" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "where" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Counter_filter" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "description": { + "kind": "StringValue", + "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", + "block": true + }, + "name": { + "kind": "Name", + "value": "block" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Block_height" + } + }, + "directives": [] + }, + { + "kind": "InputValueDefinition", + "description": { + "kind": "StringValue", + "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", + "block": true + }, + "name": { + "kind": "Name", + "value": "subgraphError" + }, + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "_SubgraphErrorPolicy_" + } + } + }, + "defaultValue": { + "kind": "EnumValue", + "value": "deny" + }, + "directives": [] + } + ], + "type": { + "kind": "NonNullType", + "type": { + "kind": "ListType", + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Counter" + } + } + } + } + }, + "directives": [] + }, + { + "kind": "FieldDefinition", + "description": { + "kind": "StringValue", + "value": "Access to subgraph metadata", + "block": true + }, + "name": { + "kind": "Name", + "value": "_meta" + }, + "arguments": [ + { + "kind": "InputValueDefinition", + "name": { + "kind": "Name", + "value": "block" + }, + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Block_height" + } + }, + "directives": [] + } + ], + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "_Meta_" + } + }, + "directives": [] + } + ], + "interfaces": [], + "directives": [] + }, + { + "kind": "ObjectTypeDefinition", + "name": { + "kind": "Name", + "value": "_Block_" + }, + "fields": [ + { + "kind": "FieldDefinition", + "description": { + "kind": "StringValue", + "value": "The hash of the block", + "block": true + }, + "name": { + "kind": "Name", + "value": "hash" + }, + "arguments": [], + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Bytes" + } + }, + "directives": [] + }, + { + "kind": "FieldDefinition", + "description": { + "kind": "StringValue", + "value": "The block number", + "block": true + }, + "name": { + "kind": "Name", + "value": "number" + }, + "arguments": [], + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Int" + } + } + }, + "directives": [] + }, + { + "kind": "FieldDefinition", + "description": { + "kind": "StringValue", + "value": "Integer representation of the timestamp stored in blocks for the chain", + "block": true + }, + "name": { + "kind": "Name", + "value": "timestamp" + }, + "arguments": [], + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Int" + } + }, + "directives": [] + } + ], + "interfaces": [], + "directives": [] + }, + { + "kind": "ObjectTypeDefinition", + "description": { + "kind": "StringValue", + "value": "The type for the top-level _meta field", + "block": true + }, + "name": { + "kind": "Name", + "value": "_Meta_" + }, + "fields": [ + { + "kind": "FieldDefinition", + "description": { + "kind": "StringValue", + "value": "Information about a specific subgraph block. The hash of the block\nwill be null if the _meta field has a block constraint that asks for\na block number. It will be filled if the _meta field has no block constraint\nand therefore asks for the latest block\n", + "block": true + }, + "name": { + "kind": "Name", + "value": "block" + }, + "arguments": [], + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "_Block_" + } + } + }, + "directives": [] + }, + { + "kind": "FieldDefinition", + "description": { + "kind": "StringValue", + "value": "The deployment ID", + "block": true + }, + "name": { + "kind": "Name", + "value": "deployment" + }, + "arguments": [], + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "String" + } + } + }, + "directives": [] + }, + { + "kind": "FieldDefinition", + "description": { + "kind": "StringValue", + "value": "If `true`, the subgraph encountered indexing errors at some past block", + "block": true + }, + "name": { + "kind": "Name", + "value": "hasIndexingErrors" + }, + "arguments": [], + "type": { + "kind": "NonNullType", + "type": { + "kind": "NamedType", + "name": { + "kind": "Name", + "value": "Boolean" + } + } + }, + "directives": [] + } + ], + "interfaces": [], + "directives": [] + }, + { + "kind": "EnumTypeDefinition", + "name": { + "kind": "Name", + "value": "_SubgraphErrorPolicy_" + }, + "values": [ + { + "kind": "EnumValueDefinition", + "description": { + "kind": "StringValue", + "value": "Data will be returned even if the subgraph has indexing errors", + "block": true + }, + "name": { + "kind": "Name", + "value": "allow" + }, + "directives": [] + }, + { + "kind": "EnumValueDefinition", + "description": { + "kind": "StringValue", + "value": "If the subgraph has indexing errors, data will be omitted. The default.", + "block": true + }, + "name": { + "kind": "Name", + "value": "deny" + }, + "directives": [] + } + ], + "directives": [] + } + ] +}; + +export default buildASTSchema(schemaAST, { + assumeValid: true, + assumeValidSDL: true +}); \ No newline at end of file diff --git a/sdk/.graphclient/sources/linea-attestation-registry/schema.graphql b/sdk/.graphclient/sources/linea-attestation-registry/schema.graphql new file mode 100644 index 00000000..dfa1db65 --- /dev/null +++ b/sdk/.graphclient/sources/linea-attestation-registry/schema.graphql @@ -0,0 +1,836 @@ +schema { + query: Query + subscription: Subscription +} + +"Marks the GraphQL type as indexable entity. Each type that should be an entity is required to be annotated with this directive." +directive @entity on OBJECT + +"Defined a Subgraph ID for an object type" +directive @subgraphId(id: String!) on OBJECT + +"creates a virtual field on the entity that may be queried but cannot be set manually through the mappings API." +directive @derivedFrom(field: String!) on FIELD_DEFINITION + +type Attestation { + id: ID! + schemaId: Bytes! + replacedBy: Bytes! + attester: Bytes! + portal: Bytes! + attestedDate: BigInt! + expirationDate: BigInt! + revocationDate: BigInt! + version: BigInt! + revoked: Boolean! + subject: Bytes! + attestationData: Bytes! + schemaString: String + decodedData: [String!] +} + +input Attestation_filter { + id: ID + id_not: ID + id_gt: ID + id_lt: ID + id_gte: ID + id_lte: ID + id_in: [ID!] + id_not_in: [ID!] + schemaId: Bytes + schemaId_not: Bytes + schemaId_in: [Bytes!] + schemaId_not_in: [Bytes!] + schemaId_contains: Bytes + schemaId_not_contains: Bytes + replacedBy: Bytes + replacedBy_not: Bytes + replacedBy_in: [Bytes!] + replacedBy_not_in: [Bytes!] + replacedBy_contains: Bytes + replacedBy_not_contains: Bytes + attester: Bytes + attester_not: Bytes + attester_in: [Bytes!] + attester_not_in: [Bytes!] + attester_contains: Bytes + attester_not_contains: Bytes + portal: Bytes + portal_not: Bytes + portal_in: [Bytes!] + portal_not_in: [Bytes!] + portal_contains: Bytes + portal_not_contains: Bytes + attestedDate: BigInt + attestedDate_not: BigInt + attestedDate_gt: BigInt + attestedDate_lt: BigInt + attestedDate_gte: BigInt + attestedDate_lte: BigInt + attestedDate_in: [BigInt!] + attestedDate_not_in: [BigInt!] + expirationDate: BigInt + expirationDate_not: BigInt + expirationDate_gt: BigInt + expirationDate_lt: BigInt + expirationDate_gte: BigInt + expirationDate_lte: BigInt + expirationDate_in: [BigInt!] + expirationDate_not_in: [BigInt!] + revocationDate: BigInt + revocationDate_not: BigInt + revocationDate_gt: BigInt + revocationDate_lt: BigInt + revocationDate_gte: BigInt + revocationDate_lte: BigInt + revocationDate_in: [BigInt!] + revocationDate_not_in: [BigInt!] + version: BigInt + version_not: BigInt + version_gt: BigInt + version_lt: BigInt + version_gte: BigInt + version_lte: BigInt + version_in: [BigInt!] + version_not_in: [BigInt!] + revoked: Boolean + revoked_not: Boolean + revoked_in: [Boolean!] + revoked_not_in: [Boolean!] + subject: Bytes + subject_not: Bytes + subject_in: [Bytes!] + subject_not_in: [Bytes!] + subject_contains: Bytes + subject_not_contains: Bytes + attestationData: Bytes + attestationData_not: Bytes + attestationData_in: [Bytes!] + attestationData_not_in: [Bytes!] + attestationData_contains: Bytes + attestationData_not_contains: Bytes + schemaString: String + schemaString_not: String + schemaString_gt: String + schemaString_lt: String + schemaString_gte: String + schemaString_lte: String + schemaString_in: [String!] + schemaString_not_in: [String!] + schemaString_contains: String + schemaString_contains_nocase: String + schemaString_not_contains: String + schemaString_not_contains_nocase: String + schemaString_starts_with: String + schemaString_starts_with_nocase: String + schemaString_not_starts_with: String + schemaString_not_starts_with_nocase: String + schemaString_ends_with: String + schemaString_ends_with_nocase: String + schemaString_not_ends_with: String + schemaString_not_ends_with_nocase: String + decodedData: [String!] + decodedData_not: [String!] + decodedData_contains: [String!] + decodedData_contains_nocase: [String!] + decodedData_not_contains: [String!] + decodedData_not_contains_nocase: [String!] + """Filter for the block changed event.""" + _change_block: BlockChangedFilter +} + +enum Attestation_orderBy { + id + schemaId + replacedBy + attester + portal + attestedDate + expirationDate + revocationDate + version + revoked + subject + attestationData + schemaString + decodedData +} + +scalar BigDecimal + +scalar BigInt + +input BlockChangedFilter { + number_gte: Int! +} + +input Block_height { + hash: Bytes + number: Int + number_gte: Int +} + +scalar Bytes + +type Counter { + id: ID! + attestations: Int + modules: Int + portals: Int + schemas: Int +} + +input Counter_filter { + id: ID + id_not: ID + id_gt: ID + id_lt: ID + id_gte: ID + id_lte: ID + id_in: [ID!] + id_not_in: [ID!] + attestations: Int + attestations_not: Int + attestations_gt: Int + attestations_lt: Int + attestations_gte: Int + attestations_lte: Int + attestations_in: [Int!] + attestations_not_in: [Int!] + modules: Int + modules_not: Int + modules_gt: Int + modules_lt: Int + modules_gte: Int + modules_lte: Int + modules_in: [Int!] + modules_not_in: [Int!] + portals: Int + portals_not: Int + portals_gt: Int + portals_lt: Int + portals_gte: Int + portals_lte: Int + portals_in: [Int!] + portals_not_in: [Int!] + schemas: Int + schemas_not: Int + schemas_gt: Int + schemas_lt: Int + schemas_gte: Int + schemas_lte: Int + schemas_in: [Int!] + schemas_not_in: [Int!] + """Filter for the block changed event.""" + _change_block: BlockChangedFilter +} + +enum Counter_orderBy { + id + attestations + modules + portals + schemas +} + +type Module { + id: ID! + moduleAddress: Bytes! + name: String! + description: String! +} + +input Module_filter { + id: ID + id_not: ID + id_gt: ID + id_lt: ID + id_gte: ID + id_lte: ID + id_in: [ID!] + id_not_in: [ID!] + moduleAddress: Bytes + moduleAddress_not: Bytes + moduleAddress_in: [Bytes!] + moduleAddress_not_in: [Bytes!] + moduleAddress_contains: Bytes + moduleAddress_not_contains: Bytes + name: String + name_not: String + name_gt: String + name_lt: String + name_gte: String + name_lte: String + name_in: [String!] + name_not_in: [String!] + name_contains: String + name_contains_nocase: String + name_not_contains: String + name_not_contains_nocase: String + name_starts_with: String + name_starts_with_nocase: String + name_not_starts_with: String + name_not_starts_with_nocase: String + name_ends_with: String + name_ends_with_nocase: String + name_not_ends_with: String + name_not_ends_with_nocase: String + description: String + description_not: String + description_gt: String + description_lt: String + description_gte: String + description_lte: String + description_in: [String!] + description_not_in: [String!] + description_contains: String + description_contains_nocase: String + description_not_contains: String + description_not_contains_nocase: String + description_starts_with: String + description_starts_with_nocase: String + description_not_starts_with: String + description_not_starts_with_nocase: String + description_ends_with: String + description_ends_with_nocase: String + description_not_ends_with: String + description_not_ends_with_nocase: String + """Filter for the block changed event.""" + _change_block: BlockChangedFilter +} + +enum Module_orderBy { + id + moduleAddress + name + description +} + +"""Defines the order direction, either ascending or descending""" +enum OrderDirection { + asc + desc +} + +type Portal { + id: ID! + ownerAddress: Bytes! + modules: [Bytes!] + isRevocable: Boolean! + name: String! + description: String! + ownerName: String! +} + +input Portal_filter { + id: ID + id_not: ID + id_gt: ID + id_lt: ID + id_gte: ID + id_lte: ID + id_in: [ID!] + id_not_in: [ID!] + ownerAddress: Bytes + ownerAddress_not: Bytes + ownerAddress_in: [Bytes!] + ownerAddress_not_in: [Bytes!] + ownerAddress_contains: Bytes + ownerAddress_not_contains: Bytes + modules: [Bytes!] + modules_not: [Bytes!] + modules_contains: [Bytes!] + modules_contains_nocase: [Bytes!] + modules_not_contains: [Bytes!] + modules_not_contains_nocase: [Bytes!] + isRevocable: Boolean + isRevocable_not: Boolean + isRevocable_in: [Boolean!] + isRevocable_not_in: [Boolean!] + name: String + name_not: String + name_gt: String + name_lt: String + name_gte: String + name_lte: String + name_in: [String!] + name_not_in: [String!] + name_contains: String + name_contains_nocase: String + name_not_contains: String + name_not_contains_nocase: String + name_starts_with: String + name_starts_with_nocase: String + name_not_starts_with: String + name_not_starts_with_nocase: String + name_ends_with: String + name_ends_with_nocase: String + name_not_ends_with: String + name_not_ends_with_nocase: String + description: String + description_not: String + description_gt: String + description_lt: String + description_gte: String + description_lte: String + description_in: [String!] + description_not_in: [String!] + description_contains: String + description_contains_nocase: String + description_not_contains: String + description_not_contains_nocase: String + description_starts_with: String + description_starts_with_nocase: String + description_not_starts_with: String + description_not_starts_with_nocase: String + description_ends_with: String + description_ends_with_nocase: String + description_not_ends_with: String + description_not_ends_with_nocase: String + ownerName: String + ownerName_not: String + ownerName_gt: String + ownerName_lt: String + ownerName_gte: String + ownerName_lte: String + ownerName_in: [String!] + ownerName_not_in: [String!] + ownerName_contains: String + ownerName_contains_nocase: String + ownerName_not_contains: String + ownerName_not_contains_nocase: String + ownerName_starts_with: String + ownerName_starts_with_nocase: String + ownerName_not_starts_with: String + ownerName_not_starts_with_nocase: String + ownerName_ends_with: String + ownerName_ends_with_nocase: String + ownerName_not_ends_with: String + ownerName_not_ends_with_nocase: String + """Filter for the block changed event.""" + _change_block: BlockChangedFilter +} + +enum Portal_orderBy { + id + ownerAddress + modules + isRevocable + name + description + ownerName +} + +type Query { + attestation( + id: ID! + """ + The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted. + """ + block: Block_height + """ + Set to `allow` to receive data even if the subgraph has skipped over errors while syncing. + """ + subgraphError: _SubgraphErrorPolicy_! = deny + ): Attestation + attestations( + skip: Int = 0 + first: Int = 100 + orderBy: Attestation_orderBy + orderDirection: OrderDirection + where: Attestation_filter + """ + The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted. + """ + block: Block_height + """ + Set to `allow` to receive data even if the subgraph has skipped over errors while syncing. + """ + subgraphError: _SubgraphErrorPolicy_! = deny + ): [Attestation!]! + module( + id: ID! + """ + The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted. + """ + block: Block_height + """ + Set to `allow` to receive data even if the subgraph has skipped over errors while syncing. + """ + subgraphError: _SubgraphErrorPolicy_! = deny + ): Module + modules( + skip: Int = 0 + first: Int = 100 + orderBy: Module_orderBy + orderDirection: OrderDirection + where: Module_filter + """ + The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted. + """ + block: Block_height + """ + Set to `allow` to receive data even if the subgraph has skipped over errors while syncing. + """ + subgraphError: _SubgraphErrorPolicy_! = deny + ): [Module!]! + portal( + id: ID! + """ + The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted. + """ + block: Block_height + """ + Set to `allow` to receive data even if the subgraph has skipped over errors while syncing. + """ + subgraphError: _SubgraphErrorPolicy_! = deny + ): Portal + portals( + skip: Int = 0 + first: Int = 100 + orderBy: Portal_orderBy + orderDirection: OrderDirection + where: Portal_filter + """ + The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted. + """ + block: Block_height + """ + Set to `allow` to receive data even if the subgraph has skipped over errors while syncing. + """ + subgraphError: _SubgraphErrorPolicy_! = deny + ): [Portal!]! + schema( + id: ID! + """ + The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted. + """ + block: Block_height + """ + Set to `allow` to receive data even if the subgraph has skipped over errors while syncing. + """ + subgraphError: _SubgraphErrorPolicy_! = deny + ): Schema + schemas( + skip: Int = 0 + first: Int = 100 + orderBy: Schema_orderBy + orderDirection: OrderDirection + where: Schema_filter + """ + The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted. + """ + block: Block_height + """ + Set to `allow` to receive data even if the subgraph has skipped over errors while syncing. + """ + subgraphError: _SubgraphErrorPolicy_! = deny + ): [Schema!]! + counter( + id: ID! + """ + The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted. + """ + block: Block_height + """ + Set to `allow` to receive data even if the subgraph has skipped over errors while syncing. + """ + subgraphError: _SubgraphErrorPolicy_! = deny + ): Counter + counters( + skip: Int = 0 + first: Int = 100 + orderBy: Counter_orderBy + orderDirection: OrderDirection + where: Counter_filter + """ + The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted. + """ + block: Block_height + """ + Set to `allow` to receive data even if the subgraph has skipped over errors while syncing. + """ + subgraphError: _SubgraphErrorPolicy_! = deny + ): [Counter!]! + """Access to subgraph metadata""" + _meta(block: Block_height): _Meta_ +} + +type Schema { + id: ID! + name: String! + description: String! + context: String! + schema: String! +} + +input Schema_filter { + id: ID + id_not: ID + id_gt: ID + id_lt: ID + id_gte: ID + id_lte: ID + id_in: [ID!] + id_not_in: [ID!] + name: String + name_not: String + name_gt: String + name_lt: String + name_gte: String + name_lte: String + name_in: [String!] + name_not_in: [String!] + name_contains: String + name_contains_nocase: String + name_not_contains: String + name_not_contains_nocase: String + name_starts_with: String + name_starts_with_nocase: String + name_not_starts_with: String + name_not_starts_with_nocase: String + name_ends_with: String + name_ends_with_nocase: String + name_not_ends_with: String + name_not_ends_with_nocase: String + description: String + description_not: String + description_gt: String + description_lt: String + description_gte: String + description_lte: String + description_in: [String!] + description_not_in: [String!] + description_contains: String + description_contains_nocase: String + description_not_contains: String + description_not_contains_nocase: String + description_starts_with: String + description_starts_with_nocase: String + description_not_starts_with: String + description_not_starts_with_nocase: String + description_ends_with: String + description_ends_with_nocase: String + description_not_ends_with: String + description_not_ends_with_nocase: String + context: String + context_not: String + context_gt: String + context_lt: String + context_gte: String + context_lte: String + context_in: [String!] + context_not_in: [String!] + context_contains: String + context_contains_nocase: String + context_not_contains: String + context_not_contains_nocase: String + context_starts_with: String + context_starts_with_nocase: String + context_not_starts_with: String + context_not_starts_with_nocase: String + context_ends_with: String + context_ends_with_nocase: String + context_not_ends_with: String + context_not_ends_with_nocase: String + schema: String + schema_not: String + schema_gt: String + schema_lt: String + schema_gte: String + schema_lte: String + schema_in: [String!] + schema_not_in: [String!] + schema_contains: String + schema_contains_nocase: String + schema_not_contains: String + schema_not_contains_nocase: String + schema_starts_with: String + schema_starts_with_nocase: String + schema_not_starts_with: String + schema_not_starts_with_nocase: String + schema_ends_with: String + schema_ends_with_nocase: String + schema_not_ends_with: String + schema_not_ends_with_nocase: String + """Filter for the block changed event.""" + _change_block: BlockChangedFilter +} + +enum Schema_orderBy { + id + name + description + context + schema +} + +type Subscription { + attestation( + id: ID! + """ + The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted. + """ + block: Block_height + """ + Set to `allow` to receive data even if the subgraph has skipped over errors while syncing. + """ + subgraphError: _SubgraphErrorPolicy_! = deny + ): Attestation + attestations( + skip: Int = 0 + first: Int = 100 + orderBy: Attestation_orderBy + orderDirection: OrderDirection + where: Attestation_filter + """ + The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted. + """ + block: Block_height + """ + Set to `allow` to receive data even if the subgraph has skipped over errors while syncing. + """ + subgraphError: _SubgraphErrorPolicy_! = deny + ): [Attestation!]! + module( + id: ID! + """ + The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted. + """ + block: Block_height + """ + Set to `allow` to receive data even if the subgraph has skipped over errors while syncing. + """ + subgraphError: _SubgraphErrorPolicy_! = deny + ): Module + modules( + skip: Int = 0 + first: Int = 100 + orderBy: Module_orderBy + orderDirection: OrderDirection + where: Module_filter + """ + The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted. + """ + block: Block_height + """ + Set to `allow` to receive data even if the subgraph has skipped over errors while syncing. + """ + subgraphError: _SubgraphErrorPolicy_! = deny + ): [Module!]! + portal( + id: ID! + """ + The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted. + """ + block: Block_height + """ + Set to `allow` to receive data even if the subgraph has skipped over errors while syncing. + """ + subgraphError: _SubgraphErrorPolicy_! = deny + ): Portal + portals( + skip: Int = 0 + first: Int = 100 + orderBy: Portal_orderBy + orderDirection: OrderDirection + where: Portal_filter + """ + The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted. + """ + block: Block_height + """ + Set to `allow` to receive data even if the subgraph has skipped over errors while syncing. + """ + subgraphError: _SubgraphErrorPolicy_! = deny + ): [Portal!]! + schema( + id: ID! + """ + The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted. + """ + block: Block_height + """ + Set to `allow` to receive data even if the subgraph has skipped over errors while syncing. + """ + subgraphError: _SubgraphErrorPolicy_! = deny + ): Schema + schemas( + skip: Int = 0 + first: Int = 100 + orderBy: Schema_orderBy + orderDirection: OrderDirection + where: Schema_filter + """ + The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted. + """ + block: Block_height + """ + Set to `allow` to receive data even if the subgraph has skipped over errors while syncing. + """ + subgraphError: _SubgraphErrorPolicy_! = deny + ): [Schema!]! + counter( + id: ID! + """ + The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted. + """ + block: Block_height + """ + Set to `allow` to receive data even if the subgraph has skipped over errors while syncing. + """ + subgraphError: _SubgraphErrorPolicy_! = deny + ): Counter + counters( + skip: Int = 0 + first: Int = 100 + orderBy: Counter_orderBy + orderDirection: OrderDirection + where: Counter_filter + """ + The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted. + """ + block: Block_height + """ + Set to `allow` to receive data even if the subgraph has skipped over errors while syncing. + """ + subgraphError: _SubgraphErrorPolicy_! = deny + ): [Counter!]! + """Access to subgraph metadata""" + _meta(block: Block_height): _Meta_ +} + +type _Block_ { + """The hash of the block""" + hash: Bytes + """The block number""" + number: Int! + """Integer representation of the timestamp stored in blocks for the chain""" + timestamp: Int +} + +"""The type for the top-level _meta field""" +type _Meta_ { + """ + Information about a specific subgraph block. The hash of the block + will be null if the _meta field has a block constraint that asks for + a block number. It will be filled if the _meta field has no block constraint + and therefore asks for the latest block + + """ + block: _Block_! + """The deployment ID""" + deployment: String! + """If `true`, the subgraph encountered indexing errors at some past block""" + hasIndexingErrors: Boolean! +} + +enum _SubgraphErrorPolicy_ { + """Data will be returned even if the subgraph has indexing errors""" + allow + """ + If the subgraph has indexing errors, data will be omitted. The default. + """ + deny +} \ No newline at end of file diff --git a/sdk/.graphclient/sources/linea-attestation-registry/types.ts b/sdk/.graphclient/sources/linea-attestation-registry/types.ts new file mode 100644 index 00000000..3380dedd --- /dev/null +++ b/sdk/.graphclient/sources/linea-attestation-registry/types.ts @@ -0,0 +1,840 @@ +// @ts-nocheck + +import { InContextSdkMethod } from '@graphql-mesh/types'; +import { MeshContext } from '@graphql-mesh/runtime'; + +export namespace LineaAttestationRegistryTypes { + export type Maybe = T | null; +export type InputMaybe = Maybe; +export type Exact = { [K in keyof T]: T[K] }; +export type MakeOptional = Omit & { [SubKey in K]?: Maybe }; +export type MakeMaybe = Omit & { [SubKey in K]: Maybe }; +/** All built-in and custom scalars, mapped to their actual values */ +export type Scalars = { + ID: string; + String: string; + Boolean: boolean; + Int: number; + Float: number; + BigDecimal: any; + BigInt: any; + Bytes: any; +}; + +export type Attestation = { + id: Scalars['ID']; + schemaId: Scalars['Bytes']; + replacedBy: Scalars['Bytes']; + attester: Scalars['Bytes']; + portal: Scalars['Bytes']; + attestedDate: Scalars['BigInt']; + expirationDate: Scalars['BigInt']; + revocationDate: Scalars['BigInt']; + version: Scalars['BigInt']; + revoked: Scalars['Boolean']; + subject: Scalars['Bytes']; + attestationData: Scalars['Bytes']; + schemaString?: Maybe; + decodedData?: Maybe>; +}; + +export type Attestation_filter = { + id?: InputMaybe; + id_not?: InputMaybe; + id_gt?: InputMaybe; + id_lt?: InputMaybe; + id_gte?: InputMaybe; + id_lte?: InputMaybe; + id_in?: InputMaybe>; + id_not_in?: InputMaybe>; + schemaId?: InputMaybe; + schemaId_not?: InputMaybe; + schemaId_in?: InputMaybe>; + schemaId_not_in?: InputMaybe>; + schemaId_contains?: InputMaybe; + schemaId_not_contains?: InputMaybe; + replacedBy?: InputMaybe; + replacedBy_not?: InputMaybe; + replacedBy_in?: InputMaybe>; + replacedBy_not_in?: InputMaybe>; + replacedBy_contains?: InputMaybe; + replacedBy_not_contains?: InputMaybe; + attester?: InputMaybe; + attester_not?: InputMaybe; + attester_in?: InputMaybe>; + attester_not_in?: InputMaybe>; + attester_contains?: InputMaybe; + attester_not_contains?: InputMaybe; + portal?: InputMaybe; + portal_not?: InputMaybe; + portal_in?: InputMaybe>; + portal_not_in?: InputMaybe>; + portal_contains?: InputMaybe; + portal_not_contains?: InputMaybe; + attestedDate?: InputMaybe; + attestedDate_not?: InputMaybe; + attestedDate_gt?: InputMaybe; + attestedDate_lt?: InputMaybe; + attestedDate_gte?: InputMaybe; + attestedDate_lte?: InputMaybe; + attestedDate_in?: InputMaybe>; + attestedDate_not_in?: InputMaybe>; + expirationDate?: InputMaybe; + expirationDate_not?: InputMaybe; + expirationDate_gt?: InputMaybe; + expirationDate_lt?: InputMaybe; + expirationDate_gte?: InputMaybe; + expirationDate_lte?: InputMaybe; + expirationDate_in?: InputMaybe>; + expirationDate_not_in?: InputMaybe>; + revocationDate?: InputMaybe; + revocationDate_not?: InputMaybe; + revocationDate_gt?: InputMaybe; + revocationDate_lt?: InputMaybe; + revocationDate_gte?: InputMaybe; + revocationDate_lte?: InputMaybe; + revocationDate_in?: InputMaybe>; + revocationDate_not_in?: InputMaybe>; + version?: InputMaybe; + version_not?: InputMaybe; + version_gt?: InputMaybe; + version_lt?: InputMaybe; + version_gte?: InputMaybe; + version_lte?: InputMaybe; + version_in?: InputMaybe>; + version_not_in?: InputMaybe>; + revoked?: InputMaybe; + revoked_not?: InputMaybe; + revoked_in?: InputMaybe>; + revoked_not_in?: InputMaybe>; + subject?: InputMaybe; + subject_not?: InputMaybe; + subject_in?: InputMaybe>; + subject_not_in?: InputMaybe>; + subject_contains?: InputMaybe; + subject_not_contains?: InputMaybe; + attestationData?: InputMaybe; + attestationData_not?: InputMaybe; + attestationData_in?: InputMaybe>; + attestationData_not_in?: InputMaybe>; + attestationData_contains?: InputMaybe; + attestationData_not_contains?: InputMaybe; + schemaString?: InputMaybe; + schemaString_not?: InputMaybe; + schemaString_gt?: InputMaybe; + schemaString_lt?: InputMaybe; + schemaString_gte?: InputMaybe; + schemaString_lte?: InputMaybe; + schemaString_in?: InputMaybe>; + schemaString_not_in?: InputMaybe>; + schemaString_contains?: InputMaybe; + schemaString_contains_nocase?: InputMaybe; + schemaString_not_contains?: InputMaybe; + schemaString_not_contains_nocase?: InputMaybe; + schemaString_starts_with?: InputMaybe; + schemaString_starts_with_nocase?: InputMaybe; + schemaString_not_starts_with?: InputMaybe; + schemaString_not_starts_with_nocase?: InputMaybe; + schemaString_ends_with?: InputMaybe; + schemaString_ends_with_nocase?: InputMaybe; + schemaString_not_ends_with?: InputMaybe; + schemaString_not_ends_with_nocase?: InputMaybe; + decodedData?: InputMaybe>; + decodedData_not?: InputMaybe>; + decodedData_contains?: InputMaybe>; + decodedData_contains_nocase?: InputMaybe>; + decodedData_not_contains?: InputMaybe>; + decodedData_not_contains_nocase?: InputMaybe>; + /** Filter for the block changed event. */ + _change_block?: InputMaybe; +}; + +export type Attestation_orderBy = + | 'id' + | 'schemaId' + | 'replacedBy' + | 'attester' + | 'portal' + | 'attestedDate' + | 'expirationDate' + | 'revocationDate' + | 'version' + | 'revoked' + | 'subject' + | 'attestationData' + | 'schemaString' + | 'decodedData'; + +export type BlockChangedFilter = { + number_gte: Scalars['Int']; +}; + +export type Block_height = { + hash?: InputMaybe; + number?: InputMaybe; + number_gte?: InputMaybe; +}; + +export type Counter = { + id: Scalars['ID']; + attestations?: Maybe; + modules?: Maybe; + portals?: Maybe; + schemas?: Maybe; +}; + +export type Counter_filter = { + id?: InputMaybe; + id_not?: InputMaybe; + id_gt?: InputMaybe; + id_lt?: InputMaybe; + id_gte?: InputMaybe; + id_lte?: InputMaybe; + id_in?: InputMaybe>; + id_not_in?: InputMaybe>; + attestations?: InputMaybe; + attestations_not?: InputMaybe; + attestations_gt?: InputMaybe; + attestations_lt?: InputMaybe; + attestations_gte?: InputMaybe; + attestations_lte?: InputMaybe; + attestations_in?: InputMaybe>; + attestations_not_in?: InputMaybe>; + modules?: InputMaybe; + modules_not?: InputMaybe; + modules_gt?: InputMaybe; + modules_lt?: InputMaybe; + modules_gte?: InputMaybe; + modules_lte?: InputMaybe; + modules_in?: InputMaybe>; + modules_not_in?: InputMaybe>; + portals?: InputMaybe; + portals_not?: InputMaybe; + portals_gt?: InputMaybe; + portals_lt?: InputMaybe; + portals_gte?: InputMaybe; + portals_lte?: InputMaybe; + portals_in?: InputMaybe>; + portals_not_in?: InputMaybe>; + schemas?: InputMaybe; + schemas_not?: InputMaybe; + schemas_gt?: InputMaybe; + schemas_lt?: InputMaybe; + schemas_gte?: InputMaybe; + schemas_lte?: InputMaybe; + schemas_in?: InputMaybe>; + schemas_not_in?: InputMaybe>; + /** Filter for the block changed event. */ + _change_block?: InputMaybe; +}; + +export type Counter_orderBy = + | 'id' + | 'attestations' + | 'modules' + | 'portals' + | 'schemas'; + +export type Module = { + id: Scalars['ID']; + moduleAddress: Scalars['Bytes']; + name: Scalars['String']; + description: Scalars['String']; +}; + +export type Module_filter = { + id?: InputMaybe; + id_not?: InputMaybe; + id_gt?: InputMaybe; + id_lt?: InputMaybe; + id_gte?: InputMaybe; + id_lte?: InputMaybe; + id_in?: InputMaybe>; + id_not_in?: InputMaybe>; + moduleAddress?: InputMaybe; + moduleAddress_not?: InputMaybe; + moduleAddress_in?: InputMaybe>; + moduleAddress_not_in?: InputMaybe>; + moduleAddress_contains?: InputMaybe; + moduleAddress_not_contains?: InputMaybe; + name?: InputMaybe; + name_not?: InputMaybe; + name_gt?: InputMaybe; + name_lt?: InputMaybe; + name_gte?: InputMaybe; + name_lte?: InputMaybe; + name_in?: InputMaybe>; + name_not_in?: InputMaybe>; + name_contains?: InputMaybe; + name_contains_nocase?: InputMaybe; + name_not_contains?: InputMaybe; + name_not_contains_nocase?: InputMaybe; + name_starts_with?: InputMaybe; + name_starts_with_nocase?: InputMaybe; + name_not_starts_with?: InputMaybe; + name_not_starts_with_nocase?: InputMaybe; + name_ends_with?: InputMaybe; + name_ends_with_nocase?: InputMaybe; + name_not_ends_with?: InputMaybe; + name_not_ends_with_nocase?: InputMaybe; + description?: InputMaybe; + description_not?: InputMaybe; + description_gt?: InputMaybe; + description_lt?: InputMaybe; + description_gte?: InputMaybe; + description_lte?: InputMaybe; + description_in?: InputMaybe>; + description_not_in?: InputMaybe>; + description_contains?: InputMaybe; + description_contains_nocase?: InputMaybe; + description_not_contains?: InputMaybe; + description_not_contains_nocase?: InputMaybe; + description_starts_with?: InputMaybe; + description_starts_with_nocase?: InputMaybe; + description_not_starts_with?: InputMaybe; + description_not_starts_with_nocase?: InputMaybe; + description_ends_with?: InputMaybe; + description_ends_with_nocase?: InputMaybe; + description_not_ends_with?: InputMaybe; + description_not_ends_with_nocase?: InputMaybe; + /** Filter for the block changed event. */ + _change_block?: InputMaybe; +}; + +export type Module_orderBy = + | 'id' + | 'moduleAddress' + | 'name' + | 'description'; + +/** Defines the order direction, either ascending or descending */ +export type OrderDirection = + | 'asc' + | 'desc'; + +export type Portal = { + id: Scalars['ID']; + ownerAddress: Scalars['Bytes']; + modules?: Maybe>; + isRevocable: Scalars['Boolean']; + name: Scalars['String']; + description: Scalars['String']; + ownerName: Scalars['String']; +}; + +export type Portal_filter = { + id?: InputMaybe; + id_not?: InputMaybe; + id_gt?: InputMaybe; + id_lt?: InputMaybe; + id_gte?: InputMaybe; + id_lte?: InputMaybe; + id_in?: InputMaybe>; + id_not_in?: InputMaybe>; + ownerAddress?: InputMaybe; + ownerAddress_not?: InputMaybe; + ownerAddress_in?: InputMaybe>; + ownerAddress_not_in?: InputMaybe>; + ownerAddress_contains?: InputMaybe; + ownerAddress_not_contains?: InputMaybe; + modules?: InputMaybe>; + modules_not?: InputMaybe>; + modules_contains?: InputMaybe>; + modules_contains_nocase?: InputMaybe>; + modules_not_contains?: InputMaybe>; + modules_not_contains_nocase?: InputMaybe>; + isRevocable?: InputMaybe; + isRevocable_not?: InputMaybe; + isRevocable_in?: InputMaybe>; + isRevocable_not_in?: InputMaybe>; + name?: InputMaybe; + name_not?: InputMaybe; + name_gt?: InputMaybe; + name_lt?: InputMaybe; + name_gte?: InputMaybe; + name_lte?: InputMaybe; + name_in?: InputMaybe>; + name_not_in?: InputMaybe>; + name_contains?: InputMaybe; + name_contains_nocase?: InputMaybe; + name_not_contains?: InputMaybe; + name_not_contains_nocase?: InputMaybe; + name_starts_with?: InputMaybe; + name_starts_with_nocase?: InputMaybe; + name_not_starts_with?: InputMaybe; + name_not_starts_with_nocase?: InputMaybe; + name_ends_with?: InputMaybe; + name_ends_with_nocase?: InputMaybe; + name_not_ends_with?: InputMaybe; + name_not_ends_with_nocase?: InputMaybe; + description?: InputMaybe; + description_not?: InputMaybe; + description_gt?: InputMaybe; + description_lt?: InputMaybe; + description_gte?: InputMaybe; + description_lte?: InputMaybe; + description_in?: InputMaybe>; + description_not_in?: InputMaybe>; + description_contains?: InputMaybe; + description_contains_nocase?: InputMaybe; + description_not_contains?: InputMaybe; + description_not_contains_nocase?: InputMaybe; + description_starts_with?: InputMaybe; + description_starts_with_nocase?: InputMaybe; + description_not_starts_with?: InputMaybe; + description_not_starts_with_nocase?: InputMaybe; + description_ends_with?: InputMaybe; + description_ends_with_nocase?: InputMaybe; + description_not_ends_with?: InputMaybe; + description_not_ends_with_nocase?: InputMaybe; + ownerName?: InputMaybe; + ownerName_not?: InputMaybe; + ownerName_gt?: InputMaybe; + ownerName_lt?: InputMaybe; + ownerName_gte?: InputMaybe; + ownerName_lte?: InputMaybe; + ownerName_in?: InputMaybe>; + ownerName_not_in?: InputMaybe>; + ownerName_contains?: InputMaybe; + ownerName_contains_nocase?: InputMaybe; + ownerName_not_contains?: InputMaybe; + ownerName_not_contains_nocase?: InputMaybe; + ownerName_starts_with?: InputMaybe; + ownerName_starts_with_nocase?: InputMaybe; + ownerName_not_starts_with?: InputMaybe; + ownerName_not_starts_with_nocase?: InputMaybe; + ownerName_ends_with?: InputMaybe; + ownerName_ends_with_nocase?: InputMaybe; + ownerName_not_ends_with?: InputMaybe; + ownerName_not_ends_with_nocase?: InputMaybe; + /** Filter for the block changed event. */ + _change_block?: InputMaybe; +}; + +export type Portal_orderBy = + | 'id' + | 'ownerAddress' + | 'modules' + | 'isRevocable' + | 'name' + | 'description' + | 'ownerName'; + +export type Query = { + attestation?: Maybe; + attestations: Array; + module?: Maybe; + modules: Array; + portal?: Maybe; + portals: Array; + schema?: Maybe; + schemas: Array; + counter?: Maybe; + counters: Array; + /** Access to subgraph metadata */ + _meta?: Maybe<_Meta_>; +}; + + +export type QueryattestationArgs = { + id: Scalars['ID']; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; +}; + + +export type QueryattestationsArgs = { + skip?: InputMaybe; + first?: InputMaybe; + orderBy?: InputMaybe; + orderDirection?: InputMaybe; + where?: InputMaybe; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; +}; + + +export type QuerymoduleArgs = { + id: Scalars['ID']; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; +}; + + +export type QuerymodulesArgs = { + skip?: InputMaybe; + first?: InputMaybe; + orderBy?: InputMaybe; + orderDirection?: InputMaybe; + where?: InputMaybe; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; +}; + + +export type QueryportalArgs = { + id: Scalars['ID']; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; +}; + + +export type QueryportalsArgs = { + skip?: InputMaybe; + first?: InputMaybe; + orderBy?: InputMaybe; + orderDirection?: InputMaybe; + where?: InputMaybe; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; +}; + + +export type QueryschemaArgs = { + id: Scalars['ID']; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; +}; + + +export type QueryschemasArgs = { + skip?: InputMaybe; + first?: InputMaybe; + orderBy?: InputMaybe; + orderDirection?: InputMaybe; + where?: InputMaybe; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; +}; + + +export type QuerycounterArgs = { + id: Scalars['ID']; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; +}; + + +export type QuerycountersArgs = { + skip?: InputMaybe; + first?: InputMaybe; + orderBy?: InputMaybe; + orderDirection?: InputMaybe; + where?: InputMaybe; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; +}; + + +export type Query_metaArgs = { + block?: InputMaybe; +}; + +export type Schema = { + id: Scalars['ID']; + name: Scalars['String']; + description: Scalars['String']; + context: Scalars['String']; + schema: Scalars['String']; +}; + +export type Schema_filter = { + id?: InputMaybe; + id_not?: InputMaybe; + id_gt?: InputMaybe; + id_lt?: InputMaybe; + id_gte?: InputMaybe; + id_lte?: InputMaybe; + id_in?: InputMaybe>; + id_not_in?: InputMaybe>; + name?: InputMaybe; + name_not?: InputMaybe; + name_gt?: InputMaybe; + name_lt?: InputMaybe; + name_gte?: InputMaybe; + name_lte?: InputMaybe; + name_in?: InputMaybe>; + name_not_in?: InputMaybe>; + name_contains?: InputMaybe; + name_contains_nocase?: InputMaybe; + name_not_contains?: InputMaybe; + name_not_contains_nocase?: InputMaybe; + name_starts_with?: InputMaybe; + name_starts_with_nocase?: InputMaybe; + name_not_starts_with?: InputMaybe; + name_not_starts_with_nocase?: InputMaybe; + name_ends_with?: InputMaybe; + name_ends_with_nocase?: InputMaybe; + name_not_ends_with?: InputMaybe; + name_not_ends_with_nocase?: InputMaybe; + description?: InputMaybe; + description_not?: InputMaybe; + description_gt?: InputMaybe; + description_lt?: InputMaybe; + description_gte?: InputMaybe; + description_lte?: InputMaybe; + description_in?: InputMaybe>; + description_not_in?: InputMaybe>; + description_contains?: InputMaybe; + description_contains_nocase?: InputMaybe; + description_not_contains?: InputMaybe; + description_not_contains_nocase?: InputMaybe; + description_starts_with?: InputMaybe; + description_starts_with_nocase?: InputMaybe; + description_not_starts_with?: InputMaybe; + description_not_starts_with_nocase?: InputMaybe; + description_ends_with?: InputMaybe; + description_ends_with_nocase?: InputMaybe; + description_not_ends_with?: InputMaybe; + description_not_ends_with_nocase?: InputMaybe; + context?: InputMaybe; + context_not?: InputMaybe; + context_gt?: InputMaybe; + context_lt?: InputMaybe; + context_gte?: InputMaybe; + context_lte?: InputMaybe; + context_in?: InputMaybe>; + context_not_in?: InputMaybe>; + context_contains?: InputMaybe; + context_contains_nocase?: InputMaybe; + context_not_contains?: InputMaybe; + context_not_contains_nocase?: InputMaybe; + context_starts_with?: InputMaybe; + context_starts_with_nocase?: InputMaybe; + context_not_starts_with?: InputMaybe; + context_not_starts_with_nocase?: InputMaybe; + context_ends_with?: InputMaybe; + context_ends_with_nocase?: InputMaybe; + context_not_ends_with?: InputMaybe; + context_not_ends_with_nocase?: InputMaybe; + schema?: InputMaybe; + schema_not?: InputMaybe; + schema_gt?: InputMaybe; + schema_lt?: InputMaybe; + schema_gte?: InputMaybe; + schema_lte?: InputMaybe; + schema_in?: InputMaybe>; + schema_not_in?: InputMaybe>; + schema_contains?: InputMaybe; + schema_contains_nocase?: InputMaybe; + schema_not_contains?: InputMaybe; + schema_not_contains_nocase?: InputMaybe; + schema_starts_with?: InputMaybe; + schema_starts_with_nocase?: InputMaybe; + schema_not_starts_with?: InputMaybe; + schema_not_starts_with_nocase?: InputMaybe; + schema_ends_with?: InputMaybe; + schema_ends_with_nocase?: InputMaybe; + schema_not_ends_with?: InputMaybe; + schema_not_ends_with_nocase?: InputMaybe; + /** Filter for the block changed event. */ + _change_block?: InputMaybe; +}; + +export type Schema_orderBy = + | 'id' + | 'name' + | 'description' + | 'context' + | 'schema'; + +export type Subscription = { + attestation?: Maybe; + attestations: Array; + module?: Maybe; + modules: Array; + portal?: Maybe; + portals: Array; + schema?: Maybe; + schemas: Array; + counter?: Maybe; + counters: Array; + /** Access to subgraph metadata */ + _meta?: Maybe<_Meta_>; +}; + + +export type SubscriptionattestationArgs = { + id: Scalars['ID']; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; +}; + + +export type SubscriptionattestationsArgs = { + skip?: InputMaybe; + first?: InputMaybe; + orderBy?: InputMaybe; + orderDirection?: InputMaybe; + where?: InputMaybe; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; +}; + + +export type SubscriptionmoduleArgs = { + id: Scalars['ID']; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; +}; + + +export type SubscriptionmodulesArgs = { + skip?: InputMaybe; + first?: InputMaybe; + orderBy?: InputMaybe; + orderDirection?: InputMaybe; + where?: InputMaybe; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; +}; + + +export type SubscriptionportalArgs = { + id: Scalars['ID']; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; +}; + + +export type SubscriptionportalsArgs = { + skip?: InputMaybe; + first?: InputMaybe; + orderBy?: InputMaybe; + orderDirection?: InputMaybe; + where?: InputMaybe; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; +}; + + +export type SubscriptionschemaArgs = { + id: Scalars['ID']; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; +}; + + +export type SubscriptionschemasArgs = { + skip?: InputMaybe; + first?: InputMaybe; + orderBy?: InputMaybe; + orderDirection?: InputMaybe; + where?: InputMaybe; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; +}; + + +export type SubscriptioncounterArgs = { + id: Scalars['ID']; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; +}; + + +export type SubscriptioncountersArgs = { + skip?: InputMaybe; + first?: InputMaybe; + orderBy?: InputMaybe; + orderDirection?: InputMaybe; + where?: InputMaybe; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; +}; + + +export type Subscription_metaArgs = { + block?: InputMaybe; +}; + +export type _Block_ = { + /** The hash of the block */ + hash?: Maybe; + /** The block number */ + number: Scalars['Int']; + /** Integer representation of the timestamp stored in blocks for the chain */ + timestamp?: Maybe; +}; + +/** The type for the top-level _meta field */ +export type _Meta_ = { + /** + * Information about a specific subgraph block. The hash of the block + * will be null if the _meta field has a block constraint that asks for + * a block number. It will be filled if the _meta field has no block constraint + * and therefore asks for the latest block + * + */ + block: _Block_; + /** The deployment ID */ + deployment: Scalars['String']; + /** If `true`, the subgraph encountered indexing errors at some past block */ + hasIndexingErrors: Scalars['Boolean']; +}; + +export type _SubgraphErrorPolicy_ = + /** Data will be returned even if the subgraph has indexing errors */ + | 'allow' + /** If the subgraph has indexing errors, data will be omitted. The default. */ + | 'deny'; + + export type QuerySdk = { + /** null **/ + attestation: InContextSdkMethod, + /** null **/ + attestations: InContextSdkMethod, + /** null **/ + module: InContextSdkMethod, + /** null **/ + modules: InContextSdkMethod, + /** null **/ + portal: InContextSdkMethod, + /** null **/ + portals: InContextSdkMethod, + /** null **/ + schema: InContextSdkMethod, + /** null **/ + schemas: InContextSdkMethod, + /** null **/ + counter: InContextSdkMethod, + /** null **/ + counters: InContextSdkMethod, + /** Access to subgraph metadata **/ + _meta: InContextSdkMethod + }; + + export type MutationSdk = { + + }; + + export type SubscriptionSdk = { + /** null **/ + attestation: InContextSdkMethod, + /** null **/ + attestations: InContextSdkMethod, + /** null **/ + module: InContextSdkMethod, + /** null **/ + modules: InContextSdkMethod, + /** null **/ + portal: InContextSdkMethod, + /** null **/ + portals: InContextSdkMethod, + /** null **/ + schema: InContextSdkMethod, + /** null **/ + schemas: InContextSdkMethod, + /** null **/ + counter: InContextSdkMethod, + /** null **/ + counters: InContextSdkMethod, + /** Access to subgraph metadata **/ + _meta: InContextSdkMethod + }; + + export type Context = { + ["linea-attestation-registry"]: { Query: QuerySdk, Mutation: MutationSdk, Subscription: SubscriptionSdk }, + + }; +} diff --git a/sdk/.graphclientrc.yml b/sdk/.graphclientrc.yml new file mode 100644 index 00000000..caf8086f --- /dev/null +++ b/sdk/.graphclientrc.yml @@ -0,0 +1,6 @@ +# .graphclientrc.yml +sources: + - name: linea-attestation-registry + handler: + graphql: + endpoint: https://graph-query.linea.build/subgraphs/name/Consensys/linea-attestation-registry diff --git a/sdk/README.md b/sdk/README.md index fe7c8571..516042fa 100644 --- a/sdk/README.md +++ b/sdk/README.md @@ -178,17 +178,25 @@ Note: if your don't pass any parameter (e.g. `pnpm portal findBy`)`, some defaul ### Portal examples ```shell -pnpm portal findby '{\"ownerName\": \"Tester\"}' - pnpm portal findonebyid '0x34798a866f52949208e67fb57ad36244024c50c0' -pnpm portal simulateattest '{\"portalAddress\": \"0x34798a866f52949208e67fb57ad36244024c50c0\", \"attestationPayload\" : { \"schemaId\": \"0x9ba590dd7fbd5bd1a7d06cdcb4744e20a49b3520560575cd63de17734a408738\", \"expirationDate\": \"1693583329\", \"subject\": \"0x828c9f04D1a07E3b0aBE12A9F8238a3Ff7E57b47\", \"attestationData\": [{ \"isBuidler\": \"true\" }]}, \"validationPayloads\": []}' +pnpm portal findby '{\"ownerName\": \"Satya\"}' + +pnpm portal simulateattest '{\"portalAddress\": \"0x34798a866f52949208e67fb57ad36244024c50c0\", \"attestationPayload\" : { \"schemaId\": \"0x9ba590dd7fbd5bd1a7d06cdcb4744e20a49b3520560575cd63de17734a408738\", \"expirationDate\": 1693583329, \"subject\": \"0x828c9f04D1a07E3b0aBE12A9F8238a3Ff7E57b47\", \"attestationData\": [{ \"isBuidler\": true }]}, \"validationPayloads\": []}' + +pnpm portal attest '{\"portalAddress\": \"0x34798a866f52949208e67fb57ad36244024c50c0\", \"attestationPayload\" : { \"schemaId\": \"0x9ba590dd7fbd5bd1a7d06cdcb4744e20a49b3520560575cd63de17734a408738\", \"expirationDate\": 1693583329, \"subject\": \"0x828c9f04D1a07E3b0aBE12A9F8238a3Ff7E57b47\", \"attestationData\": [{ \"isBuidler\": true }]}, \"validationPayloads\": []}' + +pnpm portal simulateBulkAttest '{\"portalAddress\": \"0x34798a866f52949208e67fb57ad36244024c50c0\", \"attestationPayloads\" : [{ \"schemaId\": \"0x9ba590dd7fbd5bd1a7d06cdcb4744e20a49b3520560575cd63de17734a408738\", \"expirationDate\": 1693583329, \"subject\": \"0x828c9f04D1a07E3b0aBE12A9F8238a3Ff7E57b47\", \"attestationData\": [{ \"isBuidler\": true }]},{ \"schemaId\": \"0x9ba590dd7fbd5bd1a7d06cdcb4744e20a49b3520560575cd63de17734a408738\", \"expirationDate\": 1693583329, \"subject\": \"0x828c9f04D1a07E3b0aBE12A9F8238a3Ff7E57b47\", \"attestationData\": [{ \"isBuidler\": true }]}], \"validationPayloads\": [[],[]]}' + +pnpm portal bulkAttest '{\"portalAddress\": \"0x34798a866f52949208e67fb57ad36244024c50c0\", \"attestationPayloads\" : [{ \"schemaId\": \"0x9ba590dd7fbd5bd1a7d06cdcb4744e20a49b3520560575cd63de17734a408738\", \"expirationDate\": 1693583329, \"subject\": \"0x828c9f04D1a07E3b0aBE12A9F8238a3Ff7E57b47\", \"attestationData\": [{ \"isBuidler\": true }]},{ \"schemaId\": \"0x9ba590dd7fbd5bd1a7d06cdcb4744e20a49b3520560575cd63de17734a408738\", \"expirationDate\": 1693583329, \"subject\": \"0x828c9f04D1a07E3b0aBE12A9F8238a3Ff7E57b47\", \"attestationData\": [{ \"isBuidler\": true }]}], \"validationPayloads\": [[],[]]}' + +pnpm portal simulaterevoke '{\"portalAddress\": \"0x34798a866f52949208e67fb57ad36244024c50c0\", \"attestationId\" : \"0x00000000000000000000000000000000000000000000000000000000000010a8\" }' -pnpm portal attest '{\"portalAddress\": \"0x34798a866f52949208e67fb57ad36244024c50c0\", \"attestationPayload\" : { \"schemaId\": \"0x9ba590dd7fbd5bd1a7d06cdcb4744e20a49b3520560575cd63de17734a408738\", \"expirationDate\": \"1693583329\", \"subject\": \"0x828c9f04D1a07E3b0aBE12A9F8238a3Ff7E57b47\", \"attestationData\": [{ \"isBuidler\": \"true\" }]}, \"validationPayloads\": []}' +pnpm portal revoke '{\"portalAddress\": \"0x34798a866f52949208e67fb57ad36244024c50c0\", \"attestationId\" : \"0x00000000000000000000000000000000000000000000000000000000000010a8\" }' -pnpm portal simulaterevoke '{\"portalAddress\": \"0x34798a866f52949208e67fb57ad36244024c50c0\", \"attestationId\" : \"0x000000000000000000000000000000000000000000000000000000000000109b\" }' +pnpm portal simulateBulkRevoke '{\"portalAddress\": \"0x34798a866f52949208e67fb57ad36244024c50c0\", \"attestationIds\" : [\"0x00000000000000000000000000000000000000000000000000000000000010a7\", \"0x00000000000000000000000000000000000000000000000000000000000010a6\"] }' -pnpm portal revoke '{\"portalAddress\": \"0x34798a866f52949208e67fb57ad36244024c50c0\", \"attestationId\" : \"0x000000000000000000000000000000000000000000000000000000000000109b\" }' +pnpm portal bulkRevoke '{\"portalAddress\": \"0x34798a866f52949208e67fb57ad36244024c50c0\", \"attestationIds\" : [\"0x00000000000000000000000000000000000000000000000000000000000010a7\", \"0x00000000000000000000000000000000000000000000000000000000000010a6\"] }' ``` ### Attestation examples @@ -198,7 +206,7 @@ pnpm attestation findonebyid "0x000000000000000000000000000000000000000000000000 pnpm attestation findby '{\"portal\": \"0x34798a866f52949208e67fb57ad36244024c50c0\"}' -pnpm attestation getRelatedAttestations "0x000000000000000000000000000000000000000000000000000000000000109b" +pnpm attestation getRelatedAttestations "0x0000000000000000000000000000000000000000000000000000000000000001" ``` ### Module examples diff --git a/sdk/babel-jest.config.cjs b/sdk/babel-jest.config.cjs new file mode 100644 index 00000000..26bfd8fd --- /dev/null +++ b/sdk/babel-jest.config.cjs @@ -0,0 +1,4 @@ +module.exports = { + presets: ["@babel/preset-env", "@babel/preset-typescript"], + plugins: ["@babel/plugin-transform-runtime", "babel-plugin-transform-import-meta"], +}; diff --git a/sdk/examples/attestation/attestationExamples.ts b/sdk/examples/attestation/attestationExamples.ts index 3a27c89f..2dad8c7c 100644 --- a/sdk/examples/attestation/attestationExamples.ts +++ b/sdk/examples/attestation/attestationExamples.ts @@ -1,5 +1,4 @@ import VeraxSdk from "../../src/VeraxSdk"; -import { Attestation } from "../../src/types"; export default class AttestationExamples { private veraxSdk: VeraxSdk; @@ -8,7 +7,7 @@ export default class AttestationExamples { this.veraxSdk = _veraxSdk; } - async run(methodName: string = "", argv: string) { + async run(argv: string, methodName: string = "") { if (methodName.toLowerCase() == "findOneById".toLowerCase() || methodName == "") { const attestationId: string = argv === "" ? "0x00000000000000000000000000000000000000000000000000000000000007b5" : argv; @@ -16,11 +15,15 @@ export default class AttestationExamples { } if (methodName.toLowerCase() == "findBy".toLowerCase() || methodName == "") { - const params: Partial = - argv === "" - ? { schemaId: "0xd1664d97bd195df77e3d5fe78c1737ab3adaa38bbe52a680d1aa30fa51f186ba" } - : JSON.parse(argv); - console.log(await this.veraxSdk.attestation.findBy(params)); + console.log( + await this.veraxSdk.attestation.findBy( + 2, + 0, + { attester_not: "0x809e815596AbEB3764aBf81BE2DC39fBBAcc9949" }, + "attestedDate", + "desc", + ), + ); } if (methodName.toLowerCase() == "getRelatedAttestations".toLowerCase() || methodName == "") { diff --git a/sdk/examples/attestation/index.ts b/sdk/examples/attestation/index.ts index cc413e37..93abf51b 100644 --- a/sdk/examples/attestation/index.ts +++ b/sdk/examples/attestation/index.ts @@ -6,4 +6,4 @@ argv !== null && argv !== undefined ? (argv = argv.replaceAll("\\", "")) : (argv const veraxSdk = new VeraxSdk(VeraxSdk.DEFAULT_LINEA_TESTNET); -await new AttestationExamples(veraxSdk).run(process.argv[2], argv); +await new AttestationExamples(veraxSdk).run(argv, process.argv[2]); diff --git a/sdk/examples/module/index.ts b/sdk/examples/module/index.ts index 3d12902b..92c9809b 100644 --- a/sdk/examples/module/index.ts +++ b/sdk/examples/module/index.ts @@ -6,4 +6,4 @@ argv !== null && argv !== undefined ? (argv = argv.replaceAll("\\", "")) : (argv const veraxSdk = new VeraxSdk(VeraxSdk.DEFAULT_LINEA_TESTNET); -await new ModuleExamples(veraxSdk).run(process.argv[2], argv); +await new ModuleExamples(veraxSdk).run(argv, process.argv[2]); diff --git a/sdk/examples/module/moduleExamples.ts b/sdk/examples/module/moduleExamples.ts index 2f73c0da..8821cfd9 100644 --- a/sdk/examples/module/moduleExamples.ts +++ b/sdk/examples/module/moduleExamples.ts @@ -1,20 +1,20 @@ import VeraxSdk from "../../src/VeraxSdk"; -import { Module } from "../../src/types"; export default class ModuleExamples { private veraxSdk: VeraxSdk; + constructor(_veraxSdk: VeraxSdk) { this.veraxSdk = _veraxSdk; } - async run(methodName: string = "", argv: string) { + + async run(argv: string, methodName: string = "") { if (methodName.toLowerCase() == "findOneById".toLowerCase() || methodName == "") { const moduleId: string = argv === "" ? "0xf75be6f9418710fd516fa82afb3aad07e11a0f1b" : argv; console.log(await this.veraxSdk.module.findOneById(moduleId)); } if (methodName.toLowerCase() == "findBy".toLowerCase() || methodName == "") { - const params: Partial = argv === "" ? { name: "SchemaCheckerModule" } : JSON.parse(argv); - console.log(await this.veraxSdk.module.findBy(params)); + console.log(await this.veraxSdk.module.findBy(2, 0, { name_contains: "Msg" }, undefined, undefined)); } if (methodName.toLowerCase() == "register" || methodName == "") console.log(await this.veraxSdk.module.register()); diff --git a/sdk/examples/portal/index.ts b/sdk/examples/portal/index.ts index c8a010ba..d1a03ad4 100644 --- a/sdk/examples/portal/index.ts +++ b/sdk/examples/portal/index.ts @@ -6,4 +6,4 @@ argv !== null && argv !== undefined ? (argv = argv.replaceAll("\\", "")) : (argv const veraxSdk = new VeraxSdk(VeraxSdk.DEFAULT_LINEA_TESTNET); -await new PortalExamples(veraxSdk).run(process.argv[2], argv); +await new PortalExamples(veraxSdk).run(argv, process.argv[2]); diff --git a/sdk/examples/portal/portalExamples.ts b/sdk/examples/portal/portalExamples.ts index 95763d60..855f5fc1 100644 --- a/sdk/examples/portal/portalExamples.ts +++ b/sdk/examples/portal/portalExamples.ts @@ -1,6 +1,5 @@ import { Address } from "viem"; import VeraxSdk from "../../src/VeraxSdk"; -import { Portal } from "../../src/types"; export default class PortalExamples { private veraxSdk: VeraxSdk; @@ -9,15 +8,14 @@ export default class PortalExamples { this.veraxSdk = _veraxSdk; } - async run(methodName: string = "", argv: string) { + async run(argv: string, methodName: string = "") { if (methodName.toLowerCase() == "findOneById".toLowerCase() || methodName == "") { const portalId: string = argv === "" ? "0x1495341ab1019798dd08976f4a3e5ab0e095510b" : argv; console.log(await this.veraxSdk.portal.findOneById(portalId)); } if (methodName.toLowerCase() == "findBy".toLowerCase() || methodName == "") { - const params: Partial = argv === "" ? { ownerName: "Clique" } : JSON.parse(argv); - console.log(await this.veraxSdk.portal.findBy(params)); + console.log(await this.veraxSdk.portal.findBy(2, 0, { ownerName: "Alain" }, "name", "desc")); } if (methodName.toLowerCase() == "simulateAttest".toLowerCase() || methodName == "") { @@ -26,14 +24,14 @@ export default class PortalExamples { const portalAddress = params?.portalAddress ? (params.portalAddress as Address) : "0xeea25bc2ec56cae601df33b8fc676673285e12cc"; - const attestationData = params?.attestationData ?? { + const attestationPayload = params?.attestationPayload ?? { schemaId: "0x9ba590dd7fbd5bd1a7d06cdcb4744e20a49b3520560575cd63de17734a408738", expirationDate: 1693583329, subject: "0x828c9f04D1a07E3b0aBE12A9F8238a3Ff7E57b47", attestationData: [{ isBuidler: true }], }; const validationPayloads = params?.validationPayloads ?? []; - console.log(await this.veraxSdk.portal.simulateAttest(portalAddress, attestationData, validationPayloads)); + console.log(await this.veraxSdk.portal.simulateAttest(portalAddress, attestationPayload, validationPayloads)); } if (methodName.toLowerCase() == "attest" || methodName == "") { @@ -42,60 +40,66 @@ export default class PortalExamples { const portalAddress = params?.portalAddress ? (params.portalAddress as Address) : "0xeea25bc2ec56cae601df33b8fc676673285e12cc"; - const attestationData = params?.attestationData ?? { + const attestationPayload = params?.attestationPayload ?? { schemaId: "0x9ba590dd7fbd5bd1a7d06cdcb4744e20a49b3520560575cd63de17734a408738", expirationDate: 1693583329, subject: "0x828c9f04D1a07E3b0aBE12A9F8238a3Ff7E57b47", attestationData: [{ isBuidler: true }], }; const validationPayloads = params?.validationPayloads ?? []; - console.log(await this.veraxSdk.portal.attest(portalAddress, attestationData, validationPayloads)); + console.log(await this.veraxSdk.portal.attest(portalAddress, attestationPayload, validationPayloads)); } if (methodName.toLowerCase() == "simulateBulkAttest".toLowerCase() || methodName == "") { + let params; + if (argv !== "") params = JSON.parse(argv); + const portalAddress = params?.portalAddress + ? (params.portalAddress as Address) + : "0xeea25bc2ec56cae601df33b8fc676673285e12cc"; + + const attestationPayloads = params?.attestationPayloads ?? [ + { + schemaId: "0x9ba590dd7fbd5bd1a7d06cdcb4744e20a49b3520560575cd63de17734a408738", + expirationDate: 1693583329, + subject: "0x828c9f04D1a07E3b0aBE12A9F8238a3Ff7E57b47", + attestationData: [{ isBuidler: true }], + }, + { + schemaId: "0x9ba590dd7fbd5bd1a7d06cdcb4744e20a49b3520560575cd63de17734a408738", + expirationDate: 1693583329, + subject: "0x828c9f04D1a07E3b0aBE12A9F8238a3Ff7E57b47", + attestationData: [{ isBuidler: true }], + }, + ]; + const validationPayloads = params?.validationPayloads ?? [[], []]; console.log( - await this.veraxSdk.portal.simulateBulkAttest( - "0x34798a866f52949208e67fb57ad36244024c50c0", - [ - { - schemaId: "0x9ba590dd7fbd5bd1a7d06cdcb4744e20a49b3520560575cd63de17734a408738", - expirationDate: 1693583329, - subject: "0x828c9f04D1a07E3b0aBE12A9F8238a3Ff7E57b47", - attestationData: [{ isBuidler: true }], - }, - { - schemaId: "0x9ba590dd7fbd5bd1a7d06cdcb4744e20a49b3520560575cd63de17734a408738", - expirationDate: 1693583329, - subject: "0x828c9f04D1a07E3b0aBE12A9F8238a3Ff7E57b47", - attestationData: [{ isBuidler: true }], - }, - ], - [], - ), + await this.veraxSdk.portal.simulateBulkAttest(portalAddress, attestationPayloads, validationPayloads), ); } if (methodName.toLowerCase() == "bulkAttest".toLowerCase() || methodName == "") { - console.log( - await this.veraxSdk.portal.bulkAttest( - "0x34798a866f52949208e67fb57ad36244024c50c0", - [ - { - schemaId: "0x9ba590dd7fbd5bd1a7d06cdcb4744e20a49b3520560575cd63de17734a408738", - expirationDate: 1693583329, - subject: "0x828c9f04D1a07E3b0aBE12A9F8238a3Ff7E57b47", - attestationData: [{ isBuidler: true }], - }, - { - schemaId: "0x9ba590dd7fbd5bd1a7d06cdcb4744e20a49b3520560575cd63de17734a408738", - expirationDate: 1693583329, - subject: "0x828c9f04D1a07E3b0aBE12A9F8238a3Ff7E57b47", - attestationData: [{ isBuidler: false }], - }, - ], - [[], []], - ), - ); + let params; + if (argv !== "") params = JSON.parse(argv); + const portalAddress = params?.portalAddress + ? (params.portalAddress as Address) + : "0xeea25bc2ec56cae601df33b8fc676673285e12cc"; + + const attestationPayloads = params?.attestationPayloads ?? [ + { + schemaId: "0x9ba590dd7fbd5bd1a7d06cdcb4744e20a49b3520560575cd63de17734a408738", + expirationDate: 1693583329, + subject: "0x828c9f04D1a07E3b0aBE12A9F8238a3Ff7E57b47", + attestationData: [{ isBuidler: true }], + }, + { + schemaId: "0x9ba590dd7fbd5bd1a7d06cdcb4744e20a49b3520560575cd63de17734a408738", + expirationDate: 1693583329, + subject: "0x828c9f04D1a07E3b0aBE12A9F8238a3Ff7E57b47", + attestationData: [{ isBuidler: true }], + }, + ]; + const validationPayloads = params?.validationPayloads ?? [[], []]; + console.log(await this.veraxSdk.portal.bulkAttest(portalAddress, attestationPayloads, validationPayloads)); } if (methodName.toLowerCase() == "replace" || methodName == "") console.log(await this.veraxSdk.portal.replace()); @@ -122,21 +126,31 @@ export default class PortalExamples { console.log(await this.veraxSdk.portal.simulateRevoke(portalAddress, attestationId)); } - if (methodName.toLowerCase() == "simulateBulkRevoke".toLowerCase() || methodName == "") - console.log( - await this.veraxSdk.portal.simulateBulkRevoke("0x34798a866f52949208e67fb57ad36244024c50c0", [ - "0x00000000000000000000000000000000000000000000000000000000000010a0", - "0x00000000000000000000000000000000000000000000000000000000000010a1", - ]), - ); + if (methodName.toLowerCase() == "simulateBulkRevoke".toLowerCase() || methodName == "") { + let params; + if (argv !== "") params = JSON.parse(argv); + const portalAddress = params?.portalAddress + ? (params.portalAddress as Address) + : "0xeea25bc2ec56cae601df33b8fc676673285e12cc"; + const attestationIds = params?.attestationIds ?? [ + "0x00000000000000000000000000000000000000000000000000000000000010a0", + "0x00000000000000000000000000000000000000000000000000000000000010a1", + ]; + console.log(await this.veraxSdk.portal.simulateBulkRevoke(portalAddress, attestationIds)); + } - if (methodName.toLowerCase() == "bulkRevoke".toLowerCase() || methodName == "") - console.log( - await this.veraxSdk.portal.bulkRevoke("0x34798a866f52949208e67fb57ad36244024c50c0", [ - "0x00000000000000000000000000000000000000000000000000000000000010a0", - "0x00000000000000000000000000000000000000000000000000000000000010a1", - ]), - ); + if (methodName.toLowerCase() == "bulkRevoke".toLowerCase() || methodName == "") { + let params; + if (argv !== "") params = JSON.parse(argv); + const portalAddress = params?.portalAddress + ? (params.portalAddress as Address) + : "0xeea25bc2ec56cae601df33b8fc676673285e12cc"; + const attestationIds = params?.attestationIds ?? [ + "0x00000000000000000000000000000000000000000000000000000000000010a0", + "0x00000000000000000000000000000000000000000000000000000000000010a1", + ]; + console.log(await this.veraxSdk.portal.bulkRevoke(portalAddress, attestationIds)); + } if (methodName.toLowerCase() == "massImport".toLowerCase() || methodName == "") console.log(await this.veraxSdk.portal.massImport()); diff --git a/sdk/examples/schema/index.ts b/sdk/examples/schema/index.ts index 9b858a23..cf2aee87 100644 --- a/sdk/examples/schema/index.ts +++ b/sdk/examples/schema/index.ts @@ -6,4 +6,4 @@ argv !== null && argv !== undefined ? (argv = argv.replaceAll("\\", "")) : (argv const veraxSdk = new VeraxSdk(VeraxSdk.DEFAULT_LINEA_TESTNET); -await new PortalExamples(veraxSdk).run(process.argv[2], argv); +await new PortalExamples(veraxSdk).run(argv, process.argv[2]); diff --git a/sdk/examples/schema/schemaExamples.ts b/sdk/examples/schema/schemaExamples.ts index e9bd21f6..aa707d6e 100644 --- a/sdk/examples/schema/schemaExamples.ts +++ b/sdk/examples/schema/schemaExamples.ts @@ -1,12 +1,13 @@ import VeraxSdk from "../../src/VeraxSdk"; -import { Schema } from "../../src/types"; export default class SchemaExamples { private veraxSdk: VeraxSdk; + constructor(_veraxSdk: VeraxSdk) { this.veraxSdk = _veraxSdk; } - async run(methodName: string = "", argv: string) { + + async run(argv: string, methodName: string = "") { if (methodName.toLowerCase() == "findOneById".toLowerCase() || methodName == "") { const schemaId: string = argv === "" ? "0x01f031da36192c34057c764239eb77bb6ec8ebfb808f72a7bb172f37a5bec31f" : argv; @@ -14,8 +15,7 @@ export default class SchemaExamples { } if (methodName.toLowerCase() == "findBy".toLowerCase() || methodName == "") { - const params: Partial = argv === "" ? { name: "Relationship" } : JSON.parse(argv); - console.log(await this.veraxSdk.schema.findBy(params)); + console.log(await this.veraxSdk.schema.findBy(2, 0, { description: "Gitcoin Passport Score" }, "name", "desc")); } if (methodName.toLowerCase() == "create" || methodName == "") console.log(await this.veraxSdk.schema.create()); diff --git a/sdk/examples/utils/getRelatedAttestation.ts b/sdk/examples/utils/getRelatedAttestation.ts new file mode 100644 index 00000000..8e404f80 --- /dev/null +++ b/sdk/examples/utils/getRelatedAttestation.ts @@ -0,0 +1,9 @@ +import VeraxSdk from "../../src/VeraxSdk"; + +const veraxSdk = new VeraxSdk(VeraxSdk.DEFAULT_LINEA_TESTNET); + +console.log( + await veraxSdk.attestation.getRelatedAttestations( + "0x0000000000000000000000000000000000000000000000000000000000000001", + ), +); diff --git a/sdk/jest.config.js b/sdk/jest.config.js index 39825120..965a9e3e 100644 --- a/sdk/jest.config.js +++ b/sdk/jest.config.js @@ -1,5 +1,7 @@ export default { - preset: 'ts-jest', - testEnvironment: 'node', - // ... other Jest configuration options -}; \ No newline at end of file + preset: "ts-jest", + testEnvironment: "node", + transform: { + ".graphclient/index.ts": ["babel-jest", { configFile: "./babel-jest.config.cjs" }], + }, +}; diff --git a/sdk/package.json b/sdk/package.json index f450cb54..83b98646 100644 --- a/sdk/package.json +++ b/sdk/package.json @@ -21,19 +21,37 @@ "portal": "ts-node examples/portal/index.ts", "schema": "ts-node examples/schema/index.ts", "test": "jest", - "test:ci": "cp .env.example .env && jest" + "test:ci": "cp .env.example .env && pnpm run test", + "test:integration": "jest integration", + "test:integration:ci": "cp .env.example .env && pnpm run test:integration", + "test:unit": "echo \"TODO\"", + "test:unit:ci": "cp .env.example .env && pnpm run test:unit" }, "dependencies": { - "@apollo/client": "^3.8.4", + "@graphprotocol/client-cli": "^3.0.0", + "@graphql-mesh/cache-localforage": "^0.95.7", + "@graphql-mesh/cross-helpers": "^0.4.1", + "@graphql-mesh/graphql": "^0.95.7", + "@graphql-mesh/http": "^0.96.12", + "@graphql-mesh/merger-bare": "^0.95.7", + "@graphql-mesh/runtime": "^0.96.11", + "@graphql-mesh/store": "^0.95.7", + "@graphql-mesh/utils": "^0.95.7", + "@whatwg-node/fetch": "^0.9.13", + "axios": "^1.5.1", "dotenv": "^16.3.1", "graphql": "^16.8.1", "viem": "^1.14.0" }, "devDependencies": { + "@babel/plugin-transform-runtime": "^7.23.2", + "@babel/preset-env": "^7.23.2", + "@babel/preset-typescript": "^7.23.2", "@types/jest": "^29.5.5", + "babel-jest": "^29.7.0", + "babel-plugin-transform-import-meta": "^2.2.1", "jest": "^29.7.0", "ts-jest": "^29.1.1", - "ts-node": "^10.9.1", - "vite": "^4.4.9" + "ts-node": "^10.9.1" } } diff --git a/sdk/src/VeraxSdk.ts b/sdk/src/VeraxSdk.ts index d937bea1..6c77f2dd 100644 --- a/sdk/src/VeraxSdk.ts +++ b/sdk/src/VeraxSdk.ts @@ -4,7 +4,6 @@ import SchemaDataMapper from "./dataMapper/SchemaDataMapper"; import ModuleDataMapper from "./dataMapper/ModuleDataMapper"; import PortalDataMapper from "./dataMapper/PortalDataMapper"; import { createPublicClient, createWalletClient, custom, Hex, http, PublicClient, WalletClient } from "viem"; -import { ApolloClient, InMemoryCache } from "@apollo/client/core"; import UtilsDataMapper from "./dataMapper/UtilsDataMapper"; import { privateKeyToAccount } from "viem/accounts"; import dotenv from "dotenv"; @@ -46,7 +45,6 @@ export default class VeraxSdk { private readonly web3Client: PublicClient; private readonly walletClient: WalletClient; - private readonly apolloClient: ApolloClient; public attestation: AttestationDataMapper; public schema: SchemaDataMapper; @@ -72,15 +70,10 @@ export default class VeraxSdk { transport: custom(window.ethereum), }); - this.apolloClient = new ApolloClient({ - uri: conf.subgraphUrl, - cache: new InMemoryCache(), - }); - - this.attestation = new AttestationDataMapper(conf, this.web3Client, this.walletClient, this.apolloClient, this); - this.schema = new SchemaDataMapper(conf, this.web3Client, this.walletClient, this.apolloClient, this); - this.module = new ModuleDataMapper(conf, this.web3Client, this.walletClient, this.apolloClient, this); - this.portal = new PortalDataMapper(conf, this.web3Client, this.walletClient, this.apolloClient, this); - this.utils = new UtilsDataMapper(conf, this.web3Client, this.walletClient, this.apolloClient, this); + this.attestation = new AttestationDataMapper(conf, this.web3Client, this.walletClient, this); + this.schema = new SchemaDataMapper(conf, this.web3Client, this.walletClient, this); + this.module = new ModuleDataMapper(conf, this.web3Client, this.walletClient, this); + this.portal = new PortalDataMapper(conf, this.web3Client, this.walletClient, this); + this.utils = new UtilsDataMapper(conf, this.web3Client, this.walletClient, this); } } diff --git a/sdk/src/dataMapper/AttestationDataMapper.ts b/sdk/src/dataMapper/AttestationDataMapper.ts index d4b16d05..c4cf8a57 100644 --- a/sdk/src/dataMapper/AttestationDataMapper.ts +++ b/sdk/src/dataMapper/AttestationDataMapper.ts @@ -1,8 +1,13 @@ import BaseDataMapper from "./BaseDataMapper"; import { Attestation } from "../types"; +import { Attestation_filter, Attestation_orderBy } from "../../.graphclient"; import { Constants } from "../utils/constants"; -export default class AttestationDataMapper extends BaseDataMapper { +export default class AttestationDataMapper extends BaseDataMapper< + Attestation, + Attestation_filter, + Attestation_orderBy +> { typeName = "attestation"; gqlInterface = `{ id @@ -22,9 +27,15 @@ export default class AttestationDataMapper extends BaseDataMapper { }`; async getRelatedAttestations(id: string) { - return this.findBy({ - attestationData_contains: id, - schemaId_in: [Constants.RELATIONSHIP_SCHEMA_ID, Constants.NAMED_GRAPH_RELATIONSHIP_SCHEMA_ID], - }); + return this.findBy( + undefined, + undefined, + { + attestationData_contains: id, + schemaId_in: [Constants.RELATIONSHIP_SCHEMA_ID, Constants.NAMED_GRAPH_RELATIONSHIP_SCHEMA_ID], + }, + undefined, + undefined, + ); } } diff --git a/sdk/src/dataMapper/BaseDataMapper.ts b/sdk/src/dataMapper/BaseDataMapper.ts index 0a14a2f2..3e7be178 100644 --- a/sdk/src/dataMapper/BaseDataMapper.ts +++ b/sdk/src/dataMapper/BaseDataMapper.ts @@ -1,46 +1,70 @@ import { PublicClient, WalletClient } from "viem"; -import { ApolloClient, gql } from "@apollo/client/core"; -import { Conf, FilterMap, QueryResult } from "../types"; -import { stringifyWhereClause } from "../utils/apolloClientHelper"; +import { Conf } from "../types"; +import { OrderDirection } from "../../.graphclient"; import VeraxSdk from "../VeraxSdk"; +import { stringifyWhereClause } from "../utils/graphClientHelper"; +import axios from "axios"; -export default abstract class BaseDataMapper { +export default abstract class BaseDataMapper { protected readonly conf: Conf; protected readonly web3Client: PublicClient; protected readonly walletClient: WalletClient; - protected readonly apolloClient: ApolloClient; protected readonly veraxSdk: VeraxSdk; protected abstract typeName: string; protected abstract gqlInterface: string; - constructor( - _conf: Conf, - _web3Client: PublicClient, - _walletClient: WalletClient, - _apolloClient: ApolloClient, - _veraxSdk: VeraxSdk, - ) { + constructor(_conf: Conf, _web3Client: PublicClient, _walletClient: WalletClient, _veraxSdk: VeraxSdk) { this.conf = _conf; this.web3Client = _web3Client; this.walletClient = _walletClient; - this.apolloClient = _apolloClient; this.veraxSdk = _veraxSdk; } - async findOneById(id: string): Promise { - const queryResult = await this.apolloClient.query>({ - query: gql(`query GetOne($id: ID!) { ${this.typeName}(id: $id) ${this.gqlInterface} }`), - variables: { id }, - }); + async findOneById(id: string) { + const query = `query get_${this.typeName} { ${this.typeName}(id: "${id}") ${this.gqlInterface} }`; - return queryResult.data[this.typeName]; + const { data, status } = await this.subgraphCall(query); + + if (status != 200) { + throw new Error(`Error(s) while fetching ${this.typeName}`); + } + + return data.data[`${this.typeName}`] as T; } - async findBy(whereClause: Partial) { - const queryResult = await this.apolloClient.query, typeof this.typeName>>({ - query: gql(`query GetBy { ${this.typeName}s(where: ${stringifyWhereClause(whereClause)}) ${this.gqlInterface} }`), - }); + async findBy(first?: number, skip?: number, where?: TFilter, orderBy?: TOrder, orderDirection?: OrderDirection) { + const query = ` + query get_${this.typeName}s{ + ${this.typeName}s( + first: ${first || 100} + skip: ${skip || 0} + where: ${where ? stringifyWhereClause(where) : null} + orderBy: ${orderBy || null} + orderDirection: ${orderDirection || null} + ) + ${this.gqlInterface} + } + `; + + const { data, status } = await this.subgraphCall(query); + + if (status != 200) { + throw new Error(`Error(s) while fetching ${this.typeName}s`); + } + + return data.data[`${this.typeName}s`] as T[]; + } - return queryResult.data[`${this.typeName}s`]; + async subgraphCall(query: string) { + return axios.post( + this.conf.subgraphUrl, + { query }, + { + headers: { + "Content-Type": "application/json", + Accept: "application/json", + }, + }, + ); } } diff --git a/sdk/src/dataMapper/ModuleDataMapper.ts b/sdk/src/dataMapper/ModuleDataMapper.ts index 20504697..d69d7c29 100644 --- a/sdk/src/dataMapper/ModuleDataMapper.ts +++ b/sdk/src/dataMapper/ModuleDataMapper.ts @@ -1,7 +1,8 @@ +import { Module_filter, Module_orderBy } from "../../.graphclient"; import { Module } from "../types"; import BaseDataMapper from "./BaseDataMapper"; -export default class ModuleDataMapper extends BaseDataMapper { +export default class ModuleDataMapper extends BaseDataMapper { typeName = "module"; gqlInterface = `{ id diff --git a/sdk/src/dataMapper/PortalDataMapper.ts b/sdk/src/dataMapper/PortalDataMapper.ts index dbe6d907..cb61101c 100644 --- a/sdk/src/dataMapper/PortalDataMapper.ts +++ b/sdk/src/dataMapper/PortalDataMapper.ts @@ -3,8 +3,9 @@ import BaseDataMapper from "./BaseDataMapper"; import { abiDefaultPortal } from "../abi/DefaultPortal"; import { Address, BaseError, ContractFunctionRevertedError, Hash } from "viem"; import { encode } from "../utils/abiCoder"; +import { Portal_filter, Portal_orderBy } from "../../.graphclient"; -export default class PortalDataMapper extends BaseDataMapper { +export default class PortalDataMapper extends BaseDataMapper { typeName = "portal"; gqlInterface = `{ id diff --git a/sdk/src/dataMapper/SchemaDataMapper.ts b/sdk/src/dataMapper/SchemaDataMapper.ts index 76293d21..1f0207f5 100644 --- a/sdk/src/dataMapper/SchemaDataMapper.ts +++ b/sdk/src/dataMapper/SchemaDataMapper.ts @@ -1,7 +1,8 @@ +import { Schema_filter, Schema_orderBy } from "../../.graphclient"; import { Schema } from "../types"; import BaseDataMapper from "./BaseDataMapper"; -export default class SchemaDataMapper extends BaseDataMapper { +export default class SchemaDataMapper extends BaseDataMapper { typeName = "schema"; gqlInterface = `{ id diff --git a/sdk/src/dataMapper/UtilsDataMapper.ts b/sdk/src/dataMapper/UtilsDataMapper.ts index 07685e52..5b34ad8f 100644 --- a/sdk/src/dataMapper/UtilsDataMapper.ts +++ b/sdk/src/dataMapper/UtilsDataMapper.ts @@ -5,7 +5,7 @@ import { abiPortalRegistry } from "../abi/PortalRegistry"; import { abiSchemaRegistry } from "../abi/SchemaRegistry"; import { decode, encode } from "../utils/abiCoder"; -export default class UtilsDataMapper extends BaseDataMapper { +export default class UtilsDataMapper extends BaseDataMapper { typeName = "counter"; gqlInterface = `{ attestations diff --git a/sdk/src/types/index.d.ts b/sdk/src/types/index.d.ts index a39652b4..c8539645 100644 --- a/sdk/src/types/index.d.ts +++ b/sdk/src/types/index.d.ts @@ -17,7 +17,13 @@ export type AttestationPayload = { attestationData: object[]; // The attestation data. }; -export type Attestation = { +export type Attestation = OnChainAttestation & { + id: string; + schemaString: string; + decodedData: string[]; +}; + +export type OnChainAttestation = { attestationId: string; // The unique identifier of the attestation. schemaId: string; // The identifier of the schema this attestation adheres to. replacedBy: string | null; // Whether the attestation was replaced by a new one. @@ -50,31 +56,14 @@ export type Portal = { ownerName: string; // The name of the owner of this portal. }; -export type Module = { +export type Module = OnChainModule & { id: string }; + +export type OnChainModule = { moduleAddress: Address; // The address of the module. name: string; // The name of the module. description: string; // A description of the module. }; -export type FilterMap = { - Attestation: FilterAttestation; - Module: FilterModule; - Schema: FilterSchema; - Portal: FilterPortal; -}; - -export type FilterAttestation = Attestation & { schemaId_in: string[]; attestationData_contains: string }; - -export type FilterModule = Module; - -export type FilterSchema = Schema; - -export type FilterPortal = Portal; - -export type QueryResult = { - [P in K]: T; -}; - declare global { interface Window { ethereum: EthereumProvider; diff --git a/sdk/src/utils/apolloClientHelper.ts b/sdk/src/utils/graphClientHelper.ts similarity index 100% rename from sdk/src/utils/apolloClientHelper.ts rename to sdk/src/utils/graphClientHelper.ts diff --git a/sdk/test/dataMapper/AttestationDataMapper.test.ts b/sdk/test/dataMapper/AttestationDataMapper.test.ts deleted file mode 100644 index 0ed5ac8b..00000000 --- a/sdk/test/dataMapper/AttestationDataMapper.test.ts +++ /dev/null @@ -1,106 +0,0 @@ -import AttestationDataMapper from "../../src/dataMapper/AttestationDataMapper"; -import VeraxSdk from "../../src/VeraxSdk"; -import { createPublicClient, createWalletClient, http, PublicClient, WalletClient } from "viem"; -import { ApolloClient, ApolloQueryResult, gql, InMemoryCache } from "@apollo/client/core"; -import { Constants } from "../../src/utils/constants"; - -describe("AttestationDataMapper", () => { - let mockApolloClient: ApolloClient; - let web3Client: PublicClient; - let walletClient: WalletClient; - let attestationDataMapper: AttestationDataMapper; - const typeName: string = "attestation"; - const gqlInterface: string = `{ - id - schemaId - replacedBy - attester - portal - attestedDate - expirationDate - revocationDate - version - revoked - subject - attestationData - schemaString - decodedData - }`; - - beforeAll(() => { - // Create web3Client - web3Client = createPublicClient({ - chain: VeraxSdk.DEFAULT_LINEA_TESTNET.chain, - transport: http(), - }); - - // Create walletClient - walletClient = createWalletClient({ - chain: VeraxSdk.DEFAULT_LINEA_TESTNET.chain, - transport: http(), - }); - - // Create a mock Apollo Client with an in-memory cache - mockApolloClient = new ApolloClient({ - cache: new InMemoryCache(), - }); - - attestationDataMapper = new AttestationDataMapper( - VeraxSdk.DEFAULT_LINEA_TESTNET, - web3Client, - walletClient, - mockApolloClient, - new VeraxSdk(VeraxSdk.DEFAULT_LINEA_TESTNET), - ); - }); - - afterEach(() => { - // Clear the mock function's call history after each test - jest.clearAllMocks(); - }); - - describe("findOneById", () => { - it("should return the expected attestation", async () => { - const attestationId = "attestationId1"; - // Mock the behavior of the query method - const queryMock = jest.spyOn(mockApolloClient, "query"); - queryMock.mockResolvedValueOnce({ - data: { - attestation: { result: "success" }, - }, - } as ApolloQueryResult); - - const result = await attestationDataMapper.findOneById(attestationId); - - // Assert - expect(result).toMatchObject({ result: "success" }); - expect(mockApolloClient.query).toHaveBeenCalledWith({ - query: gql(`query GetOne($id: ID!) { ${typeName}(id: $id) ${gqlInterface} }`), - variables: { id: attestationId }, - }); - }); - }); - - describe("getRelatedAttestations", () => { - it("should return the expected attestations", async () => { - const attestationId = "0x0000000000000000000000000000000000000000000000000000000000000001"; - // Mock the behavior of the query method - const queryMock = jest.spyOn(mockApolloClient, "query"); - queryMock.mockResolvedValueOnce({ - data: { - attestations: { result: "success" }, - }, - } as ApolloQueryResult); - - const result = await attestationDataMapper.getRelatedAttestations(attestationId); - - // Assert - expect(result).toMatchObject({ result: "success" }); - expect(mockApolloClient.query).toHaveBeenCalledWith({ - query: gql( - `query GetBy { ${typeName}s(where: {attestationData_contains:"${attestationId}",schemaId_in:["${Constants.RELATIONSHIP_SCHEMA_ID}","${Constants.NAMED_GRAPH_RELATIONSHIP_SCHEMA_ID}"]}) ${gqlInterface} }`, - ), - }); - }); - }); -}); diff --git a/sdk/test/integration/Attestation.integration.test.ts b/sdk/test/integration/Attestation.integration.test.ts new file mode 100644 index 00000000..9be6f4c9 --- /dev/null +++ b/sdk/test/integration/Attestation.integration.test.ts @@ -0,0 +1,77 @@ +import VeraxSdk from "../../src/VeraxSdk"; + +describe("AttestationDataMapper", () => { + let veraxSdk: VeraxSdk; + + beforeAll(() => { + veraxSdk = new VeraxSdk(VeraxSdk.DEFAULT_LINEA_TESTNET); + }); + + describe("findOneById", () => { + it("should return the expected attestation", async () => { + const attestationId = "0x00000000000000000000000000000000000000000000000000000000000007b5"; + + const result = await veraxSdk.attestation.findOneById(attestationId); + + expect(result).not.toBeNull(); + expect(result.id).toEqual(attestationId); + expect(result.schemaId).toEqual("0xd1664d97bd195df77e3d5fe78c1737ab3adaa38bbe52a680d1aa30fa51f186ba"); + expect(result.replacedBy).toEqual("0x0000000000000000000000000000000000000000000000000000000000000000"); + expect(result.attester).toEqual("0x809e815596abeb3764abf81be2dc39fbbacc9949"); + expect(result.portal).toEqual("0xb3c0e57d560f36697f5d727c2c6db4e0c8f87bd8"); + expect(result.attestedDate).toEqual("1695398083"); + expect(result.expirationDate).toEqual("1793835110"); + expect(result.revocationDate).toEqual("0"); + expect(result.version).toEqual("8"); + expect(result.revoked).toBeFalsy(); + expect(result.subject).toEqual("0x000000000000000000000000cb859f99f84ab770a50380680be94ad9331bcec5"); + expect(result.attestationData).toEqual("0x0000000000000000000000000000000000000000000000000000000000000004"); + expect(result.schemaString).toEqual("uint8 rating"); + expect(result.decodedData).toEqual(["0x4"]); + }); + }); + + describe("findBy", () => { + it("should get 2 attestations", async () => { + const result = await veraxSdk.attestation.findBy(2); + + expect(result).not.toBeNull(); + expect(result.length).toBe(2); + }); + + it("should get 2 attestations from a specific attester", async () => { + const attesterAddress = "0x809e815596abeb3764abf81be2dc39fbbacc9949"; + const result = await veraxSdk.attestation.findBy(2, 0, { attester: attesterAddress }); + + expect(result).not.toBeNull(); + expect(result.length).toBe(2); + expect(result[0].attester).toBe(attesterAddress); + expect(result[1].attester).toBe(attesterAddress); + }); + + it("should get 3 attestations from a specific attester ordered by descending attestation date", async () => { + const attesterAddress = "0x809e815596abeb3764abf81be2dc39fbbacc9949"; + const result = await veraxSdk.attestation.findBy(3, 0, { attester: attesterAddress }, "attestedDate", "desc"); + + expect(result).not.toBeNull(); + expect(result.length).toBe(3); + expect(result[0].attester).toBe(attesterAddress); + expect(result[1].attester).toBe(attesterAddress); + expect(result[2].attester).toBe(attesterAddress); + expect(result[0].id).toBe("0x000000000000000000000000000000000000000000000000000000000000109f"); + expect(result[1].id).toBe("0x000000000000000000000000000000000000000000000000000000000000109e"); + expect(result[2].id).toBe("0x000000000000000000000000000000000000000000000000000000000000109d"); + }); + }); + + describe("getRelatedAttestations", () => { + it("should return the attestations related to a given attestation", async () => { + const attestationId = "0x0000000000000000000000000000000000000000000000000000000000000001"; + + const result = await veraxSdk.attestation.getRelatedAttestations(attestationId); + + expect(result).not.toBeNull(); + expect(result.length).toBe(5); + }); + }); +}); diff --git a/sdk/test/integration/Module.integration.test.ts b/sdk/test/integration/Module.integration.test.ts new file mode 100644 index 00000000..c150fa21 --- /dev/null +++ b/sdk/test/integration/Module.integration.test.ts @@ -0,0 +1,56 @@ +import VeraxSdk from "../../src/VeraxSdk"; + +describe("ModuleDataMapper", () => { + let veraxSdk: VeraxSdk; + + beforeAll(() => { + veraxSdk = new VeraxSdk(VeraxSdk.DEFAULT_LINEA_TESTNET); + }); + + describe("findOneById", () => { + it("should return the expected module", async () => { + const moduleId = "0xf75be6f9418710fd516fa82afb3aad07e11a0f1b"; + + const result = await veraxSdk.module.findOneById(moduleId); + + expect(result).not.toBeNull(); + expect(result.id).toEqual(moduleId); + expect(result.moduleAddress).toEqual(moduleId); + expect(result.name).toEqual("Msg Sender Module"); + expect(result.description).toEqual("Checks if attestation was sent from a specific address"); + }); + }); + + describe("findBy", () => { + it("should get 2 modules", async () => { + const result = await veraxSdk.module.findBy(2); + + expect(result).not.toBeNull(); + expect(result.length).toBe(2); + }); + + it("should get 2 modules with a name containing 'CorrectModule'", async () => { + const partialName = "CorrectModule"; + const result = await veraxSdk.module.findBy(2, 0, { name_contains: partialName }); + + expect(result).not.toBeNull(); + expect(result.length).toBe(2); + expect(result[0].name).toContain(partialName); + expect(result[1].name).toContain(partialName); + }); + + it("should get 3 modules with a name containing 'CorrectModule' ordered by descending name", async () => { + const partialName = "CorrectModule"; + const result = await veraxSdk.module.findBy(3, 0, { name_contains: partialName }, "name", "desc"); + + expect(result).not.toBeNull(); + expect(result.length).toBe(3); + expect(result[0].name).toContain(partialName); + expect(result[1].name).toContain(partialName); + expect(result[2].name).toContain(partialName); + expect(result[0].name).toEqual("ZZ - CorrectModule"); + expect(result[1].name).toEqual("CC - CorrectModule"); + expect(result[2].name).toEqual("AA - CorrectModule"); + }); + }); +}); diff --git a/sdk/test/integration/Portal.integration.test.ts b/sdk/test/integration/Portal.integration.test.ts new file mode 100644 index 00000000..8eb49adc --- /dev/null +++ b/sdk/test/integration/Portal.integration.test.ts @@ -0,0 +1,59 @@ +import VeraxSdk from "../../src/VeraxSdk"; + +describe("PortalDataMapper", () => { + let veraxSdk: VeraxSdk; + + beforeAll(() => { + veraxSdk = new VeraxSdk(VeraxSdk.DEFAULT_LINEA_TESTNET); + }); + + describe("findOneById", () => { + it("should return the expected portal", async () => { + const portalId = "0x0b991e5f3773b6a0f6e3672549cbfbd1178fbe22"; + + const result = await veraxSdk.portal.findOneById(portalId); + + expect(result).not.toBeNull(); + expect(result.id).toEqual(portalId); + expect(result.ownerAddress).toEqual("0xe02bd7a6c8aa401189aebb5bad755c2610940a73"); + expect(result.modules).toEqual([]); + expect(result.isRevocable).toBeTruthy(); + expect(result.name).toEqual("PADO Portal"); + expect(result.description).toEqual("Portal of PADO"); + expect(result.ownerName).toEqual("PADO"); + }); + }); + + describe("findBy", () => { + it("should get 2 portals", async () => { + const result = await veraxSdk.portal.findBy(2); + + expect(result).not.toBeNull(); + expect(result.length).toBe(2); + }); + + it("should get 2 portals with a name containing 'PADO'", async () => { + const partialName = "PADO"; + const result = await veraxSdk.portal.findBy(2, 0, { name_contains: partialName }); + + expect(result).not.toBeNull(); + expect(result.length).toBe(2); + expect(result[0].name).toContain(partialName); + expect(result[1].name).toContain(partialName); + }); + + it("should get 3 portals with a name containing 'PADO' ordered by ascending ID", async () => { + const partialName = "PADO"; + const result = await veraxSdk.portal.findBy(3, 0, { name_contains: partialName }, "id", "asc"); + + expect(result).not.toBeNull(); + expect(result.length).toBe(3); + expect(result[0].name).toContain(partialName); + expect(result[1].name).toContain(partialName); + expect(result[2].name).toContain(partialName); + expect(result[0].id).toEqual("0x0b991e5f3773b6a0f6e3672549cbfbd1178fbe22"); + expect(result[1].id).toEqual("0x870c1b49fc34deb24ab51f4f4a58bbe85456e2b2"); + expect(result[2].id).toEqual("0x9ec56cd6f6ca10fb9bc3a3d17d83028639b62df5"); + }); + }); +}); diff --git a/sdk/test/integration/Schema.integration.test.ts b/sdk/test/integration/Schema.integration.test.ts new file mode 100644 index 00000000..4eab1a22 --- /dev/null +++ b/sdk/test/integration/Schema.integration.test.ts @@ -0,0 +1,57 @@ +import VeraxSdk from "../../src/VeraxSdk"; + +describe("SchemaDataMapper", () => { + let veraxSdk: VeraxSdk; + + beforeAll(() => { + veraxSdk = new VeraxSdk(VeraxSdk.DEFAULT_LINEA_TESTNET); + }); + + describe("findOneById", () => { + it("should return the expected schema", async () => { + const schemaId = "0x69e4d197cd9cb19f5640f60caf7372ed3e3b0e4b0d78d1fcf0e8d83099360e6e"; + + const result = await veraxSdk.schema.findOneById(schemaId); + + expect(result).not.toBeNull(); + expect(result.id).toEqual(schemaId); + expect(result.name).toEqual("Is a Contributor"); + expect(result.description).toEqual("Define the list of contributors"); + expect(result.context).toEqual("Contributors to a project"); + expect(result.schema).toEqual("(bool isAContributor)"); + }); + }); + + describe("findBy", () => { + it("should get 2 schemas", async () => { + const result = await veraxSdk.schema.findBy(2); + + expect(result).not.toBeNull(); + expect(result.length).toBe(2); + }); + + it("should get 2 schemas with a name containing 'PADO'", async () => { + const partialName = "PADO"; + const result = await veraxSdk.schema.findBy(2, 0, { name_contains: partialName }); + + expect(result).not.toBeNull(); + expect(result.length).toBe(2); + expect(result[0].name).toContain(partialName); + expect(result[1].name).toContain(partialName); + }); + + it("should get 3 schemas with a name containing 'PADO' ordered by ascending schema string", async () => { + const partialName = "PADO"; + const result = await veraxSdk.schema.findBy(3, 0, { name_contains: partialName }, "schema", "asc"); + + expect(result).not.toBeNull(); + expect(result.length).toBe(3); + expect(result[0].name).toContain(partialName); + expect(result[1].name).toContain(partialName); + expect(result[2].name).toContain(partialName); + expect(result[0].id).toEqual("0x84fdf5748d9af166503472ff5deb0cd5f61f006169424805fd5554356ac6df10"); + expect(result[1].id).toEqual("0x89c0a9424f9d62c6cde9feb83653033899fe5df952beab024e38a13c3aae3ee9"); + expect(result[2].id).toEqual("0xc9992483a7da0207213d34288b835094b48567290cecf044c48913d3f1472a3a"); + }); + }); +}); diff --git a/sdk/tsconfig.json b/sdk/tsconfig.json index 0959b598..c27acc60 100644 --- a/sdk/tsconfig.json +++ b/sdk/tsconfig.json @@ -7,5 +7,6 @@ "ts-node": { "esm": true, "experimentalSpecifierResolution": "node" - } + }, + "include": ["**/*.ts", ".graphclient/**/*.ts"] } From 6e3f565578bf74c007e1346e81cce8f5f5916a92 Mon Sep 17 00:00:00 2001 From: Alain Nicolas Date: Mon, 16 Oct 2023 14:24:08 +0200 Subject: [PATCH 32/36] chore: Publish the Ways of Working (#298) --- CONTRIBUTING.md | 77 ++++++++++++++++++++++++++++++++++++++ README.md | 25 +++++++++---- doc/verax-logo-circle.png | Bin 0 -> 7681 bytes 3 files changed, 94 insertions(+), 8 deletions(-) create mode 100644 CONTRIBUTING.md create mode 100644 doc/verax-logo-circle.png diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 00000000..5a327113 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,77 @@ +# Verax Attestation Registry - Contribution Guide + +Verax Attestation Registry is a community-led initiative, with developers from various companies and different +backgrounds. While we are more than happy to get help from multiple sources, we need to rely on strong Ways of Working. + +## Project Management + +We use Notion for meeting minutes and other WIP documents such as the functional backlog. +Task tracking is done through [GitHub issues](https://github.com/Consensys/linea-attestation-registry/issues) and +[GitHub Project](https://github.com/orgs/Consensys/projects/17/views/2). + +_Contact us to get access_ + +## Issue Lifecycle + +The lifecycle of an issue is as follows: + +1. Draft +2. Next Milestone +3. Ready for development +4. In progress +5. Blocked +6. Peer-review +7. QA +8. Done +9. Released +10. Won’t do + +## Meetings + +- Core contributors meet on Monday, Wednesday and Friday for a **sync call**. +- **Technical Workshops** are held every Monday. +- **Functional Reviews** are held every Thursday. +- **Office Hours** are held every other Thursday. + +## Branching Model + +Our project follows the GitFlow branching model. +Here's a brief overview of the branches we use: + +- `main`: This branch contains the latest release of the project. +- `release/VERSION_NUMBER`: This branch contains code that has been validated by the QA process and is ready for + release. +- `dev`: This branch contains the latest features that have been developed but not yet released. +- `feature/slug-name`: Each feature ticket has its own branch for development. +- `bugfix/slug-name`: Each bug ticket has its own branch for development. +- `chore/name`: Each task ticket has its own branch for development. + +When creating a pull request, please follow the same naming pattern as branch naming: `feat: Title of the ticket`. +All commits of a PR are squashed and branches are deleted after merging. +Merging requires at least one peer-review from the code owners, but two are encouraged. +You cannot validate your own PR. +Rebasing is strongly encouraged. +Personal forks are allowed, but CI tests must pass before merging. + +## Development + +Our code repository is hosted on GitHub. +We use the Foundry framework for Solidity development. +The project includes linters/formatters (prettier + eslint + solhint). +Continuous Integration and Continuous Deployment are handled via GitHub Actions. +The CI process includes Lint, Compile, Unit tests, and Coverage checks. +The CD process is still being defined. + +## Communication + +All project communication is done through Discord. +This includes general discussions, updates and decision-making. +Please ensure you have joined our Discord server to stay updated and participate in the project discussions. + +## Bugs + +If you encounter a bug, please report it through GitHub issues. When reporting a bug, please provide a clear description +of the issue, steps to reproduce it, and if possible, a proposed solution or fix. +This will help us address the issue more effectively. + +Please use the `bugfix/slug-name` branch for developing bug fixes. diff --git a/README.md b/README.md index 15dd8094..d30f6cb7 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,22 @@ -## Verax +## Verax Attestation Registry **Verax, previously known as "Linea Attestation Registry", is a set of contracts that allows anyone to read and write attestations of any type and any subject.** +

+ Verax Logo +

+ +## Contribution + +Verax Attestation Registry is a community-led initiative, with developers from various companies and different +backgrounds. While we are more than happy to get help from multiple sources, we need to rely on strong Ways of Working. + +Don't hesitate to check our [Contribution Guide](./CONTRIBUTING.md) before pushing your first code to the repo! + ## Contracts addresses -### Testnet +### Linea Testnet - Router = [0x736c78b2f2cBf4F921E8551b2acB6A5Edc9177D5](https://goerli.lineascan.build/address/0x736c78b2f2cBf4F921E8551b2acB6A5Edc9177D5) @@ -20,7 +31,7 @@ attestations of any type and any subject.** - AttestationReader = [0x65c8294C7aF0f0bDDe51eF92AF850613bb629fc6](https://goerli.lineascan.build/address/0x65c8294C7aF0f0bDDe51eF92AF850613bb629fc6) -### Mainnet +### Linea Mainnet - Router = [0x4d3a380A03f3a18A5dC44b01119839D8674a552E](https://lineascan.build/address/0x4d3a380A03f3a18A5dC44b01119839D8674a552E) @@ -35,9 +46,7 @@ attestations of any type and any subject.** - AttestationReader = [0x40871e247CF6b8fd8794c9c56bB5c2b8a4FA3B6c](https://lineascan.build/address/0x40871e247CF6b8fd8794c9c56bB5c2b8a4FA3B6c) -## Relationship schemas id's - -### Testnet & Mainnet +## Relationship Schemas IDs (testnet & mainnet) -- Relationship schema id = 0x89bd76e17fd84df8e1e448fa1b46dd8d97f7e8e806552b003f8386a5aebcb9f0 -- namedGraphRelationship schema id = 0x5003a7832fa2734780a5bf6a1f3940b84c0c66a398e62dd4e7f183fdbc7da6ee +- **Relationship** Schema ID = `0x89bd76e17fd84df8e1e448fa1b46dd8d97f7e8e806552b003f8386a5aebcb9f0` +- **namedGraphRelationship** Schema ID = `0x5003a7832fa2734780a5bf6a1f3940b84c0c66a398e62dd4e7f183fdbc7da6ee` diff --git a/doc/verax-logo-circle.png b/doc/verax-logo-circle.png new file mode 100644 index 0000000000000000000000000000000000000000..c5b785988ad02883712da6f19931d3c150bef893 GIT binary patch literal 7681 zcmXY0Wk6H!+uj(R3IdV_>5vd4q@@`h8>2^eNlJ%+v`9Ay2yATR=om;yNXY@Be<-*@ttU>$&T>&$+KFL0?y$hLV*M007WvYN!|z{!xS2ezH6xj!@jVi&6Bw{b6?5k;QpBfJsp!8o*mcg9y zeVa3MWtz$}pFi`rF|l94Yo*(y_IB67K`{&5K>hbO?b@BV23>!UZaV}F-R%FV|XsmV14 z#KxOP2lfVx3LG*{^zz(PmO~X4~jyPE%0H(3Ok4Ita?*YOzYMHv?CKJs2Pa3DJwPkbyyR4Z4H#}bBj_Y zEjDW^pSsdxpF;8zW%<#f38WQ|d2TYOCS>wf>Z=6ZVz^B=;P`xDVZo|yZQWA%JlOi; zM_P!}w!G8f#Bzw!;mT!3+zQ8>jPK;H@uTbTwNsg1E{*Xf8v9F0qJqdXoEbvAo)S*+ zkSv=hDUuVx9z=DUL>I^x^#ylx{f76AAh{gjeLc0gf&_bVi?S~21=5Phq$sMWU%;;A zCkV-7Q4#WeA}fu%x(NT6({7wNt}`kSxVO0OK?9rwMgWQ@wy5-Y>L+xhT7gGo7|<%& z!zA1iC$Jd63F7>)Mb$|U|3dW@k4wSP;3^-rRTSZradp1G`p=2yzJeCXmZ_JCEjYet ztm#vD0?jFSyA_vS+{g?I>ywXub*J&^WS;=5+PQlFgG? zGJ5zD*_6;-s!-Op`!=(VGLe^&p+eTV5QGO!1qTk`EtAig5BFFixgvkRbrPFLJa??v zP16Q?&rLnCn24hzSn-FVwomEz&GjZt?Ok*25HBI?pE^XS-dCO=d9vkfk?qbEx~sdC zNz`vX+&dt?){U@u<;|GO0qP+O70waXZrv-`cec~7BfGZLD`n!5C2>vqF}1s^E$v?m zXI(A`f_c3XBJLp$y_uWieXBzU@Rul*FGsjgQx+vtJrBItZE$hw*U_qFXk&VBKU1?| z>*5_jgyNW;1YO)nyPqMoz_hNM=jYl1XAR}006o@_1X-(^M?q@k4&>L(+e2;E3eRdm zpRN@?HchcHa4s&+C`xDOa(FtN;HQ=Jy~ui~y0~oa(YFBGgfeuC9%PdSjwgsH3d{cL zxYl@>AHeKwvJm@-<6cY$=}+4H_a$(@1GDvLZRxYnhR0G&GVn8=j}fHuS>yf>_bCy| zyhXw7a8_APHaJ=1pCe!o$(5?;a6_Y3WUIqWP1xYfy8fmO$NO{Znvhuqoo$Ki7LtY6 znpIZdY|?lxsy)S)ze?*%+&p1Ettq&CZE5JkY|^!t?EkE13>H0`winuY;Xwi;1YtO- zvhVv{D@BUq4-p`bKo?uzVfnJj5I@;}7-KjEZeK~hgB3zl-VmaKJg~vHDzDM_@tjIH z9T0H+O9^qux75?xU)Cv^?^zd(&lk1`t-scm#+DPTpAGnTXA;ztHkTsYFaRS$iG7<@ z4(G85=Y?C7$QOPpDo7%|*HYMLV0{lg-oSeZ;igK)Fjm$M(Wmuk6Nb@bgzk z(<|Zpyp`5JP2$Z5YE>;y?TjPb9Us{<6QaSFkG^-zMg5cB+u(MLaHR^QhOX=T^szNs zb~M6#)EQ*PS+za(Y}J5W1( zHbd~Lk>IP4AN*|TZ|_b0B;QsF5e308mY*lgH=jDkaPX}S^JZyQae6#vcjl#TWAH#J z^E2qTce8l<%=qoOt=n|1w6E?iiai!tJEW2H>>V0$aIf%icNCXm^YiRK{g(tiqQAFD ztA|P|2OWNfTre=v*`Bc;e6jJcv*%zQe&l|AXw)4Za{F!<-GmGwVylEgbyD1op_tvm z{e5!~O{n}GrtY*4lw2k49J4>Xq zXXe`|5pW6l3MZvz7_HAeZ_%51_`I(>Z-iomp*IZlK-E9=$DYXx z@8jy?VMpRNi5%e|S~AB1M3}_O{k0&O99-EvuM(&aMftBe?pxu zsMAqf8oe1Ueo92bxc>fH)6sGCOIb?BY+dhF_PE`~b42zx*}Uv)k<0(D{&mK&yB zbW13!4*qogipH`rifUx%hgs&h>NOze?nJmqgL%OolX`RpggfDLh{MS9yWh#Z&^J>Cq zCK;rw^Dn$f=XO>5$;sHc`5%}@Y+T`nx3+flTuPCKRB6ra4&K_m(S8w+fv8 zXn!4ffgIGb`NWe`WYWHpCHHa{o`fh$T6e~-`9FqBcM_w1M|)U@1lz|MdFeWrj_#5% zgDP@m-Hpy!tPzA9M!Zt&y!zzjv*mPg^h9Qf@%0b`+J8my$w(uw*-UfCN0sC`Ja zo-5lV{E+$t{6<)YhMX>T#j+wkuW%)Ix!QNG*@>px3t9V~7tBW+pW*Bu(5HF?H>Ch+ zf2u>jeh_rD%QTi_w}02;nbOJUJ87&#ec#O7tbIWZtDrzeJCM#ZN0lH!P5k;kJ>s&N5wP7?$JM%xz{ER z&@r-C3YET+Zj-@O^-|uP9CZd?tzaRaajUIAfYht7GygaIQV(e}wKm6BhrCws1}1m~ zb~a&)8$ZvOOQhZNL3TW5c}6xU{nMlEw*(lt!s>l>*C^Awm7DMTyt_~{_u76WS`DiL zYnc5YF8$&nM_?K&Y!ej>O<{#$eIjn4ilwf&@%wkgV9IW)3gY3^`G~x{0Ng+Q{A3OR z2DdWVJy>)TPKj;dTx)GWu@Y5p_kV#byPCzFee9GDf+7ex^z$PYHgO@5jWh2RnT*Hj zw|(w+%}|xk=@g`Idp=j-oMoyEG{`d2<)qnxPZ!5h7PJ)auv5Z!RliSnN-GQBR9qWE z>;ZWBxGSCLV4g>;g~63j5;FrJmX)6Pba%&FG%z zkM02dM+0ba+llRdn5Gk7l-JP{Inj4t-@k~F^e1A}3S#=2I44@9ZUV1!t5NsA%B1vt z!$aI@%}#^XwMH>l-)xo0b8Z(R0=P*EmX?bVw99f~~9x+1Cjr zvV6}^;ZmY=jf_R(dj`v2U{_kr6%U#yt2$hVo5%zbvc8|!a&XgPoQ; zxk=rIJ2Ts+OVxH*kw5cY(Qm?he@vN9^f0C-<2x}_st8QBB-*)M#-uJG8;UV&;#u$z zK!QJA4*-oGK}d8}b4CB|8VcBO!(g356muwNb>CMFqkH&xYdUqNulu*UzMNQvJWX<$ z-`l5b^02}y?p={YGoqr`sHNltKXA@g5F;o+NCESE&!KENYVbODHu+cqRFgDhvpis!N(SH=GoF9 z^|*dQC&~8nULE~4(coI7kC3p!mMc@q^k<_oSvy=`KFi8*(5~P0h+=AGL}Em+vh%KZ9ddO3$YOzn{V{1iFAfH)J&Eie?Ti)mc6Et*Vp>TVYN0;M}6 z+8Khb%HB*(J{$f#4RI+QXg7ig&VxDfFU?B!mTnP>JJpFUUk>?s(^44)I=1D7w@x2! z8w;1xeLY@X53%chZkzAx*0 z*jo~zfP$NINlUNw;#J0k?D~$UScWD^1?*_LB{q`t!aiV0D})kquASyQ^OzGYw#aL2 z$#Um-VQQTVA|kXDbi8FRxnYo9>gHYJ!2EoEpX1} zXl-xHEDHA1_{V5A+9L^R{s#Ju0XYV*OBEGkNKO{-@|y9%sHCK2Icd{8gHElE8ej~& zMxf0t8yAGO5s^dW?s*x6pDxeeBXNAYv2gD%1Nz$oet9wbbiFeL1WOAzhp%?L%N(rj;@9_J)oMmlVr8S{Fb}ZlK`bfEsf%Y^KiBW zp8mHgm=OUbwghkUdTvwCrST5fafua5g}-$St7_HpJ8TY^WT@TO*#xJxK!7k6QfQj! z+^R{lGFyHYs!&l-SkE>Wfs#Zrf(kZ~Xt@N7trZx5vtJBCM0D=QE%rN}veWreJFi|X z$f87wavUguySj}k2Hf3j^zE)pE!x0rHOha8hrIT+T$fdV3-?dWaYD6{5eC*6B3PZZ zVql;#61CVrC_KNX=y=uCS}{#WJeO)rAJy;-u*0oLH4io>m@*H z<`~gMC6cfAMq$cB(#wh$*>>@7^YZ%i7d8$p4=57EP_TB_kw#r6VXA;7i1sG9{EQzL zwE45vB&9OK7qNDmVaGAYS?pe>QVpwei4U?YkawQ6)BvTuxtXm_z!e zLFcN`8N+Y$@`+W`^aKQ;L;8SaW}xf{w2u&w@?Eebn_=Xi^qr6IvOVq**LAxqXt`ZX z+yqrnDj9$k1m@uJ_r{-Bax{euy}+ekNqx^$apT zih^w+SFv*AM+rR^c-y!O!X#63vRz_gyJIQ9`L4FTIM^<+RTrhLt8sq7S;K3rrXOom zGV>`I+V6qo)N7~YDsg~Yr;;FP(<9H$1&P_i!wlDc+aAARJVMI33y#LlZ-Gs}W2l%& zA~u7^x4_Av+3L?sx;6o(JWxpe{&$78BkIKasA4r3Me7|in1_c!R=Ohq2!R*j<^+7^4GBOdkb#$hnJ5XKXIXl%jT!R2rUoTEuS4GaMMH2oB$n~5Z;5P_ zt48f-ZWC+*wCyn|bn=E6gOV|AmB?VD(pQ$4Vu|;=T`YT4IJWAyb|l=j6zC2}LX(BV z7XsGDff?j(B$?s^UU!4w~^O{|uHh zKq*LS)m_uANBV=S;q^w8%$w7%)F`W{Gm%GOS-Q>BD7ZsC^@g2ziswSK__8$dBAGDgy>I;Z@IF01QhF@}qTomp{g=7HQ3k z=oqY`Rmb$oxnK{Q{uu7mW1L8Sszz6}-YyL(MnJ9aoBVQ5y?WA5c>J0zNWN@_hgf75 z_z$La$N##k54kkSpva*FQ09od(dT8Jr;LaCx1&h*Km*l7c!fH%FpSqqXvYpAd1(@a zK|lshV8v|Ks}fB7^=b*98OdSPnL(pa1$=t}mawtrXJ`=vif2sPlwJwtUop19HpFT1 z{S|8W1jaCD(R2Lp7@<@x*Faf`|D8cb{iz!pkkvKhrn$ugcuUa9-8zWGiu5so)H0&1|^xFCi!)~SwX*v{4Kr#sf;Ro(^kZlM3|Oi&lCtmtt8v8_z#(F zYcv*A?zs$}(EO^ZE~IHstN>*-{jHjd+1HITPFneY?R@%%dL1&$Zw*&K7MhV7gGe$z zPu9jb|6E&_;~?Imd?NWr-=KtYobhz^-J4B96GlrP*!{h zI1AH+HU)i>Ayn17dp%Yw-s_(0R6YYxv)APie#BJ6_~dh%@E2cGLVuDd;s~pY<*DDr9gbEQfsdo$Z_Tap>17gr z3eoKdMNSm8#=g{cIFo$#EBfecGU}ESlU9r#f%`m-3}i6!jhPcn@(&53u;==$Gj?9r z9=hT7^vZ?@C;3Nb-DzOCkc~l7VCp5mQlk9Y8ue}(8SEUxXCX{v9*On^ndOL-dd7Ri zi`)$ksR<_wCA^c_6WME}>%9o<@O&gyRLZ!4+uL^mD*Hao{(lweY7fbOg9+8XK`2); zcvZ-!fzJ+UUn!vLe8vGUe8m4T(**7s2q&?4J?`bcpMx{;{iVboZyfl-9~w;4_ZOHn zMQKf+)bap!0CMC}XU=W&VqIQSBQWf%fA3N$DNlueP*6vA#rz)#bslqx7PKF~KP((Qn2# z;W}@ITVmv>LxpmLn?KaZaU49BCb)G?py~w>q-~TDN$(g=9T{+~QN1Gsy=CcJ3icp+ zjX;+Nuj{VIP$-mr;=-+j@8=|TJNaw$gwqxRh42~m1JMn3&WqoyFHJuwILV?0$NndI zcyIkDc@QKa*9%G3nvN0zhoT-i$y*lX)p`{|C}XcTCvjY+6%vFv{3oT1e~|Ad3eO#5 zK1^F=OLJGJC$TT3K8zCVWm=!(ev2NcP$0NLH?S40!tUg9cPWCy%;}vTK+czZ%BNW;gl>HM zRwnV>d1MP+8%rBSoAgjl2giYaH<=qpR56Z~!@Evx&o2nHcwc$egYWppVtdunPCxqu z3tVvB6SPWaLDoeFXNqc-Ba#KmlFG7@+*F7Xza6wjWf3#?blcKd#>d=48Rv_;6In%Y z*2p)km>yoVu|jSU_jc`VWYTo-9b%t>_5bN&FW<)Zyc%OZ=MziEEj}FhPit#lT!K0a z%IAQzrYSvxe~e!VB5p~M6cVR`)FYK~PuI_gAxGzbM`&&iFutcj5+p=`rmC(AMhOx9 Ee^)}YB>(^b literal 0 HcmV?d00001 From ec646e46b468115a05a3a0590e23ba1692db574e Mon Sep 17 00:00:00 2001 From: Alain Nicolas Date: Mon, 16 Oct 2023 15:54:53 +0200 Subject: [PATCH 33/36] chore: Better README (#299) --- README.md | 77 ++++++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 65 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index d30f6cb7..38f6cc26 100644 --- a/README.md +++ b/README.md @@ -1,22 +1,59 @@ -## Verax Attestation Registry +

+
+
Verax +
+ Verax Attestation Registry +
+

-**Verax, previously known as "Linea Attestation Registry", is a set of contracts that allows anyone to read and write -attestations of any type and any subject.** +

Verax is a shared registry for storing attestations of +public interest on EVM +chains, designed to enhance data discoverability and consumption for dApps across +the network.

-

- Verax Logo +

+ Links • + Repository Organisation • + Contributing • + Contracts Addresses • + Linking Attestations • + License

-## Contribution +## Links + +📚 [Official documentation](https://verax.gitbook.io/verax/) +🔍 +[Testnet GraphQL API](https://graph-query.goerli.linea.build/subgraphs/name/Consensys/linea-attestation-registry/graphql) +🔍 [Mainnet GraphQL API](https://graph-query.linea.build/subgraphs/name/Consensys/linea-attestation-registry/graphql) +🧱 Verax SDK - _Coming soon_ +🌍 Verax Explorer - _Coming soon_ + +## Repository Organisation + +``` +. +├── contracts # All smart contracts needed to run Verax +├── explorer # Explorer frontend to discover the main objects (Coming soon) +├── sdk # The verax-sdk to easily interact with the contracts and the subgraph +├── subgraph # The subgraph indexing Verax data +``` + +## Contributing Verax Attestation Registry is a community-led initiative, with developers from various companies and different backgrounds. While we are more than happy to get help from multiple sources, we need to rely on strong Ways of Working. Don't hesitate to check our [Contribution Guide](./CONTRIBUTING.md) before pushing your first code to the repo! -## Contracts addresses +## Contracts Addresses + +The main contracts (i.e. the "registries") and the helpers contracts are deployed on Linea Goerli (Testnet) and Linea +Mainnet. +Here are the addresses on the 2 networks: -### Linea Testnet +
+ Linea Testnet - Router = [0x736c78b2f2cBf4F921E8551b2acB6A5Edc9177D5](https://goerli.lineascan.build/address/0x736c78b2f2cBf4F921E8551b2acB6A5Edc9177D5) @@ -31,7 +68,10 @@ Don't hesitate to check our [Contribution Guide](./CONTRIBUTING.md) before pushi - AttestationReader = [0x65c8294C7aF0f0bDDe51eF92AF850613bb629fc6](https://goerli.lineascan.build/address/0x65c8294C7aF0f0bDDe51eF92AF850613bb629fc6) -### Linea Mainnet +
+ +
+ Linea Mainnet - Router = [0x4d3a380A03f3a18A5dC44b01119839D8674a552E](https://lineascan.build/address/0x4d3a380A03f3a18A5dC44b01119839D8674a552E) @@ -46,7 +86,20 @@ Don't hesitate to check our [Contribution Guide](./CONTRIBUTING.md) before pushi - AttestationReader = [0x40871e247CF6b8fd8794c9c56bB5c2b8a4FA3B6c](https://lineascan.build/address/0x40871e247CF6b8fd8794c9c56bB5c2b8a4FA3B6c) -## Relationship Schemas IDs (testnet & mainnet) +
+ +## Linking Attestations + +Verax Attestation Registry allows creating links ("relationships") between attestations. +🔗 Go to the +[official documentation](https://verax.gitbook.io/verax/developer-guides/for-attestation-issuers/link-attestations) for +more details + +Verax offers 2 Schemas to cover most use cases, both on testnet and mainnet: + +- The **Relationship** Schema, with ID `0x41b8c81288eebbf173b2f54b9fb2f1d37f2caca51ef39e8f99299b53c2599a3a` +- The **Named Graph Relationship** Schema with ID `0x8f83a0ef7871f63455a506f6bca0db98a88721764ae6dbde2afddd8e12e442b8` + +## License -- **Relationship** Schema ID = `0x89bd76e17fd84df8e1e448fa1b46dd8d97f7e8e806552b003f8386a5aebcb9f0` -- **namedGraphRelationship** Schema ID = `0x5003a7832fa2734780a5bf6a1f3940b84c0c66a398e62dd4e7f183fdbc7da6ee` +[MIT](./LICENSE) From 046da0c8a0f2b26a2684f437bed2b70d2d429f02 Mon Sep 17 00:00:00 2001 From: Alain Nicolas Date: Thu, 19 Oct 2023 18:53:09 +0200 Subject: [PATCH 34/36] chore: Release Verax v4 on Linea Goerli (#302) --- contracts/.openzeppelin/sepolia.json | 888 --------------------- contracts/.openzeppelin/unknown-59140.json | 720 ++++++++++++++++- contracts/lib/forge-std | 2 +- contracts/lib/openzeppelin-contracts | 2 +- contracts/package.json | 2 +- contracts/script/recreateNetworkFile.ts | 6 + 6 files changed, 717 insertions(+), 903 deletions(-) delete mode 100644 contracts/.openzeppelin/sepolia.json diff --git a/contracts/.openzeppelin/sepolia.json b/contracts/.openzeppelin/sepolia.json deleted file mode 100644 index 2bf9a1ed..00000000 --- a/contracts/.openzeppelin/sepolia.json +++ /dev/null @@ -1,888 +0,0 @@ -{ - "manifestVersion": "3.2", - "admin": { - "address": "0x347541F33505853171D628F9e8f46A05ACc7056F", - "txHash": "0xa8494c5fb1ee109416d8384167a2041261e0fcce240dffe5116b5c0e8a73f875" - }, - "proxies": [ - { - "address": "0xF242b04E5dFdB6D6A7461ab55E99d86844cCbBC2", - "txHash": "0xaea282713643649ec20aec98c9683a746e2d429e225f251a93647dd30542123c", - "kind": "transparent" - }, - { - "address": "0xAa42EA7d6F880318e2e493E408b89A4F6628b056", - "txHash": "0xa193c5444354862d886b9cd7e004bad350ea56f0b6c23767a1414ee4b84a2a77", - "kind": "transparent" - }, - { - "address": "0x53fe4Fc4bb400F0604d4C69694D2D0F6348869EF", - "txHash": "0x0650134da10557d3bc0c80edaef83d016e1ea1bc722d40051300a0a52cb4ca2e", - "kind": "transparent" - }, - { - "address": "0x944998Fd56ac74C95f7e9FA894102E205869a635", - "txHash": "0x38bd36d4a092a8a052e9ad0ce28c8868b77e3ed16962b2f14fc42914c4ff1ad6", - "kind": "transparent" - }, - { - "address": "0x6A7d23fb4768aEAA6A45bCe21C0d245E10DE53e2", - "txHash": "0x315763736fc1641626c5d0745398b5259944879ef55def6582c1bce47e025558", - "kind": "transparent" - } - ], - "impls": { - "4353fbe787c13443291bba3d18e906853909285ba948d10f4d95994940b68c97": { - "address": "0x3608768A28d742075cDA584c5e69982F5c651d77", - "txHash": "0x02a0b8306f8ea6e036487b6ebb9b57c23805bc8e837a05a60ea6a1ac13dd7fc9", - "layout": { - "solcVersion": "0.8.21", - "storage": [ - { - "label": "_initialized", - "offset": 0, - "slot": "0", - "type": "t_uint8", - "contract": "Initializable", - "src": "openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol:63", - "retypedFrom": "bool" - }, - { - "label": "_initializing", - "offset": 1, - "slot": "0", - "type": "t_bool", - "contract": "Initializable", - "src": "openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol:68" - }, - { - "label": "__gap", - "offset": 0, - "slot": "1", - "type": "t_array(t_uint256)50_storage", - "contract": "ContextUpgradeable", - "src": "openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol:36" - }, - { - "label": "_owner", - "offset": 0, - "slot": "51", - "type": "t_address", - "contract": "OwnableUpgradeable", - "src": "openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol:22" - }, - { - "label": "__gap", - "offset": 0, - "slot": "52", - "type": "t_array(t_uint256)49_storage", - "contract": "OwnableUpgradeable", - "src": "openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol:94" - }, - { - "label": "ATTESTATION_REGISTRY", - "offset": 0, - "slot": "101", - "type": "t_address", - "contract": "Router", - "src": "src/Router.sol:13" - }, - { - "label": "MODULE_REGISTRY", - "offset": 0, - "slot": "102", - "type": "t_address", - "contract": "Router", - "src": "src/Router.sol:14" - }, - { - "label": "PORTAL_REGISTRY", - "offset": 0, - "slot": "103", - "type": "t_address", - "contract": "Router", - "src": "src/Router.sol:15" - }, - { - "label": "SCHEMA_REGISTRY", - "offset": 0, - "slot": "104", - "type": "t_address", - "contract": "Router", - "src": "src/Router.sol:16" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]", - "numberOfBytes": "1568" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint8": { - "label": "uint8", - "numberOfBytes": "1" - } - } - } - }, - "3a10f786d2f88ef43609cda786d7d3e3710bb254abbebaddec15881d1598a999": { - "address": "0xAc7b2C375c0Aa9b07FA91eB9BEE556Ed3e2Bb99E", - "txHash": "0x78feba7ce82f67cb8087eb19cfcc6c3fc1b44904182cc5dc1abe748ace712c88", - "layout": { - "solcVersion": "0.8.21", - "storage": [ - { - "label": "_initialized", - "offset": 0, - "slot": "0", - "type": "t_uint8", - "contract": "Initializable", - "src": "openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol:63", - "retypedFrom": "bool" - }, - { - "label": "_initializing", - "offset": 1, - "slot": "0", - "type": "t_bool", - "contract": "Initializable", - "src": "openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol:68" - }, - { - "label": "__gap", - "offset": 0, - "slot": "1", - "type": "t_array(t_uint256)50_storage", - "contract": "ContextUpgradeable", - "src": "openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol:36" - }, - { - "label": "_owner", - "offset": 0, - "slot": "51", - "type": "t_address", - "contract": "OwnableUpgradeable", - "src": "openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol:22" - }, - { - "label": "__gap", - "offset": 0, - "slot": "52", - "type": "t_array(t_uint256)49_storage", - "contract": "OwnableUpgradeable", - "src": "openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol:94" - }, - { - "label": "__gap", - "offset": 0, - "slot": "101", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC165Upgradeable", - "src": "openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol:41" - }, - { - "label": "_balances", - "offset": 0, - "slot": "151", - "type": "t_mapping(t_uint256,t_mapping(t_address,t_uint256))", - "contract": "ERC1155Upgradeable", - "src": "openzeppelin-contracts-upgradeable/contracts/token/ERC1155/ERC1155Upgradeable.sol:25" - }, - { - "label": "_operatorApprovals", - "offset": 0, - "slot": "152", - "type": "t_mapping(t_address,t_mapping(t_address,t_bool))", - "contract": "ERC1155Upgradeable", - "src": "openzeppelin-contracts-upgradeable/contracts/token/ERC1155/ERC1155Upgradeable.sol:28" - }, - { - "label": "_uri", - "offset": 0, - "slot": "153", - "type": "t_string_storage", - "contract": "ERC1155Upgradeable", - "src": "openzeppelin-contracts-upgradeable/contracts/token/ERC1155/ERC1155Upgradeable.sol:31" - }, - { - "label": "__gap", - "offset": 0, - "slot": "154", - "type": "t_array(t_uint256)47_storage", - "contract": "ERC1155Upgradeable", - "src": "openzeppelin-contracts-upgradeable/contracts/token/ERC1155/ERC1155Upgradeable.sol:508" - }, - { - "label": "router", - "offset": 0, - "slot": "201", - "type": "t_contract(IRouter)8166", - "contract": "AttestationRegistry", - "src": "src/AttestationRegistry.sol:17" - }, - { - "label": "version", - "offset": 20, - "slot": "201", - "type": "t_uint16", - "contract": "AttestationRegistry", - "src": "src/AttestationRegistry.sol:19" - }, - { - "label": "attestationIdCounter", - "offset": 22, - "slot": "201", - "type": "t_uint32", - "contract": "AttestationRegistry", - "src": "src/AttestationRegistry.sol:20" - }, - { - "label": "attestations", - "offset": 0, - "slot": "202", - "type": "t_mapping(t_bytes32,t_struct(Attestation)8234_storage)", - "contract": "AttestationRegistry", - "src": "src/AttestationRegistry.sol:22" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_uint256)47_storage": { - "label": "uint256[47]", - "numberOfBytes": "1504" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]", - "numberOfBytes": "1568" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_contract(IRouter)8166": { - "label": "contract IRouter", - "numberOfBytes": "20" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_mapping(t_address,t_bool))": { - "label": "mapping(address => mapping(address => bool))", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_uint256)": { - "label": "mapping(address => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(Attestation)8234_storage)": { - "label": "mapping(bytes32 => struct Attestation)", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_mapping(t_address,t_uint256))": { - "label": "mapping(uint256 => mapping(address => uint256))", - "numberOfBytes": "32" - }, - "t_string_storage": { - "label": "string", - "numberOfBytes": "32" - }, - "t_struct(Attestation)8234_storage": { - "label": "struct Attestation", - "members": [ - { - "label": "attestationId", - "type": "t_bytes32", - "offset": 0, - "slot": "0" - }, - { - "label": "schemaId", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - }, - { - "label": "replacedBy", - "type": "t_bytes32", - "offset": 0, - "slot": "2" - }, - { - "label": "attester", - "type": "t_address", - "offset": 0, - "slot": "3" - }, - { - "label": "portal", - "type": "t_address", - "offset": 0, - "slot": "4" - }, - { - "label": "attestedDate", - "type": "t_uint64", - "offset": 20, - "slot": "4" - }, - { - "label": "expirationDate", - "type": "t_uint64", - "offset": 0, - "slot": "5" - }, - { - "label": "revocationDate", - "type": "t_uint64", - "offset": 8, - "slot": "5" - }, - { - "label": "version", - "type": "t_uint16", - "offset": 16, - "slot": "5" - }, - { - "label": "revoked", - "type": "t_bool", - "offset": 18, - "slot": "5" - }, - { - "label": "subject", - "type": "t_bytes_storage", - "offset": 0, - "slot": "6" - }, - { - "label": "attestationData", - "type": "t_bytes_storage", - "offset": 0, - "slot": "7" - } - ], - "numberOfBytes": "256" - }, - "t_uint16": { - "label": "uint16", - "numberOfBytes": "2" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint32": { - "label": "uint32", - "numberOfBytes": "4" - }, - "t_uint64": { - "label": "uint64", - "numberOfBytes": "8" - }, - "t_uint8": { - "label": "uint8", - "numberOfBytes": "1" - } - } - } - }, - "84786e98eee515d63a28b28d3e67d5f91e07fe863a9045e2dbfec7f203693cad": { - "address": "0x201C4dFD63032c11bcA30c22EDDaffda43866ddB", - "txHash": "0x6701b9e4cb4f45fc801c4e774c56e9892b4aebb915239d5a11b71cf2c93f39b2", - "layout": { - "solcVersion": "0.8.21", - "storage": [ - { - "label": "_initialized", - "offset": 0, - "slot": "0", - "type": "t_uint8", - "contract": "Initializable", - "src": "openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol:63", - "retypedFrom": "bool" - }, - { - "label": "_initializing", - "offset": 1, - "slot": "0", - "type": "t_bool", - "contract": "Initializable", - "src": "openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol:68" - }, - { - "label": "__gap", - "offset": 0, - "slot": "1", - "type": "t_array(t_uint256)50_storage", - "contract": "ContextUpgradeable", - "src": "openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol:36" - }, - { - "label": "_owner", - "offset": 0, - "slot": "51", - "type": "t_address", - "contract": "OwnableUpgradeable", - "src": "openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol:22" - }, - { - "label": "__gap", - "offset": 0, - "slot": "52", - "type": "t_array(t_uint256)49_storage", - "contract": "OwnableUpgradeable", - "src": "openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol:94" - }, - { - "label": "router", - "offset": 0, - "slot": "101", - "type": "t_contract(IRouter)8166", - "contract": "ModuleRegistry", - "src": "src/ModuleRegistry.sol:18" - }, - { - "label": "modules", - "offset": 0, - "slot": "102", - "type": "t_mapping(t_address,t_struct(Module)8266_storage)", - "contract": "ModuleRegistry", - "src": "src/ModuleRegistry.sol:20" - }, - { - "label": "moduleAddresses", - "offset": 0, - "slot": "103", - "type": "t_array(t_address)dyn_storage", - "contract": "ModuleRegistry", - "src": "src/ModuleRegistry.sol:22" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_address)dyn_storage": { - "label": "address[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]", - "numberOfBytes": "1568" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_contract(IRouter)8166": { - "label": "contract IRouter", - "numberOfBytes": "20" - }, - "t_mapping(t_address,t_struct(Module)8266_storage)": { - "label": "mapping(address => struct Module)", - "numberOfBytes": "32" - }, - "t_string_storage": { - "label": "string", - "numberOfBytes": "32" - }, - "t_struct(Module)8266_storage": { - "label": "struct Module", - "members": [ - { - "label": "moduleAddress", - "type": "t_address", - "offset": 0, - "slot": "0" - }, - { - "label": "name", - "type": "t_string_storage", - "offset": 0, - "slot": "1" - }, - { - "label": "description", - "type": "t_string_storage", - "offset": 0, - "slot": "2" - } - ], - "numberOfBytes": "96" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint8": { - "label": "uint8", - "numberOfBytes": "1" - } - } - } - }, - "e66ce7c5948444f1fbf62e100f89ab14957c39bfa631d0e28f816823865b3177": { - "address": "0x1Aab7606dbaa16b854e2E55C4AD9Fdb1c81601A8", - "txHash": "0x767e4e05edec31467f9ea81ffce05fd37239cec08adc3a8b77c4f6a35dd5ef39", - "layout": { - "solcVersion": "0.8.21", - "storage": [ - { - "label": "_initialized", - "offset": 0, - "slot": "0", - "type": "t_uint8", - "contract": "Initializable", - "src": "openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol:63", - "retypedFrom": "bool" - }, - { - "label": "_initializing", - "offset": 1, - "slot": "0", - "type": "t_bool", - "contract": "Initializable", - "src": "openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol:68" - }, - { - "label": "__gap", - "offset": 0, - "slot": "1", - "type": "t_array(t_uint256)50_storage", - "contract": "ContextUpgradeable", - "src": "openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol:36" - }, - { - "label": "_owner", - "offset": 0, - "slot": "51", - "type": "t_address", - "contract": "OwnableUpgradeable", - "src": "openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol:22" - }, - { - "label": "__gap", - "offset": 0, - "slot": "52", - "type": "t_array(t_uint256)49_storage", - "contract": "OwnableUpgradeable", - "src": "openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol:94" - }, - { - "label": "router", - "offset": 0, - "slot": "101", - "type": "t_contract(IRouter)8166", - "contract": "PortalRegistry", - "src": "src/PortalRegistry.sol:18" - }, - { - "label": "portals", - "offset": 0, - "slot": "102", - "type": "t_mapping(t_address,t_struct(Portal)8259_storage)", - "contract": "PortalRegistry", - "src": "src/PortalRegistry.sol:20" - }, - { - "label": "issuers", - "offset": 0, - "slot": "103", - "type": "t_mapping(t_address,t_bool)", - "contract": "PortalRegistry", - "src": "src/PortalRegistry.sol:22" - }, - { - "label": "portalAddresses", - "offset": 0, - "slot": "104", - "type": "t_array(t_address)dyn_storage", - "contract": "PortalRegistry", - "src": "src/PortalRegistry.sol:24" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_address)dyn_storage": { - "label": "address[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]", - "numberOfBytes": "1568" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_contract(IRouter)8166": { - "label": "contract IRouter", - "numberOfBytes": "20" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_struct(Portal)8259_storage)": { - "label": "mapping(address => struct Portal)", - "numberOfBytes": "32" - }, - "t_string_storage": { - "label": "string", - "numberOfBytes": "32" - }, - "t_struct(Portal)8259_storage": { - "label": "struct Portal", - "members": [ - { - "label": "id", - "type": "t_address", - "offset": 0, - "slot": "0" - }, - { - "label": "ownerAddress", - "type": "t_address", - "offset": 0, - "slot": "1" - }, - { - "label": "modules", - "type": "t_array(t_address)dyn_storage", - "offset": 0, - "slot": "2" - }, - { - "label": "isRevocable", - "type": "t_bool", - "offset": 0, - "slot": "3" - }, - { - "label": "name", - "type": "t_string_storage", - "offset": 0, - "slot": "4" - }, - { - "label": "description", - "type": "t_string_storage", - "offset": 0, - "slot": "5" - }, - { - "label": "ownerName", - "type": "t_string_storage", - "offset": 0, - "slot": "6" - } - ], - "numberOfBytes": "224" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint8": { - "label": "uint8", - "numberOfBytes": "1" - } - } - } - }, - "9b0b84cc1046d395294ecdfe067a693eda5c23f9473ae2d4f22f82674d2eb7d6": { - "address": "0xFD3F38D4E8F5300903C86a073552BDC2FB57F66d", - "txHash": "0x89916baf9f99a9634266378d18b5bf826baf595db86cb0f9f3ad95d2388182ed", - "layout": { - "solcVersion": "0.8.21", - "storage": [ - { - "label": "_initialized", - "offset": 0, - "slot": "0", - "type": "t_uint8", - "contract": "Initializable", - "src": "openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol:63", - "retypedFrom": "bool" - }, - { - "label": "_initializing", - "offset": 1, - "slot": "0", - "type": "t_bool", - "contract": "Initializable", - "src": "openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol:68" - }, - { - "label": "__gap", - "offset": 0, - "slot": "1", - "type": "t_array(t_uint256)50_storage", - "contract": "ContextUpgradeable", - "src": "openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol:36" - }, - { - "label": "_owner", - "offset": 0, - "slot": "51", - "type": "t_address", - "contract": "OwnableUpgradeable", - "src": "openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol:22" - }, - { - "label": "__gap", - "offset": 0, - "slot": "52", - "type": "t_array(t_uint256)49_storage", - "contract": "OwnableUpgradeable", - "src": "openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol:94" - }, - { - "label": "router", - "offset": 0, - "slot": "101", - "type": "t_contract(IRouter)8166", - "contract": "SchemaRegistry", - "src": "src/SchemaRegistry.sol:15" - }, - { - "label": "schemas", - "offset": 0, - "slot": "102", - "type": "t_mapping(t_bytes32,t_struct(Schema)8243_storage)", - "contract": "SchemaRegistry", - "src": "src/SchemaRegistry.sol:17" - }, - { - "label": "schemaIds", - "offset": 0, - "slot": "103", - "type": "t_array(t_bytes32)dyn_storage", - "contract": "SchemaRegistry", - "src": "src/SchemaRegistry.sol:19" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_bytes32)dyn_storage": { - "label": "bytes32[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]", - "numberOfBytes": "1568" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_contract(IRouter)8166": { - "label": "contract IRouter", - "numberOfBytes": "20" - }, - "t_mapping(t_bytes32,t_struct(Schema)8243_storage)": { - "label": "mapping(bytes32 => struct Schema)", - "numberOfBytes": "32" - }, - "t_string_storage": { - "label": "string", - "numberOfBytes": "32" - }, - "t_struct(Schema)8243_storage": { - "label": "struct Schema", - "members": [ - { - "label": "name", - "type": "t_string_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "description", - "type": "t_string_storage", - "offset": 0, - "slot": "1" - }, - { - "label": "context", - "type": "t_string_storage", - "offset": 0, - "slot": "2" - }, - { - "label": "schema", - "type": "t_string_storage", - "offset": 0, - "slot": "3" - } - ], - "numberOfBytes": "128" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint8": { - "label": "uint8", - "numberOfBytes": "1" - } - } - } - } - } -} diff --git a/contracts/.openzeppelin/unknown-59140.json b/contracts/.openzeppelin/unknown-59140.json index c61eee0b..67e9e19c 100644 --- a/contracts/.openzeppelin/unknown-59140.json +++ b/contracts/.openzeppelin/unknown-59140.json @@ -4,10 +4,6 @@ "address": "0x8D2001F35592d5EC064c8F39025C6CD4F5f29FD3" }, "proxies": [ - { - "address": "0x736c78b2f2cBf4F921E8551b2acB6A5Edc9177D5", - "kind": "transparent" - }, { "address": "0xC765F28096F6121C2F2b82D35A4346280164428b", "kind": "transparent" @@ -24,9 +20,12 @@ "address": "0xB2c4Da1f8F08A0CA25862509E5431289BE2b598B", "kind": "transparent" }, + { + "address": "0x736c78b2f2cBf4F921E8551b2acB6A5Edc9177D5", + "kind": "transparent" + }, { "address": "0x65c8294C7aF0f0bDDe51eF92AF850613bb629fc6", - "txHash": "0xb3faa8c708ccf7c9da492b6519e519b8b1c48750de54b0f48f3d4665b3d66895", "kind": "transparent" } ], @@ -876,8 +875,20 @@ "label": "uint8", "numberOfBytes": "1" } - } - } + }, + "namespaces": {} + }, + "allAddresses": [ + "0xC88E223D7a11E0b148b14C91411ED47e920f8c97", + "0xAfA952790492DDeB474012cEA12ba34B788ab39F", + "0x8498100c925eD4daA87D5D17DF9783244c8B7F46", + "0xe3c36DEB0Ce1444fc8c847d6865217A6B2133765", + "0xFd3b9e9C60e9E7694751CfA8B10dE5850bC78C2F", + "0x1348ebE9373a4D8A5bE923dBf00408c951e28228", + "0xB3311B3CfF2752cd26B9964D3d7CB0FeB0b0d215", + "0x582Ca0f4482166A01b19FE1D0abeF0b9b236228f", + "0x79E25CD672032F3a7A315312d54F28ce3aBE3847" + ] }, "0e565d3af4874384e79b514fc2386c7fa28858f16795fd7f69763b0a84ba7df2": { "address": "0x5A8726B3EdbCD5554bb5C0508617cB7171495736", @@ -2289,7 +2300,7 @@ "label": "router", "offset": 0, "slot": "101", - "type": "t_contract(IRouter)3398", + "type": "t_contract(IRouter)6963", "contract": "AttestationReader", "src": "src/AttestationReader.sol:17" }, @@ -2297,7 +2308,7 @@ "label": "easRegistry", "offset": 0, "slot": "102", - "type": "t_contract(IEAS)3370", + "type": "t_contract(IEAS)6935", "contract": "AttestationReader", "src": "src/AttestationReader.sol:18" } @@ -2319,11 +2330,11 @@ "label": "bool", "numberOfBytes": "1" }, - "t_contract(IEAS)3370": { + "t_contract(IEAS)6935": { "label": "contract IEAS", "numberOfBytes": "20" }, - "t_contract(IRouter)3398": { + "t_contract(IRouter)6963": { "label": "contract IRouter", "numberOfBytes": "20" }, @@ -2337,7 +2348,692 @@ } }, "namespaces": {} - } + }, + "allAddresses": ["0x90f1810bfcE4b98dbc95B5b6AbF19A6324a57DB2", "0xA4a7517F62216BD42e42a67dF09C25adc72A5897"] + }, + "99e5c37885aa5ad80cbb068486aa970411fb36d14c1326df24fc2bb7585c0d3a": { + "address": "0x7DCDdF1A30D29C198f0f21cb6ce6B7c25d8CBCA9", + "layout": { + "solcVersion": "0.8.21", + "storage": [ + { + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8", + "contract": "Initializable", + "src": "openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol:63", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool", + "contract": "Initializable", + "src": "openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol:68" + }, + { + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol:36" + }, + { + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address", + "contract": "OwnableUpgradeable", + "src": "openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage", + "contract": "OwnableUpgradeable", + "src": "openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol:94" + }, + { + "label": "router", + "offset": 0, + "slot": "101", + "type": "t_contract(IRouter)6963", + "contract": "AttestationRegistry", + "src": "src/AttestationRegistry.sol:16" + }, + { + "label": "version", + "offset": 20, + "slot": "101", + "type": "t_uint16", + "contract": "AttestationRegistry", + "src": "src/AttestationRegistry.sol:18" + }, + { + "label": "attestationIdCounter", + "offset": 22, + "slot": "101", + "type": "t_uint32", + "contract": "AttestationRegistry", + "src": "src/AttestationRegistry.sol:19" + }, + { + "label": "attestations", + "offset": 0, + "slot": "102", + "type": "t_mapping(t_bytes32,t_struct(Attestation)7031_storage)", + "contract": "AttestationRegistry", + "src": "src/AttestationRegistry.sol:21" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_bytes_storage": { + "label": "bytes", + "numberOfBytes": "32" + }, + "t_contract(IRouter)6963": { + "label": "contract IRouter", + "numberOfBytes": "20" + }, + "t_mapping(t_bytes32,t_struct(Attestation)7031_storage)": { + "label": "mapping(bytes32 => struct Attestation)", + "numberOfBytes": "32" + }, + "t_struct(Attestation)7031_storage": { + "label": "struct Attestation", + "members": [ + { + "label": "attestationId", + "type": "t_bytes32", + "offset": 0, + "slot": "0" + }, + { + "label": "schemaId", + "type": "t_bytes32", + "offset": 0, + "slot": "1" + }, + { + "label": "replacedBy", + "type": "t_bytes32", + "offset": 0, + "slot": "2" + }, + { + "label": "attester", + "type": "t_address", + "offset": 0, + "slot": "3" + }, + { + "label": "portal", + "type": "t_address", + "offset": 0, + "slot": "4" + }, + { + "label": "attestedDate", + "type": "t_uint64", + "offset": 20, + "slot": "4" + }, + { + "label": "expirationDate", + "type": "t_uint64", + "offset": 0, + "slot": "5" + }, + { + "label": "revocationDate", + "type": "t_uint64", + "offset": 8, + "slot": "5" + }, + { + "label": "version", + "type": "t_uint16", + "offset": 16, + "slot": "5" + }, + { + "label": "revoked", + "type": "t_bool", + "offset": 18, + "slot": "5" + }, + { + "label": "subject", + "type": "t_bytes_storage", + "offset": 0, + "slot": "6" + }, + { + "label": "attestationData", + "type": "t_bytes_storage", + "offset": 0, + "slot": "7" + } + ], + "numberOfBytes": "256" + }, + "t_uint16": { + "label": "uint16", + "numberOfBytes": "2" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint32": { + "label": "uint32", + "numberOfBytes": "4" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + }, + "namespaces": {} + }, + "allAddresses": ["0x7DCDdF1A30D29C198f0f21cb6ce6B7c25d8CBCA9", "0xDaf3C3632327343f7df0Baad2dc9144fa4e1001F"] + }, + "84786e98eee515d63a28b28d3e67d5f91e07fe863a9045e2dbfec7f203693cad": { + "address": "0x3037720CE3191fEDDAF9C7b9fF0bD3B50213538E", + "layout": { + "solcVersion": "0.8.21", + "storage": [ + { + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8", + "contract": "Initializable", + "src": "openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol:63", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool", + "contract": "Initializable", + "src": "openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol:68" + }, + { + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol:36" + }, + { + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address", + "contract": "OwnableUpgradeable", + "src": "openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage", + "contract": "OwnableUpgradeable", + "src": "openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol:94" + }, + { + "label": "router", + "offset": 0, + "slot": "101", + "type": "t_contract(IRouter)6963", + "contract": "ModuleRegistry", + "src": "src/ModuleRegistry.sol:18" + }, + { + "label": "modules", + "offset": 0, + "slot": "102", + "type": "t_mapping(t_address,t_struct(Module)7063_storage)", + "contract": "ModuleRegistry", + "src": "src/ModuleRegistry.sol:20" + }, + { + "label": "moduleAddresses", + "offset": 0, + "slot": "103", + "type": "t_array(t_address)dyn_storage", + "contract": "ModuleRegistry", + "src": "src/ModuleRegistry.sol:22" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_address)dyn_storage": { + "label": "address[]", + "numberOfBytes": "32" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_contract(IRouter)6963": { + "label": "contract IRouter", + "numberOfBytes": "20" + }, + "t_mapping(t_address,t_struct(Module)7063_storage)": { + "label": "mapping(address => struct Module)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(Module)7063_storage": { + "label": "struct Module", + "members": [ + { + "label": "moduleAddress", + "type": "t_address", + "offset": 0, + "slot": "0" + }, + { + "label": "name", + "type": "t_string_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "description", + "type": "t_string_storage", + "offset": 0, + "slot": "2" + } + ], + "numberOfBytes": "96" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + }, + "namespaces": {} + }, + "allAddresses": ["0x3037720CE3191fEDDAF9C7b9fF0bD3B50213538E", "0x4594A8DA79F6bb2C75E548F185B5BDbE5fEdb759"] + }, + "3cce55a07d15cd46366e9b70a6d32d4e902069ca0b87f90461172ef32131e26a": { + "address": "0x4Ce1dEC90eC2cF6c45353C7Dc50c0be2207E3736", + "layout": { + "solcVersion": "0.8.21", + "storage": [ + { + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8", + "contract": "Initializable", + "src": "openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol:63", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool", + "contract": "Initializable", + "src": "openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol:68" + }, + { + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol:36" + }, + { + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address", + "contract": "OwnableUpgradeable", + "src": "openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage", + "contract": "OwnableUpgradeable", + "src": "openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol:94" + }, + { + "label": "router", + "offset": 0, + "slot": "101", + "type": "t_contract(IRouter)6963", + "contract": "PortalRegistry", + "src": "src/PortalRegistry.sol:18" + }, + { + "label": "portals", + "offset": 0, + "slot": "102", + "type": "t_mapping(t_address,t_struct(Portal)7056_storage)", + "contract": "PortalRegistry", + "src": "src/PortalRegistry.sol:20" + }, + { + "label": "issuers", + "offset": 0, + "slot": "103", + "type": "t_mapping(t_address,t_bool)", + "contract": "PortalRegistry", + "src": "src/PortalRegistry.sol:22" + }, + { + "label": "portalAddresses", + "offset": 0, + "slot": "104", + "type": "t_array(t_address)dyn_storage", + "contract": "PortalRegistry", + "src": "src/PortalRegistry.sol:24" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_address)dyn_storage": { + "label": "address[]", + "numberOfBytes": "32" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_contract(IRouter)6963": { + "label": "contract IRouter", + "numberOfBytes": "20" + }, + "t_mapping(t_address,t_bool)": { + "label": "mapping(address => bool)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Portal)7056_storage)": { + "label": "mapping(address => struct Portal)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(Portal)7056_storage": { + "label": "struct Portal", + "members": [ + { + "label": "id", + "type": "t_address", + "offset": 0, + "slot": "0" + }, + { + "label": "ownerAddress", + "type": "t_address", + "offset": 0, + "slot": "1" + }, + { + "label": "modules", + "type": "t_array(t_address)dyn_storage", + "offset": 0, + "slot": "2" + }, + { + "label": "isRevocable", + "type": "t_bool", + "offset": 0, + "slot": "3" + }, + { + "label": "name", + "type": "t_string_storage", + "offset": 0, + "slot": "4" + }, + { + "label": "description", + "type": "t_string_storage", + "offset": 0, + "slot": "5" + }, + { + "label": "ownerName", + "type": "t_string_storage", + "offset": 0, + "slot": "6" + } + ], + "numberOfBytes": "224" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + }, + "namespaces": {} + }, + "allAddresses": ["0x4Ce1dEC90eC2cF6c45353C7Dc50c0be2207E3736", "0x4371Cc5C503e1285875016C9B65c7278f1EDFc56"] + }, + "9b0b84cc1046d395294ecdfe067a693eda5c23f9473ae2d4f22f82674d2eb7d6": { + "address": "0xAb5702589d5Af810Ac14A852b02133958E50f10D", + "layout": { + "solcVersion": "0.8.21", + "storage": [ + { + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8", + "contract": "Initializable", + "src": "openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol:63", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool", + "contract": "Initializable", + "src": "openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol:68" + }, + { + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol:36" + }, + { + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address", + "contract": "OwnableUpgradeable", + "src": "openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage", + "contract": "OwnableUpgradeable", + "src": "openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol:94" + }, + { + "label": "router", + "offset": 0, + "slot": "101", + "type": "t_contract(IRouter)6963", + "contract": "SchemaRegistry", + "src": "src/SchemaRegistry.sol:15" + }, + { + "label": "schemas", + "offset": 0, + "slot": "102", + "type": "t_mapping(t_bytes32,t_struct(Schema)7040_storage)", + "contract": "SchemaRegistry", + "src": "src/SchemaRegistry.sol:17" + }, + { + "label": "schemaIds", + "offset": 0, + "slot": "103", + "type": "t_array(t_bytes32)dyn_storage", + "contract": "SchemaRegistry", + "src": "src/SchemaRegistry.sol:19" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_bytes32)dyn_storage": { + "label": "bytes32[]", + "numberOfBytes": "32" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_contract(IRouter)6963": { + "label": "contract IRouter", + "numberOfBytes": "20" + }, + "t_mapping(t_bytes32,t_struct(Schema)7040_storage)": { + "label": "mapping(bytes32 => struct Schema)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(Schema)7040_storage": { + "label": "struct Schema", + "members": [ + { + "label": "name", + "type": "t_string_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "description", + "type": "t_string_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "context", + "type": "t_string_storage", + "offset": 0, + "slot": "2" + }, + { + "label": "schema", + "type": "t_string_storage", + "offset": 0, + "slot": "3" + } + ], + "numberOfBytes": "128" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + }, + "namespaces": {} + }, + "allAddresses": ["0xAb5702589d5Af810Ac14A852b02133958E50f10D", "0x5Cc4029f0dDae1FFE527385459D06d81DFD50EEe"] } } } diff --git a/contracts/lib/forge-std b/contracts/lib/forge-std index 1d9650e9..f73c73d2 160000 --- a/contracts/lib/forge-std +++ b/contracts/lib/forge-std @@ -1 +1 @@ -Subproject commit 1d9650e951204a0ddce9ff89c32f1997984cef4d +Subproject commit f73c73d2018eb6a111f35e4dae7b4f27401e9421 diff --git a/contracts/lib/openzeppelin-contracts b/contracts/lib/openzeppelin-contracts index 98c7a4cf..9329cfac 160000 --- a/contracts/lib/openzeppelin-contracts +++ b/contracts/lib/openzeppelin-contracts @@ -1 +1 @@ -Subproject commit 98c7a4cf958f7014e3c5347aeb0678b585eb870d +Subproject commit 9329cfacd4c7d20bcb43d772d947ff9e39b65df9 diff --git a/contracts/package.json b/contracts/package.json index 424c193e..ef010325 100644 --- a/contracts/package.json +++ b/contracts/package.json @@ -52,7 +52,7 @@ "upgrade:all:goerli": "npx hardhat run --network linea-goerli script/upgrade/upgradeEverything.ts", "upgrade:all:goerli:force": "npx hardhat run --network linea-goerli script/upgrade/forceUpgradeEverything.ts", "upgrade:all:scroll-sepolia": "npx hardhat run --network scroll-sepolia script/upgrade/upgradeEverything.ts", - "upgrade:all:goerli:scroll-sepolia": "npx hardhat run --network scroll-sepolia script/upgrade/forceUpgradeEverything.ts" + "upgrade:all:scroll-sepolia:force": "npx hardhat run --network scroll-sepolia script/upgrade/forceUpgradeEverything.ts" }, "devDependencies": { "@nomicfoundation/hardhat-ethers": "^3.0.4", diff --git a/contracts/script/recreateNetworkFile.ts b/contracts/script/recreateNetworkFile.ts index 1e57a384..64109375 100644 --- a/contracts/script/recreateNetworkFile.ts +++ b/contracts/script/recreateNetworkFile.ts @@ -39,6 +39,12 @@ async function main() { await upgrades.forceImport(schemaRegistryProxyAddress, SchemaRegistry, { kind: "transparent" }); + console.log("Re-importing AttestationReader..."); + const attestationReaderProxyAddress = process.env.ATTESTATION_READER_ADDRESS ?? ""; + const AttestationReader = await ethers.getContractFactory("AttestationReader"); + + await upgrades.forceImport(attestationReaderProxyAddress, AttestationReader, { kind: "transparent" }); + console.log("All contracts are re-imported and the network file is re-created!"); } From 506c13907e55f4f0ff58251f3ff155a6fb0a270c Mon Sep 17 00:00:00 2001 From: Alain Nicolas Date: Fri, 20 Oct 2023 11:54:27 +0200 Subject: [PATCH 35/36] doc: Update the SDK documentation (#308) --- sdk/README.md | 33 +++++++++++++++++++-------------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/sdk/README.md b/sdk/README.md index 516042fa..65aaabf6 100644 --- a/sdk/README.md +++ b/sdk/README.md @@ -1,21 +1,26 @@ # Verax Attestation Registry - SDK -The `verax-sdk` facilitates the interactions with the contracts and the subgraph, both from a frontend and a backend. +The Verax SDK facilitates the interactions with the contracts and the subgraph, both from a frontend and a backend. [DRAFT] ## Installation -VeraxSDK is a [npm package](https://www.npmjs.com/package/verax-sdk/). +VeraxSDK is a [npm package](https://www.npmjs.com/package/@verax-attestation-registry/verax-sdk/). ```bash # npm -npm install --save verax-sdk +npm i @verax-attestation-registry/verax-sdk ``` ```bash # yarn -yarn add verax-sdk +yarn add @verax-attestation-registry/verax-sdk +``` + +```bash +# pnpm +pnpm add @verax-attestation-registry/verax-sdk ``` ## Getting Started @@ -24,26 +29,26 @@ yarn add verax-sdk ```js // CommonJS -var VeraxSdk = require("verax-sdk"); +var VeraxSdk = require("@verax-attestation-registry/verax-sdk"); ``` ```js // ES6 -import VeraxSdk from "verax-sdk"; +import VeraxSdk from "@verax-attestation-registry/verax-sdk"; ``` ### 2. Instantiate VeraxSdk ```js // Default configuration for Linea Testnet -const veraxSdk = new VeraxSdk(VeraxSdk.LineaConfTestnet); +const veraxSdk = new VeraxSdk(VeraxSdk.DEFAULT_LINEA_TESTNET); ``` or, ```js // Default configuration for Linea Mainnet -const veraxSdk = new VeraxSdk(VeraxSdk.LineaConfMainnet); +const veraxSdk = new VeraxSdk(VeraxSdk.DEFAULT_LINEA_MAINNET); ``` or, @@ -51,8 +56,8 @@ or, ```js // Custom configuration const myVeraxConfiguration = { - rpcUrl: "https://my.rpc.url", - chain: 12345, + chain: lineaTestnet, + mode: SDKMode.BACKEND, subgraphUrl: "https://my.subgraph.url", portalRegistryAddress: "0xMyPortalRegistryAddress", moduleRegistryAddress: "0xMyModuleRegistryAddress", @@ -69,10 +74,10 @@ const veraxSdk = new VeraxSdk(myVeraxConfiguration); ```js // Each Verax classes has its DataMapper // Get them from the SDK instance -const portalDataMapper = veraxSdk.portalDataMapper; // RW Portals -const schemaDataMapper = veraxSdk.schemaDataMapper; // RW Schemas -const moduleDataMapper = veraxSdk.moduleDataMapper; // RW Modules -const attestationDataMapper = veraxSdk.attestationDataMapper; // RW Attestations +const portalDataMapper = veraxSdk.portal; // RW Portals +const schemaDataMapper = veraxSdk.schema; // RW Schemas +const moduleDataMapper = veraxSdk.module; // RW Modules +const attestationDataMapper = veraxSdk.attestation; // RW Attestations ``` ### 2. Read content (one object) From e644262e206730e632667bbf21928e183f3f747b Mon Sep 17 00:00:00 2001 From: ollie <67156692+0xEillo@users.noreply.github.com> Date: Fri, 20 Oct 2023 12:09:59 +0200 Subject: [PATCH 36/36] feat: As a Dev, I want to have a minimal `IPortal` interface to facilitate the creation of a `Portal` (#303) Co-authored-by: Satyajeet Kolhapure Co-authored-by: Alain Nicolas --- contracts/src/{portal => }/DefaultPortal.sol | 2 +- contracts/src/PortalRegistry.sol | 5 ++-- contracts/src/example/IncorrectModule.sol | 11 -------- .../modules}/MsgSenderModule.sol | 4 +-- .../modules}/PayableModule.sol | 4 +-- .../portals}/EASPortal.sol | 4 +-- .../portals}/NFTPortal.sol | 4 +-- contracts/src/interface/AbstractPortal.sol | 17 ++++++++++--- contracts/src/interface/IPortal.sol | 25 +++++++++++++++++++ .../test/{portal => }/DefaultPortal.t.sol | 16 ++++++------ contracts/test/ModuleRegistry.t.sol | 4 +-- contracts/test/PortalRegistry.t.sol | 20 ++++++++++++++- contracts/test/example/EASPortal.t.sol | 2 +- contracts/test/example/MsgSenderModule.t.sol | 2 +- contracts/test/example/NFTPortal.t.sol | 2 +- contracts/test/example/PayableModule.t.sol | 2 +- .../integration/AttestationRegistryMass.t.sol | 2 +- contracts/test/mocks/EASRegistryMock.sol | 3 +++ .../test/mocks/IPortalImplementation.sol | 21 ++++++++++++++++ .../mocks/MockModules.sol} | 13 ++++++++-- 20 files changed, 120 insertions(+), 43 deletions(-) rename contracts/src/{portal => }/DefaultPortal.sol (91%) delete mode 100644 contracts/src/example/IncorrectModule.sol rename contracts/src/{example => examples/modules}/MsgSenderModule.sol (89%) rename contracts/src/{example => examples/modules}/PayableModule.sol (90%) rename contracts/src/{example => examples/portals}/EASPortal.sol (96%) rename contracts/src/{example => examples/portals}/NFTPortal.sol (94%) create mode 100644 contracts/src/interface/IPortal.sol rename contracts/test/{portal => }/DefaultPortal.t.sol (93%) create mode 100644 contracts/test/mocks/IPortalImplementation.sol rename contracts/{src/example/CorrectModule.sol => test/mocks/MockModules.sol} (64%) diff --git a/contracts/src/portal/DefaultPortal.sol b/contracts/src/DefaultPortal.sol similarity index 91% rename from contracts/src/portal/DefaultPortal.sol rename to contracts/src/DefaultPortal.sol index 0e28af63..4cdc9304 100644 --- a/contracts/src/portal/DefaultPortal.sol +++ b/contracts/src/DefaultPortal.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity 0.8.21; -import { AbstractPortal } from "../interface/AbstractPortal.sol"; +import { AbstractPortal } from "./interface/AbstractPortal.sol"; /** * @title Default Portal diff --git a/contracts/src/PortalRegistry.sol b/contracts/src/PortalRegistry.sol index 47cfa53c..d0d008aa 100644 --- a/contracts/src/PortalRegistry.sol +++ b/contracts/src/PortalRegistry.sol @@ -5,9 +5,10 @@ import { OwnableUpgradeable } from "openzeppelin-contracts-upgradeable/contracts // solhint-disable-next-line max-line-length import { ERC165CheckerUpgradeable } from "openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165CheckerUpgradeable.sol"; import { AbstractPortal } from "./interface/AbstractPortal.sol"; -import { DefaultPortal } from "./portal/DefaultPortal.sol"; +import { DefaultPortal } from "./DefaultPortal.sol"; import { Portal } from "./types/Structs.sol"; import { IRouter } from "./interface/IRouter.sol"; +import { IPortal } from "./interface/IPortal.sol"; /** * @title Portal Registry @@ -130,7 +131,7 @@ contract PortalRegistry is OwnableUpgradeable { if (bytes(ownerName).length == 0) revert PortalOwnerNameMissing(); // Check if portal has implemented AbstractPortal - if (!ERC165CheckerUpgradeable.supportsInterface(id, type(AbstractPortal).interfaceId)) revert PortalInvalid(); + if (!ERC165CheckerUpgradeable.supportsInterface(id, type(IPortal).interfaceId)) revert PortalInvalid(); // Get the array of modules implemented by the portal address[] memory modules = AbstractPortal(id).getModules(); diff --git a/contracts/src/example/IncorrectModule.sol b/contracts/src/example/IncorrectModule.sol deleted file mode 100644 index fc849a18..00000000 --- a/contracts/src/example/IncorrectModule.sol +++ /dev/null @@ -1,11 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity 0.8.21; - -/** - * @title Incorrect Module - * @author Consensys - * @notice This contract illustrates an invalid Module that doesn't follow the AbstractModule interface - */ -contract IncorrectModule { - -} diff --git a/contracts/src/example/MsgSenderModule.sol b/contracts/src/examples/modules/MsgSenderModule.sol similarity index 89% rename from contracts/src/example/MsgSenderModule.sol rename to contracts/src/examples/modules/MsgSenderModule.sol index 5cdc3a95..03e4b411 100644 --- a/contracts/src/example/MsgSenderModule.sol +++ b/contracts/src/examples/modules/MsgSenderModule.sol @@ -1,8 +1,8 @@ // SPDX-License-Identifier: MIT pragma solidity 0.8.21; -import { AbstractModule } from "../interface/AbstractModule.sol"; -import { AttestationPayload } from "../types/Structs.sol"; +import { AbstractModule } from "../../interface/AbstractModule.sol"; +import { AttestationPayload } from "../../types/Structs.sol"; /** * @title Msg Sender Module diff --git a/contracts/src/example/PayableModule.sol b/contracts/src/examples/modules/PayableModule.sol similarity index 90% rename from contracts/src/example/PayableModule.sol rename to contracts/src/examples/modules/PayableModule.sol index ddf1804c..77b5108e 100644 --- a/contracts/src/example/PayableModule.sol +++ b/contracts/src/examples/modules/PayableModule.sol @@ -1,8 +1,8 @@ // SPDX-License-Identifier: MIT pragma solidity 0.8.21; -import { AbstractModule } from "../interface/AbstractModule.sol"; -import { AttestationPayload } from "../types/Structs.sol"; +import { AbstractModule } from "../../interface/AbstractModule.sol"; +import { AttestationPayload } from "../../types/Structs.sol"; import { Ownable } from "openzeppelin-contracts/contracts/access/Ownable.sol"; /** diff --git a/contracts/src/example/EASPortal.sol b/contracts/src/examples/portals/EASPortal.sol similarity index 96% rename from contracts/src/example/EASPortal.sol rename to contracts/src/examples/portals/EASPortal.sol index 74c6c7b1..2912ff4a 100644 --- a/contracts/src/example/EASPortal.sol +++ b/contracts/src/examples/portals/EASPortal.sol @@ -1,8 +1,8 @@ // SPDX-License-Identifier: MIT pragma solidity 0.8.21; -import { AbstractPortal } from "../interface/AbstractPortal.sol"; -import { AttestationPayload } from "../types/Structs.sol"; +import { AbstractPortal } from "../../interface/AbstractPortal.sol"; +import { AttestationPayload } from "../../types/Structs.sol"; /** * @title EAS Portal diff --git a/contracts/src/example/NFTPortal.sol b/contracts/src/examples/portals/NFTPortal.sol similarity index 94% rename from contracts/src/example/NFTPortal.sol rename to contracts/src/examples/portals/NFTPortal.sol index 8e7a9963..102e50d6 100644 --- a/contracts/src/example/NFTPortal.sol +++ b/contracts/src/examples/portals/NFTPortal.sol @@ -3,8 +3,8 @@ pragma solidity 0.8.21; import { IERC721, ERC721 } from "openzeppelin-contracts/contracts/token/ERC721/ERC721.sol"; import { IERC165 } from "openzeppelin-contracts/contracts/utils/introspection/ERC165.sol"; -import { AbstractPortal } from "../interface/AbstractPortal.sol"; -import { Attestation, AttestationPayload } from "../types/Structs.sol"; +import { AbstractPortal } from "../../interface/AbstractPortal.sol"; +import { Attestation, AttestationPayload } from "../../types/Structs.sol"; /** * @title NFT Portal diff --git a/contracts/src/interface/AbstractPortal.sol b/contracts/src/interface/AbstractPortal.sol index 11abaf69..2a3f4b02 100644 --- a/contracts/src/interface/AbstractPortal.sol +++ b/contracts/src/interface/AbstractPortal.sol @@ -7,8 +7,16 @@ import { PortalRegistry } from "../PortalRegistry.sol"; import { AttestationPayload } from "../types/Structs.sol"; import { IERC165 } from "openzeppelin-contracts/contracts/utils/introspection/ERC165.sol"; import { IRouter } from "../interface/IRouter.sol"; - -abstract contract AbstractPortal is IERC165 { +import { IPortal } from "../interface/IPortal.sol"; + +/** + * @title Abstract Portal + * @author Consensys + * @notice This contract is an abstract contract with basic Portal logic + * to be inherited. We strongly encourage all Portals to implement + * this contract. + */ +abstract contract AbstractPortal is IPortal { IRouter public router; address[] public modules; ModuleRegistry public moduleRegistry; @@ -139,7 +147,10 @@ abstract contract AbstractPortal is IERC165 { * @return The list of modules addresses linked to the Portal */ function supportsInterface(bytes4 interfaceID) public pure virtual override returns (bool) { - return interfaceID == type(AbstractPortal).interfaceId || interfaceID == type(IERC165).interfaceId; + return + interfaceID == type(AbstractPortal).interfaceId || + interfaceID == type(IPortal).interfaceId || + interfaceID == type(IERC165).interfaceId; } /** diff --git a/contracts/src/interface/IPortal.sol b/contracts/src/interface/IPortal.sol new file mode 100644 index 00000000..7ede1e2f --- /dev/null +++ b/contracts/src/interface/IPortal.sol @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.21; + +import { IERC165 } from "openzeppelin-contracts/contracts/utils/introspection/ERC165.sol"; + +/** + * @title IPortal + * @author Consensys + * @notice This contract is the interface to be implemented by any Portal. + * NOTE: A portal must implement this interface to registered on + * the PortalRegistry contract. + */ +interface IPortal is IERC165 { + /** + * @notice Get all the modules addresses used by the Portal + * @return The list of modules addresses linked to the Portal + */ + function getModules() external view returns (address[] memory); + + /** + * @notice Defines the address of the entity issuing attestations to the subject + * @dev We strongly encourage a reflection when implementing this method + */ + function getAttester() external view returns (address); +} diff --git a/contracts/test/portal/DefaultPortal.t.sol b/contracts/test/DefaultPortal.t.sol similarity index 93% rename from contracts/test/portal/DefaultPortal.t.sol rename to contracts/test/DefaultPortal.t.sol index 7cc9e19f..f7451c6b 100644 --- a/contracts/test/portal/DefaultPortal.t.sol +++ b/contracts/test/DefaultPortal.t.sol @@ -2,15 +2,15 @@ pragma solidity 0.8.21; import { Test } from "forge-std/Test.sol"; -import { AbstractPortal } from "../../src/interface/AbstractPortal.sol"; -import { DefaultPortal } from "../../src/portal/DefaultPortal.sol"; -import { AttestationPayload } from "../../src/types/Structs.sol"; -import { CorrectModule } from "../../src/example/CorrectModule.sol"; -import { AttestationRegistryMock } from "../mocks/AttestationRegistryMock.sol"; -import { ModuleRegistryMock } from "../mocks/ModuleRegistryMock.sol"; -import { PortalRegistryMock } from "../mocks/PortalRegistryMock.sol"; +import { AbstractPortal } from "../src/interface/AbstractPortal.sol"; +import { DefaultPortal } from "../src/DefaultPortal.sol"; +import { AttestationPayload } from "../src/types/Structs.sol"; +import { CorrectModule } from "./mocks/MockModules.sol"; +import { AttestationRegistryMock } from "./mocks/AttestationRegistryMock.sol"; +import { ModuleRegistryMock } from "./mocks/ModuleRegistryMock.sol"; +import { PortalRegistryMock } from "./mocks/PortalRegistryMock.sol"; import { ERC165Upgradeable } from "openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol"; -import { Router } from "../../src/Router.sol"; +import { Router } from "./../src/Router.sol"; contract DefaultPortalTest is Test { CorrectModule public correctModule = new CorrectModule(); diff --git a/contracts/test/ModuleRegistry.t.sol b/contracts/test/ModuleRegistry.t.sol index 5719a97e..86e236b5 100644 --- a/contracts/test/ModuleRegistry.t.sol +++ b/contracts/test/ModuleRegistry.t.sol @@ -3,8 +3,8 @@ pragma solidity 0.8.21; import { Test } from "forge-std/Test.sol"; import { ModuleRegistry } from "../src/ModuleRegistry.sol"; -import { CorrectModule } from "../src/example/CorrectModule.sol"; -import { IncorrectModule } from "../src/example/IncorrectModule.sol"; +import { CorrectModule } from "./mocks/MockModules.sol"; +import { IncorrectModule } from "./mocks/MockModules.sol"; import { PortalRegistryMock } from "./mocks/PortalRegistryMock.sol"; import { AttestationPayload } from "../src/types/Structs.sol"; import { Router } from "../src/Router.sol"; diff --git a/contracts/test/PortalRegistry.t.sol b/contracts/test/PortalRegistry.t.sol index 5465994f..5c1e2abf 100644 --- a/contracts/test/PortalRegistry.t.sol +++ b/contracts/test/PortalRegistry.t.sol @@ -3,13 +3,14 @@ pragma solidity 0.8.21; import { Test } from "forge-std/Test.sol"; import { PortalRegistry } from "../src/PortalRegistry.sol"; -import { CorrectModule } from "../src/example/CorrectModule.sol"; +import { CorrectModule } from "./mocks/MockModules.sol"; import { Portal } from "../src/types/Structs.sol"; import { Router } from "../src/Router.sol"; import { AttestationRegistryMock } from "./mocks/AttestationRegistryMock.sol"; import { ModuleRegistryMock } from "./mocks/ModuleRegistryMock.sol"; import { ValidPortalMock } from "./mocks/ValidPortalMock.sol"; import { InvalidPortalMock } from "./mocks/InvalidPortalMock.sol"; +import { IPortalImplementation } from "./mocks/IPortalImplementation.sol"; contract PortalRegistryTest is Test { address public user = makeAddr("user"); @@ -22,6 +23,7 @@ contract PortalRegistryTest is Test { string public expectedOwnerName = "Owner Name"; ValidPortalMock public validPortalMock; InvalidPortalMock public invalidPortalMock = new InvalidPortalMock(); + IPortalImplementation public iPortalImplementation = new IPortalImplementation(); event Initialized(uint8 version); event PortalRegistered(string name, string description, address portalAddress); @@ -83,6 +85,7 @@ contract PortalRegistryTest is Test { } function test_register() public { + // Register a portal implmenting AbstractPortal vm.expectEmit(); emit PortalRegistered(expectedName, expectedDescription, address(validPortalMock)); vm.prank(user); @@ -91,6 +94,21 @@ contract PortalRegistryTest is Test { uint256 portalCount = portalRegistry.getPortalsCount(); assertEq(portalCount, 1); + // Register a portal implementing IPortal + vm.expectEmit(); + emit PortalRegistered("IPortalImplementation", "IPortalImplementation description", address(iPortalImplementation)); + vm.prank(user); + portalRegistry.register( + address(iPortalImplementation), + "IPortalImplementation", + "IPortalImplementation description", + true, + expectedOwnerName + ); + + portalCount = portalRegistry.getPortalsCount(); + assertEq(portalCount, 2); + Portal memory expectedPortal = Portal( address(validPortalMock), user, diff --git a/contracts/test/example/EASPortal.t.sol b/contracts/test/example/EASPortal.t.sol index 7c12d6c0..db3c5353 100644 --- a/contracts/test/example/EASPortal.t.sol +++ b/contracts/test/example/EASPortal.t.sol @@ -2,7 +2,7 @@ pragma solidity 0.8.21; import { Test } from "forge-std/Test.sol"; -import { EASPortal } from "../../src/example/EASPortal.sol"; +import { EASPortal } from "../../src/examples/portals/EASPortal.sol"; import { Router } from "../../src/Router.sol"; import { AbstractPortal } from "../../src/interface/AbstractPortal.sol"; import { AttestationRegistryMock } from "../mocks/AttestationRegistryMock.sol"; diff --git a/contracts/test/example/MsgSenderModule.t.sol b/contracts/test/example/MsgSenderModule.t.sol index 9459f94f..6c94e536 100644 --- a/contracts/test/example/MsgSenderModule.t.sol +++ b/contracts/test/example/MsgSenderModule.t.sol @@ -3,7 +3,7 @@ pragma solidity 0.8.21; import { Test } from "forge-std/Test.sol"; import { AbstractModule } from "../../src/interface/AbstractModule.sol"; -import { MsgSenderModule } from "../../src/example/MsgSenderModule.sol"; +import { MsgSenderModule } from "../../src/examples/modules/MsgSenderModule.sol"; import { AttestationPayload } from "../../src/types/Structs.sol"; contract MsgSenderModuleTest is Test { diff --git a/contracts/test/example/NFTPortal.t.sol b/contracts/test/example/NFTPortal.t.sol index 6139c940..ab5c3de1 100644 --- a/contracts/test/example/NFTPortal.t.sol +++ b/contracts/test/example/NFTPortal.t.sol @@ -2,7 +2,7 @@ pragma solidity 0.8.21; import { Test } from "forge-std/Test.sol"; -import { NFTPortal } from "../../src/example/NFTPortal.sol"; +import { NFTPortal } from "../../src/examples/portals/NFTPortal.sol"; import { Router } from "../../src/Router.sol"; import { AbstractPortal } from "../../src/interface/AbstractPortal.sol"; import { AttestationPayload } from "../../src/types/Structs.sol"; diff --git a/contracts/test/example/PayableModule.t.sol b/contracts/test/example/PayableModule.t.sol index 445a9493..04677af3 100644 --- a/contracts/test/example/PayableModule.t.sol +++ b/contracts/test/example/PayableModule.t.sol @@ -3,7 +3,7 @@ pragma solidity 0.8.21; import { Test } from "forge-std/Test.sol"; import { AbstractModule } from "../../src/interface/AbstractModule.sol"; -import { PayableModule } from "../../src/example/PayableModule.sol"; +import { PayableModule } from "../../src/examples/modules/PayableModule.sol"; import { AttestationPayload } from "../../src/types/Structs.sol"; contract PayableModuleTest is Test { diff --git a/contracts/test/integration/AttestationRegistryMass.t.sol b/contracts/test/integration/AttestationRegistryMass.t.sol index b1dfe395..21cd6bce 100644 --- a/contracts/test/integration/AttestationRegistryMass.t.sol +++ b/contracts/test/integration/AttestationRegistryMass.t.sol @@ -6,7 +6,7 @@ import { AttestationRegistry } from "../../src/AttestationRegistry.sol"; import { PortalRegistry } from "../../src/PortalRegistry.sol"; import { SchemaRegistry } from "../../src/SchemaRegistry.sol"; import { ModuleRegistry } from "../../src/ModuleRegistry.sol"; -import { DefaultPortal } from "../../src/portal/DefaultPortal.sol"; +import { DefaultPortal } from "../../src/DefaultPortal.sol"; import { Attestation, AttestationPayload } from "../../src/types/Structs.sol"; import { Router } from "../../src/Router.sol"; diff --git a/contracts/test/mocks/EASRegistryMock.sol b/contracts/test/mocks/EASRegistryMock.sol index b5770efe..f265018a 100644 --- a/contracts/test/mocks/EASRegistryMock.sol +++ b/contracts/test/mocks/EASRegistryMock.sol @@ -4,6 +4,9 @@ pragma solidity 0.8.21; import { IEAS, Attestation } from "../../src/interface/IEAS.sol"; contract EASRegistryMock is IEAS { + /// @dev This empty method prevents Foundry from counting this contract in code coverage + function test() public {} + mapping(bytes32 attestationId => Attestation attestation) private attestations; function getAttestation(bytes32 uid) external view override returns (Attestation memory) { diff --git a/contracts/test/mocks/IPortalImplementation.sol b/contracts/test/mocks/IPortalImplementation.sol new file mode 100644 index 00000000..ab5fe556 --- /dev/null +++ b/contracts/test/mocks/IPortalImplementation.sol @@ -0,0 +1,21 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.21; + +import { IPortal } from "../../src/interface/IPortal.sol"; +import { IERC165 } from "openzeppelin-contracts/contracts/utils/introspection/ERC165.sol"; + +contract IPortalImplementation is IPortal { + function test() public {} + + function getModules() external pure override returns (address[] memory) { + return new address[](0); + } + + function getAttester() external view override returns (address) { + return msg.sender; + } + + function supportsInterface(bytes4 interfaceID) public pure override returns (bool) { + return interfaceID == type(IPortal).interfaceId || interfaceID == type(IERC165).interfaceId; + } +} diff --git a/contracts/src/example/CorrectModule.sol b/contracts/test/mocks/MockModules.sol similarity index 64% rename from contracts/src/example/CorrectModule.sol rename to contracts/test/mocks/MockModules.sol index 3ccb9cbc..415fb4a5 100644 --- a/contracts/src/example/CorrectModule.sol +++ b/contracts/test/mocks/MockModules.sol @@ -1,8 +1,8 @@ // SPDX-License-Identifier: MIT pragma solidity 0.8.21; -import { AbstractModule } from "../interface/AbstractModule.sol"; -import { AttestationPayload } from "../types/Structs.sol"; +import { AbstractModule } from "../../src/interface/AbstractModule.sol"; +import { AttestationPayload } from "../../src/types/Structs.sol"; /** * @title Correct Module @@ -21,3 +21,12 @@ contract CorrectModule is AbstractModule { uint256 /*value*/ ) public pure override {} } + +/** + * @title Incorrect Module + * @author Consensys + * @notice This contract illustrates an invalid Module that doesn't follow the AbstractModule interface + */ +contract IncorrectModule { + +}